{"version":3,"sources":["store/Login.ts","models/LocalizedString.ts","store/Room.ts","store/index.ts","components/LanguageContext.ts","modules/localization/ClientAppResources/ClientAppResource.ts","modules/localization/ClientAppResources/ClientAppResource.fr.ts","modules/localization/ClientAppResources/ClientAppResource.es.ts","modules/localization/ClientAppResources/ClientAppResources.ts","modules/localization/Resources.ts","components/LanguageSwitcher.tsx","components/Header.tsx","components/Layout.tsx","components/Error.tsx","images/call_end-24px.svg","images/call-24px.svg","images/camera_alt-24px.svg","images/camera_front-24px.svg","images/camera_rear-24px.svg","images/fullscreen_exit-24px.svg","images/fullscreen-24px.svg","images/mic_off-24px.svg","images/mic-24px.svg","images/phone_disabled-24px.svg","images/phone_enabled-24px.svg","images/videocam_off-24px.svg","images/videocam-24px.svg","images/single-user.svg","images/multiple-users.svg","components/FontSymbols.tsx","components/Popup.tsx","modules/voiceDetection/VoiceAudioDetector.ts","components/BaseReactComponent.tsx","components/ConferenceRoom.tsx","components/Login.tsx","components/ConferenceRoomRoute.tsx","components/Version.tsx","App.tsx","registerServiceWorker.ts","index.tsx","store/configureStore.ts","../DefaultLogger.ts"],"names":["actionCreators","tryAuthenticate","roomId","authCode","dispatch","getState","a","appState","login","isLoggingIn","requestOptions","method","headers","body","JSON","stringify","type","fetch","response","authenticationResult","status","json","userClaims","invalidCode","clearSession","monitorCookie","LocalizedString","constructor","init","defaultValue","values","Object","assign","this","newValues","keys","forEach","x","toLowerCase","getLocalizedValue","lang","langCode","length","pos","lastIndexOf","substring","tryGetRoom","room","siteNameLocalized","data","statusCode","console","log","result","reducers","state","incomingAction","undefined","Cookies","get","parse","getInitialState","action","LanguageContext","React","createContext","language","navigator","setLanguage","clientApp","buttonLabel_cancel","buttonLabel_continue","buttonLabel_joinConsultation","conference_noMediaPopup_doesUserWishToContinueMessage","conference_noMediaPopup_noMediaDetectedMessage","conference_rejoinConsultationIfMistakeMessage","conference_userDoesNotWantToContinueMessage","conference_videoFeedNotAvailable","conference_waitingForConnection","error_browserNotSupported","error_connection","error_general","error_localMedia","error_login","error_roomNotFound","login_button","login_codePlaceholder","login_disclaimer","login_disclaimerLabel","login_prompt","clientAppResources","clientAppResource","clientAppResource_fr","clientAppResource_es","Resources","translationStack","languageStep","translation","ClientAppResource","push","_","merge","getResources","LanguageSwitcher","props","handleClick","e","toLanguage","target","value","getBestLanguageMatch","upperLang","toUpperCase","languages","find","p","startsWith","Consumer","className","onClick","Header","Component","render","title","Layout","children","displayName","name","Error","PureComponent","errorMessage","_extends","i","arguments","source","key","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","createElement","d","fill","SvgCallEnd24Px","_ref","svgRef","height","viewBox","width","ref","ForwardRef","forwardRef","SvgCall24Px","cx","cy","r","SvgCameraAlt24Px","SvgCameraFront24Px","SvgCameraRear24Px","SvgFullscreenExit24Px","SvgFullscreen24Px","SvgMicOff24Px","SvgMic24Px","SvgPhoneDisabled24Px","SvgPhoneEnabled24Px","SvgVideocamOff24Px","SvgVideocam24Px","id","xlinkHref","opacity","fillOpacity","stroke","strokeWidth","strokeOpacity","SvgSingleUser","preserveAspectRatio","SvgMultipleUsers","IconType","Icon","style","Call","CallEnd","Camera","CameraFront","CameraBack","FullScreen","FullScreenExit","MicOn","MicOff","PhoneEnabled","PhoneDisabledIcon","VideoCamOn","VideoCamOff","SingleUser","MultipleUsers","Popup","Modal","show","size","onHide","closeOnOutsideClick","closeButton","centered","headerCloseButton","Title","Body","Footer","renderButton","okButton","Button","label","VoiceAudioDetector","options","DEBUG","fftSize","bufferLen","voiceStopCallback","voiceStartCallback","smoothingTimeConstant","energy_offset","energy_threshold_ratio_pos","energy_threshold_ratio_neg","energy_integration","filter","f","v","context","hertzPerBin","iterationFrequency","iterationPeriod","ready","vadState","energy_threshold_pos","energy_threshold_neg","voiceTrend","voiceTrendMax","voiceTrendMin","voiceTrendStart","voiceTrendEnd","analyser","floatFrequencyData","scriptProcessorNode","floatFrequencyDataLinear","logging","log_i","log_limit","energy","sampleRate","setFilter","createAnalyser","Float32Array","frequencyBinCount","connect","createScriptProcessor","destination","onaudioprocess","getFloatFrequencyData","update","monitor","shape","iLen","j","jLen","triggerLog","limit","msg","fft","Math","pow","getEnergy","signal","start","end","integration","BaseReactComponent","contextType","DetectRTC","require","initLayoutContainer","ConferenceRoom","super","hubConnection","localStream","localVideo","peers","streams","videos","currentSpeakerVideo","voiceDetector","localVoiceDetector","lastIceCredentialsFetch","getIceServersPromise","audioContext","audioContextGestureHandler","AudioContext","resume","window","removeEventListener","peerId","stream","createMediaStreamSource","setState","s","currentPeerId","isLocalUserTalking","initLocalStream","bind","tryStartConferenceAsync","handleCameraButtonClick","handleMicrophoneButtonClick","handleHangupButtonClickAsync","handleFlipButtonClick","handleMultipleUserToggle","layoutVideos","handleFullscreenButtonClick","isCameraEnabled","isMicrophoneEnabled","amountOfCameras","cameraFacingMode","localPeerId","videoTrackLabel","audioTrackLabel","isSingleUserEnabled","noMediaDetected","showNoMediaPopup","showErrorMessage","isFullscreen","configureRemoteLogging","match","params","configureAudioContext","componentDidMount","load","isWebRTCSupported","resources","hasWebcam","addEventListener","componentWillUnmount","componentDidUpdate","srcObject","volume","play","attachPeerVideos","maxRatio","minRatio","fixedRatio","alignItems","bigClass","bigPercentage","bigFixedRatio","bigAlignItems","smallAlignItems","bigMaxRatio","bigMinRatio","bigFirst","animate","ignoreClass","layoutElem","document","getElementById","layout","setTimeout","webkitAudioContext","alert","generateToggleButton","toggledType","handler","toggled","location","reload","renderNoStreamDetected","localStreamError","video","autoPlay","playsInline","muted","conferenceError","renderPeers","renderDebugInfo","entries","map","entry","close","variant","parent","postMessage","screenfull","isEnabled","exit","request","then","tracks","getVideoTracks","track","enabled","getAudioTracks","getTracks","stop","peer","t","destroy","switchLocalCameraStreamAsync","startHubConnectionAsync","forceUpdate","message","detectDevicesAsync","getDevicesSuccess","devices","kind","getDevicesError","error","mediaDevices","getUserMedia","audio","facingMode","enumerateDevices","catch","getCameraStreamAsync","constraints","audioTrack","videoTrack","MediaStream","replace","hostname","oldVideoTrack","newVideoTrack","replaceTrack","removeTrack","addTrack","url","URL","href","pathname","searchParams","has","append","HubConnectionBuilder","configureLogging","DefaultLogger","withUrl","build","conference","on","peerInfo","connectionId","createPeerAsync","signalPeer","removeStream","removeAllListeners","invoke","flat","setAttribute","getIceServersAsync","Date","now","initiator","iceServers","SimplePeer","config","truncateString","sdp","candidate","send","peerStream","peerStreams","hash","localInfo","fontWeight","defaults","token","onUnauthorized","failedToken","timeout","interval","level","backoff","multiplier","jitter","capacity","stacktrace","levels","depth","excess","timestamp","toISOString","format","remote","str","maxLength","LoginStore","Login","handleChange","handleSubmit","validateCode","maskedAuthCode","invalidCodes","code","split","join","includes","nextProps","prevState","authCodeValid","isCodeValid","event","substr","acceptDisclaimer","checked","preventDefault","onSubmit","autoComplete","inputMode","placeholder","onChange","htmlFor","disabled","ConferenceRoomRoute","roleClaims","roomClaims","RoomStore","Version","version","App","newPath","history","handleLanguageRoute","componentWillMount","languageTagRegex","pathParts","test","routeProps","to","Provider","exact","path","component","Boolean","baseUrl","getElementsByTagName","getAttribute","createBrowserHistory","basename","store","initialState","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","configureStore","ReactDOM","serviceWorker","registration","unregister","signalr_1","LogLevel"],"mappings":"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","file":"static/js/main.b87ec667.chunk.js","sourcesContent":["import { Action, Reducer } from \"redux\";\nimport { AppThunkAction } from \"./\";\nimport Cookies from \"js-cookie\";\n\n//// -----------------\n//// STATE - This defines the type of data maintained in the Redux store.\nexport interface LoginState {\n authenticationResult: \"success\" | \"fail\" | null;\n isLoggingIn: boolean;\n invalidCode?: string;\n userClaims?: { [claim: string]: string | string[] | undefined }\n}\n\n\n// -----------------\n// ACTIONS - These are serializable (hence replayable) descriptions of state transitions.\n// They do not themselves have any side-effects; they just describe something that is going to happen.\nexport interface ClearSession {\n type: \"CLEAR_SESSION\";\n}\n\ninterface TryAuthenticateAction {\n type: \"TRY_AUTHENTICATE\";\n}\n\ninterface AuthenticateResult {\n type: \"AUTHENTICATE_RESULT\";\n authenticationResult: \"success\" | \"fail\";\n invalidCode?: string;\n userClaims?: { [claim: string]: string | string[] | undefined }\n}\n\n// Declare a 'discriminated union' type. This guarantees that all references to 'type' properties contain one of the\n// declared type strings (and not any other arbitrary string).\ntype KnownAction = TryAuthenticateAction | ClearSession | AuthenticateResult;\n\n// ----------------\n// ACTION CREATORS - These are functions exposed to UI components that will trigger a state transition.\n// They don't directly mutate state, but they can have external side-effects (such as loading data).\n\nexport const actionCreators = {\n tryAuthenticate: (roomId: string, authCode: string): AppThunkAction =>\n async (dispatch, getState) => {\n\n const appState = getState();\n\n // stop if the user is currently logging in\n if (appState.login && appState.login.isLoggingIn)\n return;\n\n const requestOptions = {\n method: \"POST\",\n headers: { 'Content-Type': \"application/json\" },\n body: JSON.stringify({\n authCode: authCode\n })\n };\n\n dispatch({ type: \"TRY_AUTHENTICATE\" });\n\n let response: Response;\n try {\n response = await fetch(`/app/login/${roomId}`, requestOptions);\n\n } catch (error) {\n dispatch({\n type: \"AUTHENTICATE_RESULT\",\n authenticationResult: \"fail\"\n });\n return;\n }\n\n if (response.status === 200)\n dispatch({\n type: \"AUTHENTICATE_RESULT\",\n authenticationResult: \"success\",\n userClaims: await response.json()\n });\n else\n dispatch({\n type: \"AUTHENTICATE_RESULT\",\n authenticationResult: \"fail\",\n invalidCode: authCode\n });\n },\n\n clearSession: (): AppThunkAction =>\n (dispatch) => {\n dispatch({\n type: \"AUTHENTICATE_RESULT\",\n authenticationResult: \"fail\"\n });\n\n },\n\n monitorCookie: (): AppThunkAction =>\n (dispatch) => {\n dispatch({\n type: \"AUTHENTICATE_RESULT\",\n authenticationResult: \"fail\"\n });\n }\n};\n\nconst getInitialState = (): LoginState => {\n const userClaims = Cookies.get(\".telemed.medfar.claims\");\n\n if (!userClaims)\n return {\n isLoggingIn: false,\n authenticationResult: null\n };\n\n return {\n isLoggingIn: false,\n authenticationResult: \"success\",\n userClaims: JSON.parse(userClaims)\n };\n}\n\n//// ----------------\n//// REDUCER - For a given state and action, returns the new state.\nexport const reducer: Reducer = (state: LoginState | undefined, incomingAction: Action): LoginState => {\n if (state === undefined) {\n return getInitialState();\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case \"TRY_AUTHENTICATE\":\n return {\n authenticationResult: null,\n isLoggingIn: true,\n userClaims: {}\n };\n\n case \"CLEAR_SESSION\":\n return {\n authenticationResult: null,\n isLoggingIn: false,\n userClaims: {}\n };\n\n case \"AUTHENTICATE_RESULT\":\n // Only accept the incoming data if it user is logging in\n if (state.isLoggingIn) {\n return {\n authenticationResult: action.authenticationResult,\n invalidCode: action.invalidCode,\n isLoggingIn: false,\n userClaims: action.userClaims\n };\n }\n break;\n }\n\n return state;\n};\n","export interface ILocalizedString {\n defaultValue: string;\n values: { [index: string]: string };\n getLocalizedValue(lang: string): string;\n}\n\nexport class LocalizedString implements ILocalizedString {\n public defaultValue: string = \"\";\n public values: { [index: string]: string } = {};\n\n constructor(init?: Partial) {\n Object.assign(this, init);\n const newValues: { [index: string]: string } = {};\n Object.keys(this.values).forEach(x => newValues[x.toLowerCase()] = this.values[x]);\n this.values = newValues;\n }\n\n public getLocalizedValue(lang: string): string {\n if (!lang)\n return this.defaultValue;\n \n if (this.values[lang])\n return this.values[lang];\n\n let langCode = lang.toLowerCase();\n\n while (langCode.length) {\n const pos = langCode.lastIndexOf(\"-\");\n if(pos <= 0 || this.values[langCode])\n break;\n else\n langCode = langCode.substring(0, pos); \n }\n\n return this.values[langCode] || this.defaultValue;\n }\n}","import { Action, Reducer } from \"redux\";\nimport { AppThunkAction } from \"./index\";\nimport { ClearSession } from \"./Login\";\nimport { LocalizedString } from \"../models/LocalizedString\";\nimport { ConferenceRoomData } from \"../models/ConferenceRoomData\";\n//// -----------------\n//// STATE - This defines the type of data maintained in the Redux store.\n\nexport interface RoomInfo {\n state: \"found\" | \"notFound\" | \"error\" | \"pending\" | undefined;\n siteNameLocalized: LocalizedString | null\n}\n\nexport interface RoomState {\n [id: string]: RoomInfo\n}\n\n\n// -----------------\n// ACTIONS - These are serializable (hence replayable) descriptions of state transitions.\n// They do not themselves have any side-effects; they just describe something that is going to happen.\n\ninterface TryGetRoom {\n type: \"TRY_GET_ROOM\";\n roomId: string;\n}\n\ninterface GotRoomResult {\n type: \"GOT_ROOM_RESULT\";\n roomId: string;\n result: \"found\" | \"notFound\" | \"error\";\n siteNameLocalized: LocalizedString;\n}\n\n// Declare a 'discriminated union' type. This guarantees that all references to 'type' properties contain one of the\n// declared type strings (and not any other arbitrary string).\ntype KnownAction = TryGetRoom | GotRoomResult | ClearSession;\n\n// ----------------\n// ACTION CREATORS - These are functions exposed to UI components that will trigger a state transition.\n// They don't directly mutate state, but they can have external side-effects (such as loading data).\n\nexport const actionCreators = {\n tryGetRoom: (roomId: string): AppThunkAction =>\n async (dispatch, getState) => {\n\n const appState = getState();\n\n if (appState.room && appState.room[roomId])\n return;\n\n dispatch({\n type: \"TRY_GET_ROOM\",\n roomId: roomId\n });\n\n let statusCode: number;\n let siteNameLocalized: LocalizedString = new LocalizedString();\n try {\n const response = await fetch(`/app/conference/${roomId}`);\n const data: ConferenceRoomData = await response.json();\n\n siteNameLocalized = new LocalizedString(data.siteNameLocalized);\n\n statusCode = response.status;\n } catch (error) {\n console.log(error);\n statusCode = error && error.status;\n }\n\n switch (statusCode) {\n case 200:\n dispatch({\n type: \"GOT_ROOM_RESULT\",\n roomId,\n result: \"found\",\n siteNameLocalized\n });\n break;\n\n case 401:\n dispatch({\n type: \"CLEAR_SESSION\"\n });\n dispatch({\n type: \"GOT_ROOM_RESULT\",\n roomId,\n result: \"found\",\n siteNameLocalized\n });\n break;\n\n case 404:\n dispatch({\n type: \"GOT_ROOM_RESULT\",\n roomId: roomId,\n result: \"notFound\",\n siteNameLocalized\n });\n break;\n\n default:\n dispatch({\n type: \"GOT_ROOM_RESULT\",\n roomId,\n result: \"error\",\n siteNameLocalized\n });\n break;\n }\n }\n};\n\n//// ----------------\n//// REDUCER - For a given state and action, returns the new state.\nexport const reducer: Reducer = (state: RoomState | undefined, incomingAction: Action): RoomState => {\n if (state === undefined) {\n return {};\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case \"TRY_GET_ROOM\":\n return {\n ...state,\n [action.roomId]: {\n state: \"pending\",\n siteNameLocalized: null\n } \n };\n\n case \"GOT_ROOM_RESULT\":\n return {\n ...state,\n [action.roomId]: {\n state: action.result,\n siteNameLocalized: action.siteNameLocalized\n } \n };\n }\n\n return state;\n};","import * as Login from \"./Login\";\nimport * as Room from \"./Room\";\n\n// The top-level state object\nexport interface ApplicationState {\n login: Login.LoginState | undefined;\n room: Room.RoomState | undefined;\n}\n\n// Whenever an action is dispatched, Redux will update each top-level application state property using\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\n// acts on the corresponding ApplicationState property type.\nexport const reducers = {\n login: Login.reducer,\n room: Room.reducer\n};\n\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\n// correctly typed to match your store.\nexport interface AppThunkAction {\n (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\n}\n","import React from \"react\";\n\nconst LanguageContext = React.createContext({\n language: navigator.language,\n setLanguage: (language: string) => {}\n});\n\nexport default LanguageContext;","import { IClientAppResource } from \"./ClientAppResources\";\n\nconst clientApp: IClientAppResource = {\n buttonLabel_cancel: \"Cancel\",\n buttonLabel_continue: \"Continue\",\n buttonLabel_joinConsultation: \"Join Consultation\",\n conference_noMediaPopup_doesUserWishToContinueMessage: \"Do you still wish to join the teleconsultation?\",\n conference_noMediaPopup_noMediaDetectedMessage: \"No microphone or camera was detected on your device.\",\n conference_rejoinConsultationIfMistakeMessage: \"If this was done by mistake, please join the teleconsultation using the button below.\",\n conference_userDoesNotWantToContinueMessage: \"You decided not to continue without using your camera and microphone.\",\n conference_videoFeedNotAvailable: \"Video feed not available\",\n conference_waitingForConnection: \"Waiting for the other attendees to connect…\",\n error_browserNotSupported: \"Sorry, we can't start the conference. Please use Chrome, Firefox, iOS 11, Android 5 or higher, Safari 11 or higher.\",\n error_connection: \"Sorry, we can't start the conference. Please check your internet connection and wait a few moments before trying again.\",\n error_general: \"Sorry, something went wrong when starting the conference. Please wait a few moments before trying again.\",\n error_localMedia: \"Sorry, we can't start the conference. Please make sure that {{hostname}} are allowed to access your camera and microphone.\",\n error_login: \"Sorry, the access code provided is not valid.\",\n error_roomNotFound: \"Sorry, we can't find the conference. It is possible that the conference has not started, or the link has expired.\",\n login_button: \"Enter\",\n login_codePlaceholder: \"Access Code\",\n login_disclaimer: \"By entering your MYLE Telemed access code below, you certify :\\n* You have reached the age to consent to telehealth services in the jurisdiction in which you are located, or are the legal representative of a patient who has not yet reached that age as defined by the applicable laws and regulations in the jurisdiction in which he or she is located;\\n* Consent for {{Organization Name}} and the treating personnel of this facility to conduct one or more consultations in connection with your present health problem;\\n* Understand that {{Organization Name}} uses all possible technological means to counter the risks of breach of confidentiality and/or loss of image definition when providing telehealth services;\\n* Understand that although MYLE Telemed does not make any backups or recordings of the session, {{Organization Name}} staff may store confidential information electronically for record-keeping purposes;\\n* Accept this form of consultation and understand that it has limitations related to the means of communication used, particularly with respect to the security and confidentiality of the physical environment in which the telehealth services will be provided.\",\n login_disclaimerLabel: \"I certify that I am aware of the risks and limitations of telehealth services and agree to participate in the MYLE Telemed session.\",\n login_prompt: \"Please enter the access code provided by your clinician:\"\n};\n\nexport default clientApp;","import { IClientAppResource } from \"./ClientAppResources\";\n\nconst clientApp: IClientAppResource = {\n buttonLabel_cancel: \"Annuler\",\n buttonLabel_continue: \"Continuer\",\n buttonLabel_joinConsultation: \"Rejoindre la consultation\",\n conference_noMediaPopup_doesUserWishToContinueMessage: \"Souhaitez-vous tout de même rejoindre la téléconsultation?\",\n conference_noMediaPopup_noMediaDetectedMessage: \"Aucun microphone ou caméra n'a été détecté sur votre appareil.\",\n conference_rejoinConsultationIfMistakeMessage: \"Si ce n'était pas votre intention, veuillez rejoindre la consultation en utilisant le bouton ci-dessous.\",\n conference_userDoesNotWantToContinueMessage: \"Vous avez choisi de ne pas continuer sans votre caméra et votre micro.\",\n conference_videoFeedNotAvailable: \"Transmission vidéo non disponible\",\n conference_waitingForConnection: \"En attente des autres participants...\",\n error_browserNotSupported: \"Désolé, nous ne pouvons pas démarrer la conférence. Veuillez utiliser Chrome, Firefox, iOS 11, Android 5 ou supérieur, Safari 11 ou supérieur.\",\n error_connection: \"Désolé, nous ne pouvons pas démarrer la conférence. Veuillez vérifier votre connexion Internet et patientez quelques instants avant de réessayer.\",\n error_general: \"Désolé, une erreur s'est produite lors du démarrage de la conférence. Veuillez patienter quelques instants avant de réessayer.\",\n error_localMedia: \"Désolé, nous ne pouvons pas démarrer la conférence. Veuillez vous assurer que {{hostname}} est autorisé à accéder à votre caméra et à votre microphone.\",\n error_login: \"Désolé, le code d'accès fourni n'est pas valide.\",\n error_roomNotFound: \"Désolé, nous ne pouvons pas trouver la conférence. Il est possible que la conférence n'ait pas commencé ou que le lien ait expiré.\",\n login_button: \"Entrer\",\n login_codePlaceholder: \"Code d'accès\",\n login_disclaimer: \"En entrant votre code d'accès MYLE Télémed ci-dessous, vous attestez :\\n* Avoir atteint l'âge vous permettant de consentir aux services de télésanté dans le territoire où vous vous trouvez, ou être le représentant légal d'un patient n'ayant pas encore atteint cet âge tel que défini par les lois et règlements applicables dans le territoire où il se trouve;\\n* Consentir à ce que {{Organization Name}} et le personnel traitants de cet établissement effectuent une ou plusieurs consultations dans le cadre de votre présente problématique de santé;\\n* Comprendre que {{Organization Name}} a recours à tous les moyens technologiques possibles pour contrer les risques de bris de confidentialité et ou de perte de définition des images lors de la prestation des services de télésanté;\\n* Comprendre que bien que MYLE Télémed ne procède à aucune sauvegarde ou enregistrement de la session, le personnel traitant de {{Organization Name}} peut procéder à la sauvegarde de renseignements confidentiels sur support électronique à des fins de tenue de dossier;\\n* Accepter cette forme de consultation et comprendre qu'elle comporte des limitations en lien avec les moyens de communication utilisés, particulièrement en ce qui a trait à la sécurité et la confidentialité de l'environnement physique dans lequel les services de télésanté seront prodigués.\",\n login_disclaimerLabel: \"J'atteste avoir pris connaissance des risques et limitations des services de télésanté et consens à participer à la session MYLE Télémed.\",\n login_prompt: \"Veuillez saisir le code d'accès fourni par votre clinicien:\"\n};\n\nexport default clientApp;","import { IClientAppResource } from \"./ClientAppResources\";\n\nconst clientApp: IClientAppResource = {\n buttonLabel_cancel: \"Cancelar\",\n buttonLabel_continue: \"Continuar\",\n buttonLabel_joinConsultation: \"Unirse a la consulta\",\n conference_noMediaPopup_doesUserWishToContinueMessage: \"¿Todavía desea unirse a la teleconsulta?\",\n conference_noMediaPopup_noMediaDetectedMessage: \"No se detectó ningún micrófono o cámara en su dispositivo.\",\n conference_rejoinConsultationIfMistakeMessage: \"Si esta no era su intención, por favor únase a la consulta usando el botón de abajo.\",\n conference_userDoesNotWantToContinueMessage: \"Eligió no seguir sin su cámara y su micrófono.\",\n conference_videoFeedNotAvailable: \"Video no disponible\",\n conference_waitingForConnection: \"Esperando a que los otros asistentes se conecten…\",\n error_browserNotSupported: \"Lo sentimos, no podemos comenzar la conferencia. Utilice Chrome, Firefox, iOS 11, Android 5 o superior, Safari 11 o superior.\",\n error_connection: \"Lo sentimos, no podemos comenzar la conferencia. Verifique su conexión a Internet y espere unos momentos antes de volver a intentarlo.\",\n error_general: \"Lo sentimos, algo salió mal al comenzar la conferencia. Espere unos momentos antes de volver a intentarlo.\",\n error_localMedia: \"Lo sentimos, no podemos comenzar la conferencia. Asegúrese de que {{hostname}} pueda acceder a su cámara y micrófono.\",\n error_login: \"Lo sentimos, el código de acceso proporcionado no es válido.\",\n error_roomNotFound: \"Lo sentimos, no podemos encontrar la conferencia. Es posible que la conferencia no haya comenzado o que el enlace haya expirado.\",\n login_button: \"Entrar\",\n login_codePlaceholder: \"Código de acceso\",\n login_disclaimer: \"Al introducir su código de acceso de MYLE Telemed abajo, usted certifica :\\n* Que ha alcanzado la edad para dar su consentimiento a los servicios de telesalud en la jurisdicción en la que se encuentra, o que es el representante legal de un paciente que aún no ha alcanzado esa edad según lo definido por las leyes y reglamentos aplicables en la jurisdicción en la que se encuentra;\\n* Consentimiento para que {{Organization Name}} y el personal tratante de esta instalación realicen una o más consultas en relación con su actual problema de salud;\\n* Comprender que {{Organization Name}} utiliza todos los medios tecnológicos posibles para contrarrestar los riesgos de violación de la confidencialidad y/o la pérdida de definición de la imagen al prestar servicios de telesalud;\\n* Comprender que, aunque MYLE Telemed no hace copias de seguridad ni grabaciones de la sesión, el personal de {{Organization Name}} puede almacenar información confidencial electrónicamente para fines de registro;\\n* Aceptar esta forma de consulta y comprender que tiene limitaciones relacionadas con los medios de comunicación utilizados, en particular con respecto a la seguridad y confidencialidad del entorno físico en el que se prestarán los servicios de telesalud.\",\n login_disclaimerLabel: \"Certifico que soy consciente de los riesgos y limitaciones de los servicios de telesalud y acepto participar en la sesión de MYLE Telemed.\",\n login_prompt: \"Ingrese el código de acceso provisto por su médico:\"\n};\nexport default clientApp;","import clientAppResource from \"./ClientAppResource\"\nimport clientAppResource_fr from \"./ClientAppResource.fr\"\nimport clientAppResource_es from \"./ClientAppResource.es\"\n\n\nexport interface IClientAppResource {\n /**\n * Looks up a localize string similar to Cancel\n */\n buttonLabel_cancel: string;\n\n /**\n * Looks up a localize string similar to Continue\n */\n buttonLabel_continue: string;\n\n /**\n * Looks up a localize string similar to Join Consultation\n */\n buttonLabel_joinConsultation: string\n\n /**\n * Looks up a localize string similar to Do you still wish to join the teleconsultation? \n */\n conference_noMediaPopup_doesUserWishToContinueMessage: string;\n \n /**\n * Looks up a localize string similar to No microphone or camera was detected on your device.\n */\n conference_noMediaPopup_noMediaDetectedMessage: string;\n\n /**\n * Looks up a localize string similar to If this was done by mistake, please join the teleconsultation using the button below.\n */\n conference_rejoinConsultationIfMistakeMessage: string;\n\n /**\n * Looks up a localize string similar to You decided not to continue without using your camera and microphone. If this was done by mistake, please join the teleconsultation using the button below.\n */\n conference_userDoesNotWantToContinueMessage: string;\n\n /**\n * Looks up a localized string similar to Video feed not available.\n */\n\n conference_videoFeedNotAvailable: string;\n\n /**\n * Looks up a localized string similar to Waiting for the other attendees to connect.\n */\n conference_waitingForConnection: string;\n\n /**\n * Looks up a localized string similar to Sorry, we can't start the conference. Please use Chrome, Firefox, iOS 11, Android 5 or higher, Safari 11 or higher..\n */\n error_browserNotSupported: string; \n\n /**\n * Looks up a localized string similar to Sorry, we can't start the conference. Please check your internet connection and wait a few moments before trying again..\n */\n error_connection: string;\n\n /**\n * Looks up a localized string similar to Sorry, something went wrong when starting the conference. Please wait a few moments before trying again..\n */\n error_general: string;\n\n /**\n * Looks up a localized string similar to Sorry, we can't start the conference. Please make sure that {{hostname}} are allowed to access your camera and microphone..\n */\n error_localMedia: string;\n\n /**\n * Looks up a localized string similar to Sorry, the access code provided is not valid..\n */\n error_login: string;\n\n /**\n * Looks up a localized string similar to Sorry, we can't find the conference. It is possible that the conference has not started, or the link has expired..\n */\n error_roomNotFound: string;\n\n /**\n * Looks up a localized string similar to Enter.\n */\n login_button: string;\n\n /**\n * Looks up a localized string similar to Access Code.\n */\n login_codePlaceholder: string;\n \n /**\n * Looks up a localized string similar to By entering your MYLE Telemed access code below, you certify :\\n* You have reached the age to consent to telehealth... .\n */\n login_disclaimer: string;\n \n /**\n * Looks up a localized string similar to I certify that I am aware of the risks and limitations of telehealth services and agree to participate in the MYLE Telemed session..\n */\n login_disclaimerLabel: string;\n\n /**\n * Looks up a localized string similar to Please enter the access code provided by your clinician:.\n */\n login_prompt: string;\n}\n\nconst clientAppResources: {\n [language: string]: IClientAppResource;\n} = {};\n\nclientAppResources[\"\"] = clientAppResource;\nclientAppResources[\"fr\"] = clientAppResource_fr as IClientAppResource;\nclientAppResources[\"es\"] = clientAppResource_es as IClientAppResource;\n\nexport default clientAppResources;\n","import ClientAppResource, { IClientAppResource } from \"./ClientAppResources/ClientAppResources\";\nimport _ from \"lodash\";\n\nexport default class Resources {\n private static clientApp: {\n [language: string]: IClientAppResource\n } = {};\n\n private readonly language: string;\n\n constructor(language: string) {\n this.language = language;\n }\n\n get clientApp(): IClientAppResource {\n if (Resources.clientApp[this.language])\n return Resources.clientApp[this.language];\n\n const translationStack: IClientAppResource[] = [];\n let languageStep = this.language;\n while (languageStep) {\n const translation = ClientAppResource[languageStep];\n if (translation)\n translationStack.push(translation);\n\n languageStep = languageStep.substring(0, languageStep.lastIndexOf(\"-\"));\n }\n\n return Resources.clientApp[this.language] = _.merge({}, ClientAppResource[\"\"], ...translationStack) as IClientAppResource;\n }\n}\n\nexport function getResources(language?: string): Resources {\n return new Resources(language || navigator.language);\n}","import React, { MouseEvent } from \"react\";\nimport LanguageContext from \"./LanguageContext\";\n\nexport default function LanguageSwitcher(props: React.DetailedHTMLProps, HTMLDivElement>) {\n\n const handleClick = (e: MouseEvent, setLanguage: (language: string) => void) => {\n const toLanguage: string = (e.target as any)?.value;\n\n if (toLanguage)\n setLanguage(toLanguage);\n }\n\n const getBestLanguageMatch = (lang: string) => {\n const upperLang = lang.toUpperCase();\n\n return navigator.languages\n .find(p => p.toUpperCase().startsWith(upperLang))\n || lang;\n }\n\n return (\n \n {({ language, setLanguage }) => (\n
\n {!language.startsWith(\"fr\")\n && \n }\n {!language.startsWith(\"en\")\n && \n }\n {!language.startsWith(\"es\")\n && \n }\n
\n )}\n
\n )\n};\n","import React, { Component } from \"react\";\nimport LanguageSwitcher from \"./LanguageSwitcher\";\n\nexport interface IHeaderProps {\n title: string;\n}\n\nexport class Header extends Component {\n render() {\n return (\n
\n
\n {this.props.title}\n
\n \n
\n );\n }\n}","import React, { Component } from \"react\";\nimport { Header } from \"./Header\"\n\n\nexport class Layout extends Component {\n static displayName = Layout.name;\n\n render() {\n return (\n
\n
\n
\n
\n
\n {this.props.children}\n
\n
\n );\n }\n}\n","import React, { PureComponent } from \"react\";\nimport { Layout } from \"./Layout\";\n\nexport interface ErrorProps {\n errorMessage: React.ReactNode;\n}\n\nexport default class Error extends PureComponent {\n render() {\n return (\n \n
{this.props.errorMessage}
\n
\n );\n }\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 9c-1.6 0-3.15.25-4.6.72v3.1c0 .39-.23.74-.56.9-.98.49-1.87 1.12-2.66 1.85-.18.18-.43.28-.7.28-.28 0-.53-.11-.71-.29L.29 13.08c-.18-.17-.29-.42-.29-.7 0-.28.11-.53.29-.71C3.34 8.78 7.46 7 12 7s8.66 1.78 11.71 4.67c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-2.48 2.48c-.18.18-.43.29-.71.29-.27 0-.52-.11-.7-.28-.79-.74-1.69-1.36-2.67-1.85-.33-.16-.56-.5-.56-.9v-3.1C15.15 9.25 13.6 9 12 9z\"\n});\n\nconst SvgCallEnd24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCallEnd24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/call_end-24px.39365fed.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z\"\n});\n\nconst SvgCall24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCall24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/call-24px.f3b7d629.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n r: 3.2\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nconst SvgCameraAlt24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCameraAlt24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/camera_alt-24px.04d6f20e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 20H5v2h5v2l3-3-3-3v2zm4 0v2h5v-2h-5zM12 8c1.1 0 2-.9 2-2s-.9-2-2-2-1.99.9-1.99 2S10.9 8 12 8zm5-8H7C5.9 0 5 .9 5 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2zM7 2h10v10.5c0-1.67-3.33-2.5-5-2.5s-5 .83-5 2.5V2z\"\n});\n\nconst SvgCameraFront24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCameraFront24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/camera_front-24px.9ac1ebf4.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 20H5v2h5v2l3-3-3-3v2zm4 0v2h5v-2h-5zm3-20H7C5.9 0 5 .9 5 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2zm-5 6c-1.11 0-2-.9-2-2s.89-2 1.99-2 2 .9 2 2C14 5.1 13.1 6 12 6z\"\n});\n\nconst SvgCameraRear24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCameraRear24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/camera_rear-24px.6add3114.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z\"\n});\n\nconst SvgFullscreenExit24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgFullscreenExit24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/fullscreen_exit-24px.89ded81d.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\n});\n\nconst SvgFullscreen24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgFullscreen24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/fullscreen-24px.35be770f.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0zm0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 11h-1.7c0 .74-.16 1.43-.43 2.05l1.23 1.23c.56-.98.9-2.09.9-3.28zm-4.02.17c0-.06.02-.11.02-.17V5c0-1.66-1.34-3-3-3S9 3.34 9 5v.18l5.98 5.99zM4.27 3L3 4.27l6.01 6.01V11c0 1.66 1.33 3 2.99 3 .22 0 .44-.03.65-.08l1.66 1.66c-.71.33-1.5.52-2.31.52-2.76 0-5.3-2.1-5.3-5.1H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c.91-.13 1.77-.45 2.54-.9L19.73 21 21 19.73 4.27 3z\"\n});\n\nconst SvgMicOff24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgMicOff24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/mic_off-24px.ba53335f.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nconst SvgMic24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgMic24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/mic-24px.7ca5d2a9.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.34 14.54l-1.43-1.43c.56-.73 1.05-1.5 1.47-2.32l-2.2-2.2c-.28-.28-.36-.67-.25-1.02.37-1.12.57-2.32.57-3.57 0-.55.45-1 1-1H20c.55 0 1 .45 1 1 0 3.98-1.37 7.64-3.66 10.54zm-2.82 2.81C11.63 19.64 7.97 21 4 21c-.55 0-1-.45-1-1v-3.49c0-.55.45-1 1-1 1.24 0 2.45-.2 3.57-.57.35-.12.75-.03 1.02.24l2.2 2.2c.81-.42 1.58-.9 2.3-1.46L1.39 4.22l1.42-1.41L21.19 21.2l-1.41 1.41-5.26-5.26z\"\n});\n\nconst SvgPhoneDisabled24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgPhoneDisabled24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/phone_disabled-24px.dc51b2b0.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.38 10.79l-2.2-2.2c-.28-.28-.36-.67-.25-1.02.37-1.12.57-2.32.57-3.57 0-.55.45-1 1-1H20c.55 0 1 .45 1 1 0 9.39-7.61 17-17 17-.55 0-1-.45-1-1v-3.49c0-.55.45-1 1-1 1.24 0 2.45-.2 3.57-.57.35-.12.75-.03 1.02.24l2.2 2.2c2.83-1.45 5.15-3.76 6.59-6.59z\"\n});\n\nconst SvgPhoneEnabled24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgPhoneEnabled24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/phone_enabled-24px.44790eed.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0zm0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 6.5l-4 4V7c0-.55-.45-1-1-1H9.82L21 17.18V6.5zM3.27 2L2 3.27 4.73 6H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.21 0 .39-.08.54-.18L19.73 21 21 19.73 3.27 2z\"\n});\n\nconst SvgVideocamOff24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgVideocamOff24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/videocam_off-24px.89455ac4.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z\"\n});\n\nconst SvgVideocam24Px = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgVideocam24Px, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/videocam-24px.3cbeae54.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.9C16 9.11 14.21 10.9 12 10.9C9.79 10.9 8 9.11 8 6.9C8 4.69 9.79 2.9 12 2.9C14.21 2.9 16 4.69 16 6.9Z\",\n id: \"i2nA5R1uVD\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.35 12.63C15.71 12.63 16 12.92 16 13.29C16 15.24 16 20.45 16 22.41C16 22.77 15.71 23.06 15.35 23.06C13.88 23.06 10.12 23.06 8.65 23.06C8.29 23.06 8 22.77 8 22.41C8 20.45 8 15.24 8 13.29C8 12.92 8.29 12.63 8.65 12.63C10.12 12.63 13.88 12.63 15.35 12.63Z\",\n id: \"b4TpBY1Qq4\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.86 3.45C16.86 1.94 18.2 0.72 19.86 0.72C21.51 0.72 22.85 1.94 22.85 3.45C22.85 4.96 21.51 6.18 19.86 6.18C19.45 6.18 19.07 6.11 18.72 5.98C18.65 6.03 18.28 6.27 17.61 6.71L17.78 5.42C17.17 4.63 16.86 3.97 16.86 3.45Z\",\n id: \"a1oPnyQwdV\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#i2nA5R1uVD\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n}), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#i2nA5R1uVD\",\n opacity: 1,\n fillOpacity: 0,\n stroke: \"#000000\",\n strokeWidth: 1,\n strokeOpacity: 1\n}))), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#b4TpBY1Qq4\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a1oPnyQwdV\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n}))));\n\nconst SvgSingleUser = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n preserveAspectRatio: \"xMidYMid meet\",\n viewBox: \"0 0 24 24\",\n width: 24,\n height: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgSingleUser, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/single-user.e5245499.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.9C16 9.11 14.21 10.9 12 10.9C9.79 10.9 8 9.11 8 6.9C8 4.69 9.79 2.9 12 2.9C14.21 2.9 16 4.69 16 6.9Z\",\n id: \"i2nA5R1uVD\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.35 12.63C15.71 12.63 16 12.92 16 13.29C16 15.24 16 20.45 16 22.41C16 22.77 15.71 23.06 15.35 23.06C13.88 23.06 10.12 23.06 8.65 23.06C8.29 23.06 8 22.77 8 22.41C8 20.45 8 15.24 8 13.29C8 12.92 8.29 12.63 8.65 12.63C10.12 12.63 13.88 12.63 15.35 12.63Z\",\n id: \"cBpPrsaTF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.68 6.29C22.68 7.71 21.52 8.87 20.09 8.87C18.66 8.87 17.5 7.71 17.5 6.29C17.5 4.86 18.66 3.7 20.09 3.7C21.52 3.7 22.68 4.86 22.68 6.29Z\",\n id: \"c1YPHGL1CO\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.25 9.99C22.49 9.99 22.68 10.18 22.68 10.42C22.68 11.68 22.68 15.05 22.68 16.32C22.68 16.55 22.49 16.74 22.25 16.74C21.3 16.74 18.87 16.74 17.92 16.74C17.69 16.74 17.5 16.55 17.5 16.32C17.5 15.05 17.5 11.68 17.5 10.42C17.5 10.18 17.69 9.99 17.92 9.99C18.87 9.99 21.3 9.99 22.25 9.99Z\",\n id: \"b3MCokwbun\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.45 6.29C6.45 7.71 5.29 8.87 3.86 8.87C2.43 8.87 1.27 7.71 1.27 6.29C1.27 4.86 2.43 3.7 3.86 3.7C5.29 3.7 6.45 4.86 6.45 6.29Z\",\n id: \"a6cAjH8Kl\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.03 9.99C6.26 9.99 6.45 10.18 6.45 10.42C6.45 11.68 6.45 15.05 6.45 16.32C6.45 16.55 6.26 16.74 6.03 16.74C5.08 16.74 2.65 16.74 1.7 16.74C1.46 16.74 1.27 16.55 1.27 16.32C1.27 15.05 1.27 11.68 1.27 10.42C1.27 10.18 1.46 9.99 1.7 9.99C2.65 9.99 5.08 9.99 6.03 9.99Z\",\n id: \"c230CwrWXR\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#i2nA5R1uVD\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n}), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#i2nA5R1uVD\",\n opacity: 1,\n fillOpacity: 0,\n stroke: \"#000000\",\n strokeWidth: 1,\n strokeOpacity: 1\n}))), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#cBpPrsaTF\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#c1YPHGL1CO\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n}), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#c1YPHGL1CO\",\n opacity: 1,\n fillOpacity: 0,\n stroke: \"#000000\",\n strokeWidth: 1,\n strokeOpacity: 1\n}))), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#b3MCokwbun\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a6cAjH8Kl\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n}), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a6cAjH8Kl\",\n opacity: 1,\n fillOpacity: 0,\n stroke: \"#000000\",\n strokeWidth: 1,\n strokeOpacity: 1\n}))), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#c230CwrWXR\",\n opacity: 1,\n fill: \"#0c0318\",\n fillOpacity: 1\n}))));\n\nconst SvgMultipleUsers = (_ref) => {\n let svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n preserveAspectRatio: \"xMidYMid meet\",\n viewBox: \"0 0 24 24\",\n width: 24,\n height: 24,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgMultipleUsers, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/multiple-users.581d6702.svg\";\nexport { ForwardRef as ReactComponent };","import * as React from \"react\";\nimport { ReactComponent as CallEndIcon } from \"../images/call_end-24px.svg\";\nimport { ReactComponent as CallIcon } from \"../images/call-24px.svg\";\nimport { ReactComponent as CameraAltIcon } from \"../images/camera_alt-24px.svg\";\nimport { ReactComponent as CameraFrontIcon } from \"../images/camera_front-24px.svg\";\nimport { ReactComponent as CameraRearIcon } from \"../images/camera_rear-24px.svg\";\nimport { ReactComponent as FullScreenExitIcon } from \"../images/fullscreen_exit-24px.svg\";\nimport { ReactComponent as FullScreenIcon } from \"../images/fullscreen-24px.svg\";\nimport { ReactComponent as MicOffIcon } from \"../images/mic_off-24px.svg\";\nimport { ReactComponent as MicIcon } from \"../images/mic-24px.svg\";\nimport { ReactComponent as PhoneDisabledIcon } from \"../images/phone_disabled-24px.svg\";\nimport { ReactComponent as PhoneEnabledIcon } from \"../images/phone_enabled-24px.svg\";\nimport { ReactComponent as VideoCamOffIcon } from \"../images/videocam_off-24px.svg\";\nimport { ReactComponent as VideoCam } from \"../images/videocam-24px.svg\";\nimport { ReactComponent as SingleUserIcon } from \"../images/single-user.svg\";\nimport { ReactComponent as MultipleUsersIcon } from \"../images/multiple-users.svg\";\n\nexport enum IconType {\n Call,\n CallEnd,\n Camera,\n CameraFront,\n CameraBack,\n FullScreen,\n FullScreenExit,\n MicOn,\n MicOff,\n PhoneEnabled,\n PhoneDisabledIcon,\n VideoCamOn,\n VideoCamOff,\n SingleUser,\n MultipleUsers\n}\n\n\n\nconst Icon = (props: { type: IconType, style?: React.SVGProps }): JSX.Element => {\n const { style } = props;\n\n switch (props.type) {\n case IconType.Call:\n return \n case IconType.CallEnd:\n return \n case IconType.Camera:\n return \n case IconType.CameraFront:\n return \n case IconType.CameraBack:\n return \n case IconType.FullScreen:\n return \n case IconType.FullScreenExit:\n return \n case IconType.MicOn:\n return \n case IconType.MicOff:\n return \n case IconType.PhoneEnabled:\n return \n case IconType.PhoneDisabledIcon:\n return \n case IconType.VideoCamOn:\n return \n case IconType.VideoCamOff:\n return \n case IconType.SingleUser:\n return \n case IconType.MultipleUsers:\n return \n default:\n return
;\n }\n}\nexport default Icon;","import { Button, Modal, ButtonProps } from \"react-bootstrap\";\nimport * as React from \"react\";\n\ninterface IButtonProperties extends ButtonProps{\n id?: string;\n onClick: () => void;\n label: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\ninterface IPopupProps {\n id?: string;\n size?: 'sm' | 'lg' | 'xl';\n centered?: boolean;\n title?: string;\n show: boolean;\n closeButton: IButtonProperties;\n headerCloseButton?: boolean;\n okButton?: IButtonProperties;\n closeOnOutsideClick?: boolean;\n}\n\nexport class Popup extends React.Component {\n public render(): JSX.Element {\n return this.props.closeOnOutsideClick && this.props.closeButton.onClick()}\n centered={this.props.centered}\n >\n {\n this.props.title &&\n \n \n {this.props.title}\n \n \n }\n \n {this.props.children}\n \n \n {this.renderButton(this.props.closeButton)}\n {this.props.okButton && this.renderButton(this.props.okButton)}\n \n \n }\n\n private renderButton(props: IButtonProperties) {\n return \n }\n}","// taken from https://github.com/kdavis-mozilla/vad.js/tree/master\n\ninterface IVoiceAudioDetectorOptions {\n fftSize: number;\n bufferLen: number;\n voiceStopCallback: () => void;\n voiceStartCallback: () => void;\n smoothingTimeConstant: number;\n energy_offset: number, // The initial offset.\n energy_threshold_ratio_pos: number, // Signal must be twice the offset\n energy_threshold_ratio_neg: number, // Signal must be half the offset\n energy_integration: number, // Size of integration change compared to the signal per second.\n filter: Array<{f: number, v: number}>,\n source: MediaStreamAudioSourceNode | null,\n context: BaseAudioContext | null,\n}\n\nexport class VoiceAudioDetector {\n DEBUG: boolean = false;\n options: IVoiceAudioDetectorOptions = {\n fftSize: 512,\n bufferLen: 512,\n voiceStopCallback: () => { },\n voiceStartCallback: () => { },\n smoothingTimeConstant: 0.99,\n energy_offset: 1e-8, // The initial offset.\n energy_threshold_ratio_pos: 2, // Signal must be twice the offset\n energy_threshold_ratio_neg: 0.5, // Signal must be half the offset\n energy_integration: 1, // Size of integration change compared to the signal per second.\n filter: [\n { f: 200, v: 0 }, // 0 -> 200 is 0\n { f: 2000, v: 1 } // 200 -> 2k is 1\n ],\n source: null,\n context: null\n };\n hertzPerBin: number;\n iterationFrequency: number;\n iterationPeriod: number;\n filter: any[] = [];\n\n ready: any = {};\n vadState = false; // True when Voice Activity Detected\n\n // Energy detector props\n energy_offset: number = this.options.energy_offset;\n energy_threshold_pos: number = this.energy_offset * this.options.energy_threshold_ratio_pos;\n energy_threshold_neg: number = this.energy_offset * this.options.energy_threshold_ratio_neg;\n\n voiceTrend = 0;\n voiceTrendMax = 10;\n voiceTrendMin = -10;\n voiceTrendStart = 5;\n voiceTrendEnd = -5;\n analyser: any;\n floatFrequencyData: Float32Array;\n scriptProcessorNode: any;\n floatFrequencyDataLinear: Float32Array;\n logging: boolean;\n log_i: number;\n log_limit: number;\n energy: any;\n\n constructor(options: Partial) {\n this.options = { ...this.options, ...options };\n\n console.log(this.options);\n // Require source\n if (!this.options.source)\n throw new Error(\"The options must specify a MediaStreamAudioSourceNode.\");\n\n // Set options.context\n this.options.context = options.source?.context || null;\n\n if (this.options.context === null)\n throw new Error(\"The options must specify a base audio context.\");\n\n // Calculate time relationships\n this.hertzPerBin = this.options.context.sampleRate / this.options.fftSize;\n this.iterationFrequency = this.options.context.sampleRate / this.options.bufferLen;\n this.iterationPeriod = 1 / this.iterationFrequency;\n\n if (this.DEBUG) console.log(\n 'Vad' +\n ' | sampleRate: ' + this.options.context.sampleRate +\n ' | hertzPerBin: ' + this.hertzPerBin +\n ' | iterationFrequency: ' + this.iterationFrequency +\n ' | iterationPeriod: ' + this.iterationPeriod\n );\n\n this.setFilter(this.options.filter);\n\n this.energy_offset = this.options.energy_offset;\n this.energy_threshold_pos = this.energy_offset * this.options.energy_threshold_ratio_pos;\n this.energy_threshold_neg = this.energy_offset * this.options.energy_threshold_ratio_neg;\n\n // Create analyser \n this.analyser = this.options.context.createAnalyser();\n this.analyser.smoothingTimeConstant = this.options.smoothingTimeConstant; // 0.99;\n this.analyser.fftSize = this.options.fftSize;\n\n this.floatFrequencyData = new Float32Array(this.analyser.frequencyBinCount);\n\n // Setup local storage of the Linear FFT data\n this.floatFrequencyDataLinear = new Float32Array(this.floatFrequencyData.length);\n\n // Connect this.analyser\n this.options.source.connect(this.analyser);\n\n // Create ScriptProcessorNode\n this.scriptProcessorNode = this.options.context.createScriptProcessor(this.options.bufferLen, 1, 1);\n\n // Connect scriptProcessorNode (Theretically, not required)\n this.scriptProcessorNode.connect(this.options.context.destination);\n\n this.scriptProcessorNode.onaudioprocess = () => {\n this.analyser.getFloatFrequencyData(this.floatFrequencyData);\n this.update();\n this.monitor();\n };\n\n\n // Connect scriptProcessorNode\n this.options.source.connect(this.scriptProcessorNode);\n\n // log stuff\n this.logging = false;\n this.log_i = 0;\n this.log_limit = 100;\n }\n\n setFilter(shape: any) {\n this.filter = [];\n for (var i = 0, iLen = this.options.fftSize / 2; i < iLen; i++) {\n this.filter[i] = 0;\n for (var j = 0, jLen = shape.length; j < jLen; j++) {\n if (i * this.hertzPerBin < shape[j].f) {\n this.filter[i] = shape[j].v;\n break; // Exit j loop\n }\n }\n }\n }\n\n\n triggerLog(limit: number) {\n this.logging = true;\n this.log_i = 0;\n this.log_limit = typeof limit === 'number' ? limit : this.log_limit;\n }\n\n log(msg: any) {\n if (this.logging && this.log_i < this.log_limit) {\n this.log_i++;\n console.log(msg);\n } else {\n this.logging = false;\n }\n }\n\n update() {\n // Update the local version of the Linear FFT\n const fft = this.floatFrequencyData;\n for (let i = 0, iLen = fft.length; i < iLen; i++) {\n this.floatFrequencyDataLinear[i] = Math.pow(10, fft[i] / 10);\n }\n this.ready = {};\n }\n\n getEnergy() {\n if (this.ready.energy) {\n return this.energy;\n }\n\n let energy = 0;\n let fft = this.floatFrequencyDataLinear;\n\n for (var i = 0, iLen = fft.length; i < iLen; i++) {\n energy += this.filter[i] * fft[i] * fft[i];\n }\n\n this.energy = energy;\n this.ready.energy = true;\n\n return energy;\n }\n\n monitor() {\n let energy = this.getEnergy();\n let signal = energy - this.energy_offset;\n\n if (signal > this.energy_threshold_pos) {\n this.voiceTrend = (this.voiceTrend + 1 > this.voiceTrendMax) ? this.voiceTrendMax : this.voiceTrend + 1;\n } else if (signal < -this.energy_threshold_neg) {\n this.voiceTrend = (this.voiceTrend - 1 < this.voiceTrendMin) ? this.voiceTrendMin : this.voiceTrend - 1;\n } else {\n // voiceTrend gets smaller\n if (this.voiceTrend > 0) {\n this.voiceTrend--;\n } else if (this.voiceTrend < 0) {\n this.voiceTrend++;\n }\n }\n\n let start = false, end = false;\n if (this.voiceTrend > this.voiceTrendStart) {\n // Start of speech detected\n start = true;\n } else if (this.voiceTrend < this.voiceTrendEnd) {\n // End of speech detected\n end = true;\n }\n\n // Integration brings in the real-time aspect through the relationship with the frequency this functions is called.\n let integration = signal * this.iterationPeriod * this.options.energy_integration;\n\n // Idea?: The integration is affected by the voiceTrend magnitude? - Not sure. Not doing atm.\n\n // The !end limits the offset delta boost till after the end is detected.\n if (integration > 0 || !end) {\n this.energy_offset += integration;\n } else {\n this.energy_offset += integration * 10;\n }\n this.energy_offset = this.energy_offset < 0 ? 0 : this.energy_offset;\n this.energy_threshold_pos = this.energy_offset * this.options.energy_threshold_ratio_pos;\n this.energy_threshold_neg = this.energy_offset * this.options.energy_threshold_ratio_neg;\n\n // Broadcast the messages\n if (start && !this.vadState) {\n this.vadState = true;\n this.options.voiceStartCallback();\n }\n if (end && this.vadState) {\n this.vadState = false;\n this.options.voiceStopCallback();\n }\n\n this.log(\n 'e: ' + energy +\n ' | e_of: ' + this.energy_offset +\n ' | e+_th: ' + this.energy_threshold_pos +\n ' | e-_th: ' + this.energy_threshold_neg +\n ' | signal: ' + signal +\n ' | int: ' + integration +\n ' | voiceTrend: ' + this.voiceTrend +\n ' | start: ' + start +\n ' | end: ' + end\n );\n\n return signal;\n }\n}","import { PureComponent } from \"react\";\nimport Resources, { getResources } from \"../modules/localization/Resources\";\nimport LanguageContext from \"./LanguageContext\";\n\n\nabstract class BaseReactComponent extends PureComponent {\n public get resources(): Resources {\n return getResources(this.context.language);\n }\n}\n\nBaseReactComponent.contextType = LanguageContext;\n\nexport default BaseReactComponent;\n","import { HubConnection, HubConnectionBuilder } from \"@aspnet/signalr\";\nimport * as log from \"loglevel\";\nimport remote from \"loglevel-plugin-remote\";\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport SimplePeer, { Instance, SignalData } from \"simple-peer\";\nimport \"../css/conference.css\";\nimport { DefaultLogger } from \"../modules/logging/DefaultLogger\";\nimport ErrorComponent from \"./Error\";\nimport { ApplicationState } from \"../store\";\nimport * as LoginStore from \"../store/Login\";\nimport { ConferenceParams } from \"./ConferenceRoomRoute\";\nimport LanguageContext from \"./LanguageContext\";\nimport Icon, { IconType } from \"./FontSymbols\";\nimport { Popup } from \"./Popup\";\nimport { Button } from \"react-bootstrap\";\nimport { VoiceAudioDetector } from \"../modules/voiceDetection/VoiceAudioDetector\";\nimport BaseReactComponent from \"./BaseReactComponent\";\nimport screenfull from \"screenfull\";\n\nvar DetectRTC = require(\"detectrtc\");\nvar initLayoutContainer = require(\"opentok-layout-js\");\n\ninterface PeerInfo {\n connectionId: string;\n}\n\ninterface ICEServers {\n username: string;\n credential: string;\n urls: string[];\n}\n\ninterface ConferenceRoomState {\n conferenceError?: string;\n localStreamError?: string;\n isCameraEnabled: boolean;\n isMicrophoneEnabled: boolean;\n isSingleUserEnabled: boolean;\n amountOfCameras: number;\n cameraFacingMode: \"user\" | \"environment\";\n localPeerId: string;\n videoTrackLabel: string;\n audioTrackLabel: string;\n currentPeerId: string; // Indicates which peer to stream for Picture in Picture.\n isLocalUserTalking: boolean;\n isFullscreen: boolean;\n\n // Used in case the user doesn't have local media devices/ refuses to give access\n noMediaDetected: boolean; // If unable to get local media (either device doesn't exist or not detected), set to true\n showNoMediaPopup: boolean; // If unable to get local media, trigger a popup that will ask the user if it's ok to continue to with not local media.\n showErrorMessage: boolean; // If user refuses to continue with no local media, this will show an message to the user.\n}\n\ntype ConferenceRoomProps = {\n login: LoginStore.LoginState;\n}\n & typeof LoginStore.actionCreators\n & RouteComponentProps;\n\nclass ConferenceRoom extends BaseReactComponent {\n static contextType = LanguageContext;\n\n private hubConnection?: HubConnection;\n private localStream: Promise;\n private localVideo: HTMLVideoElement | null = null;\n private peers: { [peerId: string]: Instance | null | undefined };\n private streams: { [peerId: string]: MediaStream[] | undefined };\n private videos: { [peerId: string]: HTMLVideoElement | undefined };\n private currentSpeakerVideo: HTMLVideoElement | undefined;\n\n private voiceDetector: { [peerId: string]: VoiceAudioDetector };\n private localVoiceDetector: VoiceAudioDetector | undefined;\n\n private lastIceCredentialsFetch = 0;\n private getIceServersPromise?: Promise;\n\n public audioContext: AudioContext | null = null;\n\n constructor(props: ConferenceRoomProps) {\n super(props);\n this.initLocalStream = this.initLocalStream.bind(this);\n this.tryStartConferenceAsync = this.tryStartConferenceAsync.bind(this);\n this.handleCameraButtonClick = this.handleCameraButtonClick.bind(this);\n this.handleMicrophoneButtonClick = this.handleMicrophoneButtonClick.bind(this);\n this.handleHangupButtonClickAsync = this.handleHangupButtonClickAsync.bind(this);\n this.handleFlipButtonClick = this.handleFlipButtonClick.bind(this);\n this.handleMultipleUserToggle = this.handleMultipleUserToggle.bind(this);\n this.layoutVideos = this.layoutVideos.bind(this);\n this.handleFullscreenButtonClick = this.handleFullscreenButtonClick.bind(this);\n\n this.state = {\n isCameraEnabled: true,\n isMicrophoneEnabled: true,\n amountOfCameras: 0,\n cameraFacingMode: \"user\",\n localPeerId: \"\",\n videoTrackLabel: \"\",\n audioTrackLabel: \"\",\n currentPeerId: \"\",\n isLocalUserTalking: false,\n isSingleUserEnabled: false,\n noMediaDetected: false,\n showNoMediaPopup: false,\n showErrorMessage: false,\n isFullscreen: false\n };\n\n this.peers = {};\n this.streams = {};\n this.voiceDetector = {};\n this.videos = {}\n\n this.localStream = this.initLocalStream();\n\n log.setLevel(log.levels.DEBUG, true);\n this.configureRemoteLogging(this.props.match.params.roomId);\n this.configureAudioContext();\n }\n\n public async componentDidMount() {\n\n DetectRTC.load(() => {\n\n log.info(JSON.stringify(DetectRTC));\n\n if (DetectRTC.isWebRTCSupported === false)\n log.warn(this.resources.clientApp.error_browserNotSupported);\n else if (DetectRTC.hasWebcam === false)\n log.warn(this.resources.clientApp.error_localMedia);\n\n });\n\n const stream = this.initLocalStream();\n\n if (await stream)\n await this.tryStartConferenceAsync();\n else\n this.setState({ noMediaDetected: true, showNoMediaPopup: true })\n\n window.addEventListener(\"resize\", this.layoutVideos);\n }\n\n public componentWillUnmount() {\n window.removeEventListener(\"resize\", this.layoutVideos);\n }\n\n public async componentDidUpdate() {\n if (this.localStream) {\n const stream = await this.localStream;\n\n if (this.localVideo && !this.localVideo.srcObject) {\n this.localVideo.srcObject = stream;\n this.localVideo.volume = 0;\n\n await this.localVideo.play();\n }\n }\n\n await this.attachPeerVideos();\n\n this.layoutVideos();\n }\n\n private layoutVideos() {\n const options = {\n maxRatio: 3 / 2, // The narrowest ratio that will be used (default 2x3)\n minRatio: 9 / 16, // The widest ratio that will be used (default 16x9)\n fixedRatio: false, // If this is true then the aspect ratio of the video is maintained and minRatio and maxRatio are ignored (default false)\n alignItems: \"center\", // Can be 'start', 'center' or 'end'. Determines where to place items when on a row or column that is not full\n bigClass: \"OT_big\", // The class to add to elements that should be sized bigger\n bigPercentage: 0.8, // The maximum percentage of space the big ones should take up\n bigFixedRatio: false, // fixedRatio for the big ones\n bigAlignItems: \"center\", // How to align the big items\n smallAlignItems: \"center\", // How to align the small row or column of items if there is a big one\n bigMaxRatio: 3 / 2, // The narrowest ratio to use for the big elements (default 2x3)\n bigMinRatio: 9 / 16, // The widest ratio to use for the big elements (default 16x9)\n bigFirst: true, // Whether to place the big one in the top left (true) or bottom right\n animate: false, // Whether you want to animate the transitions\n window: window, // Lets you pass in your own window object which should be the same window that the element is in\n ignoreClass: \"OT_ignore\", // Elements with this class will be ignored and not positioned. This lets you do things like picture-in-picture\n };\n\n const layoutElem = document.getElementById(\"feed-layout\");\n if (layoutElem) {\n const layout = initLayoutContainer(layoutElem, options);\n\n setTimeout(() => { layout.layout(); }, 300);\n }\n }\n\n private configureAudioContext() {\n window.addEventListener(\"mousedown\", this.audioContextGestureHandler);\n window.addEventListener(\"touchstart\", this.audioContextGestureHandler);\n try {\n window.AudioContext = window.AudioContext || window.webkitAudioContext;\n this.audioContext = new AudioContext();\n } catch (e) {\n alert('Web Audio API not supported.');\n }\n }\n\n /**\n *\n * @desc Handler that will be called when the user clicks or touches the application.\n * @memberof ConferenceRoom\n */\n public audioContextGestureHandler = () => {\n if (this.audioContext == null || this.audioContext.state !== \"running\") {\n this.audioContext = new AudioContext();\n this.audioContext.resume();\n window.removeEventListener(\"mousedown\", this.audioContextGestureHandler);\n window.removeEventListener(\"touchstart\", this.audioContextGestureHandler);\n Object\n .keys(this.peers)\n .forEach(peerId => {\n if (this.streams[peerId] && this.streams[peerId]?.length) {\n const stream: MediaStream[] = this.streams[peerId]!;\n this.voiceDetector[peerId] = new VoiceAudioDetector({\n source: this.audioContext?.createMediaStreamSource(stream[0]),\n voiceStartCallback: () => this.setState(s => ({ ...s, currentPeerId: s.isLocalUserTalking ? s.currentPeerId : peerId })),\n voiceStopCallback: () => { },\n });\n }\n });\n }\n }\n\n public render() {\n const generateToggleButton = (type: IconType, toggledType: IconType, handler: () => void, toggled: boolean) => (\n
\n \n \n \n
\n )\n\n if (this.state.showErrorMessage)\n return \n

{this.resources.clientApp.conference_userDoesNotWantToContinueMessage}

\n

{this.resources.clientApp.conference_rejoinConsultationIfMistakeMessage}

\n
\n \n
\n
}\n />\n\n return (\n
\n
\n {\n this.state.noMediaDetected &&\n this.state.showNoMediaPopup &&\n this.renderNoStreamDetected()\n }\n {\n !this.state.localStreamError &&\n this.localVideo = video}\n autoPlay={true}\n playsInline={true}\n muted={true}\n />\n }\n {\n !this.state.conferenceError &&\n this.renderPeers()\n }\n
\n {this.renderDebugInfo()}\n
\n
\n {generateToggleButton(IconType.VideoCamOn, IconType.VideoCamOff, this.handleCameraButtonClick, !this.state.isCameraEnabled)}\n {generateToggleButton(IconType.MicOn, IconType.MicOff, this.handleMicrophoneButtonClick, !this.state.isMicrophoneEnabled)}\n
\n \n \n \n
\n {generateToggleButton(IconType.CameraBack, IconType.CameraFront, this.handleFlipButtonClick, this.state.cameraFacingMode !== \"user\")}\n {\n Object.keys(this.peers).length > 1 &&\n generateToggleButton(IconType.SingleUser, IconType.MultipleUsers, this.handleMultipleUserToggle, this.state.isSingleUserEnabled)\n }\n {generateToggleButton(IconType.FullScreen, IconType.FullScreenExit, this.handleFullscreenButtonClick, this.state.isFullscreen)}\n
\n
\n );\n }\n\n private renderPeers(): JSX.Element {\n const entries = Object.entries(this.peers);\n\n return
\n {!(entries && entries.length) &&\n
\n {this.resources.clientApp.conference_waitingForConnection}\n
\n }\n {\n // We only want to render in single user mode (with audio detection) when we have more than one user connected.\n (entries && entries.length > 1) &&\n this.state.isSingleUserEnabled &&\n this.currentSpeakerVideo = video}\n autoPlay={true}\n playsInline={true}\n />\n }\n {\n // We only want to render in multi user mode (with no audio detection) when we only have 1 user or we set it directly.\n (entries && entries.length) &&\n (!this.state.isSingleUserEnabled || entries.length === 1) &&\n entries.map(entry => {\n const [peerId,] = entry;\n\n return
;\n }\n\n private renderNoStreamDetected() {\n return {\n window.close()\n this.setState({ showNoMediaPopup: false, showErrorMessage: true });\n }\n }}\n okButton={{\n id: \"noStreamDetectedPopupOkButton\",\n variant: \"primary\",\n label: this.resources.clientApp.buttonLabel_continue,\n onClick: () => this.setState({ showNoMediaPopup: false }, this.tryStartConferenceAsync)\n }}\n >\n

{this.resources.clientApp.conference_noMediaPopup_noMediaDetectedMessage}

\n

{this.resources.clientApp.conference_noMediaPopup_doesUserWishToContinueMessage}

\n \n }\n\n private handleMultipleUserToggle() {\n this.setState(s => ({ ...s, isSingleUserEnabled: !s.isSingleUserEnabled }))\n }\n\n private handleFullscreenButtonClick() {\n if (window !== window.parent) {\n window.parent.postMessage(\"fullScreen\", \"*\")\n } else {\n if (!screenfull.isEnabled)\n return;\n\n if (this.state.isFullscreen)\n screenfull.exit();\n else\n screenfull.request();\n }\n\n this.setState({\n isFullscreen: !this.state.isFullscreen\n });\n }\n\n private handleCameraButtonClick() {\n\n this.setState({\n isCameraEnabled: !this.state.isCameraEnabled\n },\n () => this.localStream.then(localStream => {\n if (localStream === null)\n return;\n\n const tracks = localStream.getVideoTracks();\n\n if (!this.state.isCameraEnabled)\n tracks.forEach((track) => {\n track.enabled = false;\n });\n else\n tracks.forEach((track) => {\n track.enabled = true;\n });\n })\n );\n }\n\n private handleMicrophoneButtonClick() {\n this.setState({\n isMicrophoneEnabled: !this.state.isMicrophoneEnabled\n },\n () => this.localStream.then(localStream => {\n if (localStream === null)\n return;\n\n const tracks = localStream.getAudioTracks();\n\n if (!this.state.isMicrophoneEnabled) {\n tracks.forEach((track) => {\n track.enabled = false;\n });\n } else {\n tracks.forEach((track) => {\n track.enabled = true;\n });\n }\n })\n );\n }\n\n private async handleHangupButtonClickAsync() {\n if (window != window.parent)\n window.parent.postMessage(\"hangUp\", \"*\");\n\n this.props.clearSession();\n\n const stream = await this.localStream;\n if (stream)\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n\n this.hubConnection?.stop();\n\n if (this.peers) {\n Object.entries(this.peers).forEach((entry) => {\n let [peerId, peer] = entry;\n\n this.streams[peerId]?.forEach(stream => {\n stream.getTracks().forEach(t => t.stop());\n });\n delete this.streams[peerId];\n delete this.videos[peerId];\n delete this.voiceDetector[peerId];\n\n peer?.destroy();\n peer = null;\n });\n }\n\n this.peers = {};\n this.videos = {};\n this.streams = {};\n this.voiceDetector = {};\n\n window.close();\n }\n\n private handleFlipButtonClick() {\n this.setState(s => {\n return {\n cameraFacingMode: s.cameraFacingMode === \"environment\"\n ? \"user\"\n : \"environment\" as \"user\" | \"environment\"\n };\n },\n () => this.switchLocalCameraStreamAsync()\n );\n }\n\n private async tryStartConferenceAsync() {\n try {\n\n this.hubConnection = this.hubConnection || await this.startHubConnectionAsync();\n this.forceUpdate();\n\n } catch (error) {\n\n const message = typeof (error) !== \"undefined\" && error.message;\n\n log.error(`error ${message}`, error);\n\n this.setState({\n conferenceError: message || \"An error has occured.\"\n });\n }\n }\n\n private async detectDevicesAsync() {\n\n let getDevicesSuccess = (devices: MediaDeviceInfo[]) => {\n\n let amountOfCameras = 0;\n if (devices) {\n devices.forEach((x: MediaDeviceInfo) => {\n if (x.kind === \"videoinput\") {\n amountOfCameras++;\n }\n });\n }\n\n this.setState({\n amountOfCameras: amountOfCameras\n })\n };\n\n let getDevicesError = (error: Error) => {\n log.error(`Failed enumerating devices ${JSON.stringify(error)}`);\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: { facingMode: [\"user\", \"environment\"] } })\n\n await navigator.mediaDevices.enumerateDevices().then(getDevicesSuccess).catch(getDevicesError);\n\n return stream;\n }\n\n private getCameraStreamAsync(): Promise {\n const constraints: MediaStreamConstraints = {\n video: {\n facingMode: this.state.cameraFacingMode\n },\n audio: true\n }\n\n return navigator.mediaDevices.getUserMedia(constraints);\n }\n\n private initLocalStream(): Promise {\n //stop all active streams\n if (this.localStream) {\n log.warn(\"Stream already initialized!\");\n return this.localStream;\n }\n\n return this.detectDevicesAsync()\n .then(stream => {\n\n const audioTrack = stream.getAudioTracks()[0];\n const videoTrack = stream.getVideoTracks()[0];\n const localStream = new MediaStream(\n [\n audioTrack,\n videoTrack\n ]);\n\n this.setState({\n videoTrackLabel: videoTrack?.label,\n audioTrackLabel: audioTrack?.label\n })\n this.localVoiceDetector = new VoiceAudioDetector({\n source: this.audioContext?.createMediaStreamSource(localStream),\n voiceStartCallback: () => this.setState({ isLocalUserTalking: true }),\n voiceStopCallback: () => this.setState({ isLocalUserTalking: false }),\n });\n return localStream;\n })\n .catch(error => {\n log.error(`errorInitLocalCameraStream ${error?.message}`);\n\n this.setState({\n localStreamError: this.resources.clientApp.error_localMedia.replace(/{{hostname}}/gi, window.location.hostname)\n });\n\n return null;\n });\n }\n\n private async switchLocalCameraStreamAsync() {\n if (this.localStream === null)\n throw Error(\"Error in switchLocalCameraStreamAsync: localStream not found\")\n\n const localStream = await this.localStream;\n\n if (localStream === null)\n return;\n\n localStream.getVideoTracks().forEach(track => {\n track.stop();\n });\n\n const stream = await this.getCameraStreamAsync();\n if (stream === null)\n throw Error(\"Error in switchLocalCameraStreamAsync: CameraStream not found\")\n\n const oldVideoTrack = localStream.getVideoTracks()[0];\n const newVideoTrack = stream?.getVideoTracks()[0];\n\n if (!oldVideoTrack) {\n throw Error(\"Error in switchLocalCameraStreamAsync: oldVideoTrack not found\")\n }\n if (!newVideoTrack) {\n throw Error(\"Error in switchLocalCameraStreamAsync: newVideoTrack not found\")\n }\n Object.values(this.peers).forEach((peer) => {\n peer?.replaceTrack(oldVideoTrack, newVideoTrack, localStream);\n });\n\n localStream.removeTrack(oldVideoTrack);\n localStream.addTrack(newVideoTrack);\n\n this.setState({\n videoTrackLabel: newVideoTrack?.label\n })\n }\n\n private async startHubConnectionAsync(): Promise {\n const url = new URL(window.location.href);\n url.pathname = \"/signalr\";\n if (!url.searchParams.has(\"roomId\"))\n url.searchParams.append(\"roomId\", this.props.match.params.roomId);\n\n const hubConnection = new HubConnectionBuilder()\n .configureLogging(new DefaultLogger())\n .withUrl(url.href)\n .build();\n\n try {\n await hubConnection.start();\n }\n catch (error) {\n log.error(\"Hub connection error\", error);\n throw Error(\"Could not connect to hub.\");\n }\n\n const conference = this;\n\n hubConnection.on(\"ConnectionAccepted\", async (msg: string) => {\n\n const peerInfo = JSON.parse(msg) as PeerInfo;\n log.debug(`Message from SignalingHub : ConnectionAccepted. Local PeerId=${peerInfo.connectionId}`);\n this.setState({ localPeerId: peerInfo.connectionId });\n\n });\n\n hubConnection.on(\"NewUserArrived\", (msg: string) => {\n\n const peerInfo = JSON.parse(msg) as PeerInfo;\n log.debug(`Message from SignalingHub : NewUserArrived. Remote PeerId=${peerInfo.connectionId}`);\n\n conference.createPeerAsync(peerInfo.connectionId, true);\n });\n\n hubConnection.on(\"SendSignal\", (peerId: string, signal: SignalData) => {\n\n log.debug(`Message from SignalingHub : Signal from peer=${peerId}`);\n\n conference.createPeerAsync(peerId, false)\n .then(peer => peer && conference.signalPeer(peerId, peer, signal));\n });\n\n hubConnection.on(\"UserDisconnect\", async (peerId: string) => {\n\n log.debug(`Message from SignalingHub : Peer=${peerId} disconnected`);\n\n let peer = conference.peers[peerId];\n\n try {\n const stream = await this.localStream\n if (stream)\n peer?.removeStream(stream);\n } catch {\n // tried\n }\n\n peer?.removeAllListeners();\n peer?.end();\n peer?.destroy();\n peer = null;\n\n delete conference.peers[peerId];\n delete conference.videos[peerId];\n delete conference.streams[peerId];\n delete conference.voiceDetector[peerId];\n\n this.setState(s => ({\n ...s,\n currentPeerId: Object.keys(conference.peers).length ? Object.keys(conference.peers)[0] : \"\",\n isSingleUserEnabled: Object.keys(conference.peers).length <= 1 ? false : s.isSingleUserEnabled\n }));\n });\n\n // notify signaling hub that we are a new user\n await hubConnection.invoke(\"NewUser\");\n return hubConnection;\n }\n\n private attachPeerVideos() {\n if (this.state.isSingleUserEnabled && Object.keys(this.peers).length > 1) {\n if (!this.state.currentPeerId && !this.currentSpeakerVideo)\n return;\n\n this.streams[this.state.currentPeerId]?.forEach(async stream => {\n if (this.currentSpeakerVideo == null || (this.currentSpeakerVideo.srcObject && this.currentSpeakerVideo.srcObject === stream))\n return;\n\n log.debug(\"setting peer video stream\", this.state.currentPeerId, stream);\n Object.entries(this.peers)\n .map(entry => {\n const [peerId,] = entry;\n return this.streams[peerId]?.map(stream => stream.getAudioTracks());\n })\n .filter(x => !!x)\n .flat(2)\n .forEach(x => stream.addTrack(x));\n\n this.currentSpeakerVideo.setAttribute(\"data-peer-id\", this.state.currentPeerId);\n this.currentSpeakerVideo.srcObject = stream;\n\n await this.currentSpeakerVideo.play();\n });\n } else {\n Object.entries(this.peers).forEach(async (entry) => {\n const [peerId,] = entry;\n\n const video = this.videos[peerId];\n\n if (!video) return;\n\n this.streams[peerId]?.forEach(stream => {\n if (video.srcObject && video.srcObject === stream) return;\n\n log.debug(\"setting peer video stream\", peerId, stream);\n\n video.setAttribute(\"data-peer-id\", peerId);\n video.srcObject = stream;\n\n video.play();\n });\n });\n }\n\n }\n\n private getIceServersAsync(): Promise {\n if (this.getIceServersPromise && Date.now() < this.lastIceCredentialsFetch + 5000)\n return this.getIceServersPromise;\n\n log.debug('fetching ice servers');\n\n this.lastIceCredentialsFetch = Date.now();\n\n this.getIceServersPromise = fetch(\"/iceservers\")\n .then(response => {\n if (response.status === 200)\n return response.json();\n\n this.setState({\n conferenceError: \"An error has occured.\"\n });\n\n return null;\n })\n .then(body => body as ICEServers[])\n .catch(error => {\n const message = typeof (error) !== \"undefined\" && error.message;\n\n log.error(`error fetching ice servers ${message}`, error);\n\n this.setState({\n conferenceError: message || \"An error has occured.\"\n });\n\n return null;\n });\n\n\n return this.getIceServersPromise;\n }\n\n private async createPeerAsync(peerId: string, initiator: boolean): Promise {\n let peer = this.peers[peerId];\n if (peer)\n return peer;\n\n const iceServers = await this.getIceServersAsync();\n const stream = await this.localStream;\n\n peer = this.peers[peerId];\n if (peer)\n return peer;\n\n if (initiator)\n log.debug('INITIATOR PEER CREATION----');\n\n log.debug('ice servers:' + JSON.stringify(iceServers));\n\n peer = new SimplePeer({\n initiator: initiator,\n stream: stream ? stream : undefined,\n config: {\n iceServers: iceServers\n }\n });\n this.peers[peerId] = peer;\n\n const conference = this;\n peer.on(\"signal\",\n (signal: SignalData) => {\n\n if (signal.type === \"offer\")\n log.debug(`Message from peer=${peerId}: received offer signal\". type=${signal.type} sdp=${truncateString(signal.sdp.replace(/\\n/g, \" \"))}`);\n else\n log.debug(`Message from peer=${peerId}: received signal\". candidate=${JSON.stringify(signal.candidate)}`);\n\n if (!conference.hubConnection)\n throw Error(\"No Hub Connection\");\n\n conference.hubConnection.send(\"SendSignal\", JSON.stringify(signal), peerId);\n\n });\n\n peer.on(\"stream\",\n (peerStream: MediaStream) => {\n\n log.debug(`Message from peer=${peerId}: stream received`);\n\n const peerStreams = conference.streams[peerId];\n if (peerStreams)\n peerStreams.push(peerStream);\n else\n conference.streams[peerId] = [peerStream];\n\n if (this.voiceDetector[peerId]) {\n delete this.voiceDetector[peerId];\n }\n this.voiceDetector[peerId] = new VoiceAudioDetector({\n source: this.audioContext?.createMediaStreamSource(peerStream),\n voiceStartCallback: () => this.setState(s => ({ ...s, currentPeerId: s.isLocalUserTalking ? s.currentPeerId : peerId })),\n voiceStopCallback: () => { },\n });\n if (Object.keys(conference.streams).length === 1)\n conference.setState({ currentPeerId: peerId })\n else\n conference.forceUpdate();\n });\n\n peer.on(\"connect\",\n () => {\n\n log.debug(`Message from peer=${peerId}: connected`);\n conference.forceUpdate();\n });\n\n\n peer.on(\"error\",\n (e) => {\n log.debug(`Message from peer=${peerId}: error`, e);\n });\n\n if (Object.keys(this.peers).length === 1)\n // Set current peer id to first one that connects.\n this.setState({ currentPeerId: peerId })\n else\n this.forceUpdate();\n\n return peer;\n }\n\n private signalPeer(peerId: string, peer: Instance, data: any) {\n\n try {\n log.debug(`Sending direct signal message to peer=${peerId}.`);\n peer.signal(data);\n } catch (e) {\n\n log.error(\"signal error\", e);\n }\n }\n\n private renderDebugInfo() {\n if (window.location.hash !== \"#debug\") return null;\n\n const localInfo = this.state.localPeerId;\n\n return (\n
\n\n
\n Selected Camera Device: \n
\n
{this.state.videoTrackLabel}
\n\n
\n Selected Microphone Device: \n
\n
{this.state.audioTrackLabel}
\n\n
\n Local Peer Id: \n
\n
{localInfo}
\n
\n Remote Peer Ids: \n
\n {\n Object.keys(this.peers).map(peerId => {\n return
{peerId}
;\n })\n }\n
\n );\n }\n\n private configureRemoteLogging(roomId: string) {\n\n const rawJSONFormat = (log: any) => {\n return log;\n };\n\n const defaults = {\n url: `/logs/add?roomId=${roomId}`,\n method: 'POST',\n headers: {},\n token: '',\n onUnauthorized: (failedToken: any) => { log.error(`Authentication failed: ${failedToken}`); },\n timeout: 0,\n interval: 2000,\n level: 'debug',\n backoff: {\n multiplier: 2,\n jitter: 0.1,\n limit: 30000,\n },\n capacity: 500,\n stacktrace: {\n levels: ['trace', 'warn', 'error'],\n depth: 3,\n excess: 0,\n },\n timestamp: () => new Date().toISOString(),\n format: rawJSONFormat\n };\n\n remote.apply(log, defaults);\n }\n}\nConferenceRoom.contextType = LanguageContext;\n\n\nconst truncateString = (str: string, maxLength: number = 50) => {\n if (!str) return null;\n if (str.length <= maxLength) return str;\n return `${str.substring(0, maxLength)}...`;\n};\n\nexport default connect(\n (state: ApplicationState) => state.login,\n LoginStore.actionCreators\n)(ConferenceRoom as any);","import React from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport { RouteComponentProps } from \"react-router\";\nimport { connect } from \"react-redux\";\nimport * as _ from \"lodash\";\nimport { Layout } from \"./Layout\";\nimport { ApplicationState } from \"../store\";\nimport * as LoginStore from \"../store/Login\";\nimport * as RoomStore from \"../store/Room\";\nimport { ConferenceParams } from \"./ConferenceRoomRoute\";\nimport LanguageContext from \"./LanguageContext\";\nimport BaseReactComponent from \"./BaseReactComponent\";\n\n\ninterface LoginState {\n authCode: string;\n maskedAuthCode: string;\n authCodeValid?: boolean;\n acceptDisclaimer?: boolean;\n invalidCodes: string[];\n}\n\ntype LoginProps = {\n login: LoginStore.LoginState;\n room: RoomStore.RoomState;\n}\n & typeof LoginStore.actionCreators\n & RouteComponentProps;\n\n\nclass Login extends BaseReactComponent {\n constructor(props: LoginProps) {\n super(props);\n\n this.handleChange = this.handleChange.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n\n this.validateCode = _.debounce(this.validateCode.bind(this), 250);\n\n this.state = {\n authCode: \"\",\n maskedAuthCode: \"\",\n invalidCodes: []\n };\n }\n\n static isCodeValid(authCode: string, invalidCodes: string[]) {\n const code = authCode.split(\" \").join('');\n return !!code.match(/^\\d{6}$/) && !invalidCodes.includes(code)\n }\n\n static getDerivedStateFromProps(nextProps: LoginProps, prevState: LoginState) {\n if (nextProps.login.invalidCode) {\n const invalidCodes = [...prevState.invalidCodes, nextProps.login.invalidCode];\n\n return {\n invalidCodes: invalidCodes,\n authCodeValid: Login.isCodeValid(prevState.authCode, invalidCodes)\n };\n }\n\n return null;\n }\n\n validateCode() {\n this.setState(s => {\n return {\n authCodeValid: Login.isCodeValid(s.authCode, s.invalidCodes)\n };\n });\n }\n\n handleChange(event: React.ChangeEvent) {\n switch (event.target.name) {\n case \"authCode\":\n const authCode = (event.target.value as string)\n .split(/\\D/g)\n .join('');\n \n const maskedAuthCode = authCode.length > 3\n ? `${authCode.substr(0, 3)} ${authCode.substr(3, 3)}`\n : authCode;\n\n\n this.setState({\n authCode: authCode,\n maskedAuthCode: maskedAuthCode\n });\n\n this.validateCode();\n break;\n\n case \"acceptDisclaimer\":\n this.setState({\n acceptDisclaimer: event.target.checked\n });\n break;\n }\n }\n\n private handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (this.state.authCode)\n this.props.tryAuthenticate(\n this.props.match.params.roomId,\n this.state.authCode\n );\n }\n\n render() {\n return (\n \n {({ language }) => {\n const resources = this.resources;\n\n return (\n \n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n {this.state.authCodeValid === false &&\n {resources.clientApp.error_login}\n }\n \n
\n \n
\n \n
\n\n
\n \n
\n\n
\n
\n
\n );\n }\n }\n
\n );\n }\n}\n\nexport default connect(\n (state: ApplicationState) => {\n return {\n login: state.login,\n room: state.room\n };\n }, // Selects which state properties are merged into the component's props\n LoginStore.actionCreators // Selects which action creators are merged into the component's props\n)(Login as any);\n","import React from \"react\";\nimport { RouteComponentProps } from \"react-router\";\nimport { connect } from \"react-redux\";\n\nimport LanguageContext from \"./LanguageContext\";\n\nimport { getResources } from \"../modules/localization/Resources\";\n\nimport { ApplicationState } from \"../store/index\";\nimport * as LoginStore from \"../store/Login\";\nimport * as RoomStore from \"../store/Room\";\n\n\nimport ConferenceRoom from \"./ConferenceRoom\";\nimport Login from \"./Login\";\nimport Error from \"./Error\";\n\nexport interface ConferenceParams {\n roomId: string;\n}\n\ntype ConferenceRoomRouteProps = {\n login: LoginStore.LoginState;\n room: RoomStore.RoomState;\n } \n & typeof RoomStore.actionCreators\n & RouteComponentProps;\n\nclass ConferenceRoomRoute extends React.PureComponent {\n render() {\n return (\n \n {({ language }) => {\n const roomId = this.props.match.params.roomId;\n const resources = getResources(language);\n\n switch (this.props.room[this.props.match.params.roomId]?.state) {\n case undefined:\n this.props.tryGetRoom(roomId);\n\n return
;\n\n case \"pending\":\n return
;\n\n case \"notFound\":\n return ;\n\n case \"error\":\n return ;\n }\n\n if(!this.props.login)\n return ;\n\n if (this.props.login.authenticationResult !== \"success\") {\n return ;\n }\n\n const roleClaimName = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\";\n const roleClaims = this.props.login.userClaims && this.props.login.userClaims[roleClaimName];\n if(roleClaims && (roleClaims === \"clinicUser\" || roleClaims.includes(\"clinicUser\")))\n return ;\n\n const roomIdClaimName = \"http://schemas.medfarsolutions.com/2020/04/claims/telemedroomid\";\n const roomClaims = this.props.login.userClaims && this.props.login.userClaims[roomIdClaimName];\n\n if(roomClaims && (roomClaims === roomId || roomClaims.includes(roomId)))\n return ;\n\n return ;\n }\n }\n
\n );\n }\n}\n\nexport default connect(\n (state: ApplicationState) => {\n return {\n login: state.login,\n room: state.room\n };\n },\n RoomStore.actionCreators\n)(ConferenceRoomRoute as any);","import React from \"react\";\nimport { version } from \"../../package.json\";\n\nexport default function Version(props: React.DetailedHTMLProps, HTMLDivElement>) {\n return
{version}
;\n}","import React from \"react\";\nimport { Route, Switch, RouteComponentProps, Redirect } from \"react-router\";\nimport {History} from \"history\";\n\nimport ConferenceRoomRoute from \"./components/ConferenceRoomRoute\";\nimport LanguageContext from \"./components/LanguageContext\";\nimport Version from \"./components/Version\";\nimport Error from \"./components/Error\";\n\nimport { getResources } from \"./modules/localization/Resources\";\n\nimport \"./css/app.css\";\nimport \"./fonts/icons/foundation-icons/foundation-icons.css\";\n\ninterface AppProps {\n history: History\n}\n\nexport default class App extends React.Component{\n static displayName = App.name;\n\n state = {\n language: navigator.language,\n setLanguage: (language: string) => {\n const newPath = this.props.history.location.pathname.replace(`/${this.state.language}`, `/${language}`);\n\n this.setState({language});\n this.props.history.replace(newPath);\n }\n };\n\n constructor(props: AppProps) {\n super(props);\n\n this.handleLanguageRoute = this.handleLanguageRoute.bind(this);\n }\n\n componentWillMount() {\n const languageTagRegex = require(\"ietf-language-tag-regex\");\n const pathParts = this.props.history.location.pathname.split(\"/\");\n\n if(pathParts[1] && pathParts[1].toUpperCase() !== this.state.language.toUpperCase() && languageTagRegex().test(pathParts[1]))\n this.setState({\n language: pathParts[1]\n });\n }\n\n handleLanguageRoute(routeProps: RouteComponentProps<{ lang: string, [idx: number]: string }>) {\n return \n }\n\n render() {\n return (\n \n \n \n }/>\n \n \n \n \n );\n }\n}","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (!installingWorker) return;\n\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log(\"New content is available; please refresh.\");\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n }\n }\n };\n };\n })\n .catch(error => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n\n const responseContentType = (response.headers && response.headers.get(\"content-type\")) || \"\";\n\n // Ensure service worker exists, and that we really are getting a JS file.\n if (response.status === 404 || responseContentType.indexOf(\"javascript\") === -1) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import \"bootstrap/dist/css/bootstrap.css\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport { ConnectedRouter } from \"connected-react-router\";\nimport { createBrowserHistory } from \"history\";\nimport configureStore from \"./store/configureStore\";\nimport App from \"./App\";\nimport { unregister } from \"./registerServiceWorker\";\n\n// Create browser history to use in the Redux store\nconst baseUrl = document.getElementsByTagName(\"base\")[0].getAttribute(\"href\") as string;\nconst history = createBrowserHistory({ basename: baseUrl });\n\n// Get the application-wide store instance, prepopulating with state from the server where available.\nconst store = configureStore(history);\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\nunregister();","import { applyMiddleware, combineReducers, compose, createStore } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { connectRouter, routerMiddleware } from \"connected-react-router\";\nimport { History } from \"history\";\nimport { ApplicationState, reducers } from \"./\";\n\nexport default function configureStore(history: History, initialState?: ApplicationState) {\n const middleware = [\n thunk,\n routerMiddleware(history)\n ];\n\n const rootReducer = combineReducers({\n ...reducers,\n router: connectRouter(history)\n });\n\n const enhancers = [];\n const windowIfDefined = typeof window === 'undefined' ? null : window as any;\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\n }\n\n return createStore(\n rootReducer,\n initialState,\n compose(applyMiddleware(...middleware), ...enhancers)\n );\n}\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar signalr_1 = require(\"@aspnet/signalr\");\nvar log = require(\"loglevel\");\n/**\n * Default logger that bridges ILogger implementations with loglevel logging library\n * */\nvar DefaultLogger = /** @class */ (function () {\n function DefaultLogger() {\n }\n DefaultLogger.prototype.log = function (logLevel, message) {\n switch (logLevel) {\n case signalr_1.LogLevel.Critical:\n case signalr_1.LogLevel.Error:\n log.error(message);\n break;\n case signalr_1.LogLevel.Warning:\n log.warn(message);\n break;\n case signalr_1.LogLevel.Debug:\n log.debug(message);\n break;\n case signalr_1.LogLevel.Trace:\n log.trace(message);\n break;\n case signalr_1.LogLevel.None:\n case signalr_1.LogLevel.Information:\n log.info(message);\n break;\n }\n };\n return DefaultLogger;\n}());\nexports.DefaultLogger = DefaultLogger;\n//# sourceMappingURL=DefaultLogger.js.map"],"sourceRoot":""}