{"version":3,"sources":["helpers/constants.js","helpers/styles.js","reducers/queuedActionReducer.js","helpers/utils.js","reducers/playerReducer.js","reducers/mttUsersReducer.js","reducers/spectatorReducer.js","reducers/stateReducer.js","reducers/mttStateReducer.js","helpers/logger.js","reducers/game.js","actions/types.js","helpers/api.js","helpers/socket.js","actions/game.js","helpers/context.js","context/GameContext.js","hooks/useNext.js","hooks/useStateWithLocalStorage.js","context/BrowserContext.js","shared/FormElements/Button/KeyboardChar.js","shared/FormElements/Slider/index.js","shared/FormElements/Switch.js","shared/FormElements/Button/Base.js","shared/FormElements/Button/Icon.js","shared/FormElements/Button/PrimaryButton.js","shared/FormElements/Button/index.js","shared/FormElements/Input.js","components/Chat/utils.js","shared/Text/index.js","components/Chat/ChatTopBar.js","components/Chat/ChatMain.js","components/Chat/MouseEvents.js","components/Chat/ChatInput.js","components/Chat/index.js","shared/Overlay.js","shared/Modal/index.js","helpers/calculations.js","components/Modals/GameSettingsModal/GameSettingsChoice.js","components/Modals/GameSettingsModal/InfoOverlay.js","shared/BlindStructureScroll.js","components/Modals/GameSettingsModal/index.js","components/Modals/LandscapeSwitchModal/index.js","components/Modals/NewPlayerModal/index.js","components/Modals/SiteIntroModal/index.js","components/Modals/DisconnectedModal/index.js","components/Modals/NoInternetModal/index.js","components/Modals/DifferentLogInModal/index.js","components/Modals/FeedbackModal/options.js","components/Modals/FeedbackModal/index.js","components/Modals/FAQModal/QAs.js","components/Modals/FAQModal/index.js","shared/Card/CardBack.js","shared/Card/CardEmpty.js","shared/Card/suits/club.js","shared/Card/suits/diamond.js","shared/Card/suits/spade.js","shared/Card/suits/heart.js","shared/Card/sizes.js","shared/Card/index.js","components/Modals/HandRankingsModal/handsList.js","components/Modals/HandRankingsModal/index.js","shared/TabView.js","shared/FormElements/RadioButton.js","components/Modals/BrowserSettingsModal/shared.js","shared/CollapsibleNotice.js","components/Modals/BrowserSettingsModal/GameSettingsView.js","components/Modals/BrowserSettingsModal/UserPreferencesView.js","components/Modals/BrowserSettingsModal/index.js","components/Modals/BuyInModal/index.js","components/Modals/RaisePercentInfoModal/index.js","components/Modals/BlindStructureModal/index.js","shared/Notification.js","components/Modals/PatreonModal/index.js","components/Modals/MTTGameEndModal/index.js","components/Modals/MTTSettingsModal/index.js","components/Modals/MTTDistributeModal/index.js","components/Modals/MTTBrowserSettingsModal/index.js","components/VideoChat/options.js","components/VideoChat/index.js","components/FixedWidgets/Leaderboard/LeaderboardRow.js","shared/FormElements/CheckboxField.js","components/FixedWidgets/Leaderboard/index.js","shared/DropdownOptionsPicker.js","components/FixedWidgets/PlayerActionsDropdown/shared.js","components/FixedWidgets/PlayerActionsDropdown/PlayerActions.js","helpers/theme/dark.js","helpers/theme/index.js","helpers/theme/light.js","components/FixedWidgets/PlayerActionsDropdown/themePicker.js","components/FixedWidgets/PlayerActionsDropdown/SocialMedia.js","components/FixedWidgets/PlayerActionsDropdown/index.js","shared/Widget.js","components/FixedWidgets/BlindStructureWidget.js","shared/Widgets/FAQWidget.js","shared/Widgets/HandRankingsWidget.js","components/FixedWidgets/SettingsWidget.js","components/FixedWidgets/ShowCardsToGodButton.js","components/FixedWidgets/RandomSeatsButton.js","components/FixedWidgets/index.js","components/MTTLobbyWidgets/MTTSettingsWidget.js","components/MTTLobbyWidgets/index.js","components/MTTLobby/ActionButtons/StartMTTRoundAction.js","components/MTTLobby/ActionButtons/index.js","shared/Table/RefreshButton.js","shared/Image/Loading.js","shared/Table/index.js","components/MTTLobby/index.js","components/Global/AllAudio.js","shared/Modal/ModalNotifWrapper.js","components/Global/ModalConductor/notifications.js","components/Global/ModalConductor/index.js","components/Global/index.js","shared/Card/FlipCard.js","components/GameWindow/Table/CopyJoinLink.js","components/GameWindow/CentralPotView/index.js","components/GameWindow/Table/index.js","components/GameWindow/PlayersAndPots/player_styles.js","shared/ActionBar/index.js","components/GameWindow/PlayersAndPots/BuyInActionBar.js","components/GameWindow/PlayersAndPots/Player.js","components/GameWindow/PlayersAndPots/index.js","components/GameWindow/ActionButtons/MainPlayActions/RaiseView.js","components/GameWindow/ActionButtons/MainPlayActions/UnnecessaryFoldView.js","components/GameWindow/ActionButtons/shared.js","components/GameWindow/ActionButtons/MainPlayActions/index.js","helpers/config.js","components/GameWindow/ActionButtons/BuyInActions.js","components/GameWindow/ActionButtons/PreTurnActions/index.js","components/GameWindow/ActionButtons/PreTurnActions/options.js","components/GameWindow/ActionButtons/StartGameAction.js","components/GameWindow/ActionButtons/ShowHandAction.js","components/GameWindow/ActionButtons/index.js","components/GameWindow/index.js","components/App.js","index.js"],"names":["mobileBreakpoint","concat","mobileHeightBreakpoint","roles","blinds","timer","buyin","DEFAULT_AUTO_BUYIN_CENTS","sounds","actions","modals","stateReasons","logEventCategories","amplitudeEvents","tableActions","themes","THEME_LIGHT_DEFAULT","THEME_SALOON","THEME_DARK_DEFAULT","THEME_DARK_PURPLE","THEME_DARK_GREEN","THEME_DARK_BLUE_PINK","GlobalStyle","createGlobalStyle","_templateObject","_taggedTemplateLiteral","font","colors","styles","queuedActionReducer","state","action","stateUpdate","queuedAction","payload","reason","canUserCheck","maxPotCents","ownPotCents","actionType","betValue","clientPlayer","activePlayers","filter","player","playerName","username","isMyTurn","playerIsTurn","willExecuteQueuedAction","suitCharToWordMap","h","s","d","c","convertCardStringToValues","cardDisplay","number","suit","toLowerCase","copyTextToClipboard","text","navigator","clipboard","writeText","then","err","Promise","resolve","textArea","document","createElement","success","value","style","top","left","position","body","appendChild","focus","select","execCommand","removeChild","fallbackCopyTextToClipboard","generateCardHighlights","indices_to_highlight","card_list","map","card","i","isHighlighted","includes","refreshPage","window","location","reload","posFromClientPOV","actualPos","clientPos","maxPlayerNumber","isInvalidOrEmpty","val","isNaN","length","formatCurrency","amount","isInCents","toLocaleString","currency","playerReducer","players","newActivePlayers","newMaxPotCents","newStillInHand","newOwnPotCents","newStillInGame","newOwnStackCents","newBetsOnTableSumCents","newRequestedBuyIn","newPendingBuyIn","newIsGod","newShowCardsToGod","pos","newPlayer","name","playerRole","role","playerBalance","stack","playerPot","pot","playerIsInHand","is_in_hand","playerIsInGame","is_in_game","turn","connected","isAtTable","is_at_table","cards","hand_indices_to_highlight","bestHand","best_hand","queued_action","requestedBuyIn","requested_buy_in","pendingBuyIn","pending_buy_in","showingHand","is_showing_cards_publicly","isWinner","is_winner","isGod","is_god","showCardsToGod","showing_to_god","handsWon","hands_won","Math","max","push","stillInHand","stillInGame","ownStackCents","showBuyIn","betsOnTableSumCents","mttUsersReducer","users","mtt_users","newMTTUsers","console","log","newMTTUser","userName","userRole","userBalance","userPot","userIsInGame","MTTUsers","spectatorReducer","spectators","activeSpectators","stateReducer","_","newFaceUpHoleCards","faceUpHoleCards","community","x","toUpperCase","comm_indices_to_highlight","mainPotCents","minRaise","dealerPosition","timeout","turnNonce","ongoing","isGodModeEnabled","god","gameStartTime","startTime","paused","isTournament","autoBuyinCents","initialBlindCents","blindIncreaseMinutes","isTimerEnabled","timerLengthSeconds","mttStateReducer","startingStack","MTTOngoing","setLoggerIdentity","gameId","provider","identity","amplitude","Identify","set","getInstance","identify","Sentry","scope","setTag","setUser","logActionEvent","type","category","logEvent","ReactGA","event","message","data","level","Info","logCreateGameEvent","logJoinGameEvent","logState","Debug","logError","error","INITIAL_STATE","MTTId","display","sessionKey","allTimeBalance","chats","usernameToHandsWon","sidePotCents","smallBlindCents","bigBlindCents","mostRecentChatTimestamp","hasGamePassword","prefilledGamePassword","statesQueued","sessionLeaderboard","leaderboard","isRunningDelay","allowKeyboardShortCuts","handTimerLengthSeconds","isSpectating","totalBuyinCents","sessionReset","MTTPlayers","arguments","undefined","key","parseInt","hasMTTPassword","prefilledMTTPassword","disconnectedUserName","Object","assign","smallBlindCentsValue","isTimerEnabledValue","timerLengthSecondsValue","handTimerLengthSecondsValue","playerUpdate","queuedActionUpdate","mttUsersUpdate","spectatorUpdate","playerUserName","fields","api","axios","create","baseURL","process","checkAlive","reject","get","socketUrl","socket","initSocket","cb","queryParams","endsWith","slice","io","connect","path","reconnection","reconnectionDelay","reconnectionDelayMax","randomizationFactor","transports","emit","messageType","socketOff","off","socketIsConnected","setActionSuccess","on","forceDisconnect","close","emitSocketAction","game_id","connectEmitSocketMessage","extraData","emitSocketMessage","updateLeaderboard","dispatch","leaderboard_resp","sessionUsers","u","balance","updateDisplay","setUserVars","updateMTTState","updateIsRunningDelay","receiveChatMessage","chatObj","msg","joinGame","userPassword","gamePassword","params","user_password","game_password","response","catch","joinMTT","MTTPassword","mtt_id","spectateGame","updateGameStateFromSocket","oldState","newGameState","updateMTTStateFromSocket","newMTTState","createGame","async","preferredGameId","blindIncreaseSeconds","small_blind_amount","preferred_game_id","is_timer_enabled","timer_length_seconds","hand_timer_length_seconds","is_god_mode","is_tournament","auto_buyin_cents","blind_increase_seconds","is_in_cents","createMTT","mtt_password","starting_stack","getMTTPlayers","checkGameExists","iframeClientName","isIntermediateDisplay","exists","checkMTTExists","setUserDisconnected","setGameSettings","setPlayerState","setMTTUsersState","setSpectatorState","setPlayerFields","updateQueuedAction","executeQueuedAction","setTestFrontend","playerIsturn","0","1","2","3","4","connectActionCreators","bindActions","GameContext","createContext","GameProvider","_ref","children","useReducer","gameReducer","nextState","valueRef","useRef","resolvesRef","useEffect","current","useNext","React","Provider","GameConsumer","Consumer","useStateWithLocalStorageString","localStorageKey","fallBackDefault","setValue","useState","getLocalStorageItem","setLocalStorageItem","useStateWithLocalStorageBoolean","localStorage","getItem","e","setItem","BrowserContext","BrowserProvider","sound","setSound","theme","setTheme","showVideoChat","setShowVideoChat","videoIsOnRight","setVideoIsOnRight","isFourColorDeck","setIsFourColorDeck","betButtonsOnRight","setBetButtonsOnRight","isMobile","setIsMobile","allowKeyboardShortcuts","setAllowKeyboardShortcuts","showChat","setShowChat","audioToSoundMap","setAudioToSoundMap","joinCall","setJoinCall","currentModal","setCurrentModal","existsModal","setExistsModal","playSound","soundName","audio","play","playSoundDelay","delay","setTimeout","BrowserConsumer","charToKeyCodeMap","R","F","C","B","S","M","X","E","KeyboardCharContent","styled","div","_ref2","primary","_ref3","_ref4","keyboardChar","background","props","color","onClick","withTheme","char","onKeydown","onKeyUp","foregroundColor","ContextConsumer","useContext","addEventListener","handleKeydown","handleKeyup","removeEventListener","_matchesKey","keyCode","charFromProps","Fragment","foreground","InputWrapper","RangeWrapper","_templateObject2","InputRange","input","_templateObject3","disable","InputLineColor","_templateObject4","Slider","onChange","min","betFocus","potFocus","smallStepCents","bigStepCents","parseFloat","toFixed","increment","newVal","decrement","validatedValue","KeyboardChar","marginRight","step","list","cursor","width","marginLeft","SwitchButton","span","isOn","CheckboxLabel","label","switch","tertiary","handleToggle","dataTestId","className","htmlFor","data-testid","BaseButton","button","Button","fullWidth","PrimaryButton","disableShadow","isClicked","_ref5","pressed","IconInner","FontAwesomeIcon","widget","isLeft","disabled","rest","ButtonWrapper","PrimaryButtonFixed","Base","secondaryColor","secondary","PrimaryButtonShadow","KeyboardCharWrapper","id","isPressed","setPressed","flatShadow","ModalButton","modal","BackgroundButton","_templateObject5","SecondaryButton","_templateObject6","_ref6","firstInList","lastInList","BaseInput","InputText","mainBody","contrast","noBack","InputField","css","InputLabel","TextAreaInput","textarea","_templateObject7","CHAT_STATE","BaseHeaderText","align","themeable","BaseBodyText","LargeHeaderText","MediumHeaderText","SmallHeaderText","SmallBodyText","SmallHeaderTextEllipsis","MediumBodyText","_templateObject8","LargeBodyText","_templateObject9","HighlightedText","_templateObject10","textWithLoadingDots","_templateObject11","LoadingWrapper","_templateObject12","BoldText","_templateObject13","ChatTopBarWrapper","secondaryLighter","ChatHeaderText","UnreadNumber","big","GameMessageToggle","Checkbox","IconWrapper","ChatTopBar","toggleShowGameLog","showGameLog","chatState","setChatState","numUnreadMessages","isMTTLobby","target","classList","contains","Icon","icon","faCheckSquare","faSquare","marginTop","faTimes","linkDecorator","href","rel","ChatMessageContainer","ChatMessage","isGameMsg","chat","gameText","linkText","ChatMain","updateScroll","chatMessageContainerRef","isScrollBottom","setIsScrollBottom","scrollToBottom","scrollTop","scrollHeight","onScroll","clientHeight","ref","Linkify","componentDecorator","MouseEvents","focusElement","setChatIsFocused","onEscPress","handleDocumentClick","activeId","activeElement","chatIsFocused","which","SendMessageForm","form","divider","isFocused","SendMessageInput","MessageHelperText","placeholder","show","ChatInput","inputMessage","setInputMessage","chatInput","blur","onSubmit","preventDefault","autoComplete","fontWeight","ChatWrapper","expanded","collapsed","InnerChatWrapper","ChatButton","WhiteBack","Chat","_setChatState","setShowGameLog","setUpdateScroll","numReadMessages","setNumReadMessages","numReadPlayerMessages","setNumReadPlayerMessages","getPlayerChats","newState","faComment","MainOverlay","overlay","opacity","zIndex","transitionTimeSeconds","hide","removeScrollbars","OverlayWrapper","Tooltip","maxWidth","ListWrapper","ListBodyText","InfoIcon","ModalOuter","transitionOut","ModalWrapper","isLoading","ModalContent","CTABottom","CenterModal","margin","ModalWidthWrapper","HeaderWrapper","ModalTitle","ModalSubTitle","subtitle","cta","Modal","title","btnText","onBtnClick","btnTextAlt","onBtnAltClick","loading","onOverlayClick","ctaContent","isInvalid","dataTestAltId","fullWidthInput","scrollMiddle","actionDone","setActionDone","modalContainerRef","onCTAClick","func","promise","isDone","transitionTime","removeNumberCommas","str","replace","insertNumberCommas","charAt","split","reverse","join","match","ChoiceWrapper","BlindsWrapper","BigBlindsWrapper","SmallBlind","CentsSwitch","ChipsSwitch","GameSettingsChoice","setSmallBlindCents","setBigBlindCents","setIsInCents","toString","TournamentInfoOverlay","GodModeOverlay","blindCoefficients","StructureWrapper","ScrollWrapper","BlindsContainer","BlindWrapper","CurrentBlindWrapper","Arrow","BlindStructureScroll","showTitle","showCurrentBlinds","gameTimeSeconds","setGameTimeSeconds","round","Date","now","parsePixels","translate","substring","items","blind","idx","seconds","floor","scrollLeft","container","getElementById","transform","scrollRight","scrollWidth","offsetWidth","SettingsWrapper","SettingsText","SettingsLabel","SettingsSubText","BigBlindInputText","AccordionWrapper","Accordion","PasswordElement","disableCustomStyles","invalid","disablePadding","AutoBuyInInputText","GameSettingsModal","setBlindIncreaseMinutes","setIsTimerEnabled","setTimerLengthSeconds","setIsGodModeEnabled","setIsTournament","autoBuyInCents","setAutoBuyInCents","setGamePassword","setHandTimerLengthSeconds","autoBuyInFocus","setAutoBuyInFocus","autoBuyInCentsInt","onNumberInputChange","password","disableModalStyles","_cancelPopup","disableTitle","buttonTitle","onSaveButtonClick","_createGame","flexDirection","Switch","hidden","AccordionItem","dangerouslySetExpanded","flexWrap","OverlayTrigger","placement","float","AccordionItemPanel","onWheel","getAutoBuyInValue","autoBuyInDollarsFloat","onKeyPress","test","onFocus","onBlur","DEFAULT_BLIND_INCREASE_MINUTES","currentGameTimeSeconds","Wrapper","Label","LandscapeSwitchModal","isLandscape","setIsLandscape","overrideHide","setIsOverrideHide","checkDimensions","setScreenOrientation","height","innerWidth","innerHeight","FullWidthInput","InvalidIcon","is_user_password_field","MediaContainer","MediaIcon","NewPlayerModal","setUsername","prefilledUsername","setUserPassword","invalidGamePassword","setIsInvalidGamePassword","invalidUserPassword","setIsInvalidUserPassword","setIsLoading","handleGamePasswordChange","onJoinClick","_logIn","field","onSpectateClick","_spectateGame","gamePassField","spectateOnly","faTwitter","size","faPatreon","faPencilAlt","SiteIntroModal","continue","continueAlt","padding","numGames","DisconnectedModal","hasJoinedGame","innerText","NoInternetModal","wifiDisconnectText","DifferentLogInModal","optionsOrderedByRating","faFrownOpen","textResponse","faFrown","faMeh","faSmile","faSmileBeam","SmallLabel","FeedbackModalInner","FeedbackHeader","OptionPicker","Option","selected","index","HeartWrapper","HeartLabel","InputLine","FeedbackModal","rating","setRating","email","setEmail","textareaText","setTextareaText","betaInterest","setBetaInterest","isLoadingAfterSend","setIsLoadingAfterSend","startTransition","setStartTransition","submitFeedback","sendFeedback","feedbackText","FormData","append","post","headers","hideModal","rows","faHeart","Mersenne","AnswerWrapper","ShowHand","Philosophy","ContactUs","Patreon","faqList","question","answer","explanations","QuestionHeader","AccordionItemButton","FAQModal","accordionList","allowZeroExpanded","CardBackContent","LogoWrapper","CardBack","CardEmptyContent","CardEmpty","Club","xmlns","xmlnsXlink","y","viewBox","enableBackground","xmlSpace","fill","Diamond","version","points","Spade","fillRule","clipRule","Heart","sizes","lg","iconHeight","iconBottom","fontSize","md","sm","mobile","CardBase","isFolded","CardWrapper","handCardNumber","isFlat","border","cardHeight","mobileCardHeight","enforceCornerSuit","isEmpty","isBack","setColor","allSuits","dark","light","cardInner","getSuit","sizeObj","bottom","right","nameMap","Pair","Trips","Straight","Flush","Quads","handsList","HandRow","CardsRow","highlight","HandText","HandRankingsModal","playerHand","row","cardsList","j","Card","TabBar","TabItem","isActive","ActiveBar","InnerBar","TabView","tabNamesToViews","defaultView","onTabChange","currentView","setCurrentView","activeIndex","setActiveIndex","tabsList","keys","tabName","StyledDiv","StyledRadioLabel","StyledRadioGroup","RadioGroup","StyledRadio","Radio","SettingsOption","CancelIcon","uniqueId","setShow","GameSettingsView","smallBlindSettings","setSmallBlindSettings","isTimerEnabledSettings","setIsTimerEnabledSettings","timerLengthSecondsSettings","setTimerLengthSecondsSettings","isAdmin","handTimerLengthSecondsSettings","setHandTimerLengthSecondsSettings","useCentsSettings","setUseCentsSettings","adminPlayers","CollapsibleNotice","selectedValue","UserPreferencesView","BrowserSettingsModal","setBtnText","disableSave","setDisableSave","_setSmallBlindSettings","_setIsTimerEnabledSettings","_setTimerLengthSecondsSettings","_setHandTimerLengthSecondsSettings","_setUseCentsSettings","useCallback","newSmallBlindCentsSettings","newIsTimerEnabledSettings","newTimerLengthSecondsSettings","newHandTimerLengthSecondsSettings","newUseCentsSettings","Preferences","Settings","newTab","BuyInWrapper","Row","strong","LabelText","NumbersText","BuyInInput","BuyInModal","buyInDollars","setBuyInAmount","subtractDollars","setSubtractAmount","buyInInputElement","subtractInputElement","getTotalStackAmount","amountToAdd","sendSocketBuyIn","buyInNumber","subtractNumber","onBuyInKeypress","_isInvalidOrEmpty","_isInvalidOrEmptySubtract","FullWidthImage","img","RaisePercentInfoModal","src","alt","BlindStructureModal","NotificationWrapper","clickable","Notification","showNotification","notifShowDuration","notifDuration","onNotifEnd","PatreonModal","MTTGameEndModal","roundEndText","goToLobby","MTTSettingsModal","setStartingStack","setMTTPassword","startingStackFocus","setStartingStackFocus","startingStackInt","_createMTT","getStartingStackValue","startingStackDollarsFloat","MTTDistributeModal","MTTBrowserSettingsModal","optionsConfig","interfaceConfigOverwrite","SHOW_JITSI_WATERMARK","SHOW_WATERMARK_FOR_GUESTS","SHOW_CHROME_EXTENSION_BANNER","VERTICAL_FILMSTRIP","SETTINGS_SECTIONS","filmStripOnly","FILM_STRIP_MAX_HEIGHT","DEFAULT_BACKGROUND","JITSI_WATERMARK_LINK","MOBILE_APP_PROMO","DISABLE_FOCUS_INDICATOR","DISABLE_DOMINANT_SPEAKER_INDICATOR","DISPLAY_WELCOME_PAGE_CONTENT","TILE_VIEW_MAX_COLUMNS","DEFAULT_REMOTE_DISPLAY_NAME","DISABLE_VIDEO_BACKGROUND","VIDEO_QUALITY_LABEL_DISABLED","CONNECTION_INDICATOR_DISABLED","HIDE_KICK_BUTTON_FOR_GUESTS","HIDE_INVITE_MORE_HEADER","configOverwrite","enableNoisyMicDetection","enableTalkWhileMuted","enableNoAudioDetection","enableWelcomePage","prejoinPageEnabled","resolution","startWithVideoMuted","startWithAudioMuted","disableInviteFunctions","toolbarButtons","VideoChat","roomName","displayName","isOnRight","setLoading","tileViewEnabled","setTileViewEnabled","options","parentNode","jitsi","dispose","JitsiMeetExternalAPI","executeCommand","addListener","jitsiContainerWithLoading","VideochatLoadingWrapper","JitsiContainer","joinCallDisplay","JoinCallWrapper","faVideo","videoChatContainer","WidgetWrapper","WidgetText","VideoChatWrapper","visible","memo","profit","loss","totalBuyin","winAmount","sign","abs","RowElem","first","last","Container","rank","Rank","PlayerName","BuyIn","Winnings","CheckboxField","LeaderboardBody","LeaderboardBodyInner","LeaderboardTab","horizontalPadding","LeaderboardWrapper","LeaderboardHeaderText","LeaderboardHeader","PlayerTitle","BuyInTitle","_ref7","WinningsTitle","_ref8","TitlesWrapper","_ref9","MainRows","SessionResetWrapper","_templateObject14","_ref10","_templateObject15","_ref11","_templateObject16","SessionResetOverlay","Leaderboard","showLeaderboard","setShowLeaderboard","showAllTimePlayers","setShowAllTimePlayers","leaderboardUsers","setLeaderboardUsers","sessionResetClicked","setSessionResetClicked","user","faCrown","stopPropagation","LeaderboardRow","session_reset","DropDownList","OptionCircle","toggled","OptionLabel","OptionsCircleWrapper","DropDownOptionsPicker","initialExpanded","optionsList","includeOverlay","onCloseOverride","toggleInner","_setExpanded","setExpanded","faPlus","inner","showLabel","ThemeCircle","color1","color2","color3","dropdownPositioning","mobileDropdownPositioning","PlayerActions","isStanding","setShowThemePicker","setShowSocialMedia","numWinners","hasTurn","isLoadingStand","setIsLoadingStand","toggleAction","togglePause","buyIn","pauseNextHand","sitOut","faSpinner","faEdit","faDollarSign","faCoins","faPlay","faPause","faUndo","faSignInAlt","faSignOutAlt","feedback","faCommentAlt","changeTheme","socialMedia","faGift","actionsList","DropdownOptionsPicker","generateDarkTheme","heart","diamond","spade","club","table","outer","openSeat","borderColor","disabledBackground","borderHighlightedColor","themeColors","isDark","blue","darkBlue","red","darkGrey","lightGreen","green","gold","brown","lightGrey","purple","yellow","blueBlack","darkGreen","lightRed","pink","themesDict","forEach","themeName","swatch","generateSwatch","generatedTheme","generateLightTheme","defaultTheme","ThemePicker","themesList","faArrowLeft","link","SocialMedia","socialMediaList","obj","ActionsDropdown","showThemePicker","showSocialMedia","Widget","showNotif","setShowNotif","notification","BlindStructureWidget","showBlindStructureModal","_setShowBlindStructureModal","setShowBlindStructureModal","FAQWidget","showFAQModal","_setShowFAQModal","setShowFAQModal","faQuestionCircle","HandRankingsWidget","showModal","_setShowModal","setShowModal","add","logClickHandRankingEvent","SettingsWidget","showSettingsModal","_setShowSettingsModal","setShowSettingsModal","faCog","ShowCardsGodButtonPosition","borderTopLeftRadius","borderTopRightRadius","paddingTop","ShowCardsToGodButton","show_cards","faEyeSlash","faEye","RandomSeatButtonPosition","backgroundColor","RandomSeatsButton","adminPlayer","faRandom","FixedWidgets","PlayerActionsDropdown","textAlign","MTTSettingsWidget","MTTLobbyWidgets","StartMTTRoundWrapper","StartMTTRoundAction","clientRole","onStartRoundClick","startButton","ActionWrapper","ActionButtons","clientUser","actionButtons","Actions","RefreshOuter","refreshOnChange","disableTransition","disableButton","RefreshButton","refreshAction","setRefreshOnChange","setDisableTransition","setDisableButton","refresh","faSyncAlt","Loading","attributeType","attributeName","from","to","dur","repeatCount","TableOuter","TableWrapper","gradientColor","gradientScrollStyles","boxShadow","TableMain","TableHeader","thead","TableHeaderCell","th","TableBody","tbody","TableCell","td","italicize","TableRow","tr","EmptyText","Table","header","rowData","italicizeCols","emptyText","onRowClick","selectedRow","getRows","isMTTAdmin","item","colName","LobbyOuter","LobbyWrapper","MTTLobby","getPlayers","metadata","currentURL","AllAudio","audioInitialized","setAudioInitialized","_audioToSoundMap","callAudio","checkAudio","dingAudio","foldAudio","raiseAudio","winAudio","Audio","unlockAudio","volume","pause","currentTime","ModalNotifWrapper","modalConstant","setModal","cloneElement","showThankYou","feedbackNotif","faCheckCircle","ModalConductor","Online","Offline","Global","FullStory","org","namespace","Heap","appId","userId","userData","FlipCardInner","FlipCardOuter","isFaceUp","FlipCardInnerChild","FlipCardFront","FlipCardBack","FlipCard","setIsFaceUp","JoinLinkButton","CopyJoinLink","showSuccess","setShowSuccess","showFail","setShowFail","_showCopyResult","faCheck","faCopy","url","MainPot","potType","CentralPot","potHovered","setPotHovered","justSwitchedPot","setJustSwitchedPot","setPotType","potOptions","defaultPot","hoverText","caption","switchTo","totalPot","allPots","switchPot","onMouseEnter","onMouseLeave","PotWrapper","TableItems","CardsWrapper","playersAreInHand","emptyCards","Array","innerTable","cardObject","offsets","betOffsets","yTop","yCenterTop","yCenterBottom","yBottom","xCenterRight","xFarRight","xCenter","xCenterLeft","xFarLeft","playerStyles","playerPos","centralPotPos","msTransform","WebkitTransform","upperPotPos","lowerPotPos","playerBetPos","ActionBarContent","ActionBarItemLabel","ActionBarItem","ActionBarItemWrapper","ActionBar","handleMouseEnter","handleMouseLeave","actionBarPositioning","ActionBarToggleButton","BuyInActionBar","showActionBar","setShowActionBar","actionBarHoverTimeout","setActionBarHoverTimeout","isApproved","setApproveBuyIn","clearTimeout","faSync","faBan","PlayerWrapper","PlayerHeadingContent","cardHeightRaw","mobileCardHeightRaw","NameWrapper","MainContent","MainContentShadow","PlayerText","PlayerPot","DealerButton","RoleLabel","RoleButton","_ref12","AddMoney","_ref13","_ref14","NameText","Player","isClient","isInHand","isTurn","isDealer","posStyle","betPosStyle","nameLabel","faUserCog","faStar","TurnShadow","TurnShadowAnimated","ratio","OpenSeat","PlayersAndPots","winningPlayers","turnIndex","setTurnIndex","turnName","setTurnName","isAnimating","setIsAnimating","restartingAnimation","setRestartingAnimation","holeCardCount","setHoleCardCount","checkFoldTimeoutObject","setCheckFoldTimeoutObject","timeLeft","setTimeLeft","endsAt","setEndsAt","playersList","emptySeats","newTurnIndex","newHoleCardCount","winningPlayersExist","onAnimationEnd","setAutoCheckFoldEmit","cur_turn_username","turn_nonce","shouldResetTimer","remainingTime","find","Number","FullViewWrapper","RaiseOptionsWrapper","RightWrapper","TopRaiseViewOptions","BottomRaiseViewOptions","BetTextField","FlatBetTextField","InfoQuestionMark","RaiseView","betOnTableCents","minBetCents","minBetSliderCents","maxBetSliderCents","onBetClick","setShowRaiseView","callAmountCents","ownBetOnTableCents","betValueCents","setBetValueCents","isPreFlop","betInputElement","setBetFocus","setPotFocus","betValueCentsFloat","getPercentPot","betDollars","mainPotCentsFloat","betsOnTableSumCentsFloat","percentPot","betValueFromPercentPot","setBetFromPercentPot","newBet","raiseButtons","bigBlindCount","view","percent","potObj","getBetValue","betValueDollarsFloat","code","bet","marginBottom","InstructionsText","UnnecessaryFoldView","onFoldClick","setShowUnnecessaryFoldView","ActionButtonWrapper","MainPlayActions","minRaiseByCents","callAmount","showRaiseView","_setShowRaiseView","showUnnecessaryFoldView","canUserBet","otherPlayersHaveZeroBalance","allZeroBalance","canUserRaiseAllIn","cents","buyInConfig","BuyInTextField","BuyInActions","buyInValueDollars","setBuyInValueDollars","showInvalidBuyIn","setShowInvalidBuyIn","onBuyInClick","buyInCents","_getLowerBound","_getUpperBound","inDollars","selectedAction","queuedActions","hideIfUserCanCheck","showIfUserCanCheck","generateQueuedActions","StartGameWrapper","StartGameAction","adminName","restart","onStartGameClick","RightAlign","ShowHandTextWrapper","ShowHandTextWrapper2","ShowHandAction","hideContent","setHideContent","setSeconds","dummyEndsAt","onShowHandClick","showHandButton","newHandText","showHandText","numPlayersInGame","numValidPlayers","numRequestedBuyIns","numPlayersSittingIn","numPlayersConnected","patreonShown","setPatreonShown","GameWrapper","GameWindow","App","Component","constructor","_this","super","this","checkMobile","browserContext","context","_openNewGameDisplay","_openNewMTTDisplay","_getOverallStats","setState","numPlayers","_openSettingsDisplay","_joinGame","_response$error","_response$error$respo","_response$error$respo2","_response$error2","_response$error2$resp","_response$error2$resp2","autobuy","_initSocketListeners","_response$error3","_response$error3$resp","_response$error3$resp2","_response$error4","_response$error4$resp","_response$error4$resp2","_initSocketListenersSpectators","_joinMTT","_response$error5","_response$error5$resp","_response$error5$resp2","_response$error6","_response$error6$resp","_response$error6$resp2","_setChatRecieveSocket","_setGameStateSocket","_setUpdateLeaderboardSocket","_setSoundsSocket","_setBootInactiveSocket","_setDisconectSocket","_setDifferentLogInSocket","_setReconnectSocket","_setSettingsSocket","_setPlayerStateChangeSocket","_setSpectatorStateChangeSocket","_setOnPlayerFieldsChangeSocket","_setMTTGameEnd","_setMTTPlayers","_setOnMTTUsersStateSocket","_setMTTStateSocket","setBootInactive","disconnectedUser","chat_obj","result","setOnConnect","emitEnsureInRoom","is_spectator","pathname","history","search","small_blind","_parseQueryParams","queryString","parse","autojoin","spectate","decodeURI","componentWillUnmount","clearInterval","prevState","onreadystatechange","readyState","init","initialize","pageview","render","currentOverlay","_spectateMTT","connectEmitSocketAction","ThemeProvider","reverseOrder","CentralLayout","setConfig","reloadHooks","dsn","environment","ReactDOM","Router","classnames","Route","exact"],"mappings":"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e,CAC1BC,UAAW,CACT,EAAK,CACHt6C,KAAM05C,GACN35C,IAAK25C,IAEP,EAAK,CACH15C,KAAM05C,GACN35C,IAAK25C,IAEP,EAAK,CACH15C,KAAM05C,GACN35C,IAAK25C,IAEP,EAAK,CACH15C,KAAM05C,GACN35C,IAAK25C,IAEP,EAAK,CACH15C,KAAM,MACND,IAAK25C,IAEP,EAAK,CACH15C,KAAM05C,GACN35C,IAAK25C,IAEP,EAAK,CACH15C,KAAM05C,GACN35C,IAAK25C,IAEP,EAAK,CACH15C,KAAM05C,GACN35C,IAAK25C,IAEP,EAAK,CACH15C,KAAM05C,GACN35C,IAAK25C,KAGTa,cAAe,CACbv6C,KAAM,MACND,IAAK,QACLusB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnBC,YAAa,CACX16C,KAAM,MACND,IAAK,QACLusB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnBE,YAAa,CACX36C,KAAM,MACND,IAAK,QACLusB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnBG,aAAc,CACZ,EAAK,CACH56C,KAAM25C,GAAWK,aACjBj6C,IAAK45C,GAAWC,KAChBttB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnB,EAAK,CACHz6C,KAAM25C,GAAWM,UACjBl6C,IAAK45C,GAAWE,WAChBvtB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnB,EAAK,CACHz6C,KAAM25C,GAAWM,UACjB7gB,OAAQugB,GAAWG,cACnBxtB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnB,EAAK,CACHz6C,KAAM25C,GAAWK,aACjBj6C,IAAK45C,GAAWI,QAChBztB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnB,EAAK,CACHz6C,KAAM25C,GAAWO,QACjBn6C,IAAK45C,GAAWI,QAChBztB,UAAW,wBACXkuB,YAAa,wBACbC,gBAAiB,yBAEnB,EAAK,CACHz6C,KAAM25C,GAAWQ,YACjBp6C,IAAK45C,GAAWI,QAChBztB,UAAW,wBAC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","file":"static/js/main.5d7560c5.chunk.js","sourcesContent":["// most mobile phones\nconst mobileBreakpointRaw = 840;\nconst mobileBreakpoint = `${mobileBreakpointRaw}px`;\nconst mobileHeightBreakpointRaw = 500;\nconst mobileHeightBreakpoint = `${mobileHeightBreakpointRaw}px`;\n\n// older phones e.g. iPhone 5 / SE\nconst mobileBreakpointSmRaw = 600;\nconst mobileBreakpointSm = `${mobileBreakpointSmRaw}px`;\n\nconst mobileScreenMargin = \"15px\";\n\nconst roles = {\n ROLE_ADMIN: \"ROLE_ADMIN\",\n ROLE_PLAYER: \"ROLE_PLAYER\",\n ROLE_SPECTATOR: \"ROLE_SPECTATOR\",\n ROLE_MTT_ADMIN: \"ROLE_MTT_ADMIN\",\n};\n\nconst blinds = {\n DEFAULT_SMALL_BLIND_CENTS: 5,\n DEFAULT_BIG_BLIND_CENTS: 10,\n DEFAULT_BLIND_INCREASE_MINUTES: 10,\n};\n\n// Peers is for all non-current turn people to go (in case current disconnects), self is for self.\n// The difference should encapsulate the max difference between differnt clients both playing lipoker\nconst timer = {\n DEFAULT_TIMER_SECONDS: 30,\n FAST_HAND_TIMER_SECONDS: 2,\n MEDIUM_HAND_TIMER_SECONDS: 8,\n SLOW_HAND_TIMER_SECONDS: 14,\n TIMER_END_GRACE_PERIOD_PEERS_SECONDS: 5,\n TIMER_END_GRACE_PERIOD_SELF_SECONDS: 1,\n INITIAL_TIME_MILLISECONDS: 1585638535452,\n};\n\nconst buyin = {\n DEFAULT_AUTO_BUYIN_CENTS: 1000,\n};\n\nconst sounds = {\n CALL: \"CALL\",\n CHECK: \"CHECK\",\n DING: \"DING\",\n FOLD: \"FOLD\",\n RAISE: \"RAISE\",\n WIN: \"WIN\",\n};\n\nconst actions = {\n CHECKFOLD: \"CHECK/FOLD\",\n CHECK: \"CHECK\",\n FOLD: \"FOLD\",\n CALL: \"CALL\",\n RAISE: \"RAISE\",\n SHOW_HAND: \"SHOW_HAND\",\n};\n\n// TODO add all modal types here\nconst modals = {\n BUY_IN: \"BUY_IN\",\n FEEDBACK: \"FEEDBACK\",\n RAISE_INFO: \"RAISE_INFO\",\n DISCONNECTED_SERVER_IN_GAME: \"DISCONNECTED_SERVER_IN_GAME\",\n DISCONNECTED_SERVER_NOT_IN_GAME: \"DISCONNECTED_SERVER_NOT_IN_GAME\",\n DIFFERENT_LOG_IN: \"DIFFERENT_LOG_IN\",\n PATREON: \"PATREON\",\n};\n\nconst stateReasons = {\n REASON_ACTION: \"REASON_ACTION\",\n REASON_DEAL: \"REASON_DEAL\",\n REASON_FLOP: \"REASON_FLOP\",\n REASON_NEW_HAND: \"REASON_NEW_HAND\",\n REASON_SHOWDOWN: \"REASON_SHOWDOWN\",\n};\n\nconst logEventCategories = {\n IN_GAME_ACTION: \"in-game-action\",\n PRE_GAME_ACTION: \"pre-game-action\",\n STATE_UPDATE: \"state-update\",\n};\n\nconst amplitudeEvents = {\n ACTION: \"action\",\n CREATE_GAME: \"Create Game\",\n JOIN_GAME: \"Join Game\",\n CLICK_HAND_RANKING: \"click hand ranking\",\n};\n\nconst tableActions = {\n ACTION_NONE: \"ACTION_NONE\",\n ACTION_SIT: \"ACTION_SIT\",\n ACTION_STAND: \"ACTION_STAND\",\n};\n\nconst themes = {\n THEME_LIGHT_DEFAULT: \"THEME_LIGHT_DEFAULT\",\n THEME_SALOON: \"THEME_SALOON\",\n THEME_DARK_DEFAULT: \"THEME_DARK_DEFAULT\",\n THEME_DARK_PURPLE: \"THEME_DARK_PURPLE\",\n THEME_DARK_GREEN: \"THEME_DARK_GREEN\",\n THEME_DARK_BLUE_PINK: \"THEME_DARK_BLUE_PINK\",\n};\n\nexport {\n mobileBreakpoint,\n mobileBreakpointRaw,\n mobileScreenMargin,\n mobileBreakpointSm,\n mobileBreakpointSmRaw,\n mobileHeightBreakpointRaw,\n mobileHeightBreakpoint,\n roles,\n sounds,\n actions,\n stateReasons,\n logEventCategories,\n amplitudeEvents,\n tableActions,\n modals,\n themes,\n blinds,\n timer,\n buyin,\n};\n","import { createGlobalStyle, css } from \"styled-components\";\n\nconst GlobalStyle = createGlobalStyle`\n @import url('https://fonts.googleapis.com/css?family=Roboto|Bebas+Neue');\n`;\n\nconst font = {\n header: \"Bebas Neue, sans-serif\",\n body: \"Rambla, sans-serif\",\n};\n\nconst colors = {\n red: \"#fd5855\",\n lightRed: `#E04000`,\n darkRed: \"#a01000\",\n white: \"#FFFFFF\",\n black: \"#000000\",\n lightGrey: \"#f0f0f0\",\n lightGrey2: \"#dedede\",\n grey: \"#c4c4c4\",\n mediumGrey: \"#888888\",\n darkGrey: \"#333\",\n darkGrey2: \"#9a9a9a\",\n green: \"#17c58f\",\n blue: \"#509ebc\",\n darkBlue: \"#40465a\",\n darkBlueLighter: \"#4e566d\",\n lightBlue: \"#67cff7\",\n};\n\nconst styles = {\n boxShadow: \"0 4px 6px 0px #bdbdbdbf\",\n boxShadowHighlight: `0 0 4px 4px ${colors.red}`,\n boxShadowHighlight2: `0 0 4px 4px ${colors.grey}`,\n largeBoxShadow: \"0 0 20px 0px rgba(0, 0, 0, 0.08)\",\n largeBoxShadowDark: \"0 0 20px 0px rgba(0, 0, 0, 0.2)\",\n};\n\nconst gradientScrollStyles = (gradientColor, backgroundColor) => {\n return css`\n background:\n /* Shadow covers */ linear-gradient(\n 180deg ${backgroundColor} rgba(0, 0, 0, 0)\n ),\n linear-gradient(0deg ${backgroundColor} rgba(0, 0, 0, 0)) 0 100%,\n /* Shadows */ linear-gradient(180deg ${gradientColor} rgba(0, 0, 0, 0)),\n linear-gradient(0deg ${gradientColor} rgba(0, 0, 0, 0)) 0 100%;\n background:\n /* Shadow covers */ linear-gradient(\n 180deg ${backgroundColor} rgba(0, 0, 0, 0)\n ),\n linear-gradient(0deg ${backgroundColor} rgba(0, 0, 0, 0)) 0 100%,\n /* Shadows */ linear-gradient(180deg ${gradientColor} rgba(0, 0, 0, 0)),\n linear-gradient(0deg ${gradientColor} rgba(0, 0, 0, 0)) 0 100%;\n background-repeat: no-repeat;\n background-size: 100% 60px, 100% 60px, 100% 30px, 100% 30px;\n /* Opera doesn't support this in the shorthand */\n background-attachment: local, local, scroll, scroll;\n `;\n};\n\nexport { GlobalStyle, font, styles, colors, gradientScrollStyles };\n","import { actions, stateReasons } from \"../helpers/constants\";\n\nexport const queuedActionReducer = (state, action, stateUpdate) => {\n let queuedAction = state.queuedAction;\n\n // reset queued action on a new round/hand\n if (\n action.payload.reason === stateReasons.REASON_NEW_HAND ||\n action.payload.reason === stateReasons.REASON_DEAL ||\n action.payload.reason === stateReasons.REASON_FLOP\n )\n queuedAction = null;\n\n // potentially modify the queued action depending on the latest bets\n if (queuedAction) {\n // if the user can't check anymore, then remove the queued action\n const canUserCheck = !(\n stateUpdate.maxPotCents &&\n stateUpdate.ownPotCents < stateUpdate.maxPotCents\n );\n if (queuedAction.actionType === actions.CHECK && !canUserCheck) {\n queuedAction = null;\n } else if (queuedAction.actionType === actions.CHECKFOLD && !canUserCheck) {\n queuedAction = {\n actionType: actions.FOLD,\n betValue: -1,\n };\n }\n // if the user was set to call a specific amount, but can't anymore, remove the queued action\n else if (\n queuedAction.actionType === actions.CALL &&\n queuedAction.betValue !== -1\n ) {\n const canUserCallSpecifiedAmount =\n stateUpdate.maxPotCents - stateUpdate.ownPotCents ===\n queuedAction.betValue;\n\n if (!canUserCallSpecifiedAmount) {\n queuedAction = null;\n }\n }\n }\n const clientPlayer = stateUpdate.activePlayers.filter(\n (player) => player.playerName === state.username\n )[0];\n const isMyTurn = clientPlayer ? clientPlayer.playerIsTurn : false;\n return {\n queuedAction,\n\n // It is guaranteed at this point that if the queued action still exists, it will execute if it's the user's turn\n // So we track this in a state variable willExecuteQueuedAction\n willExecuteQueuedAction: queuedAction !== null && isMyTurn,\n };\n};\n","/**\n *\n * @param {str} cardDisplay e.g. '2h'\n */\nconst suitCharToWordMap = {\n h: \"heart\",\n s: \"spade\",\n d: \"diamond\",\n c: \"club\",\n};\nconst convertCardStringToValues = (cardDisplay) => {\n const number = cardDisplay[0] === \"T\" ? \"10\" : cardDisplay[0];\n const suit = suitCharToWordMap[cardDisplay[1].toLowerCase()];\n return { number, suit };\n};\n\nconst fallbackCopyTextToClipboard = (text) => {\n var textArea = document.createElement(\"textarea\");\n textArea.value = text;\n\n // Avoid scrolling to bottom\n textArea.style.top = \"0\";\n textArea.style.left = \"0\";\n textArea.style.position = \"fixed\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n let success;\n try {\n success = document.execCommand(\"copy\");\n } catch (err) {\n success = false;\n }\n\n document.body.removeChild(textArea);\n return success;\n};\nconst copyTextToClipboard = (text) => {\n if (!navigator.clipboard) {\n return Promise.resolve(fallbackCopyTextToClipboard(text));\n }\n return navigator.clipboard.writeText(text).then(\n () => {\n return true;\n },\n (err) => {\n return false;\n }\n );\n};\n\nconst generateCardHighlights = (indices_to_highlight, card_list) => {\n if (!card_list) {\n return null;\n }\n return card_list.map((card, i) => {\n return {\n card: card,\n isHighlighted: indices_to_highlight && indices_to_highlight.includes(i),\n };\n });\n};\n\nconst refreshPage = () => {\n window.location.reload();\n};\n\n/**\n *\n * @param {*} actualPos: Player X's position\n * @param {*} clientPos: Client's position\n * @param {*} maxPlayerNumber: # of seats; 9 (by default)\n * @returns position that player X is displayed in, if Client is displayed in seat 4 (at bottom)\n */\nconst posFromClientPOV = (actualPos, clientPos, maxPlayerNumber) => {\n return (\n (actualPos - clientPos + (maxPlayerNumber - 1) / 2 + maxPlayerNumber) %\n maxPlayerNumber\n );\n};\n\nconst isInvalidOrEmpty = (val) => {\n return (\n isNaN(val) ||\n val.includes(\".\") ||\n val.includes(\"-\") ||\n val.includes(\" \") ||\n val.length > 10\n );\n};\n\nconst formatCurrency = (amount, isInCents) => {\n return isInCents\n ? (amount / 100).toLocaleString(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n })\n : amount;\n};\n\nexport {\n convertCardStringToValues,\n copyTextToClipboard,\n generateCardHighlights,\n refreshPage,\n posFromClientPOV,\n isInvalidOrEmpty,\n formatCurrency,\n};\n","import { generateCardHighlights } from \"../helpers/utils\";\n\nexport const playerReducer = (state, action) => {\n const players = action.payload.players;\n let newActivePlayers = [];\n let newMaxPotCents = 0;\n let newStillInHand = false;\n let newOwnPotCents = state.ownPotCents;\n let newStillInGame = false;\n let newOwnStackCents = 0;\n let newBetsOnTableSumCents = 0;\n let newRequestedBuyIn = false;\n let newPendingBuyIn = false;\n let newIsGod = false;\n let newShowCardsToGod = false;\n for (let pos in players) {\n let newPlayer = {\n playerName: players[pos].name,\n playerRole: players[pos].role,\n playerBalance: players[pos].stack,\n playerPot: players[pos].pot,\n playerIsInHand: players[pos].is_in_hand,\n playerIsInGame: players[pos].is_in_game,\n playerIsTurn: players[pos].turn,\n connected: players[pos].connected,\n isAtTable: players[pos].is_at_table,\n cards: generateCardHighlights(\n players[pos].hand_indices_to_highlight,\n players[pos].cards\n ),\n bestHand: players[pos].best_hand,\n pos: players[pos].pos,\n queuedAction: players[pos].queued_action,\n requestedBuyIn: players[pos].requested_buy_in,\n pendingBuyIn: players[pos].pending_buy_in,\n showingHand: players[pos].is_showing_cards_publicly,\n isWinner: players[pos].is_winner,\n isGod: players[pos].is_god,\n showCardsToGod: players[pos].showing_to_god,\n handsWon: players[pos].hands_won,\n };\n newMaxPotCents = Math.max(newMaxPotCents, players[pos].pot);\n newBetsOnTableSumCents += players[pos].pot;\n if (players[pos].name === state.username && players[pos].is_in_hand) {\n newStillInHand = true;\n newOwnPotCents = players[pos].pot;\n }\n // if is client player\n if (players[pos].name === state.username) {\n newOwnStackCents = players[pos].stack;\n if (players[pos].is_in_game) {\n newStillInGame = true;\n }\n newRequestedBuyIn = newPlayer.requestedBuyIn > 0 ? true : false;\n newPendingBuyIn = newPlayer.pendingBuyIn > 0 ? true : false;\n newIsGod = players[pos].is_god;\n newShowCardsToGod = players[pos].showing_to_god;\n }\n newActivePlayers.push(newPlayer);\n }\n return {\n activePlayers: newActivePlayers,\n maxPotCents: newMaxPotCents,\n stillInHand: newStillInHand,\n stillInGame: newStillInGame,\n ownStackCents: newOwnStackCents,\n ownPotCents: newOwnPotCents,\n showBuyIn:\n !newStillInHand &&\n !newRequestedBuyIn &&\n !newPendingBuyIn &&\n (newOwnStackCents === 0 || !newOwnStackCents),\n betsOnTableSumCents: newBetsOnTableSumCents,\n isGod: newIsGod,\n showCardsToGod: newShowCardsToGod,\n };\n};\n","import { generateCardHighlights } from \"../helpers/utils\";\n\nexport const mttUsersReducer = (state, action) => {\n const users = action.payload.mtt_users;\n let newMTTUsers = [];\n console.log(action);\n for (let pos in users) {\n let newMTTUser = {\n userName: users[pos].name,\n userRole: users[pos].role,\n userBalance: users[pos].stack,\n userPot: users[pos].pot,\n userIsInGame: users[pos].is_in_game,\n connected: users[pos].connected,\n isAtTable: users[pos].is_at_table,\n };\n newMTTUsers.push(newMTTUser);\n }\n return {\n MTTUsers: newMTTUsers,\n };\n};\n","export const spectatorReducer = (state, action) => {\n const spectators = action.payload.spectators;\n let newActiveSpectators = [];\n let newIsGod = false;\n for (let pos in spectators) {\n let newSpectator = {\n playerName: spectators[pos].name,\n connected: spectators[pos].connected,\n };\n // if is client spectator\n // if (spectators[pos].name === state.username) {\n // newIsGod = spectators[pos].is_god;\n // }\n // newActiveSpectators.push(newSpectator);\n // console.log(newActiveSpectators);\n }\n return {\n activeSpectators: newActiveSpectators,\n isGod: newIsGod,\n };\n};\n","import { generateCardHighlights } from \"../helpers/utils\";\nexport const stateReducer = (_, action) => {\n let newFaceUpHoleCards;\n if (\"community\" in action.payload) {\n const faceUpHoleCards = action.payload.community.map((x) =>\n x.toUpperCase()\n );\n newFaceUpHoleCards = generateCardHighlights(\n action.payload.comm_indices_to_highlight,\n faceUpHoleCards\n );\n } else {\n newFaceUpHoleCards = {};\n }\n return {\n faceUpHoleCards: newFaceUpHoleCards,\n mainPotCents: \"pot\" in action.payload ? action.payload.pot : 0,\n minRaise: action.payload.minRaise,\n dealerPosition: action.payload.dealerPosition,\n timeout: action.payload.timeout,\n reason: action.payload.reason,\n turnNonce: action.payload.turnNonce,\n ongoing: action.payload.ongoing,\n isGodModeEnabled: action.payload.isGodModeEnabled,\n god: action.payload.god,\n gameStartTime: action.payload.startTime,\n paused: action.payload.paused ? action.payload.paused : false,\n isInCents: action.payload.isInCents,\n isTournament: action.payload.isTournament,\n autoBuyinCents: action.payload.autoBuyinCents,\n initialBlindCents: action.payload.initialBlindCents,\n blindIncreaseMinutes: action.payload.blindIncreaseMinutes,\n isTimerEnabled: action.payload.isTimerEnabled,\n timerLengthSeconds: action.payload.timerLengthSeconds,\n };\n};\n","export const mttStateReducer = (_, action) => {\n return {\n timeout: action.payload.timeout,\n reason: action.payload.reason,\n isInCents: action.payload.isInCents,\n startingStack: action.payload.startingStack,\n initialBlindCents: action.payload.initialBlindCents,\n blindIncreaseMinutes: action.payload.blindIncreaseMinutes,\n MTTOngoing: action.payload.MTTOngoing,\n };\n};\n","/* Log Events and Metrics \n Can easily be extended to add more services\n*/\nimport amplitude from \"amplitude-js\";\nimport ReactGA from \"react-ga\";\nimport * as Sentry from \"@sentry/browser\";\nimport { logEventCategories, amplitudeEvents } from \"./constants\";\n\nexport function initLogger() {\n amplitude.getInstance().init(process.env.REACT_APP_AMPLITUDE_API_KEY);\n ReactGA.initialize(\"UA-163804685-1\");\n ReactGA.pageview(window.location.pathname + window.location.search);\n}\n\nexport function setLoggerIdentity(username, gameId, provider) {\n const identity = new amplitude.Identify()\n .set(\"gameId\", gameId)\n .set(\"username\", username)\n .set(\"numClickShowHands\", 0)\n .set(\"provider\", provider);\n\n amplitude.getInstance().identify(identity);\n\n Sentry.configureScope(function (scope) {\n scope.setTag(\"gameId\", gameId);\n scope.setUser({\n username: username,\n });\n });\n}\n\n// takes a type and value\nexport function logActionEvent(type, value) {\n const category = logEventCategories.IN_GAME_ACTION;\n amplitude.getInstance().logEvent(amplitudeEvents.ACTION, {\n type,\n value,\n });\n\n ReactGA.event({\n category,\n action: type,\n value: value,\n });\n\n Sentry.addBreadcrumb({\n category,\n message: `${type} ${value}`,\n data: {\n action: type,\n value: value,\n },\n level: Sentry.Severity.Info,\n });\n}\n\nexport function logCreateGameEvent() {\n const action = amplitudeEvents.CREATE_GAME;\n amplitude.getInstance().logEvent(action);\n const category = logEventCategories.PRE_GAME_ACTION;\n\n ReactGA.event({\n category,\n action,\n });\n\n Sentry.addBreadcrumb({\n category,\n message: action,\n level: Sentry.Severity.Info,\n });\n}\n\nexport function logJoinGameEvent() {\n const category = logEventCategories.PRE_GAME_ACTION;\n const action = amplitudeEvents.JOIN_GAME;\n amplitude.getInstance().logEvent(action);\n\n ReactGA.event({\n category,\n action,\n });\n\n Sentry.addBreadcrumb({\n category,\n message: action,\n level: Sentry.Severity.Info,\n });\n}\n\nexport function logClickHandRankingEvent() {\n const action = amplitudeEvents.CLICK_HAND_RANKING;\n const identity = new amplitude.Identify().add(\"numClickShowHands\", 1);\n amplitude.getInstance().identify(identity);\n amplitude.getInstance().logEvent(action);\n}\n\nexport function logState(state) {\n Sentry.addBreadcrumb({\n category: logEventCategories.STATE_UPDATE,\n message: \"State Update\",\n level: Sentry.Severity.Debug,\n data: state,\n });\n}\n\nexport function initSentry() {\n Sentry.init({\n dsn: process.env.REACT_APP_SENTRY_API_KEY,\n environment: process.env.NODE_ENV,\n });\n}\n\nexport function logError(error) {\n Sentry.captureException(error);\n}\n","import {\n LEADERBOARD,\n DISPLAY,\n JOIN_GAME,\n SPECTATE_GAME,\n GAME_STATE_CHANGE,\n MTT_STATE_CHANGE,\n RECEIVE_CHAT,\n IS_RUNNING_DELAY,\n CREATE_GAME,\n CREATE_MTT,\n CHECK_GAME_EXISTS,\n SET_USER_DISCONNECTED,\n SET_GAME_SETTINGS,\n SET_PLAYERS,\n SET_SPECTATORS,\n QUEUED_ACTION,\n UPDATE_PLAYER_FIELDS,\n GET_MTT_PLAYERS,\n CHECK_MTT_EXISTS,\n JOIN_MTT,\n UPDATE_MTT_STATE,\n SET_MTT_USERS,\n} from \"../actions/types\";\nimport { queuedActionReducer } from \"./queuedActionReducer\";\nimport { playerReducer } from \"./playerReducer\";\nimport { mttUsersReducer } from \"./mttUsersReducer\";\nimport { spectatorReducer } from \"./spectatorReducer\";\nimport { stateReducer } from \"./stateReducer\";\nimport { mttStateReducer } from \"./mttStateReducer\";\nimport { logState } from \"../helpers/logger\";\nimport { timer } from \"../helpers/constants\";\n\nexport const INITIAL_STATE = {\n gameId: \"\", // stores url parameter\n MTTId: \"\",\n display: \"loading\", // can be loading, play, login, settings, newGame, initial, none (instantly converts into newGame on top of empty game)\n // changed on line 76 at the end of login() to simulate different states\n username: \"Anonymous\",\n ownStackCents: 0,\n sessionKey: null,\n ownPotCents: 0,\n allTimeBalance: 0,\n maxPotCents: 0, // max of all player's pots at table\n betsOnTableSumCents: 0, // sum of all player's pots/bets at table\n activePlayers: [],\n faceUpHoleCards: {},\n chats: [],\n usernameToHandsWon: {}, // {\"jack\":10, \"michael\":4} for instance\n mainPotCents: 0,\n sidePotCents: 0, // only the side pot that is relevant to the current player, only displayed in UI if > 0\n smallBlindCents: 5,\n // TODO @dmitri big blind is always going to be 2x small blind, maintaining 2 variables will cause bugs\n bigBlindCents: 10,\n mostRecentChatTimestamp: -1, //only update chats after this timestamp\n stillInHand: false,\n stillInGame: false,\n hasGamePassword: false,\n prefilledGamePassword: \"\",\n showBuyIn: false,\n minRaise: 0,\n statesQueued: [], // DEPRECATED\n sessionLeaderboard: [],\n leaderboard: [],\n isRunningDelay: false,\n dealerPosition: 0,\n allowKeyboardShortCuts: true,\n queuedAction: null,\n willExecuteQueuedAction: false,\n isTimerEnabled: false,\n timerLengthSeconds: 30,\n handTimerLengthSeconds: timer.MEDIUM_HAND_TIMER_SECONDS,\n turnNonce: null, // the # of turns that have happened in the game so far\n ongoing: false,\n isSpectating: false,\n maxPlayerNumber: 9,\n isGodModeEnabled: false,\n isGod: false,\n showCardsToGod: false,\n god: null,\n isTournament: false,\n autoBuyinCents: 1000,\n totalBuyinCents: 0,\n initialBlindCents: 5,\n blindIncreaseMinutes: 10,\n gameStartTime: null,\n paused: false,\n sessionReset: false,\n isInCents: true,\n MTTPlayers: [],\n MTTUsers: [],\n MTTOngoing: false,\n};\n\nexport default function (state = INITIAL_STATE, action) {\n if (action.type === LEADERBOARD) {\n return {\n ...state,\n sessionLeaderboard: action.payload.sessionLeaderboard,\n leaderboard: action.payload.leaderboard,\n };\n } else if (action.type === IS_RUNNING_DELAY) {\n return { ...state, isRunningDelay: action.payload.isRunningDelay };\n } else if (action.type === DISPLAY) {\n return { ...state, display: action.payload.display };\n } else if (action.type === UPDATE_MTT_STATE) {\n return { ...state, gameId: action.payload.gameId };\n } else if (action.type === RECEIVE_CHAT) {\n return {\n ...state,\n chats: [...state.chats, action.payload],\n };\n } else if (action.type === JOIN_GAME) {\n return {\n ...state,\n display: \"play\",\n username: action.payload.username,\n sessionKey: action.payload.sessionKey,\n smallBlindCents: action.payload.smallBlindCents,\n bigBlindCents: action.payload.smallBlindCents * 2,\n gameId: action.payload.gameId,\n isGod: action.payload.isGod,\n god: action.payload.god,\n isTournament: action.payload.isTournament,\n autoBuyinCents: action.payload.autoBuyinCents,\n totalBuyinCents: action.payload.totalBuyinCents,\n initialBlindCents: action.payload.initialBlindCents,\n blindIncreaseMinutes: action.payload.blindIncreaseMinutes,\n };\n } else if (action.type === JOIN_MTT) {\n return {\n ...state,\n display: \"lobby\",\n username: action.payload.username,\n MTTId: action.payload.MTTId,\n sessionKey: action.payload.key,\n //TODO MTT\n };\n } else if (action.type === SPECTATE_GAME) {\n return {\n ...state,\n display: \"play\",\n username: action.payload.username,\n sessionKey: action.payload.sessionKey,\n gameId: action.payload.gameId,\n isSpectating: true,\n isGod: action.payload.isGod,\n god: action.payload.god,\n };\n } else if (action.type === CREATE_GAME) {\n return {\n ...state,\n // reset chats in case you created a new game while playing a game\n chats: [],\n display: \"login\",\n gameId: action.payload.gameId,\n smallBlindCents: action.payload.smallBlindCents,\n bigBlindCents: action.payload.smallBlindCents * 2,\n hasGamePassword: action.payload.hasGamePassword,\n prefilledGamePassword: action.payload.prefilledGamePassword,\n isTimerEnabled: action.payload.isTimerEnabled,\n timerLengthSeconds: parseInt(action.payload.timerLengthSeconds),\n handTimerLengthSeconds: parseInt(action.payload.handTimerLengthSeconds),\n isGodModeEnabled: action.payload.isGodModeEnabled,\n isGod: action.payload.isGodModeEnabled,\n god: action.payload.god,\n isTournament: action.payload.isTournament,\n autoBuyinCents: parseInt(action.payload.autoBuyinCents),\n };\n } else if (action.type === CREATE_MTT) {\n return {\n ...state,\n display: \"login\",\n MTTId: action.payload.MTTId,\n smallBlindCents: action.payload.smallBlindCents,\n bigBlindCents: action.payload.smallBlindCents * 2,\n hasMTTPassword: action.payload.hasMTTPassword,\n prefilledMTTPassword: action.payload.prefilledMTTPassword,\n timerLengthSeconds: parseInt(action.payload.timerLengthSeconds),\n startingStack: parseInt(action.payload.startingStack),\n };\n } else if (action.type === GET_MTT_PLAYERS) {\n return {\n ...state,\n MTTPlayers: action.payload.MTTPlayers,\n };\n } else if (action.type === CHECK_GAME_EXISTS) {\n return {\n ...state,\n display: action.payload.display,\n hasGamePassword: action.payload.hasGamePassword,\n };\n } else if (action.type === CHECK_MTT_EXISTS) {\n return {\n ...state,\n display: action.payload.display,\n hasMTTPassword: action.payload.hasMTTPassword,\n };\n } else if (action.type === GAME_STATE_CHANGE) {\n const stateUpdate = stateReducer(state, action);\n logState(stateUpdate);\n return {\n ...state,\n ...stateUpdate,\n };\n } else if (action.type === MTT_STATE_CHANGE) {\n const stateUpdate = mttStateReducer(state, action);\n return {\n ...state,\n ...stateUpdate,\n };\n } else if (action.type === SET_USER_DISCONNECTED) {\n const disconnectedUserName = action.payload.username;\n\n const newActivePlayers = state.activePlayers.map((player) => {\n if (player.playerName === disconnectedUserName) {\n return Object.assign({}, player, {\n connected: false,\n });\n }\n return player;\n });\n\n return {\n ...state,\n activePlayers: newActivePlayers,\n };\n } else if (action.type === SET_GAME_SETTINGS) {\n const smallBlindCentsValue = parseInt(action.payload.smallBlindCents);\n const isTimerEnabledValue = action.payload.isTimerEnabled;\n const timerLengthSecondsValue = parseInt(action.payload.timerLengthSeconds);\n const handTimerLengthSecondsValue = parseInt(\n action.payload.handTimerLengthSeconds\n );\n const sessionReset = action.payload.sessionReset;\n return {\n ...state,\n smallBlindCents: smallBlindCentsValue,\n bigBlindCents: smallBlindCentsValue * 2,\n isTimerEnabled: isTimerEnabledValue,\n timerLengthSeconds: timerLengthSecondsValue,\n handTimerLengthSeconds: handTimerLengthSecondsValue,\n sessionReset: sessionReset,\n };\n } else if (action.type === SET_PLAYERS) {\n const playerUpdate = playerReducer(state, action);\n const queuedActionUpdate = queuedActionReducer(state, action, playerUpdate);\n\n return {\n ...state,\n ...playerUpdate,\n ...queuedActionUpdate,\n };\n } else if (action.type === SET_MTT_USERS) {\n const mttUsersUpdate = mttUsersReducer(state, action);\n\n return {\n ...state,\n ...mttUsersUpdate,\n };\n } else if (action.type === SET_SPECTATORS) {\n const spectatorUpdate = spectatorReducer(state, action);\n\n return {\n ...state,\n ...spectatorUpdate,\n };\n } else if (action.type === QUEUED_ACTION) {\n return {\n ...state,\n queuedAction: action.payload.queuedAction,\n };\n } else if (action.type === UPDATE_PLAYER_FIELDS) {\n const playerUserName = action.payload.username;\n const newActivePlayers = state.activePlayers.map((player) => {\n if (player.playerName === playerUserName) {\n return Object.assign({}, player, action.payload.fields);\n }\n return player;\n });\n return {\n ...state,\n activePlayers: newActivePlayers,\n };\n } else {\n return state;\n }\n}\n","export const LEADERBOARD = \"LEADERBOARD\";\nexport const DISPLAY = \"DISPLAY\";\nexport const JOIN_GAME = \"JOIN_GAME\";\nexport const SPECTATE_GAME = \"SPECTATE_GAME\";\nexport const CREATE_GAME = \"CREATE_GAME\";\nexport const CREATE_MTT = \"CREATE_MTT\";\nexport const GAME_STATE_CHANGE = \"GAME_STATE_CHANGE\";\nexport const MTT_STATE_CHANGE = \"MTT_STATE_CHANGE\";\nexport const RECEIVE_CHAT = \"RECEIVE_CHAT\";\nexport const IS_RUNNING_DELAY = \"IS_RUNNING_DELAY\";\nexport const CHECK_GAME_EXISTS = \"CHECK_GAME_EXISTS\";\nexport const SET_USER_DISCONNECTED = \"SET_USER_DISCONNECTED\";\nexport const SET_GAME_SETTINGS = \"SET_GAME_SETTINGS\";\nexport const SET_PLAYERS = \"SET_PLAYERS\";\nexport const SET_SPECTATORS = \"SET_SPECTATORS\";\nexport const QUEUED_ACTION = \"QUEUED_ACTION\";\nexport const UPDATE_PLAYER_FIELDS = \"UPDATE_PLAYER_FIELDS\";\nexport const GET_MTT_PLAYERS = \"GET_MTT_PLAYERS\";\nexport const CHECK_MTT_EXISTS = \"CHECK_MTT_EXISTS\";\nexport const JOIN_MTT = \"JOIN_MTT\";\nexport const UPDATE_MTT_STATE = \"UPDATE_MTT_STATE\";\nexport const SET_MTT_USERS = \"SET_MTT_USERS\";\n","import axios from \"axios\";\nimport FormData from \"form-data\";\nconst api = axios.create({\n baseURL: process.env.REACT_APP_BASE_URL + \"/api\",\n});\n\nconst checkAlive = (resolve, reject) => {\n api.get(\"is_alive\", {}).then(resolve, reject);\n};\n\nconst sendFeedback = (\n gameId,\n username,\n email,\n rating,\n feedbackText,\n betaInterest,\n provider\n) => {\n let form = new FormData();\n form.append(\"game_id\", gameId);\n form.append(\"email\", email);\n form.append(\"username\", username);\n form.append(\"rating\", rating);\n form.append(\"beta_interest\", betaInterest);\n form.append(\"feedback_text\", feedbackText);\n form.append(\"provider\", provider);\n return api.post(\"/send_feedback\", form, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nexport { checkAlive, sendFeedback };\nexport default api;\n","import io from \"socket.io-client\";\nimport { logActionEvent } from \"./logger\";\nimport { timer } from \"./constants\";\n\nconst socketUrl = process.env.REACT_APP_SOCKET_URL;\n\nlet socket = null;\n\nconst initSocket = (gameId = null, MTTId = null, cb = null) => {\n let queryParams = '';\n if (gameId) queryParams += `gameId=${gameId}&`;\n if (MTTId) queryParams += `MTTId=${MTTId}&`;\n\n // Remove the last '&' if it exists\n if (queryParams.endsWith('&')) {\n queryParams = queryParams.slice(0, -1);\n }\n\n console.log(`${socketUrl}?${queryParams}`);\n socket = io.connect(\n `${socketUrl}?${queryParams}`,\n {\n path: \"/socketapi\",\n reconnection: true,\n reconnectionDelay: 500,\n reconnectionDelayMax: 500,\n randomizationFactor: 0,\n transports: [\"websocket\"],\n }\n );\n cb(socket);\n};\n\nconst emit = (messageType, message) => {\n console.log(\"Emitting: \", messageType, message);\n socket.emit(messageType, message);\n};\n\nconst socketOff = (messageType) => {\n if (messageType) {\n socket.off(messageType);\n } else {\n socket.off();\n }\n};\n\nconst socketIsConnected = () => {\n return socket.connected;\n};\n\nconst emitEnsureInRoom = (username, game_id, key, is_spectator, cb) => {\n socket.emit(\n \"ensure_in_room\",\n {\n username: username,\n game_id: game_id,\n key: key,\n is_spectator: is_spectator,\n },\n (result) => {\n if (cb) cb(result);\n }\n );\n};\n\n//.off.on hack disabled, would make sure only one socket listener exists at any time due to disconnects/reconnects for instance\nconst setOnConnect = (cb) => {\n socket.on(\"connect\", (result) => {\n if (cb) cb(result);\n });\n};\n\nconst setOnDisconnect = (cb) => {\n socket.on(\"disconnect\", (result) => {\n if (cb) cb(result);\n });\n};\n\nconst setOnStateChange = (cb) => {\n socket.on(\"state\", (state) => {\n cb(state);\n });\n};\n\nconst setOnMTTStateChange = (cb) => {\n socket.on(\"mtt_state\", (state) => {\n cb(state);\n });\n};\n\nconst setOnLeaderboard = (cb) => {\n socket.on(\"leaderboard\", (users) => {\n cb(users);\n });\n};\n\nconst setOnSound = (cb) => {\n socket.on(\"sound\", (data) => {\n cb(data);\n });\n};\n\nconst setOnDistributeChat = (cb) => {\n socket.on(\"distribute_chat\", (obj) => {\n cb(obj);\n });\n};\n\nconst setOnDifferentLogIn = (cb) => {\n socket.on(\"different_log_in\", (obj) => {\n cb(obj);\n });\n};\n\nconst setOnSettingsChange = (cb) => {\n socket.on(\"settings\", (data) => {\n cb(data);\n });\n};\n\nconst setOnPlayerStateChange = (cb) => {\n socket.on(\"players\", (data) => {\n cb(data);\n });\n};\n\nconst setOnMTTUsersState = (cb) => {\n socket.on(\"mtt_users\", (data) => {\n cb(data);\n });\n};\n\nconst setOnSpectatorStateChange = (cb) => {\n socket.on(\"spectators\", (data) => {\n cb(data);\n });\n};\n\nconst setOnPlayerFieldsChange = (cb) => {\n socket.on(\"player_fields\", (data) => {\n cb(data);\n });\n};\n\nconst setBootInactive = (username, game_id, cb) => {\n socket.on(\"set_boot_inactive_timer\", (data) => {\n cb(data.username);\n setTimeout(() => {\n if (socket) {\n socket.emit(\"boot_inactive\", {\n username: username,\n game_id: game_id,\n }); // handle the async on the frontend LMAO\n }\n }, data[\"client_timeout_seconds\"] * 1000 + 1000); // seconds + 1 of leeway due to server lag\n });\n};\n\nconst setAutoCheckFoldEmit = (\n username,\n game_id,\n key,\n cur_turn_username,\n turn_nonce,\n cb\n) => {\n let timeout = timer.TIMER_END_GRACE_PERIOD_PEERS_SECONDS * 1000;\n if (username === cur_turn_username) {\n timeout = timer.TIMER_END_GRACE_PERIOD_SELF_SECONDS * 1000;\n }\n let autoCheckFoldTimeoutObject = setTimeout(() => {\n if (socket) {\n socket.emit(\"check_fold_on_timer_expire\", {\n username: username,\n game_id: game_id,\n key: key,\n cur_turn_username: cur_turn_username,\n turn_nonce: turn_nonce,\n }); // handle the async on the frontend LMAO\n }\n }, timeout); // seconds + 1 of leeway due to server lag\n cb(autoCheckFoldTimeoutObject);\n};\n\nconst setActionSuccess = (cb) => {\n socket.on(\"action_success\", (data) => {\n cb(data);\n });\n};\n\nconst setMTTGameEnd = (cb) => {\n socket.on(\"mtt_game_end\", (data) => {\n cb(data);\n });\n};\n\nconst setMTTPlayers = (cb) => {\n socket.on(\"mtt_players\", (data) => {\n cb(data);\n });\n};\n\n// remove all listeners then close the socket\n// will not run setOnDisconnect\nconst forceDisconnect = () => {\n if (socket) {\n socket.off();\n socket.close();\n return true;\n }\n return false;\n};\n\nconst emitSocketAction = (actionType, betValue = -1, key, gameId, username) => {\n if (!key) {\n console.error(\"Cannot do action, no key!\");\n return;\n }\n\n setActionSuccess((_) => {\n socketOff(\"action_success\");\n });\n\n emit(\"action\", {\n game_id: gameId,\n username: username,\n action: actionType,\n key: key,\n amount: betValue,\n });\n\n logActionEvent(actionType, betValue);\n};\n\n// connect to game variables. Needed temporarily because of the way other code was written.\nconst connectEmitSocketAction = (key, gameId, username) => (\n actionType,\n betValue = -1\n) => emitSocketAction(actionType, betValue, key, gameId, username);\n\nconst emitSocketMessage = (messageType, extraData, key, gameId, username) => {\n let message = {\n username: username,\n game_id: gameId,\n key: key,\n };\n\n Object.assign(message, extraData);\n emit(messageType, message);\n};\n\n// connect to game variables. Needed temporarily because of the way other code was written.\nconst connectEmitSocketMessage = (key, gameId, username) => (\n messageType,\n extraData\n) => emitSocketMessage(messageType, extraData, key, gameId, username);\n\nexport {\n initSocket,\n emit,\n socketOff,\n forceDisconnect,\n setOnDisconnect,\n setOnConnect,\n emitEnsureInRoom,\n setOnStateChange,\n setOnMTTStateChange,\n setOnLeaderboard,\n setOnSound,\n setOnDistributeChat,\n setBootInactive,\n setOnDifferentLogIn,\n socketIsConnected,\n setActionSuccess,\n setOnSettingsChange,\n setOnPlayerStateChange,\n setOnSpectatorStateChange,\n setOnPlayerFieldsChange,\n emitSocketAction,\n emitSocketMessage,\n connectEmitSocketAction,\n connectEmitSocketMessage,\n setAutoCheckFoldEmit,\n setMTTGameEnd,\n setMTTPlayers,\n setOnMTTUsersState,\n};\nexport default socket;\n","import {\n LEADERBOARD,\n DISPLAY,\n JOIN_GAME,\n SPECTATE_GAME,\n GAME_STATE_CHANGE,\n MTT_STATE_CHANGE,\n RECEIVE_CHAT,\n IS_RUNNING_DELAY,\n CREATE_GAME,\n CREATE_MTT,\n CHECK_GAME_EXISTS,\n SET_USER_DISCONNECTED,\n SET_GAME_SETTINGS,\n SET_PLAYERS,\n SET_SPECTATORS,\n QUEUED_ACTION,\n UPDATE_PLAYER_FIELDS,\n GET_MTT_PLAYERS,\n CHECK_MTT_EXISTS,\n JOIN_MTT,\n UPDATE_MTT_STATE,\n SET_MTT_USERS,\n} from \"./types\";\nimport api from \"../helpers/api\";\nimport { setUserVars } from \"react-fullstory\";\nimport { emitSocketAction } from \"../helpers/socket\";\nimport { actions, timer } from \"../helpers/constants\";\nimport { logError } from \"../helpers/logger\";\n/*\nAction Creator Example\n\nexport const actionCreator = (dispatch, oldState) => (yourFunctionParams) =>{\n let thingsToUpdateInState = doSomething()\n dispatch({\n type: SOME_ACTION_TYPE,\n payload:thingsToUpdateInState\n })\n}\n\n*/\nexport const updateLeaderboard = (dispatch) => (leaderboard_resp) => {\n let sessionUsers = leaderboard_resp[\"session\"];\n let users = leaderboard_resp[\"all_time\"];\n\n const sessionLeaderboard = sessionUsers.map((u) => {\n return { name: u[0], balance: u[1], buyin: u[2] };\n });\n const leaderboard = users.map((u) => {\n return { name: u[0], balance: u[1], buyin: u[2] };\n });\n dispatch({\n type: LEADERBOARD,\n payload: { sessionLeaderboard, leaderboard },\n });\n};\n\nexport const updateDisplay = (dispatch) => (display) => {\n // SetUserVars method for Fullstory\n setUserVars({\n display: display,\n });\n dispatch({\n type: DISPLAY,\n payload: { display },\n });\n};\n\nexport const updateMTTState = (dispatch) => (gameId) => {\n dispatch({\n type: UPDATE_MTT_STATE,\n payload: { gameId: gameId },\n });\n};\n\nexport const updateIsRunningDelay = (dispatch) => (isRunningDelay) => {\n dispatch({\n type: IS_RUNNING_DELAY,\n payload: { isRunningDelay },\n });\n};\n\nexport const receiveChatMessage = (dispatch) => (chatObj) => {\n dispatch({\n type: RECEIVE_CHAT,\n payload: { username: chatObj.username, message: chatObj.msg },\n });\n};\n\nexport const joinGame = (dispatch) => (\n gameId,\n username,\n userPassword,\n gamePassword,\n isGod\n) => {\n return api\n .get(\"/join_game\", {\n params: {\n game_id: gameId,\n username: username,\n user_password: userPassword,\n game_password: gamePassword,\n is_god: isGod,\n },\n })\n .then((response) => {\n if (!response.data.key) {\n console.error(\"No key in response data\");\n }\n console.log(\"join_game response; \", response);\n const payload = {\n username: username,\n sessionKey: response.data.key,\n smallBlindCents: response.data.smallBlindCents,\n gameId: gameId,\n isGod: isGod,\n isTournament: response.data.isTournament,\n autoBuyinCents: response.data.autoBuyinCents,\n totalBuyinCents: response.data.totalBuyinCents,\n initialBlindCents: response.data.initialBlindCents,\n blindIncreaseMinutes: response.data.blindIncreaseMinutes,\n };\n dispatch({\n type: JOIN_GAME,\n payload,\n });\n\n return {};\n })\n .catch((error) => {\n logError(error);\n return {\n error,\n };\n });\n};\n\nexport const joinMTT = (dispatch) => (\n MTTId,\n username,\n userPassword,\n MTTPassword\n) => {\n return api\n .get(\"/join_mtt\", {\n params: {\n mtt_id: MTTId,\n username: username,\n user_password: userPassword,\n },\n })\n .then((response) => {\n if (!response.data.key) {\n console.error(\"No key in response data\");\n }\n const payload = {\n MTTId,\n username,\n key: response.data.key,\n //TODO MTT\n };\n dispatch({\n type: JOIN_MTT,\n payload,\n });\n\n return {};\n })\n .catch((error) => {\n logError(error);\n return {\n error,\n };\n });\n};\n\nexport const spectateGame = (dispatch) => (\n gameId,\n username,\n userPassword,\n gamePassword,\n isGod\n) => {\n return api\n .get(\"/spectate_game\", {\n params: {\n game_id: gameId,\n username: username,\n user_password: userPassword,\n game_password: gamePassword,\n is_god: isGod,\n },\n })\n .then((response) => {\n if (!response.data.key) {\n console.error(\"No key in response data\");\n }\n const payload = {\n username: username,\n sessionKey: response.data.key,\n gameId: gameId,\n isGod: isGod,\n };\n dispatch({\n type: SPECTATE_GAME,\n payload,\n });\n\n return {};\n })\n .catch((error) => {\n logError(error);\n return {\n error,\n };\n });\n};\n\nexport const updateGameStateFromSocket = (dispatch, oldState) => (\n newGameState\n) => {\n if (\n newGameState === \"Wrong config\" ||\n newGameState === \"Incorrect key auth\"\n ) {\n return null;\n }\n dispatch({\n type: GAME_STATE_CHANGE,\n payload: newGameState,\n });\n};\n\nexport const updateMTTStateFromSocket = (dispatch, oldState) => (\n newMTTState\n) => {\n if (newMTTState === \"Wrong config\" || newMTTState === \"Incorrect key auth\") {\n return null;\n }\n dispatch({\n type: MTT_STATE_CHANGE,\n payload: newMTTState,\n });\n};\n\n// create a game and return the new gameId from the server\nexport const createGame = (dispatch) => async (\n smallBlindCents,\n gamePassword = \"\",\n preferredGameId = null,\n isTimerEnabled = false,\n timerLengthSeconds = 30,\n handTimerLengthSeconds = timer.MEDIUM_HAND_TIMER_SECONDS,\n isGodModeEnabled = false,\n isTournament = false,\n autoBuyinCents = 1000,\n blindIncreaseSeconds = 600,\n isInCents = true\n) => {\n try {\n const { data } = await api.get(\"create_game\", {\n params: {\n small_blind_amount: smallBlindCents,\n game_password: gamePassword,\n preferred_game_id: preferredGameId,\n is_timer_enabled: isTimerEnabled,\n timer_length_seconds: timerLengthSeconds,\n hand_timer_length_seconds: handTimerLengthSeconds,\n is_god_mode: isGodModeEnabled,\n is_tournament: isTournament,\n auto_buyin_cents: autoBuyinCents,\n blind_increase_seconds: blindIncreaseSeconds,\n is_in_cents: isInCents,\n },\n });\n\n dispatch({\n type: CREATE_GAME,\n payload: {\n gameId: data.gameId,\n smallBlindCents: data.smallBlindCents,\n hasGamePassword: data.hasGamePassword,\n prefilledGamePassword: gamePassword,\n isTimerEnabled: isTimerEnabled,\n timerLengthSeconds: timerLengthSeconds,\n handTimerLengthSeconds: handTimerLengthSeconds,\n isGodModeEnabled: isGodModeEnabled,\n isTournament: isTournament,\n autoBuyinCents: autoBuyinCents,\n isInCents: isInCents,\n },\n });\n\n return data.gameId;\n } catch (error) {\n logError(error);\n console.error(error);\n }\n};\n\nexport const createMTT = (dispatch) => async (\n smallBlindCents,\n MTTPassword,\n timerLengthSeconds,\n startingStack,\n blindIncreaseSeconds,\n isInCents\n) => {\n try {\n const { data } = await api.get(\"create_mtt\", {\n params: {\n small_blind_amount: smallBlindCents,\n mtt_password: MTTPassword,\n timer_length_seconds: timerLengthSeconds,\n starting_stack: startingStack,\n blind_increase_seconds: blindIncreaseSeconds,\n is_in_cents: isInCents,\n },\n });\n\n dispatch({\n type: CREATE_MTT,\n payload: {\n MTTId: data.MTTId,\n hasMTTPassword: data.hasMTTPassword,\n smallBlindCents: smallBlindCents,\n prefilledMTTPassword: MTTPassword,\n timerLengthSeconds: timerLengthSeconds,\n startingStack: startingStack,\n isInCents: isInCents,\n },\n });\n return data.MTTId;\n } catch (error) {\n logError(error);\n console.error(error);\n }\n};\n\nexport const getMTTPlayers = (dispatch) => (\n MTTId,\n username,\n key\n) => async () => {\n try {\n const { data } = await api.get(\"/get_mtt_players\", {\n params: {\n mtt_id: MTTId,\n username,\n key,\n },\n });\n dispatch({\n type: GET_MTT_PLAYERS,\n payload: {\n MTTPlayers: data.players,\n },\n });\n } catch (error) {\n logError(error);\n console.error(error);\n }\n};\n\nexport const checkGameExists = (dispatch) => async (\n gameId,\n iframeClientName,\n cb = null\n) => {\n try {\n const { data } = await api.get(\"/check_game_exists\", {\n params: {\n game_id: gameId,\n },\n });\n let isIntermediateDisplay = iframeClientName !== \"game\" && !data.exists;\n let display = data.exists ? \"login\" : \"newGame\";\n if (isIntermediateDisplay) {\n display = \"loading\"; // in this case it's a new gather.town link, which will be followed up by a create game, then display \"login\"\n }\n dispatch({\n type: CHECK_GAME_EXISTS,\n payload: {\n display,\n hasGamePassword: data.hasGamePassword,\n },\n });\n if (cb) {\n cb(data.exists);\n }\n } catch (error) {\n logError(error);\n console.error(error);\n }\n};\n\nexport const checkMTTExists = (dispatch) => async (MTTId) => {\n try {\n const { data } = await api.get(\"/check_mtt_exists\", {\n params: {\n mtt_id: MTTId,\n },\n });\n\n let display = data.exists ? \"login\" : \"initial\";\n dispatch({\n type: CHECK_MTT_EXISTS,\n payload: {\n display,\n hasMTTPassword: data.hasMTTPassword,\n },\n });\n } catch (error) {\n logError(error);\n console.error(error);\n }\n};\n\nexport const setUserDisconnected = (dispatch) => (username) => {\n dispatch({\n type: SET_USER_DISCONNECTED,\n payload: {\n username,\n },\n });\n};\n\nexport const setGameSettings = (dispatch) => (\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds,\n handTimerLengthSeconds,\n sessionReset\n) => {\n dispatch({\n type: SET_GAME_SETTINGS,\n payload: {\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds,\n handTimerLengthSeconds,\n sessionReset,\n },\n });\n};\n\nexport const setPlayerState = (dispatch) => (players, reason) => {\n dispatch({\n type: SET_PLAYERS,\n payload: {\n players,\n reason,\n },\n });\n};\n\nexport const setMTTUsersState = (dispatch) => (mtt_users, reason) => {\n dispatch({\n type: SET_MTT_USERS,\n payload: {\n mtt_users,\n reason,\n },\n });\n};\n\nexport const setSpectatorState = (dispatch) => (spectators, reason) => {\n dispatch({\n type: SET_SPECTATORS,\n payload: {\n spectators,\n reason,\n },\n });\n};\n\nexport const setPlayerFields = (dispatch) => (username, fields) => {\n dispatch({\n type: UPDATE_PLAYER_FIELDS,\n payload: {\n username,\n fields,\n },\n });\n};\n\nexport const updateQueuedAction = (dispatch) => (queuedAction) => {\n dispatch({\n type: QUEUED_ACTION,\n payload: {\n queuedAction,\n },\n });\n};\n\n// This should only ever be called if there is a queued action\n// Which is guaranteed by the context variable willExecuteQueuedAction\nexport const executeQueuedAction = (dispatch, oldState) => () => {\n if (oldState.queuedAction) {\n // convert CHECK/FOLD and CHECK to CALL\n // This is only written like this because the backend thinks a call and check are the same thing\n // Even worse, the backend doesn't care what amount you think you're calling for, a call is a call\n // I recommend refactoring the backend to make this cleaner and less bug prone\n // This is safechecked in the GAME_STATE_CHANGE reducer\n // If we got here, and it still says \"CHECK\", it is guaranteed that the user can check\n // i.e, it is guaranteed that sending a CALL event will result in a CHECK\n let queuedAction = oldState.queuedAction;\n if (\n queuedAction.actionType === actions.CHECK ||\n queuedAction.actionType === actions.CHECKFOLD\n ) {\n queuedAction.actionType = actions.CALL;\n }\n\n // It is also guaranteed that if the user was trying to call a specific amount\n // It will only call for that specific amount\n // As above, this is guaranteed by the reducer\n // but the backend should be refactored to enforce this as well, which would be less bug prone\n emitSocketAction(\n queuedAction.actionType,\n queuedAction.betValue,\n oldState.sessionKey,\n oldState.gameId,\n oldState.username\n );\n\n dispatch({\n type: QUEUED_ACTION,\n payload: {\n queuedAction: null,\n },\n });\n }\n};\n\n/* For Testing Purposes */\nexport const setTestFrontend = (dispatch) => () => {\n // test method that logs in with default values\n const payload = {\n activePlayers: [\n {\n playerName: \"Aayush\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"2c\", \"2s\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"Archer\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"as\", \"ah\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"Yvonne\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"ts\", \"7s\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"Dmitri\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"jc\", \"qh\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"Ashwin\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"7c\", \"2d\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"Ankit\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"8c\", \"3h\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"Russell\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"kc\", \"jh\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"Ali\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"9d\", \"9s\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n {\n playerName: \"R&J\",\n playerBalance: 14985,\n playerPot: 300,\n cards: [\"6d\", \"5s\"],\n playerIsInGame: true,\n playerIsInHand: true,\n playerIsturn: true,\n isAtTable: true,\n connected: true,\n },\n ],\n faceUpHoleCards: {\n 0: \"3c\",\n 1: \"3s\",\n 2: \"th\",\n 3: \"jh\",\n 4: \"ad\",\n },\n display: \"play\",\n mainPotCents: 10,\n sidePotCents: 10,\n };\n dispatch({\n type: GAME_STATE_CHANGE,\n payload,\n });\n};\n","// connect action creators to a specific reducer's dispatch\n// don't modify the actions, because it's read only if it's imported\nexport const connectActionCreators = (actions, dispatch, oldState) => {\n let bindActions = Object.assign({}, actions);\n for (const action in bindActions) {\n bindActions[action] = bindActions[action](dispatch, oldState);\n }\n return bindActions;\n};\n","import React, { useReducer, createContext } from \"react\";\nimport gameReducer, { INITIAL_STATE } from \"../reducers/game\";\nimport * as actions from \"../actions/game\";\nimport { connectActionCreators } from \"../helpers/context\";\nimport useNext from \"../hooks/useNext\";\n\nexport const GameContext = createContext();\n\nexport const GameProvider = ({ children }) => {\n const [state, dispatch] = useReducer(gameReducer, INITIAL_STATE);\n\n const nextState = useNext(state);\n const value = {\n ...state,\n ...connectActionCreators(actions, dispatch, state),\n nextState,\n };\n\n return {children};\n};\n\nexport const GameConsumer = GameContext.Consumer;\n","// stolen from https://github.com/facebook/react/issues/15344\n// used as a hack for useReducer dispatch callback\nimport { useRef, useEffect } from \"react\";\n\nexport default function useNext(value) {\n const valueRef = useRef(value);\n const resolvesRef = useRef([]);\n useEffect(() => {\n if (valueRef.current !== value) {\n for (const resolve of resolvesRef.current) {\n resolve(value);\n }\n resolvesRef.current = [];\n valueRef.current = value;\n }\n }, [value]);\n return () =>\n new Promise((resolve) => {\n resolvesRef.current.push(resolve);\n });\n}\n","import React from \"react\";\n\nexport function useStateWithLocalStorageString(\n localStorageKey,\n fallBackDefault\n) {\n const [value, setValue] = React.useState(\n getLocalStorageItem(localStorageKey) || fallBackDefault\n );\n\n React.useEffect(() => {\n setLocalStorageItem(localStorageKey, value);\n }, [value]);\n\n return [value, setValue];\n}\n\nexport function useStateWithLocalStorageBoolean(\n localStorageKey,\n fallBackDefault\n) {\n const [value, setValue] = React.useState(\n getLocalStorageItem(localStorageKey) == null\n ? fallBackDefault\n : getLocalStorageItem(localStorageKey) === \"true\"\n );\n\n React.useEffect(() => {\n setLocalStorageItem(localStorageKey, value);\n }, [value]);\n\n return [value, setValue];\n}\n\nfunction getLocalStorageItem(localStorageKey) {\n try {\n let value = localStorage.getItem(localStorageKey);\n return value;\n } catch (e) {\n console.error(\"No local storage access!\");\n return null;\n }\n}\n\nfunction setLocalStorageItem(localStorageKey, value) {\n try {\n localStorage.setItem(localStorageKey, value);\n } catch (e) {\n console.error(\"No local storage access!\");\n }\n}\n","import React, { useState, createContext } from \"react\";\nimport {\n useStateWithLocalStorageString,\n useStateWithLocalStorageBoolean,\n} from \"../hooks/useStateWithLocalStorage\";\nimport { themes } from \"../helpers/constants\";\nimport { logError } from \"../helpers/logger\";\n\n// Browser Specific Context\n// E.g sound settings, darkmode, and anything else that would be stored in local storage\n// Manages browser specific actions like playing sounds, and in the future maybe WebRTC\nexport const BrowserContext = createContext();\n\nexport const BrowserProvider = ({ children }) => {\n // user preferences in local storage\n const [sound, setSound] = useStateWithLocalStorageBoolean(\"sound\", true);\n const [theme, setTheme] = useStateWithLocalStorageString(\n \"theme\",\n themes.THEME_LIGHT_DEFAULT\n );\n const [showVideoChat, setShowVideoChat] = useStateWithLocalStorageBoolean(\n \"showVideoChat\",\n true\n );\n const [videoIsOnRight, setVideoIsOnRight] = useStateWithLocalStorageBoolean(\n \"videoIsOnRight\",\n true\n );\n const [isFourColorDeck, setIsFourColorDeck] = useStateWithLocalStorageBoolean(\n \"isFourColorDeck\",\n false\n );\n const [\n betButtonsOnRight,\n setBetButtonsOnRight,\n ] = useStateWithLocalStorageBoolean(\"betButtonsOnRight\", true);\n\n const [isMobile, setIsMobile] = useState(true);\n const [allowKeyboardShortcuts, setAllowKeyboardShortcuts] = useState(false);\n const [showChat, setShowChat] = useState(true);\n const [audioToSoundMap, setAudioToSoundMap] = useState({});\n const [joinCall, setJoinCall] = useState(false);\n const [currentModal, setCurrentModal] = useState(null);\n\n // TODO: once all modals migrated to use ModalConductor,\n // existsModal won't need to exist because of currentModal\n const [existsModal, setExistsModal] = useState(true);\n\n const playSound = (soundName) => {\n if (sound) {\n let audio = audioToSoundMap[soundName];\n if (audio) {\n audio.play().catch((error) => {\n logError(error);\n // Browser stopped the audio by default\n // Reflect in the user settings that audio is disabled\n setSound(false);\n });\n }\n }\n };\n\n const playSoundDelay = (soundName, delay) => {\n setTimeout(playSound, delay, soundName);\n };\n\n const value = {\n sound,\n setSound,\n playSound,\n playSoundDelay,\n isMobile,\n setIsMobile,\n allowKeyboardShortcuts,\n setAllowKeyboardShortcuts,\n showChat,\n setShowChat,\n existsModal,\n setExistsModal,\n audioToSoundMap,\n setAudioToSoundMap,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n joinCall,\n setJoinCall,\n betButtonsOnRight,\n setBetButtonsOnRight,\n currentModal,\n setCurrentModal,\n theme,\n setTheme,\n isFourColorDeck,\n setIsFourColorDeck,\n };\n\n return (\n {children}\n );\n};\n\nexport const BrowserConsumer = BrowserContext.Consumer;\n","import React, { Fragment, useEffect, useContext } from \"react\";\nimport styled, { withTheme } from \"styled-components\";\nimport { font } from \"../../../helpers/styles\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\n\nconst charToKeyCodeMap = {\n R: 82,\n F: 70,\n C: 67,\n B: 66,\n S: 83,\n M: 77,\n X: 88,\n E: 69,\n \"+\": 187,\n \"-\": 189,\n \"\": 37,\n \"\": 38,\n \"\": 39,\n \"\": 40,\n};\n\nconst KeyboardChar = ({\n char,\n onClick,\n onKeydown,\n onKeyUp,\n style,\n foregroundColor,\n theme,\n color,\n}) => {\n const ContextConsumer = useContext(BrowserContext);\n\n // null check for testing, temporarily\n let allowKeyboardShortcuts, existsModal, isMobile, currentModal;\n if (ContextConsumer) {\n allowKeyboardShortcuts = ContextConsumer.allowKeyboardShortcuts;\n // TODO: once all modals migrated to use ModalConductor, existsModal won't need to exist\n existsModal = ContextConsumer.existsModal;\n currentModal = ContextConsumer.currentModal;\n isMobile = ContextConsumer.isMobile;\n }\n\n useEffect(() => {\n if (char && onClick && char.toUpperCase() in charToKeyCodeMap) {\n document.addEventListener(\"keydown\", handleKeydown);\n document.addEventListener(\"keyup\", handleKeyup);\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeydown);\n document.removeEventListener(\"keyup\", handleKeyup);\n };\n });\n\n const _matchesKey = (e) => {\n const keyCode = e.keyCode;\n const charFromProps = char.toUpperCase();\n return (\n keyCode === charToKeyCodeMap[charFromProps] &&\n allowKeyboardShortcuts &&\n currentModal == null &&\n !existsModal\n );\n };\n\n const handleKeydown = (e) => {\n if (onKeydown && _matchesKey(e)) {\n onKeydown(e);\n }\n };\n\n const handleKeyup = (e) => {\n if (_matchesKey(e)) {\n if (onKeyUp) {\n onKeyUp(e);\n }\n if (onClick) {\n onClick(e);\n }\n }\n };\n\n if (isMobile) {\n return ;\n }\n\n return (\n \n {char}\n \n );\n};\n\nconst KeyboardCharContent = styled.div`\n border: 2px solid ${({ theme }) => theme.primary};\n border-radius: 5px;\n color: ${({ theme }) => theme.primary};\n background: ${({ theme }) => theme.keyboardChar.background};\n font-family: ${font.header};\n ${(props) =>\n props.color &&\n `\n border-color: ${props.color};\n color: ${props.color};\n `};\n ${(props) =>\n props.theme.keyboardChar.text &&\n `\n color: ${props.theme.keyboardChar.text};\n `}\n ${(props) =>\n props.onClick &&\n `\n cursor: pointer;\n `};\n width: 25px;\n height: 25px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n span {\n margin-top: 2px;\n margin-left: -1px;\n }\n`;\n\nexport default withTheme(KeyboardChar);\n","import React, { Fragment } from \"react\";\nimport styled from \"styled-components\";\nimport KeyboardChar from \"../Button/KeyboardChar\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport { colors } from \"../../../helpers/styles\";\n\nconst Slider = ({\n onChange,\n value,\n smallBlindCents,\n min,\n max,\n style,\n setValue,\n betFocus,\n potFocus,\n}) => {\n const smallStepCents = smallBlindCents ? smallBlindCents / 100.0 : 0.01;\n const bigStepCents = smallBlindCents\n ? parseFloat((smallBlindCents * 2).toFixed(2))\n : 5;\n\n const increment = () => {\n if (betFocus || potFocus) {\n return;\n }\n let newVal = parseFloat(value) + bigStepCents;\n if (newVal > max) {\n newVal = max;\n }\n setValue(newVal.toFixed(2));\n };\n\n const decrement = () => {\n if (betFocus || potFocus) {\n return;\n }\n let newVal = parseFloat(value) - bigStepCents;\n if (newVal < min) {\n newVal = min;\n }\n setValue(newVal.toFixed(2));\n };\n\n if (min >= max) {\n return ;\n }\n\n let validatedValue = value;\n if (validatedValue > max) {\n validatedValue = max;\n } else if (validatedValue < min || !validatedValue) {\n validatedValue = min;\n }\n\n return (\n \n \n \"\n color={colors.grey}\n style={{ display: \"none\" }}\n onClick={decrement}\n />\n \"\n color={colors.grey}\n style={{ display: \"none\" }}\n onClick={decrement}\n />\n \n \n \n \n \n \"\n color={colors.grey}\n style={{ display: \"none\" }}\n onClick={increment}\n />\n \"\n color={colors.grey}\n style={{ display: \"none\" }}\n onClick={increment}\n />\n \n );\n};\n\nconst InputWrapper = styled.div`\n position: relative;\n width: 500px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 20px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 40vw;\n margin-right: 20px;\n }\n`;\n\nconst RangeWrapper = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst InputRange = styled.input`\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 10px;\n background: ${colors.white};\n outline: none;\n border-radius: 5px;\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n cursor: pointer;\n background: ${({ theme }) => theme.primary};\n height: 20px;\n width: 15px;\n border-radius: 5px;\n }\n\n ${(props) =>\n props.disable &&\n `\n pointer-events: none;\n background: ${colors.grey};\n `};\n`;\n\nconst InputLineColor = styled.div`\n position: absolute;\n bottom: 7px;\n width: 100%;\n height: 10px;\n background: ${({ theme }) => theme.primary};\n pointer-events: none;\n border-radius: 5px 0 0 5px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n bottom: 8px;\n }\n`;\n\nexport default Slider;\n","import React from \"react\";\nimport styled, { withTheme } from \"styled-components\";\nimport { colors } from \"../../helpers/styles\";\n\nconst Switch = ({ isOn, handleToggle, dataTestId }) => {\n return (\n \n \n \n );\n};\n\nconst SwitchButton = styled.span`\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n transition: 0.2s;\n background: ${colors.white};\n box-shadow: 0 0 2px 0 rgba(10, 10, 10, 0.29);\n top: 5px;\n left: 5px;\n ${(props) =>\n props.isOn &&\n `\n transform: translateX(100%);\n left: 16px;\n `}\n`;\n\nconst CheckboxLabel = styled.label`\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n width: 70px;\n height: 35px;\n background: ${({ theme }) => theme.switch.background};\n border-radius: 100px;\n position: relative;\n transition: background-color 0.2s;\n flex-grow: 0;\n flex-shrink: 0;\n flex-basis: 70px;\n margin: 0;\n ${(props) =>\n props.isOn &&\n props.theme &&\n `\n background: ${props.theme.tertiary}\n `}\n`;\n\nexport default withTheme(Switch);\n","import styled from \"styled-components\";\nimport { font, colors } from \"../../../helpers/styles\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\n\nexport const BaseButton = styled.button`\n font-weight: bold;\n border-radius: 10px;\n &:active,\n &:focus {\n outline: 0;\n }\n transition: background 0.3s ease;\n ${(props) =>\n props.disable &&\n `\n background: ${({ theme }) => theme.foreground} !important;\n pointer-events: none;\n `}\n`;\n\nexport const Button = styled(BaseButton)`\n text-transform: uppercase;\n font-family: ${font.header};\n font-size: 12px;\n letter-spacing: 0.6px;\n color: white;\n border: 1px solid ${colors.white};\n width: 130px;\n height: 30px;\n background: ${({ theme }) => theme.tertiary};\n white-space: nowrap;\n ${(props) => props.fullWidth && `width: 100%;`}\n @media screen and (max-width: ${mobileBreakpoint}), screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 12px;\n padding: 8px 12px;\n ${(props) => props.fullWidth && `width: 100%;`}\n }\n ${(props) =>\n props.disable &&\n `\n opacity: 0.3;\n pointer-events: none;\n `}\n`;\n\nexport const PrimaryButton = styled(Button)`\n background: ${({ theme }) => theme.primary};\n color: white;\n border: 1px solid ${({ theme }) => theme.foreground};\n color: ${colors.white};\n height: 60px;\n width: 120px;\n padding: 0 15px;\n top: 0px;\n font-weight: 400;\n font-size: 18px;\n ${(props) =>\n !props.disableShadow &&\n `\n &:active {\n transform: translate(5px, 5px);\n }\n `}\n ${(props) =>\n props.isClicked\n ? `background: ${({ theme }) => theme.tertiary}; color: ${\n colors.white\n }; outline: 0;`\n : ``} &:focus {\n outline: 0;\n }\n ${(props) =>\n !props.disableShadow &&\n props.pressed &&\n `\n transform: translate(5px, 5px);\n `}\n border-radius: 5px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 80px;\n height: 40px;\n }\n`;\n","import React from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport styled, { withTheme } from \"styled-components\";\nimport { colors } from \"../../../helpers/styles\";\n\nconst Icon = ({ isLeft = false, ...rest }) => {\n return ;\n};\n\nconst IconInner = styled(FontAwesomeIcon)`\n color: ${(props) => (props.color ? props.color : colors.darkGrey)};\n color: ${(props) =>\n props.widget && props.theme && `${props.theme.text.widget}`};\n ${(props) =>\n props.onClick &&\n `\n cursor: pointer;\n `}\n ${(props) => props.isLeft && \"margin-right: 10px\"};\n ${(props) => props.disabled && \"opacity: 0.5\"};\n ${(props) => props.disabled && \"cursor: not-allowed\"};\n ${(props) => props.disabled && \"pointer-events: none\"};\n`;\n\nexport default withTheme(Icon);\n","import React, { useState } from \"react\";\nimport styled, { withTheme } from \"styled-components\";\nimport * as Base from \"./Base\";\nimport KeyboardChar from \"./KeyboardChar\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\n\nconst PrimaryButton = ({\n style,\n isClicked,\n disableShadow,\n disable,\n fullWidth,\n keyboardChar,\n onClick,\n secondaryColor,\n children,\n theme,\n color,\n dataTestId,\n id,\n isPressed,\n}) => {\n const [pressed, setPressed] = useState(false);\n return (\n \n \n {children}\n \n {!disableShadow && }\n {keyboardChar && (\n \n setPressed(true)}\n onKeyUp={() => setPressed(false)}\n color={color || (secondaryColor && theme.secondary)}\n />\n \n )}\n \n );\n};\nconst ButtonWrapper = styled.div`\n position: relative;\n height: 65px;\n width: 125px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 80px;\n height: 40px;\n margin-right: 10px;\n }\n`;\nconst PrimaryButtonFixed = styled(Base.PrimaryButton)`\n position: absolute;\n ${(props) =>\n props.theme &&\n props.secondaryColor &&\n `background: ${props.theme.secondary}`};\n ${(props) =>\n props.color &&\n `\n background: ${props.color}\n `}\n z-index: 1;\n left: 0;\n`;\nconst PrimaryButtonShadow = styled(Base.PrimaryButton)`\n position: absolute;\n z-index: 0;\n background: ${(props) => props.color && `${props.color}`}\n left: 0;\n transform: translate(5px, 5px);\n`;\nconst KeyboardCharWrapper = styled.div`\n position: absolute;\n z-index: 1;\n left: 0;\n transform: translate(10px, -50%);\n`;\nexport default withTheme(PrimaryButton);\n","import styled from \"styled-components\";\nimport { font, colors } from \"../../../helpers/styles\";\nimport * as Base from \"./Base\";\nimport Icon from \"./Icon\";\nimport PrimaryButton from \"./PrimaryButton\";\nexport { PrimaryButton, Icon };\n\nexport const OutlineButton = styled(Base.Button)`\n font-weight: 600;\n border: 2px solid ${({ theme }) => theme.primary};\n border-radius: 5px;\n padding: 2px 8px;\n color: ${({ theme }) => theme.tertiary};\n letter-spacing: 0.1px;\n background: none;\n width: auto;\n &:hover {\n background: ${({ theme }) => theme.tertiary};\n color: ${colors.white};\n }\n`;\n\nexport const ModalButton = styled(Base.Button)`\n height: 40px;\n min-height: 40px;\n text-align: center;\n border-radius: 5px;\n font-size: 16px;\n border: 1px solid ${({ theme }) => theme.modal.background};\n margin-left: 10px;\n &:hover {\n opacity: 0.9;\n }\n`;\n\nexport const HeaderButton = styled(Base.Button)`\n margin-left: 5px;\n margin-right: 5px;\n`;\n\nexport const IconButton = styled(Base.BaseButton)`\n width: 30px;\n border: none;\n background: none;\n color: ${({ theme }) => theme.tertiary};\n`;\n\nexport const BackgroundButton = styled(Base.Button)`\n font-family: ${font.header};\n font-size: 18px;\n font-weight: bold;\n letter-spacing: 1px;\n padding: 15px;\n cursor: pointer;\n border-radius: 5px;\n border: none;\n height: auto;\n`;\n\nexport const SecondaryButton = styled(Base.Button)`\n width: auto;\n height: auto;\n background: ${({ theme }) => theme.foreground};\n border-radius: 5px;\n padding: 8px;\n border: none;\n color: ${colors.darkGrey2};\n font-size: 18px;\n width: 100%;\n margin: 0 5px;\n ${(props) => props.firstInList && `margin-left: 0;`}\n ${(props) => props.lastInList && `margin-right: 0;`}\n`;\n","import styled, { css } from \"styled-components\";\nimport { font, colors } from \"../../helpers/styles\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\n\nconst BaseInput = styled.input`\n font-family: ${font.body};\n border: none;\n font-size: 1em;\n background-color: none;\n background: none;\n ${(props) => props.fullWidth && `width: 100%;`}\n &:hover,\n &:focus {\n outline: 0;\n }\n`;\n\nexport const InputLine = styled(BaseInput)`\n color: ${colors.darkGrey};\n padding: 0.4em 0.4em 0.1em 0.4em;\n transition: all 0.2s ease-out;\n width: 100%;\n border-bottom: 1px solid black;\n`;\n\nexport const InputText = styled(BaseInput)`\n background: ${({ theme }) => theme.background};\n border-radius: 5px;\n padding: 5px 15px;\n font-size: 16px;\n color: ${({ theme }) => theme.text.mainBody};\n border: 1px solid ${({ theme }) => theme.foreground};\n ${(props) =>\n props.contrast &&\n `\n background: ${props.theme.input.contrast};\n `}\n ${(props) =>\n props.noBack &&\n `\n background: ${props.theme.input.noBack};\n `}\n ${(props) =>\n props.modal &&\n `\n background: ${props.theme.input.modal};\n `}\n`;\n\nexport const InputField = styled.span`\n font-family: ${font.body};\n display: block;\n position: relative;\n margin-top: ${(props) => props.top}px;\n text-align: center;\n width: 250px;\n ${(props) =>\n props.fullWidth &&\n css`\n width: 100%;\n ${InputText} {\n width: 100%;\n }\n `}\n`;\n\nexport const InputLabel = styled.label`\n font-family: ${font.body};\n color: #919293;\n box-sizing: border-box;\n display: block;\n font-size: 0.7em;\n line-height: 1;\n opacity: 0;\n overflow: hidden;\n padding: 0.5em 1em;\n pointer-events: none;\n position: absolute;\n text-overflow: ellipsis;\n top: 0;\n text-align: left;\n user-select: none;\n white-space: nowrap;\n width: 100%;\n z-index: 16;\n ${(props) => props.value && `opacity: 0;`};\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 0.7em;\n }\n`;\n\nexport const TextAreaInput = styled.textarea`\n resize: none;\n margin-top: 20px;\n padding: 8px;\n font-size: 16px;\n font-family: ${font.body};\n border: 1px solid ${({ theme }) => theme.foreground};\n background: ${({ theme }) => theme.input.contrast};\n border-radius: 5px;\n color: ${({ theme }) => theme.text.label};\n\n &:focus {\n outline: none;\n }\n &::placeholder {\n font-weight: 500;\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 0.7em;\n }\n`;\n","export const CHAT_STATE = {\n EXPANDED: 0,\n COLLAPSED: 1,\n NORMAL: 2,\n};\n","import styled, { css } from \"styled-components\";\nimport { font, colors } from \"../../helpers/styles\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\n\nconst BaseHeaderText = styled.div`\n width: 100%;\n ${({ align }) => (align ? `text-align: ${align}` : \"text-align: center;\")};\n ${(props) =>\n props.themeable && props.theme && `color: ${props.theme.text.mainBody};`}\n`;\n\nconst BaseBodyText = styled.div`\n ${({ align }) => (align ? `text-align: ${align}` : \"text-align: left;\")};\n margin-bottom: 0;\n`;\n\nexport const LargeHeaderText = styled(BaseHeaderText)`\n font-family: ${font.header};\n font-weight: bold;\n font-size: 2em;\n line-height: 25px;\n font-weight: bold;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 1.6em;\n }\n`;\n\nexport const MediumHeaderText = styled(BaseHeaderText)`\n font-family: ${font.header};\n font-size: 28px;\n letter-spacing: 1px;\n font-weight: bold;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 24px;\n letter-spacing: 0.8px;\n }\n`;\n\nexport const SmallHeaderText = styled(BaseHeaderText)`\n font-family: ${font.header};\n font-size: 18px;\n line-height: 18px;\n letter-spacing: 1px;\n font-weight: bold;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 12px;\n line-height: 12px;\n }\n`;\n\nexport const SmallBodyText = styled(BaseBodyText)`\n font-family: ${font.body};\n font-size: 14px;\n margin: 0;\n ${(props) => props.color && `color: ${props.color}`};\n ${(props) =>\n props.themeable && props.theme && `color: ${props.theme.text.mainBody};`}\n\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 10px;\n }\n`;\n\nexport const SmallHeaderTextEllipsis = styled(SmallHeaderText)`\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const MediumBodyText = styled(BaseBodyText)`\n font-family: ${font.body};\n font-size: 18px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 12px;\n }\n`;\n\nexport const LargeBodyText = styled(BaseBodyText)`\n font-family: ${font.body};\n font-size: 22px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 20px;\n }\n`;\n\nexport const HighlightedText = styled.span`\n font-weight: bold;\n color: ${({ theme }) => theme.tertiary};\n`;\n\nexport const textWithLoadingDots = css`\n display: flex;\n flex-direction: row;\n font-weight: bold;\n letter-spacing: 0.3px;\n color: ${colors.darkGrey2};\n\n &:after {\n content: \" .\";\n animation: dots 1s steps(5, end) infinite;\n }\n @keyframes dots {\n 0%,\n 20% {\n color: ${colors.darkGrey2};\n text-shadow: 0.25em 0 0 ${colors.darkGrey2}, 0.5em 0 0 ${colors.darkGrey2};\n }\n 40% {\n color: ${colors.lightGrey2};\n text-shadow: 0.25em 0 0 ${colors.darkGrey2}, 0.5em 0 0 ${colors.darkGrey2};\n }\n 60% {\n text-shadow: 0.25em 0 0 ${colors.lightGrey2},\n 0.5em 0 0 ${colors.darkGrey2};\n }\n 80%,\n 100% {\n text-shadow: 0.25em 0 0 ${colors.lightGrey2},\n 0.5em 0 0 ${colors.lightGrey2};\n }\n }\n`;\n\nexport const LoadingWrapper = styled(SmallHeaderText)`\n font-size: 20px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 18px;\n }\n ${textWithLoadingDots}\n`;\n\nexport const BoldText = styled.div`\n margin-left: 5px;\n margin-right: 3px;\n color: ${({ theme }) => theme.primary};\n text-decoration: underline;\n`;\n","import React from \"react\";\nimport { SmallHeaderText, LargeBodyText } from \"../../shared/Text\";\nimport { colors, font } from \"../../helpers/styles\"; // ${font}\nimport { Icon } from \"../../shared/FormElements\";\nimport {\n faCheckSquare,\n faSquare,\n faTimes,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport { CHAT_STATE } from \"./utils\";\nimport styled from \"styled-components\";\n\nconst ChatTopBar = ({\n toggleShowGameLog,\n showGameLog,\n chatState,\n setChatState,\n numUnreadMessages,\n isMobile,\n isMTTLobby,\n}) => {\n return (\n {\n if (e.target.classList && e.target.classList.contains(\"chat-top-bar\")) {\n setChatState(\n chatState === CHAT_STATE.NORMAL\n ? CHAT_STATE.EXPANDED\n : CHAT_STATE.NORMAL\n );\n }\n }}\n >\n \n Chat{\" \"}\n {chatState === CHAT_STATE.COLLAPSED && numUnreadMessages !== 0 && (\n 99}>\n {numUnreadMessages <= 99 ? numUnreadMessages : \"99+\"}\n \n )}\n \n {!isMTTLobby && (\n \n \n theme.primary : colors.white}\n isLeft\n />\n \n \n Game Log\n \n \n )}\n \n setChatState(\n chatState === CHAT_STATE.COLLAPSED\n ? CHAT_STATE.NORMAL\n : CHAT_STATE.COLLAPSED\n )\n }\n >\n \n \n \n );\n};\n\nconst ChatTopBarWrapper = styled.div`\n background: ${({ theme }) => colors.darkGrey};\n width: 100%;\n height: 40px;\n flex-grow: 0;\n flex-shrink: 0;\n flex-basis: 40px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding-left: 10px;\n cursor: pointer;\n &:hover {\n background: ${({ theme }) => theme.secondaryLighter};\n }\n`;\n\nconst ChatHeaderText = styled(LargeBodyText)`\n margin-left: 10px;\n font-weight: bold;\n color: white;\n width: 100%;\n pointer-events: none;\n display: flex;\n align-items: center;\n`;\n\nconst UnreadNumber = styled.div`\n background: ${({ theme }) => theme.tertiary};\n border-radius: 50%;\n height: 20px;\n width: 20px;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 10px;\n span {\n margin-left: -1px;\n }\n ${(props) =>\n props.big &&\n `\n height: 30px;\n width: 30px;\n `}\n`;\n\nconst GameMessageToggle = styled.div`\n background: white;\n border-radius: 5px;\n font-family: ${font.header};\n font-size: 16px;\n padding: 8px;\n background: none;\n letter-spacing: 1px;\n color: ${colors.white};\n cursor: pointer;\n display: flex;\n margin-right: 10px;\n width: 105px;\n flex-grow: 0;\n flex-shrink: 0;\n flex-basis: 105px;\n align-items: center;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 4px;\n }\n`;\n\nconst Checkbox = styled.div`\n background: white;\n width: 12px;\n height: 12px;\n display: flex;\n align-items: center;\n`;\n\nconst IconWrapper = styled.div`\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport default ChatTopBar;\n","import React, { useRef, useEffect, useState } from \"react\";\nimport { SmallBodyText } from \"../../shared/Text\";\nimport Linkify from \"react-linkify\";\nimport styled from \"styled-components\";\n\nconst linkDecorator = (\n href,\n text,\n key // for links in chat in new tab\n) => (\n \n {text}\n \n);\n\nconst ChatMain = ({ chats, updateScroll }) => {\n const chatMessageContainerRef = useRef(null);\n const [isScrollBottom, setIsScrollBottom] = useState(true);\n\n useEffect(() => {\n if (isScrollBottom) {\n scrollToBottom();\n }\n }, [updateScroll, chats]);\n\n const scrollToBottom = () => {\n if (chatMessageContainerRef.current) {\n chatMessageContainerRef.current.scrollTop =\n chatMessageContainerRef.current.scrollHeight;\n }\n };\n\n const onScroll = () => {\n setIsScrollBottom(\n chatMessageContainerRef.current.scrollTop +\n chatMessageContainerRef.current.clientHeight ===\n chatMessageContainerRef.current.scrollHeight\n );\n };\n\n return (\n \n {chats.map((chat, i) => (\n \n {chat.username ? `${chat.username}: ` : \"\"}\n {chat.message}\n \n ))}\n \n );\n};\n\nconst ChatMessageContainer = styled.div`\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n overflow-wrap: break-word;\n flex: auto;\n color: ${({ theme }) => theme.text.mainBody};\n`;\n\nconst ChatMessage = styled(SmallBodyText)`\n padding: 0 20px;\n margin: 8px 0;\n display: block;\n ${(props) =>\n props.isGameMsg &&\n props.theme &&\n `\n color: ${props.theme.chat.gameText};\n font-weight: bold;\n `}\n a, a:hover {\n color: ${({ theme }) => theme.chat.linkText};\n text-decoration: underline;\n }\n`;\n\nexport default ChatMain;\n","import React, { Fragment, useEffect } from \"react\";\n\nconst MouseEvents = ({\n setAllowKeyboardShortcuts,\n existsModal,\n focusElement,\n setChatIsFocused,\n onEscPress,\n}) => {\n useEffect(() => {\n document.addEventListener(\"click\", handleDocumentClick);\n document.addEventListener(\"keydown\", handleKeydown);\n\n return () => {\n document.removeEventListener(\"click\", handleDocumentClick);\n document.removeEventListener(\"keydown\", handleKeydown);\n };\n });\n\n const handleDocumentClick = (_) => {\n const activeId = document.activeElement.id;\n if (!existsModal) {\n const chatIsFocused = activeId === focusElement;\n setAllowKeyboardShortcuts(!chatIsFocused);\n setChatIsFocused(chatIsFocused);\n }\n };\n\n const handleKeydown = (e) => {\n const code = e.keyCode || e.which;\n if (code === 27) {\n onEscPress(e);\n }\n };\n\n return ;\n};\nexport default MouseEvents;\n","import React, { useState, useRef } from \"react\";\nimport MouseEvents from \"./MouseEvents\";\nimport styled from \"styled-components\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport { InputText } from \"../../shared/FormElements\";\nimport { SmallBodyText } from \"../../shared/Text\";\nimport { emit } from \"../../helpers/socket\";\nimport { CHAT_STATE } from \"./utils\";\nimport KeyboardChar from \"../../shared/FormElements/Button/KeyboardChar\";\n\nconst ChatInput = ({\n username,\n gameId,\n sessionKey,\n chatIsFocused,\n setAllowKeyboardShortcuts,\n setChatIsFocused,\n existsModal,\n chatState,\n}) => {\n const [inputMessage, setInputMessage] = useState(\"\");\n const chatInput = useRef(null);\n\n const handleSendMessage = (e) => {\n e.preventDefault();\n if (inputMessage !== \"\") {\n emit(\"send_message\", {\n username: username,\n game_id: gameId,\n key: sessionKey,\n msg: inputMessage,\n });\n setInputMessage(\"\");\n }\n };\n\n const handleInputChange = (e) => {\n setInputMessage(e.target.value);\n };\n\n const handleEscPress = (e) => {\n chatInput.current.blur();\n setChatIsFocused(false);\n setAllowKeyboardShortcuts(true);\n };\n\n return (\n <>\n \n \n \n \n {\n if (chatState !== CHAT_STATE.COLLAPSED) {\n chatInput.current.focus();\n setAllowKeyboardShortcuts(false);\n setChatIsFocused(true);\n }\n }}\n />\n \n Send your message here!\n \n \n \n \n );\n};\n\nconst SendMessageForm = styled.form`\n width: 100%;\n margin-top: 5px;\n height: 30px;\n flex-grow: 0;\n flex-shrink: 0;\n flex-basis: 30px;\n display: flex;\n transition: 0.3s ease all;\n border-top: 1px solid ${({ theme }) => theme.chat.divider};\n ${(props) =>\n props.isFocused &&\n `\n height: 70px;\n flex-basis: 70px;\n `}\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 0 5px 5px 5px;\n height: auto;\n }\n`;\n\nconst SendMessageInput = styled(InputText)`\n width: 100%;\n margin: 0;\n`;\n\nconst MessageHelperText = styled.div`\n position: absolute;\n pointer-events: none;\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.text.placeholder};\n padding: 0 10px;\n ${(props) =>\n !props.show &&\n `\n opacity: 0;\n `}\n`;\n\nexport default ChatInput;\n","import React, { useState, useContext, Fragment } from \"react\";\nimport styled from \"styled-components\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport { colors } from \"../../helpers/styles\";\nimport { GameContext } from \"../../context/GameContext\";\nimport { BrowserContext } from \"../../context/BrowserContext\";\nimport { Icon } from \"../../shared/FormElements\";\nimport { faComment } from \"@fortawesome/free-solid-svg-icons\";\nimport { CHAT_STATE } from \"./utils\";\nimport ChatTopBar from \"./ChatTopBar\";\nimport ChatMain from \"./ChatMain\";\nimport ChatInput from \"./ChatInput\";\n\nconst Chat = ({ gameId, MTTId, isMTTLobby }) => {\n const { username, sessionKey, chats } = useContext(GameContext);\n const {\n setAllowKeyboardShortcuts,\n showChat,\n existsModal,\n isMobile,\n betButtonsOnRight,\n } = useContext(BrowserContext);\n\n const [chatIsFocused, setChatIsFocused] = useState(false);\n const [chatState, _setChatState] = useState(CHAT_STATE.NORMAL);\n const [showGameLog, setShowGameLog] = useState(true);\n const [updateScroll, setUpdateScroll] = useState(false);\n const [numReadMessages, setNumReadMessages] = useState(0);\n const [numReadPlayerMessages, setNumReadPlayerMessages] = useState(0);\n\n const getPlayerChats = () => {\n return chats.filter((chat) => !!chat.username);\n };\n\n const setChatState = (newState) => {\n if (newState === CHAT_STATE.COLLAPSED) {\n setNumReadMessages(chats.length);\n setNumReadPlayerMessages(getPlayerChats().length);\n }\n _setChatState(newState);\n setTimeout(() => {\n setUpdateScroll(!updateScroll);\n }, 400); // animation is 0.3s, so scroll after animation done\n };\n\n const toggleShowGameLog = () => {\n setShowGameLog(!showGameLog);\n setUpdateScroll(!updateScroll);\n };\n\n if (!showChat) {\n return ;\n }\n\n if (\n isMobile &&\n (chatState === CHAT_STATE.NORMAL || chatState === CHAT_STATE.COLLAPSED)\n ) {\n return (\n setChatState(CHAT_STATE.EXPANDED)}>\n \n \n );\n }\n\n return (\n \n {isMobile && (\n {\n setChatState(CHAT_STATE.COLLAPSED);\n }}\n />\n )}\n \n \n \n \n \n \n \n \n );\n};\n\nconst ChatWrapper = styled.div`\n margin-top: 20px;\n border: 2px solid ${({ theme }) => theme.foreground};\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n overflow: hidden;\n position: absolute;\n z-index: 3;\n bottom: 0;\n ${(props) => (props.betButtonsOnRight ? `left: 20px` : `right: 20px`)}\n ${(props) =>\n props.isMTTLobby ? `width: 20%; height: 80%;` : `width: 40%; height: 25%;`}\n transition: 0.3s ease all;\n resize: horizontal;\n\n ${(props) =>\n props.isFocused &&\n `\n height: 200px;\n `}\n ${(props) =>\n props.expanded &&\n `\n height: 80vh;\n `}\n ${(props) =>\n props.collapsed &&\n `\n height: 40px;\n `}\n @media screen and (max-width: ${mobileBreakpoint}), screen and (max-height: ${mobileHeightBreakpoint}) {\n height: 80%;\n width: 100%;\n bottom: 0px;\n left: 0;\n z-index: 4;\n }\n`;\n\nconst InnerChatWrapper = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: ${({ theme }) => theme.chat.background};\n`;\n\n/**Mobile styles */\nconst ChatButton = styled.div`\n position: absolute;\n z-index: 6;\n background: ${({ theme }) => theme.primary};\n color: white;\n height: 50px;\n width: 50px;\n border-radius: 5px;\n bottom: 20px;\n left: 5px;\n display: flex;\n align-items: center;\n justify-content: center;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n bottom: 15px;\n position: fixed;\n }\n`;\n\nconst WhiteBack = styled.div`\n position: absolute;\n background: rgba(255, 255, 255, 0.8);\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n z-index: 3;\n`;\n\nexport default Chat;\n","import styled, { css } from \"styled-components\";\nimport { Tooltip } from \"react-bootstrap\";\nimport { SmallBodyText, LargeBodyText } from \"./Text\";\n\nexport const MainOverlay = styled.div`\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n ${(props) => props.theme && `background: ${props.theme.modal.overlay};`}\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-around;\n opacity: ${(props) => (props.opacity == null ? 0.8 : props.opacity)};\n z-index: ${(props) => (props.zIndex == null ? 2 : props.zIndex)};\n transition: ${(props) =>\n props.transitionTimeSeconds == null\n ? \"0.4\"\n : props.transitionTimeSeconds}s\n ease all;\n ${(props) =>\n props.hide &&\n `\n opacity: 0;\n pointer-events: none;\n `}\n`;\n\nexport const removeScrollbars = css`\n overflow-y: hidden;\n overflow-x: hidden;\n &:hover {\n overflow-y: scroll;\n overflow-x: scroll;\n }\n &::-webkit-scrollbar {\n // Chrome scrollbar hiding\n width: 0 !important;\n display: none;\n }\n scrollbar-width: none;\n -ms-overflow-style: none; /* For Firefox and IE */\n overflow: -moz-scrollbars-none; /* this will hide the scrollbar in mozilla based browsers */\n -ms-overflow-style: none; /* this will hide the scrollbar in internet explorers */\n`;\n\nexport const OverlayWrapper = styled(Tooltip)`\n margin-left: 10px !important;\n .tooltip-inner {\n max-width: ${(props) => props.maxWidth || \"400px\"}\n padding: 15px;\n border-radius: 10px;\n }\n`;\n\nexport const ListWrapper = styled.div`\n display: flex;\n margin: 5px;\n justify-content: center;\n`;\n\nexport const ListBodyText = styled(SmallBodyText)`\n font-size: 16px !important;\n`;\n\nexport const InfoIcon = styled(LargeBodyText)`\n margin-left: 10px;\n margin-bottom: 4px;\n margin-top: 2px;\n padding: 0 10px;\n border-radius: 50px;\n font-size: 20px;\n font-weight: bold;\n background-color: ${({ theme }) => theme.text.label};\n color: ${({ theme }) => theme.modal.background};\n`;\n","/**\n * Add all new modals to be rendered into components/Global/ModalConductor/index.js\n */\nimport React, { Fragment, useState, useRef, useEffect } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { ModalButton } from \"../FormElements\";\nimport { MediumHeaderText, SmallBodyText } from \"../Text\";\nimport { styles } from \"../../helpers/styles\";\nimport { MainOverlay, removeScrollbars } from \"../Overlay\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\n\nconst transitionTime = 1200;\nconst Modal = ({\n title,\n subtitle,\n children,\n btnText,\n onBtnClick,\n btnTextAlt,\n onBtnAltClick,\n show,\n transitionOut,\n loading,\n margin,\n onOverlayClick,\n align,\n ctaContent,\n isInvalid,\n dataTestId,\n dataTestAltId,\n fullWidthInput,\n scrollMiddle,\n}) => {\n const [actionDone, setActionDone] = useState(false);\n const modalContainerRef = useRef(null);\n\n const onCTAClick = (func) => async (e) => {\n setActionDone(true);\n const promise = func(e);\n if (func && promise)\n promise.then((isDone) => {\n if (!isDone) {\n setActionDone(false);\n }\n });\n };\n\n useEffect(() => {\n scrollToBottom();\n }, []);\n\n const scrollToBottom = () => {\n if (modalContainerRef.current) {\n modalContainerRef.current.scrollTop = scrollMiddle\n ? (modalContainerRef.current.scrollHeight -\n modalContainerRef.current.clientHeight) /\n 2\n : 0;\n }\n };\n\n if (!show) {\n return ;\n }\n\n return (\n \n \n \n \n \n \n {(title || subtitle) && (\n \n {title && {title}}\n {subtitle && {subtitle}}\n \n )}\n {children}\n \n {btnText && (\n \n {ctaContent}\n {btnTextAlt && (\n \n {btnTextAlt}\n \n )}\n \n {btnText}\n \n \n )}\n \n \n \n \n );\n};\n\nconst ModalOuter = styled.div`\n position: fixed;\n overflow: scroll; // overriden by removeScrollbars\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 8;\n ${(props) =>\n props.transitionOut &&\n css`\n pointer-events: none;\n ${ModalWrapper} {\n margin-top: 100px;\n opacity: 0;\n pointer-events: none;\n }\n `}\n ${(props) =>\n props.isLoading &&\n css`\n pointer-events: none;\n ${ModalContent} > * {\n opacity: 0.5;\n }\n ${CTABottom} {\n opacity: 0.5;\n }\n `}\n ${removeScrollbars}\n`;\n\nexport const CenterModal = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n ${(props) => props.margin && `margin: 100px 0`};\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n ${(props) => props.margin && `margin: 100px 0 200px 0`};\n }\n`;\n\nconst ModalWidthWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-around;\n`;\n\nconst ModalWrapper = styled.div`\n width: 50vw;\n max-width: 90%;\n min-width: 300px;\n z-index: 13;\n border-radius: 5px;\n overflow: hidden;\n transition: 0.8s ease all;\n box-shadow: ${styles.largeBoxShadowDark};\n background: ${(props) => props.theme && props.theme.modal.background};\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 70vw;\n }\n`;\n\nconst bottomCTAHeight = 70;\nexport const ModalContent = styled.div`\n padding: 30px 0px 30px 0px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-around;\n justify-self: center;\n &:hover,\n &:focus {\n outline: 0;\n }\n`;\n\nconst HeaderWrapper = styled.div`\n border-bottom: 1px solid ${({ theme }) => theme.modal.divider};\n padding-bottom: 20px;\n margin-bottom: 20px;\n width: 100%;\n`;\n\nconst ModalTitle = styled(MediumHeaderText)`\n color: ${({ theme }) => theme.tertiary};\n text-transform: uppercase;\n`;\n\nconst ModalSubTitle = styled(SmallBodyText)`\n color: ${({ theme }) => theme.modal.subtitle};\n text-transform: uppercase;\n text-align: center;\n`;\n\nconst CTABottom = styled.div`\n bottom: 0;\n width: 100%;\n background: ${({ theme }) => theme.modal.cta};\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 15px 30px;\n height: ${bottomCTAHeight}px;\n transition: 0.2s ease all;\n z-index: -1;\n`;\n\nexport default Modal;\nexport { transitionTime };\n","export const arraysEqual = (_arr1, _arr2) => {\n if (\n !Array.isArray(_arr1) ||\n !Array.isArray(_arr2) ||\n _arr1.length !== _arr2.length\n )\n return false;\n var arr1 = _arr1.concat().sort();\n var arr2 = _arr2.concat().sort();\n\n for (var i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) return false;\n }\n return true;\n};\n\nexport const removeNumberCommas = (str) => {\n if (str === null) return null;\n return str.replace(/,/g, \"\");\n};\n\nexport const insertNumberCommas = (str) => {\n if (str === \"\") return \"\";\n else if (str.charAt(0) === \"-\") return \"-\" + insertNumberCommas(str.slice(1));\n const reversedStr = str.split(\"\").reverse().join(\"\");\n const splitStr = reversedStr.match(/.{1,3}/g);\n const joinedStr = splitStr.join(\",\");\n return joinedStr.split(\"\").reverse().join(\"\");\n};\n\nexport const insertFloatCommas = (str) => {\n const commaIndex = str.search(\"[.]\");\n return (\n insertNumberCommas(str.slice(0, commaIndex)) +\n str.slice(commaIndex, str.length)\n );\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { colors, font } from \"../../../helpers/styles\";\nimport { isInvalidOrEmpty } from \"../../../helpers/utils\";\nimport {\n removeNumberCommas,\n insertNumberCommas,\n} from \"../../../helpers/calculations\";\nimport { InputText, InputField } from \"../../../shared/FormElements\";\nimport { SmallHeaderText } from \"../../../shared/Text\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\n\nconst GameSettingsChoice = ({\n setSmallBlindCents,\n setBigBlindCents,\n smallBlindCents,\n bigBlindCents,\n isInCents,\n setIsInCents,\n}) => {\n const onSmallBlindChange = (e) => {\n const val = removeNumberCommas(e.target.value);\n if (!isInvalidOrEmpty(val)) {\n setSmallBlindCents(val);\n setBigBlindCents(val * 2);\n }\n };\n\n return (\n \n \n \n \n \n \n /{bigBlindCents ? insertNumberCommas(bigBlindCents.toString()) : \"10\"}{\" \"}\n \n setIsInCents(true)}>\n cents\n \n setIsInCents(false)}>\n chips\n \n \n \n );\n};\n\nconst ChoiceWrapper = styled.div`\n display: flex;\n border-radius: 5px;\n overflow: hidden;\n`;\n\nconst BlindsWrapper = styled(InputField)`\n margin-right: -5px;\n text-align: auto;\n width: auto;\n`;\n\nconst BigBlindsWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 60px;\n padding: 0 8px;\n text-align: left;\n color: ${colors.grey};\n`;\n\nconst SmallBlind = styled(InputText)`\n width: 130px;\n border-radius: 0;\n text-align: right;\n font-family: ${font.header};\n letter-spacing: 1px;\n font-size: 18px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 50px;\n margin: 0;\n }\n`;\n\nconst CentsSwitch = styled.div`\n margin-left: 4px;\n border-radius: 2px;\n border: 1px solid ${({ theme }) => theme.foreground};\n padding: 3px 4px;\n opacity: 30%;\n cursor: pointer;\n ${(props) =>\n props.isInCents &&\n `\n background: ${props.theme.foreground};\n opacity: 100%;\n `}\n`;\n\nconst ChipsSwitch = styled.div`\n border-radius: 2px;\n border: 1px solid ${({ theme }) => theme.foreground};\n padding: 3px 4px;\n opacity: 30%;\n cursor: pointer;\n ${(props) =>\n !props.isInCents &&\n `\n background: ${props.theme.foreground};\n opacity: 100%;\n `}\n`;\n\nexport default GameSettingsChoice;\n","import React from \"react\";\nimport { MediumHeaderText } from \"../../../shared/Text\";\nimport {\n OverlayWrapper,\n ListWrapper,\n ListBodyText,\n} from \"../../../shared/Overlay\";\n\nexport const TournamentInfoOverlay = (props) => {\n return (\n \n Tournament Mode Features\n \n
    \n
  • \n Increasing Blinds\n
  • \n
  • \n Mandatory Timer\n
  • \n
  • \n Automatic Buy Ins\n
  • \n
  • \n Disabled Buy In Requests\n
  • \n
\n
\n
\n );\n};\n\nexport const GodModeOverlay = (props) => {\n return (\n \n God Mode Features\n \n \n Players have the option to show or hide their cards from the creator\n of the game. This mode is ideal for teaching or streaming.\n \n \n \n );\n};\n","import React, { useState, useContext, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { GameContext } from \"../context/GameContext\";\nimport { SmallHeaderText, MediumHeaderText, LargeHeaderText } from \"./Text\";\nimport { timer } from \"../helpers/constants\";\nimport { formatCurrency } from \"../helpers/utils\";\n\n// hardcoded for now\nconst blindCoefficients = [1, 2, 3, 5, 10, 15, 25, 50, 75, 100, 150, 200];\n\nconst BlindStructureScroll = ({\n initialBlindCents,\n blindIncreaseMinutes,\n showTitle,\n showCurrentBlinds,\n isInCents,\n}) => {\n const { smallBlindCents, gameStartTime } = useContext(GameContext);\n\n const [gameTimeSeconds, setGameTimeSeconds] = useState(0);\n\n useEffect(() => {\n if (gameStartTime) {\n setTimeout(() => {\n setGameTimeSeconds(\n Math.round(\n (Date.now() - gameStartTime - timer.INITIAL_TIME_MILLISECONDS) /\n 1000\n )\n );\n }, 1000);\n }\n });\n\n const parsePixels = (translate) => {\n if (translate === \"\") return 0;\n return parseFloat(translate.substring(11, translate.length - 3));\n };\n\n const scrollLeft = () => {\n const container = document.getElementById(\"blinds-container\");\n container.style.transform = `translateX(${Math.min(\n 0,\n parsePixels(container.style.transform) + 400\n )}px)`;\n };\n\n const scrollRight = () => {\n const container = document.getElementById(\"blinds-container\");\n container.style.transform = `translateX(${Math.max(\n -(container.scrollWidth - container.offsetWidth),\n parsePixels(container.style.transform) - 400\n )}px)`;\n };\n\n const formatSeconds = (seconds) => {\n if (seconds < 10) {\n return `0:0${seconds}`;\n } else if (seconds < 60) {\n return `0:${seconds}`;\n } else {\n return `${Math.floor(seconds / 60)}:${\n seconds % 60 < 10 ? `0${seconds % 60}` : seconds % 60\n }`;\n }\n };\n\n let items = blindCoefficients.map((blind, idx) => {\n if (\n showCurrentBlinds &&\n gameStartTime &&\n blind * initialBlindCents === smallBlindCents\n ) {\n return (\n \n {idx * blindIncreaseMinutes} min\n \n {formatCurrency(blind * initialBlindCents, isInCents)}/\n {formatCurrency(2 * blind * initialBlindCents, isInCents)}\n \n \n );\n } else {\n return (\n \n {idx * blindIncreaseMinutes} min\n \n {formatCurrency(blind * initialBlindCents, isInCents)}/\n {formatCurrency(2 * blind * initialBlindCents, isInCents)}\n \n \n );\n }\n });\n items.push();\n\n return (\n \n {showTitle && Blind Structure}\n {showCurrentBlinds && (\n \n {gameStartTime\n ? `Current Game Time: ${formatSeconds(gameTimeSeconds)}`\n : \"Game has not started\"}\n \n )}\n \n {\"<\"}\n \n {items}\n \n {\">\"}\n \n \n );\n};\n\nconst StructureWrapper = styled.div`\n width: 100%;\n color: ${({ theme }) => theme.text.label};\n .disabled {\n display: none;\n }\n .active {\n display: block;\n }\n`;\n\nconst ScrollWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BlindsWrapper = styled.div`\n width: 80%;\n overflow: hidden;\n`;\n\nconst BlindsContainer = styled.div`\n display: flex;\n transform: translateX(0px);\n transition: 0.5s all ease-in-out;\n`;\n\nconst BlindWrapper = styled.div`\n text-align: center;\n padding: 5px 15px;\n border-left: 1px solid ${({ theme }) => theme.text.label};\n`;\n\nconst CurrentBlindWrapper = styled.div`\n text-align: center;\n padding: 5px 15px;\n border-left: 1px solid ${({ theme }) => theme.text.label};\n color: ${({ theme }) => theme.tertiary};\n`;\n\nconst Arrow = styled(LargeHeaderText)`\n text-align: center;\n width: 50px;\n height: 20px;\n cursor: pointer;\n`;\n\nexport default BlindStructureScroll;\n","import React, { useState, useContext, useEffect } from \"react\";\nimport { OverlayTrigger } from \"react-bootstrap\";\nimport styled, { css } from \"styled-components\";\nimport Modal from \"../../../shared/Modal\";\nimport GameSettingsChoice from \"./GameSettingsChoice\";\nimport { TournamentInfoOverlay, GodModeOverlay } from \"./InfoOverlay\";\nimport BlindStructureScroll from \"../../../shared/BlindStructureScroll\";\nimport { MediumHeaderText, SmallBodyText } from \"../../../shared/Text\";\nimport {\n InputText,\n InputField,\n InputLabel,\n} from \"../../../shared/FormElements\";\nimport { InfoIcon } from \"../../../shared/Overlay\";\nimport {\n Accordion,\n AccordionItem,\n AccordionItemPanel,\n} from \"react-accessible-accordion\";\nimport { isInvalidOrEmpty, formatCurrency } from \"../../../helpers/utils\";\nimport {\n removeNumberCommas,\n insertNumberCommas,\n} from \"../../../helpers/calculations\";\nimport { colors } from \"../../../helpers/styles\";\nimport { blinds, timer, buyin } from \"../../../helpers/constants\";\nimport Switch from \"../../../shared/FormElements/Switch\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\n\nconst GameSettingsModal = (props) => {\n const [smallBlindCents, setSmallBlindCents] = useState(\n blinds.DEFAULT_SMALL_BLIND_CENTS\n );\n const [bigBlindCents, setBigBlindCents] = useState(\n blinds.DEFAULT_BIG_BLIND_CENTS\n );\n const [blindIncreaseMinutes, setBlindIncreaseMinutes] = useState(\n blinds.DEFAULT_BLIND_INCREASE_MINUTES\n );\n // timers don't exist yet\n // const [timer, setTimer] = useState(-1);\n const [isTimerEnabled, setIsTimerEnabled] = useState(false);\n const [timerLengthSeconds, setTimerLengthSeconds] = useState(\n timer.DEFAULT_TIMER_SECONDS\n );\n const [isGodModeEnabled, setIsGodModeEnabled] = useState(false);\n const [isTournament, setIsTournament] = useState(false);\n const [autoBuyInCents, setAutoBuyInCents] = useState(\n buyin.DEFAULT_AUTO_BUYIN_CENTS\n );\n const [gamePassword, setGamePassword] = useState(\"\");\n const { updateDisplay } = useContext(GameContext);\n const { isMobile } = useContext(BrowserContext);\n const [handTimerLengthSeconds, setHandTimerLengthSeconds] = useState(\n timer.MEDIUM_HAND_TIMER_SECONDS\n );\n const [isInCents, setIsInCents] = useState(true);\n const [autoBuyInFocus, setAutoBuyInFocus] = useState(false);\n\n useEffect(() => {\n if (!autoBuyInFocus) {\n // round betValueCents\n if (autoBuyInCents) {\n const autoBuyInCentsInt = parseInt(autoBuyInCents);\n setAutoBuyInCents(autoBuyInCentsInt);\n }\n }\n }, [autoBuyInFocus]);\n\n const onSaveButtonClick = () => {\n if (props.title === \"Create New Game\") {\n props._createGame(\n smallBlindCents,\n gamePassword,\n null,\n \"game\",\n isTimerEnabled,\n timerLengthSeconds,\n handTimerLengthSeconds,\n isGodModeEnabled,\n isTournament,\n autoBuyInCents,\n blindIncreaseMinutes * 60,\n isInCents\n );\n } else {\n // TODO, this is where you would make settings save during the game\n // this block represents the \"Game Settings\" modal as opposed to the \"Create New Game\" modal\n // for now just close it\n updateDisplay(\"play\");\n }\n return new Promise(() => true);\n };\n\n const onNumberInputChange = (e, cb) => {\n const val = removeNumberCommas(e.target.value);\n if (!isInvalidOrEmpty(val)) {\n cb(val);\n }\n };\n\n const getAutoBuyInValue = () => {\n const autoBuyInDollarsFloat = parseFloat(autoBuyInCents) / 100;\n if (isNaN(autoBuyInDollarsFloat) || autoBuyInDollarsFloat === null) {\n return \"\";\n }\n if (!isInCents) {\n return Math.round(autoBuyInCents, 0);\n }\n return autoBuyInFocus\n ? parseFloat(autoBuyInCents) / 100\n : autoBuyInDollarsFloat.toFixed(2);\n };\n\n const enterPressedForBet = (event) => {\n if (!isInCents && !/[0-9]/.test(event.key)) {\n event.preventDefault();\n }\n };\n\n const password = (\n \n \n Game password (optional)\n \n setGamePassword(e.target.value)}\n type=\"password\"\n placeholder=\"Game password (optional)\"\n contrast\n />\n \n );\n\n return (\n \n \n
\n \n Blinds\n \n \n {isTournament\n ? \"Set your initial small/big blinds\"\n : \"Set your small/big blinds\"}\n
\n {isTournament ? \"Blind structure shown below\" : \"\"}\n
\n
\n setSmallBlindCents(val)}\n setBigBlindCents={(val) => setBigBlindCents(val)}\n isInCents={isInCents}\n setIsInCents={setIsInCents}\n />\n
\n \n \n Timer\n \n {\n if (!isTournament) {\n setIsTimerEnabled(!isTimerEnabled);\n }\n }}\n />\n \n \n \n \n \n \n Tournament Mode\n \n ?\n \n \n {\n setIsTournament(!isTournament);\n setIsTimerEnabled(true);\n }}\n dataTestId={\"tournament-mode-switch\"}\n />\n \n \n \n \n {isInCents && (\n \n Automatic Buy-in (dollars)\n \n )}\n {!isInCents && (\n \n Automatic Buy-in (chips)\n \n )}\n \n Set automatic buy-in amount\n \n \n e.target.blur()}\n value={getAutoBuyInValue()}\n onChange={(e) =>\n setAutoBuyInCents(\n isInCents\n ? parseFloat(e.target.value).toFixed(2) * 100\n : e.target.value\n )\n }\n onKeyPress={enterPressedForBet}\n placeholder={formatCurrency(\n buyin.DEFAULT_AUTO_BUYIN_CENTS,\n isInCents\n )}\n onFocus={() => setAutoBuyInFocus(true)}\n onBlur={() => setAutoBuyInFocus(false)}\n modal\n />\n \n \n \n \n Increasing Blinds (minutes)\n \n \n Set increasing blinds time interval\n \n \n \n onNumberInputChange(e, setBlindIncreaseMinutes)\n }\n placeholder={buyin.DEFAULT_BLIND_INCREASE_MINUTES}\n modal\n />\n \n \n \n \n \n \n \n \n \n God Mode\n \n ?\n \n \n setIsGodModeEnabled(!isGodModeEnabled)}\n />\n \n {props.disableModalStyles && password}\n \n );\n};\n\nconst SettingsWrapper = styled.div`\n margin: 5px 0 10px 0;\n width: 100%;\n padding: 0 40px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n ${(props) =>\n props.disabled &&\n `\n opacity: 0.2;\n pointer-events: none;\n `}\n`;\n\nconst SettingsText = styled(MediumHeaderText)`\n width: auto;\n display: inline-block;\n`;\n\nconst SettingsLabel = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n margin-right: 20px;\n width: 100%;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst SettingsSubText = styled(SmallBodyText)`\n width: 100%;\n`;\n\nconst BigBlindInputText = styled(InputText)`\n height: 50px;\n text-align: right;\n font-size: 22px;\n width: 30%;\n`;\n\nconst AccordionWrapper = styled(Accordion)`\n width: 100%;\n`;\n\nexport const PasswordElement = styled(InputField)`\n input {\n transition: border 0.3s ease;\n }\n ${(props) =>\n !props.disableCustomStyles &&\n css`\n display: flex;\n input {\n width: 90%;\n }\n `}\n\n ${(props) =>\n props.invalid &&\n css`\n input {\n border: 1px solid ${colors.red};\n }\n `}\n ${(props) =>\n !props.disablePadding &&\n `\n padding-right: 10px;\n `}\n`;\n\nconst AutoBuyInInputText = styled(BigBlindInputText)`\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n -moz-appearance: textfield;\n`;\n\nexport default GameSettingsModal;\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport Modal from \"../../../shared/Modal\";\nimport { MediumBodyText } from \"../../../shared/Text\";\n\nconst LandscapeSwitchModal = () => {\n const [isLandscape, setIsLandscape] = useState(true);\n const [overrideHide, setIsOverrideHide] = useState(false);\n\n useEffect(() => {\n checkDimensions();\n window.addEventListener(\"resize\", setScreenOrientation);\n // TODO @dmitri cleanup event listener memory leak, fix hook deps, this is being called too much\n return () => {\n window.removeEventListener(\"resize\", setScreenOrientation);\n };\n });\n\n const checkDimensions = (e) => {\n let width;\n let height;\n if (e) {\n width = e.target.innerWidth;\n height = e.target.innerHeight;\n } else {\n width = window.innerWidth;\n height = window.innerHeight;\n }\n setIsLandscape(width > height);\n };\n\n const setScreenOrientation = (e) => {\n checkDimensions(e);\n };\n return (\n {\n setIsOverrideHide(true);\n }}\n >\n \n \n \n \n );\n};\n\nconst Wrapper = styled.div`\n padding: 0 20px;\n`;\n\nconst Label = styled(MediumBodyText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nexport default LandscapeSwitchModal;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport {\n InputText,\n InputField,\n InputLabel,\n} from \"../../../shared/FormElements\";\nimport Modal from \"../../../shared/Modal\";\nimport { PasswordElement } from \"../GameSettingsModal\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTimes, faPencilAlt } from \"@fortawesome/free-solid-svg-icons\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport { faTwitter, faPatreon } from \"@fortawesome/free-brands-svg-icons\";\n\nconst NewPlayerModal = (props) => {\n const [username, setUsername] = useState(\n props.prefilledUsername ? props.prefilledGamePassword : \"\"\n );\n const [userPassword, setUserPassword] = useState(\"\");\n const [gamePassword, setGamePassword] = useState(\"\");\n const [invalidGamePassword, setIsInvalidGamePassword] = useState(false);\n const [invalidUserPassword, setIsInvalidUserPassword] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleUsernameChange = (e) => {\n setUsername(e.target.value);\n };\n\n const handleUserPasswordChange = (e) => {\n setUserPassword(e.target.value);\n setIsInvalidUserPassword(false);\n };\n\n const handleGamePasswordChange = (e) => {\n setGamePassword(e.target.value);\n setIsInvalidGamePassword(false);\n };\n const onJoinClick = (e) => {\n if (username && username !== \"\") {\n return props\n ._logIn(\n props.prefilledUsername\n ? props.prefilledUsername.toLowerCase()\n : username.toLowerCase(),\n userPassword,\n props.prefilledGamePassword\n ? props.prefilledGamePassword\n : gamePassword,\n props.isGod\n )\n .then((response) => {\n if (response.error) {\n if (response.field && response.field.includes(\"Game\")) {\n setIsInvalidGamePassword(true);\n }\n if (response.field && response.field.includes(\"User\")) {\n setIsInvalidUserPassword(true);\n }\n return false;\n }\n return true;\n });\n }\n return new Promise(() => false);\n };\n\n const onSpectateClick = (e) => {\n if (username && username !== \"\") {\n return props\n ._spectateGame(\n props.prefilledUsername\n ? props.prefilledUsername.toLowerCase()\n : username.toLowerCase(),\n userPassword,\n props.prefilledGamePassword\n ? props.prefilledGamePassword\n : gamePassword,\n props.isGod\n )\n .then((response) => {\n if (response.error) {\n if (response.field && response.field.includes(\"Game\")) {\n setIsInvalidGamePassword(true);\n }\n if (response.field && response.field.includes(\"User\")) {\n setIsInvalidUserPassword(true);\n }\n return false;\n }\n return true;\n });\n }\n return new Promise(() => false);\n };\n\n const checkOnEnter = (event) => {\n var code = event.keyCode || event.which;\n if (code === 13) {\n setIsLoading(true);\n onJoinClick(event);\n }\n };\n\n let gamePassField = ``;\n if (props.hasGamePassword) {\n gamePassField = (\n \n \n Game Password\n \n \n \n \n );\n }\n\n return (\n \n \n \n Username\n \n \n \n \n \n User Password (optional)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst FullWidthInput = styled(InputText)`\n width: 100%;\n`;\n\nconst InvalidIcon = styled(FontAwesomeIcon)`\n position: absolute;\n right: 30px;\n ${(props) => props.is_user_password_field && `right: 20px;`}\n top: 50%;\n transform: translateY(-50%);\n color: ${({ theme }) => theme.tertiary};\n height: 10px;\n transition: opacity 0.3s ease;\n ${(props) =>\n props.hide &&\n `\n opacity: 0;\n cursor-events: none;\n `}\n`;\n\nconst MediaContainer = styled.div`\n margin-top: 20px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst MediaIcon = styled(Icon)`\n margin: 0 10px;\n`;\n\nexport default NewPlayerModal;\n","import React from \"react\";\nimport { SmallBodyText, HighlightedText } from \"../../../shared/Text\";\nimport Modal from \"../../../shared/Modal\";\n\nconst SiteIntroModal = (props) => {\n return (\n \n
\n \n lipoker is the simplest, fastest way to play poker in browser.
\n Just share the link to invite your friends to play!
\n {props.numGames} games played!\n
\n
\n No downloads. No signup. No hassle.\n
\n
\n \n );\n};\n\nexport default SiteIntroModal;\n","import React from \"react\";\nimport Modal from \"../../../shared/Modal\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\n\nconst DisconnectedModal = ({ show, onBtnClick, hasJoinedGame }) => {\n let innerText = hasJoinedGame ? (\n \n ) : (\n \n );\n return (\n \n
{innerText}
\n \n );\n};\n\nconst Label = styled(SmallBodyText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nexport default DisconnectedModal;\n","import React from \"react\";\nimport Modal from \"../../../shared/Modal\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\n\nconst NoInternetModal = ({ show, onBtnClick }) => {\n let wifiDisconnectText = (\n \n );\n return (\n \n
{wifiDisconnectText}
\n \n );\n};\n\nconst Label = styled(SmallBodyText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nexport default NoInternetModal;\n","import React from \"react\";\nimport Modal from \"../../../shared/Modal\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\n\nconst DifferentLogInModal = ({ show, onBtnClick, isSpectating }) => {\n return (\n \n {!isSpectating ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n \n );\n};\n\nconst Label = styled(SmallBodyText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nexport default DifferentLogInModal;\n","import {\n faSmileBeam,\n faSmile,\n faMeh,\n faFrown,\n faFrownOpen,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nexport const optionsOrderedByRating = [\n {\n icon: faFrownOpen,\n textResponse: \"Oh no :( How can we make your experience better?\",\n },\n {\n icon: faFrown,\n textResponse: \"Oh no :( How can we make your experience better?\",\n },\n {\n icon: faMeh,\n textResponse: \"How can we make your experience better?\",\n },\n {\n icon: faSmile,\n textResponse: \"Great! What do you like or want to see more of?\",\n },\n {\n icon: faSmileBeam,\n textResponse: \"Great! What do you like or want to see more of?\",\n },\n];\n","import React, { useState, useEffect } from \"react\";\nimport { sendFeedback } from \"../../../helpers/api\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\nimport { MediumBodyText, SmallBodyText } from \"../../../shared/Text\";\nimport { InputText, Icon, TextAreaInput } from \"../../../shared/FormElements\";\nimport { optionsOrderedByRating } from \"./options\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport styled from \"styled-components\";\nimport { logError } from \"../../../helpers/logger\";\nimport { faHeart } from \"@fortawesome/free-solid-svg-icons\";\n\n/**\n * Required to submit feedback:\n * rating\n * OR\n * rating + text feedback + email (if you add text feedback, email required)\n * OR\n * rating + beta interested + email (if you heart react, email required)\n */\nconst FeedbackModal = (props) => {\n const [rating, setRating] = useState(-1);\n const [email, setEmail] = useState(\"\");\n const [textareaText, setTextareaText] = useState(\"\");\n const [betaInterest, setBetaInterest] = useState(-1);\n const [isLoadingAfterSend, setIsLoadingAfterSend] = useState(false);\n const [startTransition, setStartTransition] = useState(true);\n\n const _reset = () => {\n setRating(-1);\n setTextareaText(\"\");\n setBetaInterest(-1);\n };\n\n const submitFeedback = () => {\n if (rating !== -1) {\n setIsLoadingAfterSend(true);\n return sendFeedback(\n props.gameId,\n props.username,\n email,\n rating + 1,\n textareaText,\n betaInterest,\n props.provider\n )\n .then((_) => {\n setStartTransition(true);\n setIsLoadingAfterSend(false);\n setTimeout(() => {\n props.hideModal(true);\n _reset();\n }, transitionTime);\n return false;\n })\n .catch((err) => {\n logError(err);\n return false;\n });\n }\n return Promise.resolve(false);\n };\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n props.hideModal(false);\n }, transitionTime);\n };\n\n useEffect(() => {\n // if showing again, reset\n if (props.show) {\n setStartTransition(false);\n }\n }, [props.show]);\n\n return (\n \n \n \n \n \n {optionsOrderedByRating.map(({ icon }, i) => (\n setRating(i)}\n />\n ))}\n \n \n {rating !== -1 && (\n <>\n setTextareaText(e.target.value)}\n />\n
\n setEmail(e.target.value)}\n type=\"email\"\n placeholder={textareaText.length === 0 ? \"Email\" : \"Email *\"}\n />\n {textareaText.length !== 0 && (\n {`* required: We'd love to let you know once we implement your suggestion!`}\n )}\n {textareaText.length === 0 && betaInterest === 1 && (\n {`* required: We'd love to let you know once we address your feedback!`}\n )}\n \n setBetaInterest(-betaInterest)}\n />\n {`Heart react if you'd be open to working with us to beta test and provide feedback!`}\n \n {rating >= 3 && (\n \n \n {\n \"Like every site, Lipoker needs resources. Please consider making a donation \"\n }\n \n here\n \n {\". Thank you for your tremendous support.\"}\n \n \n )}\n \n )}\n
\n \n );\n};\n\nconst Label = styled(MediumBodyText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst SmallLabel = styled(SmallBodyText)`\n color: ${({ theme }) => theme.text.placeholder};\n margin-left: 2px;\n margin-top: 3px;\n`;\n\nconst FeedbackModalInner = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 0 80px;\n ${(props) =>\n props.disable &&\n `\n opacity: 0.5;\n pointer-events: none;\n `}\n @media screen and (max-width: ${mobileBreakpoint}), screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 0 50px;\n }\n`;\n\nconst FeedbackHeader = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst OptionPicker = styled.div`\n display: flex;\n margin-top: 10px;\n width: 100%;\n justify-content: space-between;\n`;\n\nconst Option = styled(Icon)`\n color: ${(props) =>\n props.selected\n ? ({ theme }) => theme.tertiary\n : ({ theme }) => theme.foreground};\n ${(props) => props.index === 0 && `margin-left: 0px;`}\n transition: 0.2s ease all;\n &:hover {\n transform: scale(1.1);\n }\n`;\n\nconst HeartWrapper = styled.div`\n display: flex;\n flex-direction: row;\n margin-top: 20px;\n align-items: center;\n`;\n\nconst HeartLabel = styled(SmallLabel)`\n margin-left: 6px;\n`;\n\nconst InputLine = styled(InputText)`\n width: 100%;\n margin-right: 10px;\n`;\n\nexport default FeedbackModal;\n","import React from \"react\";\nimport { SmallBodyText, MediumBodyText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\n\nexport const Mersenne = () => {\n return (\n \n We use the Mersenne Twister, one of the most reliable and widely used\n random number generators (also certified and recommended by iTechLabs in\n 2017 for online gaming). Moreover, it is the default PRNG for many\n software systems, including Python, Microsoft Excel, MATLAB, R, Ruby, and\n more. For a more in-depth explanation about the Mersenne Twister, check\n out this{\" \"}\n \n link\n \n .\n \n );\n};\n\nexport const ShowHand = () => {\n return (\n \n The winners, players who have went all-in, and the last aggressor (or\n first person left of dealer if everyone checks) along with players who\n have increasingly better hands going clockwise-- show their cards. For the\n rest of the players who have not folded, they have the option to show\n their hands or not.\n \n );\n};\n\nexport const Philosophy = () => {\n return (\n \n Unlike other sites that present a complicated interface for you to play\n on, Lipoker is the only site built for making your online poker experience\n with friends as simple and enjoyable as possible. From video chat to\n customizable themes, our commitment is to create the best platform for you\n to play poker.\n \n );\n};\n\nexport const ContactUs = () => {\n return (\n \n Should you run into problems or have any questions, please contact us at{\" \"}\n lipoker.team@gmail.com!\n \n );\n};\n\nexport const Patreon = () => {\n return (\n \n We would love your support to further our commitment to providing you the\n best platform play online poker. This includes covering costs for our\n servers, development time for new features, and many other initiatives. If\n you are interested in making a donation, you can do so here:{\" \"}\n \n Lipoker@Patreon\n \n \n );\n};\n\n// rough draft\nexport const GamePlay = () => {\n return (\n \n

\n We currently host No Limit Hold ‘em, the most popular variant of poker.\n

\n

\n Definitions:
\n Table Positions:
\n Dealer -
\n Big blind -
\n Small blind -
\n $$$:\n
\n - Pot: total sum wagered by players in a single hand\n
\n 5 Different Play Actions :
\n Fold - player gives up their cards and takes no further part in the hand\n
\n Bet - person who first wages a positive amount of money\n
\n Check - players have the option to defer their bet (only if NO bet has\n occurred)\n
\n Call - player matches the most recent bet\n
\n Raise - player raises amount, forcing other players to match. Their\n raise amount must at least double the most recent bet.\n
\n If you don’t have enough money to raise or call, you must go All-In\n (player places all his money in the pot) to remain in the hand.\n
\n

\n $$$: - Pot: total sum wagered by players in a single hand 5 Different Play\n Actions : Fold - player gives up their cards and takes no further part in\n the hand Bet - person who first wages a positive amount of money Check -\n players have the option to defer their bet (only if NO bet has occurred)\n Call - player matches the most recent bet Raise - player raises amount,\n forcing other players to match. Their raise amount must at least double\n the most recent bet. If you don’t have enough money to raise or call, you\n must go All-In (player places all his money in the pot) to remain in the\n hand. Gameplay: Clockwise If at any point in time, all players in the hand\n decide to All-in, the gameplay jumps straight into showdown (described in\n post-flop section). Pre-flop: - This is the stage before any cards show up\n on the table. - After everyone has finished checking or calling, the game\n proceeds to the post-flop stage. Post-flop: - Community cards (3 cards): -\n Turn, river: 4th and 5th card dealt - If two or more players are still in\n the hand after the river, the gameplay proceeds to the showdown stage. -\n Showdown - All the remaining table cards are dealt - In general, the\n person with the best hand is declared the winner and collects the entire\n pot. - However, alternative endings may happen: - Tie - All-in’s -\n Side-pots\n
\n );\n};\n\nconst AnswerWrapper = styled(MediumBodyText)`\n align-content: center;\n color: ${({ theme }) => theme.text.label};\n font-size: 17px;\n`;\n","import React, { useState, useEffect } from \"react\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\nimport {\n Accordion,\n AccordionItem,\n AccordionItemButton,\n AccordionItemPanel,\n} from \"react-accessible-accordion\";\nimport \"react-accessible-accordion/dist/fancy-example.css\";\nimport { SmallHeaderText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\nimport * as explanations from \"./QAs\";\n\nconst faqList = [\n {\n id: 0,\n question: \"Why was Lipoker created?\",\n answer: ,\n },\n {\n id: 1,\n question: \"How is the deck being shuffled?\",\n answer: ,\n },\n {\n id: 2,\n question: \"Who shows their cards during showdown?\",\n answer: ,\n },\n {\n id: 3,\n question: \"How can I donate?\",\n answer: ,\n },\n {\n id: 4,\n question: \"I have a few more questions, whom should I contact?\",\n answer: ,\n },\n];\n\nconst FAQModal = ({ hideModal, show, isFourColorDeck, isMobile }) => {\n const [startTransition, setStartTransition] = useState(true);\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n hideModal(false);\n }, transitionTime);\n };\n\n useEffect(() => {\n // if showing again, reset\n if (show) {\n setStartTransition(false);\n }\n }, [show]);\n\n let accordionList = faqList.map((x) => {\n return (\n \n \n {x.question}\n \n {x.answer}\n \n );\n });\n\n return (\n \n \n {accordionList}\n \n \n );\n};\n\nconst AccordionWrapper = styled(Accordion)`\n display: flex;\n flex-direction: column;\n align-content: center;\n padding: 6px 10%;\n width: 100%;\n`;\n\nconst QuestionHeader = styled(SmallHeaderText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst ButtonWrapper = styled(AccordionItemButton)`\n cursor: pointer;\n background: ${({ theme }) => theme.foreground};\n padding-top: 15px;\n padding-bottom: 12px;\n padding-left: 10px;\n padding-right: 10px;\n border-radius: 2px;\n &:hover {\n background: ${({ theme }) => theme.background};\n }\n outline: none;\n margin-bottom: 3px;\n`;\n\nexport default FAQModal;\n","import React from \"react\";\nimport { font, colors } from \"../../helpers/styles\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst CardBack = ({ style }) => {\n return (\n \n \n LP\n \n \n );\n};\n\nconst CardBackContent = styled.div`\n background: ${({ theme }) => theme.tertiary};\n border: 5px solid ${colors.white};\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n border-width: 3px;\n }\n`;\n\nconst LogoWrapper = styled.div`\n width: 25px;\n height: 25px;\n border-radius: 50%;\n border: 1px solid ${colors.white};\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: ${font.header};\n font-size: 12px;\n color: ${colors.white};\n span {\n margin: 2px 0 0 1px;\n letter-spacing: 0.6px;\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n border: none;\n }\n`;\n\nexport default CardBack;\n","import React from \"react\";\nimport { colors } from \"../../helpers/styles\";\nimport styled from \"styled-components\";\n\nconst CardEmpty = (props) => {\n return ;\n};\n\nconst CardEmptyContent = styled.div`\n height: 100%;\n width: 100%;\n border: 2px dashed ${colors.white};\n`;\n\nexport default CardEmpty;\n","import React from \"react\";\n\nconst Club = ({ color = \"#000000\", style }) => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default Club;\n","import React from \"react\";\n\nconst Diamond = ({ color = \"#000000\", style }) => {\n return (\n \n \n \n );\n};\n\nexport default Diamond;\n","import React from \"react\";\n\nconst Spade = ({ color = \"#000000\", style }) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Spade;\n","import React from \"react\";\n\nconst Heart = ({ color = \"#000000\", style }) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Heart;\n","const sizes = {\n lg: {\n height: \"95px\",\n width: \"72px\",\n iconHeight: \"30px\",\n iconBottom: \"5px\",\n fontSize: \"52px\",\n },\n md: {\n height: \"78px\",\n width: \"58px\",\n iconHeight: \"26px\",\n iconBottom: \"5px\",\n fontSize: \"44px\",\n },\n sm: {\n height: \"70px\",\n width: \"50px\",\n iconHeight: \"22px\",\n iconBottom: \"5px\",\n fontSize: \"42px\",\n },\n mobile: {\n height: \"50px\",\n width: \"35px\",\n iconHeight: \"14px\",\n iconBottom: \"5px\",\n fontSize: \"26px\",\n },\n};\nexport default sizes;\n","import React, { useEffect, useState } from \"react\";\nimport CardBack from \"./CardBack\";\nimport CardEmpty from \"./CardEmpty\";\nimport { Heart, Spade, Diamond, Club } from \"./suits\";\nimport sizes from \"./sizes\";\nimport styled, { withTheme } from \"styled-components\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport { colors, font } from \"../../helpers/styles\";\n\nconst Card = ({\n isFourColorDeck,\n theme,\n size,\n enforceCornerSuit,\n isEmpty,\n isBack,\n number,\n suit,\n handCardNumber,\n border,\n isFlat,\n isHighlighted,\n isFolded,\n style,\n}) => {\n const [color, setColor] = useState(\"\");\n const allSuits = [\"spade\", \"club\", \"diamond\", \"heart\"];\n\n useEffect(() => {\n const dark = [\"spade\", \"club\"];\n if (isFourColorDeck) {\n setColor(theme.card[suit]);\n } else if (dark.includes(suit)) {\n setColor(theme.card.dark);\n } else {\n setColor(theme.card.light);\n }\n }, [isFourColorDeck, theme]);\n\n const getSuit = () => {\n if (color.length === 0) {\n return <>;\n }\n const sizeObj = sizes[size || \"md\"];\n let style = {\n height: sizeObj.iconHeight,\n };\n if (size !== \"mobile\" || enforceCornerSuit) {\n Object.assign(style, {\n bottom: sizeObj.iconBottom,\n right: \"5px\",\n position: \"absolute\",\n });\n }\n\n if (suit === \"spade\") {\n return ;\n } else if (suit === \"diamond\") {\n return ;\n } else if (suit === \"club\") {\n return ;\n } else {\n return ;\n }\n };\n\n let cardInner;\n if (isEmpty) {\n cardInner = ;\n } else if (isBack) {\n cardInner = ;\n } else {\n cardInner = (\n \n

{number}

\n {allSuits.includes(suit) && getSuit()}\n
\n );\n }\n\n return (\n \n {cardInner}\n \n );\n};\n\nconst CardBase = styled.div`\n background: ${colors.white};\n ${(props) =>\n props.isFolded &&\n props.theme &&\n `\n background: ${props.theme.foreground};\n `}\n width: 100%;\n height: 100%;\n h1 {\n position: absolute;\n top: 3px;\n left: 8px;\n }\n img {\n position: absolute;\n bottom: 5px;\n right: 5px;\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n h1 {\n position: inherit;\n line-height: 22px;\n margin: 0;\n }\n img {\n position: inherit;\n }\n }\n`;\n\nconst CardWrapper = styled.div`\n position: relative;\n font-family: ${font.header};\n border-radius: 5px;\n overflow: hidden;\n ${(props) =>\n props.size &&\n `\n height: ${sizes[props.size][\"height\"]};\n width: ${sizes[props.size][\"width\"]};\n ${CardBase} img {\n height: ${sizes[props.size][\"iconHeight\"]};\n }\n ${CardBase} h1 {\n font-size: ${sizes[props.size][\"fontSize\"]};\n }\n `}\n ${(props) =>\n props.color &&\n `\n color: ${props.color}\n `}\n ${(props) =>\n props.handCardNumber === \"0\" &&\n `\n position: absolute;\n transform: rotate(-6deg);\n left: 17px;\n z-index: 2;\n `}\n ${(props) =>\n props.handCardNumber === \"1\" &&\n `\n position: absolute;\n transform: rotate(6deg);\n right: 17px;\n z-index: 1;\n `}\n ${(props) =>\n !props.isFlat && props.theme\n ? `\n border: 1px solid ${props.theme.foreground}\n `\n : \"margin: 5px;\"}\n ${(props) =>\n props.border &&\n props.theme &&\n `\n border: 1px solid ${props.theme.foreground}\n `}\n ${(props) =>\n props.isHighlighted &&\n props.theme &&\n `border: 3px solid ${props.theme.tertiary};`}\n ${(props) =>\n props.isFolded &&\n `\n opacity: 0.6;\n `}\n @media screen and (max-width: ${mobileBreakpoint}), screen and (max-height: ${mobileHeightBreakpoint}) {\n height: ${sizes[\"mobile\"][\"height\"]};\n width: ${sizes[\"mobile\"][\"width\"]};\n ${CardBase} img {\n height: ${sizes[\"mobile\"][\"iconHeight\"]};\n }\n ${CardBase} h1 {\n font-size: ${sizes[\"mobile\"][\"fontSize\"]};\n }\n ${(props) =>\n props.handCardNumber === \"0\" &&\n `\n position: absolute;\n transform: rotate(-6deg);\n left: 12px;\n z-index: 2;\n `}\n ${(props) =>\n props.handCardNumber === \"1\" &&\n `\n position: absolute;\n transform: rotate(6deg);\n right: 12px;\n z-index: 1;\n `}\n ${(props) =>\n props.isFlat &&\n `\n margin: 2px;\n `}\n }\n`;\n\nconst cardHeightRaw = 55;\nconst mobileCardHeightRaw = 40;\nconst cardHeight = `${cardHeightRaw}px`;\nconst mobileCardHeight = `${mobileCardHeightRaw}px`;\n\nexport { cardHeight, mobileCardHeight, cardHeightRaw, mobileCardHeightRaw };\nexport default withTheme(Card);\n","export const nameMap = {\n \"High Card\": \"10. High Card\",\n Pair: \"9. Pair\",\n \"Two Pair\": \"8. Two Pair\",\n Trips: \"7. Three of a Kind\",\n Straight: \"6. Straight\",\n Flush: \"5. Flush\",\n \"Full House\": \"4. Full House\",\n Quads: \"3. Four of a Kind\",\n \"Straight Flush\": \"2. Straight Flush\",\n};\n\nexport const handsList = [\n {\n name: \"1. Royal Flush\",\n cards: [\n {\n suit: \"heart\",\n number: \"A\",\n },\n {\n suit: \"heart\",\n number: \"K\",\n },\n {\n suit: \"heart\",\n number: \"Q\",\n },\n {\n suit: \"heart\",\n number: \"J\",\n },\n {\n suit: \"heart\",\n number: \"10\",\n },\n ],\n },\n {\n name: \"2. Straight Flush\",\n cards: [\n {\n suit: \"heart\",\n number: \"5\",\n },\n {\n suit: \"heart\",\n number: \"4\",\n },\n {\n suit: \"heart\",\n number: \"3\",\n },\n {\n suit: \"heart\",\n number: \"2\",\n },\n {\n suit: \"heart\",\n number: \"A\",\n },\n ],\n },\n {\n name: \"3. Four of a Kind\",\n cards: [\n {\n suit: \"heart\",\n number: \"4\",\n },\n {\n suit: \"diamond\",\n number: \"4\",\n },\n {\n suit: \"club\",\n number: \"4\",\n },\n {\n suit: \"spade\",\n number: \"4\",\n },\n {\n isEmpty: true,\n },\n ],\n },\n {\n name: \"4. Full House\",\n cards: [\n {\n suit: \"club\",\n number: \"8\",\n },\n {\n suit: \"diamond\",\n number: \"8\",\n },\n {\n suit: \"club\",\n number: \"5\",\n },\n {\n suit: \"spade\",\n number: \"5\",\n },\n {\n suit: \"heart\",\n number: \"5\",\n },\n ],\n },\n {\n name: \"5. Flush\",\n cards: [\n {\n suit: \"club\",\n number: \"9\",\n },\n {\n suit: \"club\",\n number: \"2\",\n },\n {\n suit: \"club\",\n number: \"4\",\n },\n {\n suit: \"club\",\n number: \"6\",\n },\n {\n suit: \"club\",\n number: \"A\",\n },\n ],\n },\n {\n name: \"6. Straight\",\n cards: [\n {\n suit: \"spade\",\n number: \"9\",\n },\n {\n suit: \"diamond\",\n number: \"8\",\n },\n {\n suit: \"diamond\",\n number: \"7\",\n },\n {\n suit: \"club\",\n number: \"6\",\n },\n {\n suit: \"heart\",\n number: \"5\",\n },\n ],\n },\n {\n name: \"7. Three of a Kind\",\n cards: [\n {\n suit: \"spade\",\n number: \"2\",\n },\n {\n suit: \"heart\",\n number: \"2\",\n },\n {\n suit: \"diamond\",\n number: \"2\",\n },\n {\n isEmpty: true,\n },\n {\n isEmpty: true,\n },\n ],\n },\n {\n name: \"8. Two Pair\",\n cards: [\n {\n suit: \"club\",\n number: \"9\",\n },\n {\n suit: \"diamond\",\n number: \"9\",\n },\n {\n suit: \"spade\",\n number: \"K\",\n },\n {\n suit: \"diamond\",\n number: \"K\",\n },\n {\n isEmpty: true,\n },\n ],\n },\n {\n name: \"9. Pair\",\n cards: [\n {\n suit: \"heart\",\n number: \"6\",\n },\n {\n suit: \"club\",\n number: \"6\",\n },\n {\n isEmpty: true,\n },\n {\n isEmpty: true,\n },\n {\n isEmpty: true,\n },\n ],\n },\n {\n name: \"10. High Card\",\n cards: [\n {\n suit: \"spade\",\n number: \"A\",\n },\n {\n isEmpty: true,\n },\n {\n isEmpty: true,\n },\n {\n isEmpty: true,\n },\n {\n isEmpty: true,\n },\n ],\n },\n];\n","import React, { useState, useEffect } from \"react\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\nimport Card from \"../../../shared/Card\";\nimport { handsList, nameMap } from \"./handsList\";\nimport { MediumBodyText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\n\nconst HandRankingsModal = ({\n hideModal,\n show,\n isFourColorDeck,\n isMobile,\n playerHand,\n}) => {\n const [startTransition, setStartTransition] = useState(true);\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n hideModal(false);\n }, transitionTime);\n };\n\n useEffect(() => {\n // if showing again, reset\n if (show) {\n setStartTransition(false);\n }\n }, [show]);\n\n return (\n \n {handsList.map((row, i) => {\n const cardsList = row.cards;\n const highlight =\n playerHand in nameMap ? nameMap[playerHand] === row.name : false;\n return (\n \n {row.name}\n \n {cardsList.map((card, j) => (\n \n ))}\n \n \n );\n })}\n \n );\n};\nconst HandRow = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n padding: 0 60px;\n`;\nconst CardsRow = styled.div`\n display: flex;\n ${(props) =>\n props.highlight &&\n props.theme &&\n `\n border: 2px solid ${props.theme.foreground};\n border-radius: 5px;\n background: ${props.theme.foreground};\n `}\n`;\n\nconst HandText = styled(MediumBodyText)`\n width: 100%;\n font-weight: bold;\n color: ${({ theme }) => theme.text.widget};\n`;\n\nexport default HandRankingsModal;\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { MediumHeaderText } from \"./Text\";\n\nconst TabView = ({ tabNamesToViews, defaultView, onTabChange }) => {\n const [currentView, setCurrentView] = useState(defaultView);\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n setCurrentView(defaultView);\n }, [defaultView]);\n\n const tabsList = Object.keys(tabNamesToViews);\n return (\n <>\n \n {tabsList.map((tabName, i) => {\n return (\n {\n setCurrentView(tabName);\n onTabChange(tabName);\n setActiveIndex(i);\n }}\n isActive={currentView === tabName}\n >\n {tabName}\n \n );\n })}\n \n \n \n \n {tabNamesToViews[currentView]}\n \n );\n};\n\nconst TabBar = styled.div`\n position: relative;\n width: 100%;\n height: 40px;\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n border-bottom: 1px solid ${({ theme }) => theme.modal.divider};\n`;\n\nconst TabItem = styled.div`\n width: 100%;\n height: 100%;\n color: ${({ theme }) => theme.tertiary};\n display: flex;\n align-items: flex-end;\n justify-content: center;\n cursor: pointer;\n ${(props) =>\n !props.isActive &&\n `\n opacity: 0.3;\n `}\n`;\n\nconst ActiveBar = styled.div`\n position: absolute;\n height: 5px;\n bottom: 0;\n transform: translate(0, 100%);\n transition: 0.3s ease left;\n padding: 0 6%;\n`;\n\nconst InnerBar = styled.div`\n background: ${({ theme }) => theme.tertiary};\n width: 100%;\n height: 100%;\n`;\n\nexport default TabView;\n","import styled from \"styled-components\";\nimport { colors, font } from \"../../helpers/styles\";\n\nimport { RadioGroup, Radio } from \"react-radio-group\";\n\nexport const StyledDiv = styled.div`\n float: right;\n margin-top: 10px;\n width: 30%;\n`;\n\nexport const StyledRadioLabel = styled.div`\n margin-right: 20px;\n width: 100%;\n color: ${({ theme }) => theme.text.label};\n font-family: ${font.body};\n`;\n\nexport const StyledRadioGroup = styled(RadioGroup)`\n margin-right: 0px;\n`;\n\nexport const StyledRadio = styled(Radio)`\n vertical-align: middle;\n margin-right: 10px;\n width: 18px;\n height: 18px;\n color: colors.lightRed;\n background: ${colors.white};\n`;\n","import { LargeBodyText } from \"../../../shared/Text\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport styled from \"styled-components\";\n\nexport const SettingsOption = styled.div`\n display: flex;\n justify-content: space-between;\n width: 100%;\n padding: 5px;\n align-items: center;\n margin: 12px 0;\n ${(props) =>\n props.disabled &&\n `\n opacity: 0.4;\n pointer-events: none;\n `}\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n border-right-width: 0;\n border-left-width: 0;\n border-radius: 0;\n margin: 0;\n }\n`;\n\nexport const SettingsText = styled(LargeBodyText)`\n margin-top: 2px;\n font-weight: bold;\n color: ${({ theme }) => theme.text.label};\n`;\n\nexport const Wrapper = styled.div`\n width: 100%;\n height: 100%;\n padding: 20px 50px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 10px;\n }\n`;\n","import React from \"react\";\nimport { SmallBodyText } from \"./Text\";\nimport { Icon } from \"./FormElements\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport { useStateWithLocalStorageBoolean } from \"../hooks/useStateWithLocalStorage\";\nimport styled, { withTheme } from \"styled-components\";\n\nconst CollapsibleNotice = ({ uniqueId, text, theme }) => {\n const [show, setShow] = useStateWithLocalStorageBoolean(uniqueId, true);\n\n if (!show) {\n return <>;\n }\n\n return (\n \n {text}\n setShow(false)}\n />\n \n );\n};\n\nconst Wrapper = styled(SmallBodyText)`\n position: relative;\n text-align: center;\n color: ${({ theme }) => theme.text.label};\n border: 1px dashed ${({ theme }) => theme.text.label};\n padding: 10px 0;\n`;\n\nconst CancelIcon = styled(Icon)`\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translate(0, -50%);\n cursor: pointer;\n`;\n\nexport default withTheme(CollapsibleNotice);\n","import React from \"react\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport Switch from \"../../../shared/FormElements/Switch\";\nimport {\n StyledDiv,\n StyledRadio,\n StyledRadioGroup,\n StyledRadioLabel,\n} from \"../../../shared/FormElements/RadioButton\";\nimport { InputText } from \"../../../shared/FormElements\";\nimport { Wrapper, SettingsOption, SettingsText } from \"./shared\";\nimport CollapsibleNotice from \"../../../shared/CollapsibleNotice\";\nimport styled from \"styled-components\";\nimport { blinds, timer } from \"../../../helpers/constants\";\n\nconst GameSettingsView = ({\n smallBlindSettings,\n setSmallBlindSettings,\n isTimerEnabledSettings,\n setIsTimerEnabledSettings,\n timerLengthSecondsSettings,\n setTimerLengthSecondsSettings,\n isTournament,\n isAdmin,\n handTimerLengthSecondsSettings,\n setHandTimerLengthSecondsSettings,\n useCentsSettings,\n setUseCentsSettings,\n adminPlayers,\n}) => {\n const stringifyPlayerNames = () => {\n const playerNames = adminPlayers.map((player) => player.playerName);\n return playerNames.join(\", \");\n };\n\n return (\n \n 1 ? \"s\" : \"\"\n } ${stringifyPlayerNames()} can change settings`\n }\n uniqueId=\"admin-settings-notice\"\n />\n \n \n Small Blind\n \n Change will go into effect on the next hand.\n \n \n setSmallBlindSettings(e.target.value)}\n placeholder={blinds.DEFAULT_SMALL_BLIND_CENTS}\n modal\n />\n {useCentsSettings && cents}\n {!useCentsSettings && chips}\n \n \n \n Use Money Denomination\n \n setUseCentsSettings(!useCentsSettings)}\n />\n \n \n \n Timer\n \n Change will go into effect on the next hand.\n \n \n \n setIsTimerEnabledSettings(!isTimerEnabledSettings)\n }\n />\n \n \n \n Timer (seconds)\n \n Change will go into effect on the next hand.\n \n \n setTimerLengthSecondsSettings(e.target.value)}\n placeholder={timer.DEFAULT_TIMER_SECONDS}\n modal\n />\n \n \n \n Delay Between Hands\n \n \n \n \n \n Slow (14)\n \n \n \n Medium (8)\n \n \n \n Fast (2)\n \n \n \n \n \n );\n};\n\nconst SettingsLabel = styled.div`\n margin-right: 20px;\n width: 100%;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst BigBlindInputText = styled(InputText)`\n height: 45px;\n text-align: right;\n font-size: 22px;\n width: 30%;\n margin-right: 5px;\n`;\n\nexport default GameSettingsView;\n","import React from \"react\";\nimport Switch from \"../../../shared/FormElements/Switch\";\nimport { Wrapper, SettingsOption, SettingsText } from \"./shared\";\n\nconst UserPreferencesView = ({\n sound,\n setSound,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n betButtonsOnRight,\n setBetButtonsOnRight,\n setJoinCall,\n isMobile,\n isFourColorDeck,\n setIsFourColorDeck,\n}) => {\n return (\n \n \n Gameplay Sound\n setSound(!sound)} />\n \n \n Four Color Deck\n setIsFourColorDeck(!isFourColorDeck)}\n />\n \n \n Enable Video Call\n {\n if (showVideoChat) {\n // we want to disable\n setShowVideoChat(false);\n setJoinCall(false);\n } else {\n // we want to show view, but not join yet\n setShowVideoChat(true);\n }\n }}\n />\n \n \n Video On Right\n setVideoIsOnRight(!videoIsOnRight)}\n />\n \n \n Bet Buttons On Right\n setBetButtonsOnRight(!betButtonsOnRight)}\n />\n \n \n );\n};\n\nexport default UserPreferencesView;\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\nimport TabView from \"../../../shared/TabView\";\nimport GameSettingsView from \"./GameSettingsView\";\nimport UserPreferencesView from \"./UserPreferencesView\";\nimport { emit } from \"../../../helpers/socket\";\n\nconst BrowserSettingsModal = ({\n gameId,\n username,\n sound,\n setSound,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n betButtonsOnRight,\n setBetButtonsOnRight,\n setJoinCall,\n hideModal,\n show,\n isMobile,\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds, // timer.DEFAULT_TIMER_SECONDS\n handTimerLengthSeconds, // timer.MEDIUM_HAND_TIMER_SECONDS\n isFourColorDeck,\n setIsFourColorDeck,\n isSpectating,\n isTournament,\n isAdmin,\n isInCents,\n adminPlayers,\n startTransition,\n setStartTransition,\n}) => {\n const [btnText, setBtnText] = useState(\"Save\");\n const [disableSave, setDisableSave] = useState(false);\n const [smallBlindSettings, _setSmallBlindSettings] = useState(\n smallBlindCents\n );\n const [isTimerEnabledSettings, _setIsTimerEnabledSettings] = useState(\n isTimerEnabled\n );\n const [timerLengthSecondsSettings, _setTimerLengthSecondsSettings] = useState(\n timerLengthSeconds\n );\n const [\n handTimerLengthSecondsSettings,\n _setHandTimerLengthSecondsSettings,\n ] = useState(handTimerLengthSeconds);\n\n const [useCentsSettings, _setUseCentsSettings] = useState(isInCents);\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n hideModal(true);\n }, transitionTime);\n };\n\n const setSmallBlindSettings = useCallback(\n (newSmallBlindCentsSettings) => {\n if (newSmallBlindCentsSettings) {\n _setSmallBlindSettings(parseInt(newSmallBlindCentsSettings));\n } else {\n _setSmallBlindSettings(newSmallBlindCentsSettings);\n }\n setDisableSave(false);\n },\n [smallBlindCents]\n );\n\n const setIsTimerEnabledSettings = useCallback(\n (newIsTimerEnabledSettings) => {\n setDisableSave(false); // is there a reason the order of these two is switched above? or are state updates gauranteed to wait till fn call ends\n _setIsTimerEnabledSettings(newIsTimerEnabledSettings);\n },\n [isTimerEnabled]\n );\n\n const setTimerLengthSecondsSettings = useCallback(\n (newTimerLengthSecondsSettings) => {\n if (newTimerLengthSecondsSettings) {\n _setTimerLengthSecondsSettings(parseInt(newTimerLengthSecondsSettings));\n } else {\n _setTimerLengthSecondsSettings(newTimerLengthSecondsSettings);\n }\n setDisableSave(false);\n // setDisableSave logic is broken af -- it starts enabled, and then if 2 features are changed\n // then 1 is unchanged it stays disabled. maybe just set it to always be enabled\n },\n [timerLengthSeconds]\n );\n\n const setHandTimerLengthSecondsSettings = useCallback(\n (newHandTimerLengthSecondsSettings) => {\n _setHandTimerLengthSecondsSettings(newHandTimerLengthSecondsSettings);\n setDisableSave(false);\n },\n [handTimerLengthSeconds]\n );\n\n const setUseCentsSettings = useCallback(\n (newUseCentsSettings) => {\n _setUseCentsSettings(newUseCentsSettings);\n setDisableSave(false);\n },\n [isInCents]\n );\n\n useEffect(() => {\n setSmallBlindSettings(smallBlindCents);\n setIsTimerEnabledSettings(isTimerEnabled);\n setTimerLengthSecondsSettings(timerLengthSeconds);\n setHandTimerLengthSecondsSettings(handTimerLengthSeconds);\n setUseCentsSettings(isInCents);\n }, [\n setSmallBlindSettings,\n smallBlindCents,\n setIsTimerEnabledSettings,\n isTimerEnabled,\n setTimerLengthSecondsSettings,\n timerLengthSeconds,\n setHandTimerLengthSecondsSettings,\n handTimerLengthSeconds,\n setUseCentsSettings,\n isInCents,\n ]);\n const onSaveButtonClick = (e) => {\n emit(\"set_pending_settings_change\", {\n username: username,\n game_id: gameId,\n small_blind_amount: smallBlindSettings,\n is_timer_enabled: isTimerEnabledSettings,\n timer_length_seconds: timerLengthSecondsSettings,\n hand_timer_length_seconds: handTimerLengthSecondsSettings,\n is_in_cents: useCentsSettings,\n });\n close();\n return Promise.resolve(false);\n };\n\n let tabNamesToViews;\n\n if (!isSpectating) {\n tabNamesToViews = {\n Settings: (\n \n ),\n Preferences: (\n \n ),\n };\n } else {\n tabNamesToViews = {\n Preferences: (\n \n ),\n };\n }\n\n const handleTabChange = (newTab) => {\n if (newTab === \"Settings\") {\n setBtnText(\"Save\");\n } else {\n setBtnText(null);\n }\n };\n\n let defaultView = !isSpectating ? \"Settings\" : \"Preferences\";\n\n return (\n \n \n \n );\n};\n\nexport default BrowserSettingsModal;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\nimport { MediumBodyText } from \"../../../shared/Text\";\nimport { InputText } from \"../../../shared/FormElements\";\nimport { removeNumberCommas } from \"../../../helpers/calculations\";\nimport { formatCurrency } from \"../../../helpers/utils\";\nimport styled from \"styled-components\";\n\nconst BuyInModal = ({\n show,\n hideModal,\n emitSocketMessage,\n ownStackCents,\n isInCents,\n}) => {\n const [startTransition, setStartTransition] = useState(true);\n const [buyInDollars, setBuyInAmount] = useState(\"\");\n const [subtractDollars, setSubtractAmount] = useState(\"\");\n const buyInInputElement = useRef(null);\n const subtractInputElement = useRef(null);\n\n useEffect(() => {\n // if showing again, reset\n if (show) {\n setStartTransition(false);\n buyInInputElement.current.focus();\n }\n }, [show]);\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n hideModal(false);\n }, transitionTime);\n };\n\n const _isInvalidOrEmpty = (val) => {\n if (val === \"\") {\n setBuyInAmount(\"\");\n return true;\n }\n return isNaN(val);\n };\n\n const _isInvalidOrEmptySubtract = (val) => {\n if (val === \"\") {\n setSubtractAmount(\"\");\n return true;\n }\n return isNaN(val);\n };\n\n const onBuyInChange = (e) => {\n const val = removeNumberCommas(e.target.value);\n if (!_isInvalidOrEmpty(val)) {\n setBuyInAmount(val);\n }\n };\n\n const onSubtractChange = (e) => {\n const val = removeNumberCommas(e.target.value);\n if (!_isInvalidOrEmptySubtract(val)) {\n setSubtractAmount(val);\n }\n };\n\n const getTotalStackAmount = () => {\n let amountToAdd = 0;\n if (buyInDollars.length !== 0) {\n amountToAdd = parseFloat(buyInDollars);\n }\n if (subtractDollars.length !== 0) {\n amountToAdd -= parseFloat(subtractDollars);\n }\n if (isInCents) {\n amountToAdd *= 100;\n }\n return Math.round(ownStackCents + amountToAdd);\n };\n\n const sendSocketBuyIn = () => {\n let buyInNumber, subtractNumber;\n if (buyInDollars.length === 0) buyInNumber = 0;\n else buyInNumber = parseFloat(buyInDollars);\n if (subtractDollars.length === 0) subtractNumber = 0;\n else subtractNumber = parseFloat(subtractDollars);\n\n if (isInCents) {\n buyInNumber *= 100;\n subtractNumber *= 100;\n }\n\n emitSocketMessage(\"request_buy_in\", {\n amount: Math.round(buyInNumber - subtractNumber),\n });\n setBuyInAmount(\"\");\n setSubtractAmount(\"\");\n close();\n return Promise.resolve(false);\n };\n\n const onBuyInKeypress = (isInCents) => (event) => {\n if (!isInCents && !/[0-9]/.test(event.key)) {\n event.preventDefault();\n }\n var code = event.keyCode || event.which;\n if (\n code === 13 &&\n (buyInDollars.length !== 0 || subtractDollars.length !== 0)\n ) {\n sendSocketBuyIn();\n }\n };\n\n return (\n \n \n \n Your current stack\n {formatCurrency(ownStackCents, isInCents)}\n \n \n Buy in for more\n \n \n +\n \n \n \n \n \n Subtract from stack\n \n \n -\n \n \n \n \n \n Your new stack would be\n \n {formatCurrency(getTotalStackAmount(), isInCents)}\n \n \n \n \n );\n};\n\nconst BuyInWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n padding: 0 60px;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst Row = styled.div`\n width: 100%;\n display: flex;\n padding: 10px 0;\n ${(props) =>\n props.strong &&\n `\n font-weight: bold;\n `}\n`;\n\nconst LabelText = styled(MediumBodyText)`\n width: 100%;\n`;\n\nconst NumbersText = styled(MediumBodyText)`\n margin-right: 15px;\n`;\n\nconst InputWrapper = styled.div`\n display: flex;\n span {\n margin-right: 10px;\n font-weight: bold;\n }\n`;\n\nconst BuyInInput = styled(InputText)`\n width: 120px;\n text-align: right;\n`;\n\nexport default BuyInModal;\n","import React, { useState, useEffect } from \"react\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\nimport styled from \"styled-components\";\n\nconst RaisePercentInfoModal = ({ hideModal, show }) => {\n const [startTransition, setStartTransition] = useState(true);\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n hideModal(false);\n }, transitionTime);\n };\n\n useEffect(() => {\n // if showing again, reset\n if (show) {\n setStartTransition(false);\n }\n }, [show]);\n\n return (\n \n \n \n \n \n );\n};\n\nconst Wrapper = styled.div`\n padding: 0 20px;\n`;\n\nconst FullWidthImage = styled.img`\n width: 100%;\n`;\n\nexport default RaisePercentInfoModal;\n","import React, { useState, useEffect } from \"react\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\nimport BlindStructureScroll from \"../../../shared/BlindStructureScroll\";\n\nconst BlindStructureModal = ({\n show,\n hideModal,\n initialBlindCents,\n blindIncreaseMinutes,\n}) => {\n const [startTransition, setStartTransition] = useState(true);\n\n useEffect(() => {\n // if showing again, reset\n if (show) {\n setStartTransition(false);\n }\n }, [show]);\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n hideModal(false);\n }, transitionTime);\n };\n\n return (\n \n \n \n );\n};\n\nexport default BlindStructureModal;\n","import React, { useState, useEffect } from \"react\";\nimport { mobileBreakpoint, mobileHeightBreakpoint } from \"../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst Notification = (props) => {\n const [show, setShow] = useState(false);\n\n const showNotification = () => {\n const notifShowDuration = props.notifDuration || 1700;\n setShow(true);\n setTimeout(() => {\n setShow(false);\n props.onNotifEnd();\n }, notifShowDuration);\n };\n\n useEffect(() => {\n if (props.show && !show) {\n showNotification();\n }\n }, [props.show]);\n\n return (\n \n {props.children}\n \n );\n};\n\nconst NotificationWrapper = styled.div`\n position: absolute;\n z-index: 4;\n background: white;\n padding: 10px;\n border: 2px solid ${({ theme }) => theme.foreground};\n border-radius: 5px;\n bottom: 100px;\n left: 50%;\n transform: translateX(-50%);\n transition: 0.3s ease all;\n pointer-events: none;\n\n ${(props) => {\n let s = \"\";\n if (!props.show) {\n s += `\n bottom: 0;\n opacity: 0;\n `;\n }\n\n if (props.clickable) {\n s += `\n white-space: nowrap;\n pointer-events: auto;\n `\n }\n\n return s\n }}}\n\n @media screen and (max-width: ${mobileBreakpoint}), screen and (max-height: ${mobileHeightBreakpoint}) {\n bottom: 20px;\n }\n`;\n\nexport default Notification;\n","import React, { useState, useEffect } from \"react\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport Notification from \"../../../shared/Notification\";\n\nconst PatreonModal = (props) => {\n\n const [startTransition, setStartTransition] = useState(true);\n\n useEffect(() => {\n // if showing again, reset\n if (props.show) {\n setStartTransition(false);\n }\n }, [props.show]);\n\n\n return (\n \n \n Support us on{\" \"}\n \n Patreon\n \n !\n \n \n );\n};\n\nexport default PatreonModal;\n","import React, { useHistory, useContext } from \"react\";\nimport Modal from \"../../../shared/Modal\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\nimport { GameContext } from \"../../../context/GameContext\";\n\nconst MTTGameEndModal = () => {\n // const history = useHistory();\n const { ownStackCents, MTTId, updateDisplay } = useContext(GameContext);\n const roundEndText = (\n \n );\n\n const goToLobby = () => {\n updateDisplay(\"mtt\");\n };\n\n return (\n \n
{roundEndText}
\n \n );\n};\n\nconst Label = styled(SmallBodyText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nexport default MTTGameEndModal;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport Modal from \"../../../shared/Modal\";\nimport GameSettingsChoice from \"../GameSettingsModal/GameSettingsChoice\";\nimport BlindStructureScroll from \"../../../shared/BlindStructureScroll\";\nimport { MediumHeaderText, SmallBodyText } from \"../../../shared/Text\";\nimport {\n InputText,\n InputField,\n InputLabel,\n} from \"../../../shared/FormElements\";\nimport { isInvalidOrEmpty, formatCurrency } from \"../../../helpers/utils\";\nimport {\n removeNumberCommas,\n insertNumberCommas,\n} from \"../../../helpers/calculations\";\nimport { colors } from \"../../../helpers/styles\";\nimport { blinds, timer, buyin } from \"../../../helpers/constants\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\n\nconst MTTSettingsModal = (props) => {\n const { updateDisplay } = useContext(GameContext);\n const { isMobile } = useContext(BrowserContext);\n\n const [smallBlindCents, setSmallBlindCents] = useState(\n blinds.DEFAULT_SMALL_BLIND_CENTS\n );\n const [bigBlindCents, setBigBlindCents] = useState(\n blinds.DEFAULT_BIG_BLIND_CENTS\n );\n const [startingStack, setStartingStack] = useState(\n buyin.DEFAULT_AUTO_BUYIN_CENTS\n );\n const [blindIncreaseMinutes, setBlindIncreaseMinutes] = useState(\n blinds.DEFAULT_BLIND_INCREASE_MINUTES\n );\n const [timerLengthSeconds, setTimerLengthSeconds] = useState(\n timer.DEFAULT_TIMER_SECONDS\n );\n const [MTTPassword, setMTTPassword] = useState(\"\");\n const [isInCents, setIsInCents] = useState(true);\n const [startingStackFocus, setStartingStackFocus] = useState(false);\n\n useEffect(() => {\n if (!startingStackFocus) {\n // round betValueCents\n if (startingStack) {\n const startingStackInt = parseInt(startingStack);\n setStartingStack(startingStackInt);\n }\n }\n }, [startingStackFocus]);\n\n const getStartingStackValue = () => {\n const startingStackDollarsFloat = parseFloat(startingStack) / 100;\n if (\n isNaN(startingStackDollarsFloat) ||\n startingStackDollarsFloat === null\n ) {\n return \"\";\n }\n if (!isInCents) {\n return Math.round(startingStack, 0);\n }\n return startingStackFocus\n ? parseFloat(startingStack) / 100\n : startingStackDollarsFloat.toFixed(2);\n };\n\n const enterPressedForBet = (event) => {\n if (!isInCents && !/[0-9]/.test(event.key)) {\n event.preventDefault();\n }\n };\n\n const onSaveButtonClick = () => {\n if (props.title === \"Create MTT\") {\n props._createMTT(\n smallBlindCents,\n MTTPassword,\n timerLengthSeconds,\n startingStack,\n blindIncreaseMinutes * 60,\n isInCents\n );\n } else {\n // TODO, this is where you would make settings save during the game\n // this block represents the \"Game Settings\" modal as opposed to the \"Create New Game\" modal\n // for now just close it\n updateDisplay(\"mtt\");\n }\n return new Promise(() => true);\n };\n\n const onNumberInputChange = (e, cb) => {\n const val = removeNumberCommas(e.target.value);\n if (!isInvalidOrEmpty(val)) {\n cb(val);\n }\n };\n\n const password = (\n \n \n MTT Password (optional)\n \n setMTTPassword(e.target.value)}\n type=\"password\"\n placeholder=\"MTT password (optional)\"\n contrast\n />\n \n );\n\n return (\n \n \n
\n \n Blinds\n \n \n Set your initial small/big blinds\n
\n Blind structure shown below\n
\n
\n setSmallBlindCents(val)}\n setBigBlindCents={(val) => setBigBlindCents(val)}\n isInCents={isInCents}\n setIsInCents={setIsInCents}\n />\n
\n \n \n Timer (seconds)\n \n Set amount of time per turn\n \n \n onNumberInputChange(e, setTimerLengthSeconds)}\n placeholder={timer.DEFAULT_TIMER_SECONDS}\n modal\n />\n \n \n \n {isInCents && (\n Starting Stack (Dollars)\n )}\n {!isInCents && (\n Starting Stack (chips)\n )}\n \n Set stack players start with\n \n \n e.target.blur()}\n value={getStartingStackValue()}\n onChange={(e) =>\n setStartingStack(\n isInCents ? parseFloat(e.target.value) * 100 : e.target.value\n )\n }\n onKeyPress={enterPressedForBet}\n placeholder={formatCurrency(\n buyin.DEFAULT_AUTO_BUYIN_CENTS,\n isInCents\n )}\n onFocus={() => setStartingStackFocus(true)}\n onBlur={() => setStartingStackFocus(false)}\n modal\n />\n \n \n \n Increasing Blinds (minutes)\n \n Set increasing blinds time interval\n \n \n onNumberInputChange(e, setBlindIncreaseMinutes)}\n placeholder={buyin.DEFAULT_BLIND_INCREASE_MINUTES}\n modal\n />\n \n \n \n \n {props.disableModalStyles && password}\n \n );\n};\n\nconst SettingsWrapper = styled.div`\n margin: 5px 0 10px 0;\n width: 100%;\n padding: 0 40px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n ${(props) =>\n props.disabled &&\n `\n opacity: 0.2;\n pointer-events: none;\n `}\n`;\n\nconst SettingsText = styled(MediumHeaderText)`\n width: auto;\n display: inline-block;\n`;\n\nconst SettingsLabel = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n margin-right: 20px;\n width: 100%;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst SettingsSubText = styled(SmallBodyText)`\n width: 100%;\n`;\n\nconst BigBlindInputText = styled(InputText)`\n height: 50px;\n text-align: right;\n font-size: 22px;\n width: 30%;\n`;\n\nexport const PasswordElement = styled(InputField)`\n input {\n transition: border 0.3s ease;\n }\n ${(props) =>\n !props.disableCustomStyles &&\n css`\n display: flex;\n input {\n width: 90%;\n }\n `}\n\n ${(props) =>\n props.invalid &&\n css`\n input {\n border: 1px solid ${colors.red};\n }\n `}\n ${(props) =>\n !props.disablePadding &&\n `\n padding-right: 10px;\n `}\n`;\n\nconst AutoBuyInInputText = styled(BigBlindInputText)`\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n -moz-appearance: textfield;\n`;\n\nexport default MTTSettingsModal;\n","import React, { useHistory, useContext } from \"react\";\nimport Modal from \"../../../shared/Modal\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport styled from \"styled-components\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { emit } from \"../../../helpers/socket\";\n\nconst MTTDistributeModal = (props) => {\n // const history = useHistory();\n const {\n username,\n gameId,\n stack,\n MTTId,\n sessionKey,\n updateDisplay,\n totalBuyinCents,\n autoBuyinCents,\n } = useContext(GameContext);\n\n const roundEndText = (\n \n );\n\n const joinGame = () => {\n emit(\"join\", {\n username: username,\n game_id: gameId,\n key: sessionKey,\n });\n\n updateDisplay(\"play\");\n };\n\n return (\n joinGame()}\n dataTestId=\"mtt-distribute-button\"\n >\n
{roundEndText}
\n \n );\n};\n\nconst Label = styled(SmallBodyText)`\n color: ${({ theme }) => theme.text.label};\n`;\n\nexport default MTTDistributeModal;\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport Modal, { transitionTime } from \"../../../shared/Modal\";\n// import TabView from \"../../../shared/TabView\";\n// import GameSettingsView from \"./GameSettingsView\";\n// import UserPreferencesView from \"./UserPreferencesView\";\nimport { emit } from \"../../../helpers/socket\";\n\nconst MTTBrowserSettingsModal = ({\n gameId,\n username,\n sound,\n setSound,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n betButtonsOnRight,\n setBetButtonsOnRight,\n setJoinCall,\n hideModal,\n show,\n isMobile,\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds, // timer.DEFAULT_TIMER_SECONDS\n handTimerLengthSeconds, // timer.MEDIUM_HAND_TIMER_SECONDS\n isFourColorDeck,\n setIsFourColorDeck,\n isSpectating,\n isTournament,\n isAdmin,\n isInCents,\n adminPlayers,\n startTransition,\n setStartTransition,\n}) => {\n const [btnText, setBtnText] = useState(\"Save\");\n const [disableSave, setDisableSave] = useState(false);\n const [smallBlindSettings, _setSmallBlindSettings] = useState(\n smallBlindCents\n );\n const [isTimerEnabledSettings, _setIsTimerEnabledSettings] = useState(\n isTimerEnabled\n );\n const [timerLengthSecondsSettings, _setTimerLengthSecondsSettings] = useState(\n timerLengthSeconds\n );\n const [\n handTimerLengthSecondsSettings,\n _setHandTimerLengthSecondsSettings,\n ] = useState(handTimerLengthSeconds);\n\n const [useCentsSettings, _setUseCentsSettings] = useState(isInCents);\n\n const close = () => {\n setStartTransition(true);\n setTimeout(() => {\n hideModal(true);\n }, transitionTime);\n };\n\n const setSmallBlindSettings = useCallback(\n (newSmallBlindCentsSettings) => {\n if (newSmallBlindCentsSettings) {\n _setSmallBlindSettings(parseInt(newSmallBlindCentsSettings));\n } else {\n _setSmallBlindSettings(newSmallBlindCentsSettings);\n }\n setDisableSave(false);\n },\n [smallBlindCents]\n );\n\n const setIsTimerEnabledSettings = useCallback(\n (newIsTimerEnabledSettings) => {\n setDisableSave(false); // is there a reason the order of these two is switched above? or are state updates gauranteed to wait till fn call ends\n _setIsTimerEnabledSettings(newIsTimerEnabledSettings);\n },\n [isTimerEnabled]\n );\n\n const setTimerLengthSecondsSettings = useCallback(\n (newTimerLengthSecondsSettings) => {\n if (newTimerLengthSecondsSettings) {\n _setTimerLengthSecondsSettings(parseInt(newTimerLengthSecondsSettings));\n } else {\n _setTimerLengthSecondsSettings(newTimerLengthSecondsSettings);\n }\n setDisableSave(false);\n // setDisableSave logic is broken af -- it starts enabled, and then if 2 features are changed\n // then 1 is unchanged it stays disabled. maybe just set it to always be enabled\n },\n [timerLengthSeconds]\n );\n\n const setHandTimerLengthSecondsSettings = useCallback(\n (newHandTimerLengthSecondsSettings) => {\n _setHandTimerLengthSecondsSettings(newHandTimerLengthSecondsSettings);\n setDisableSave(false);\n },\n [handTimerLengthSeconds]\n );\n\n const setUseCentsSettings = useCallback(\n (newUseCentsSettings) => {\n _setUseCentsSettings(newUseCentsSettings);\n setDisableSave(false);\n },\n [isInCents]\n );\n\n useEffect(() => {\n setSmallBlindSettings(smallBlindCents);\n setIsTimerEnabledSettings(isTimerEnabled);\n setTimerLengthSecondsSettings(timerLengthSeconds);\n setHandTimerLengthSecondsSettings(handTimerLengthSeconds);\n setUseCentsSettings(isInCents);\n }, [\n setSmallBlindSettings,\n smallBlindCents,\n setIsTimerEnabledSettings,\n isTimerEnabled,\n setTimerLengthSecondsSettings,\n timerLengthSeconds,\n setHandTimerLengthSecondsSettings,\n handTimerLengthSeconds,\n setUseCentsSettings,\n isInCents,\n ]);\n const onSaveButtonClick = (e) => {\n emit(\"set_pending_settings_change\", {\n username: username,\n game_id: gameId,\n small_blind_amount: smallBlindSettings,\n is_timer_enabled: isTimerEnabledSettings,\n timer_length_seconds: timerLengthSecondsSettings,\n hand_timer_length_seconds: handTimerLengthSecondsSettings,\n is_in_cents: useCentsSettings,\n });\n close();\n return Promise.resolve(false);\n };\n\n let tabNamesToViews;\n\n // if (!isSpectating) {\n // tabNamesToViews = {\n // Settings: (\n // \n // ),\n // Preferences: (\n // \n // ),\n // };\n // } else {\n // tabNamesToViews = {\n // Preferences: (\n // \n // ),\n // };\n // }\n\n const handleTabChange = (newTab) => {\n if (newTab === \"Settings\") {\n setBtnText(\"Save\");\n } else {\n setBtnText(null);\n }\n };\n\n let defaultView = !isSpectating ? \"Settings\" : \"Preferences\";\n\n return (\n \n {/* */}\n \n );\n};\n\nexport default MTTBrowserSettingsModal;\n","export const optionsConfig = {\n interfaceConfigOverwrite: {\n SHOW_JITSI_WATERMARK: false,\n SHOW_WATERMARK_FOR_GUESTS: false,\n SHOW_CHROME_EXTENSION_BANNER: false,\n VERTICAL_FILMSTRIP: true,\n SETTINGS_SECTIONS: [\"devices\"],\n filmStripOnly: false,\n FILM_STRIP_MAX_HEIGHT: 80,\n DEFAULT_BACKGROUND: \"transparent\",\n JITSI_WATERMARK_LINK: \"https://lipoker.io\",\n MOBILE_APP_PROMO: false,\n DISABLE_FOCUS_INDICATOR: true,\n DISABLE_DOMINANT_SPEAKER_INDICATOR: true,\n DISPLAY_WELCOME_PAGE_CONTENT: false,\n TILE_VIEW_MAX_COLUMNS: 1,\n DEFAULT_REMOTE_DISPLAY_NAME: \"Poker Player\",\n DISABLE_VIDEO_BACKGROUND: true, // reduces CPU by 25%: https://community.jitsi.org/t/high-cpu-utilization-on-client-end/25764/25\n VIDEO_QUALITY_LABEL_DISABLED: true,\n CONNECTION_INDICATOR_DISABLED: true,\n HIDE_KICK_BUTTON_FOR_GUESTS: true,\n HIDE_INVITE_MORE_HEADER: true, // their \"Invite\" button doesn't fit screen/has bad UI\n },\n configOverwrite: {\n enableNoisyMicDetection: false,\n enableTalkWhileMuted: false,\n enableNoAudioDetection: false,\n enableWelcomePage: false,\n prejoinPageEnabled: false,\n resolution: 480,\n startWithVideoMuted: true,\n startWithAudioMuted: true,\n disableInviteFunctions: true,\n toolbarButtons: [\"microphone\", \"camera\", \"tileview\"],\n },\n};\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { colors } from \"../../helpers/styles\";\nimport { MediumHeaderText, SmallBodyText } from \"../../shared/Text\";\nimport { Icon, PrimaryButton } from \"../../shared/FormElements\";\nimport { faVideo } from \"@fortawesome/free-solid-svg-icons\";\nimport { optionsConfig } from \"./options\";\nimport { logError } from \"../../helpers/logger\";\nimport { textWithLoadingDots, MediumBodyText } from \"../../shared/Text\";\nimport { useStateWithLocalStorageBoolean } from \"../../hooks/useStateWithLocalStorage\";\n\nconst VideoChat = ({\n roomName,\n password,\n displayName,\n showVideoChat,\n setShowVideoChat,\n isMobile,\n isOnRight,\n joinCall,\n setJoinCall,\n iframeClientName,\n}) => {\n const [loading, setLoading] = useState(true);\n const [tileViewEnabled, setTileViewEnabled] = useStateWithLocalStorageBoolean(\n \"tileViewEnabled\",\n false\n );\n\n // Most of the magic happens here\n // for reference: https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js\n // https://github.com/jitsi/jitsi-meet/blob/master/config.js\n // for overwrites see https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe\n const options = Object.assign(\n {\n roomName,\n parentNode: \"jitsi-container\",\n },\n optionsConfig\n );\n\n const handleJoinCallClick = (e) => {\n setJoinCall(true);\n setLoading(true);\n };\n\n useEffect(() => {\n let jitsi = null;\n\n if (isMobile) {\n if (jitsi) {\n jitsi.dispose();\n }\n setJoinCall(false);\n setShowVideoChat(false);\n } else if (iframeClientName !== \"game\") {\n if (jitsi) {\n jitsi.dispose();\n }\n setJoinCall(false);\n setShowVideoChat(false);\n } else if (joinCall) {\n try {\n if (window.JitsiMeetExternalAPI) {\n options.parentNode = document.getElementById(options.parentNode);\n // eslint-disable-next-line no-undef\n jitsi = new JitsiMeetExternalAPI(\"jitsi.member.fsf.org\", options);\n } else {\n jitsi = { error: true };\n }\n\n if (!jitsi.error) {\n jitsi.executeCommand(\"subject\", \" \");\n jitsi.addListener(\"videoConferenceJoined\", () => {\n if (password) jitsi.executeCommand(\"password\", password);\n setLoading(false);\n // Hack the tile view. Runs only once per user. If they clear their cookies, then it will have the opposite effect and disable their tile view.\n if (!tileViewEnabled) {\n console.error(\"Going to toggle the tile view\");\n jitsi.executeCommand(\"toggleTileView\");\n setTileViewEnabled(true);\n }\n jitsi.executeCommand(\"displayName\", displayName);\n });\n\n jitsi.addListener(\"passwordRequired\", () => {\n if (password) {\n jitsi.executeCommand(\"password\", password);\n }\n setLoading(false);\n });\n\n // this event closes container to avoid seeing jitsi advertisement\n jitsi.addListener(\"videoConferenceLeft\", () => {\n setShowVideoChat(false);\n setJoinCall(false);\n });\n }\n } catch (error) {\n logError(error);\n console.error(error);\n }\n } else if (jitsi) {\n jitsi.dispose();\n }\n\n return () => jitsi && jitsi.dispose();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n displayName,\n joinCall,\n options,\n password,\n isMobile,\n setJoinCall,\n setShowVideoChat,\n ]);\n\n const jitsiContainerWithLoading = (\n <>\n {loading && Loading}\n \n \n );\n\n const joinCallDisplay = (\n \n \n \n \n \n join call\n \n setShowVideoChat(false)}\n >\n Dismiss\n \n \n Not stable on Safari or mobile yet.\n \n \n );\n\n const videoChatContainer = joinCall\n ? jitsiContainerWithLoading\n : joinCallDisplay;\n\n if (iframeClientName !== \"game\" || isMobile) {\n return <>;\n }\n\n return (\n <>\n {!showVideoChat && (\n setShowVideoChat(true)}>\n \n {\"<<\"}\n \n \n \n )}\n {showVideoChat && (\n \n {videoChatContainer}\n \n )}\n \n );\n};\n\nconst VideoChatWrapper = styled.div`\n width: 15%;\n border-bottom-left-radius: 5px;\n height: 100%;\n z-index: 3;\n position: absolute;\n\n right: 0;\n color: ${colors.darkGrey2};\n background: ${({ theme }) => theme.foreground};\n display: ${(props) => (props.visible ? \"block\" : \"none\")};\n ${(props) => !props.isOnRight && `left: 0;`}\n`;\n\nconst JoinCallWrapper = styled.div`\n padding: 10px;\n margin-top: 50px;\n`;\n\nconst JitsiContainer = styled.div`\n width: 100%;\n height: 100%;\n display: ${(props) => (props.loading ? \"none\" : \"block\")};\n`;\n\nconst VideochatLoadingWrapper = styled(MediumHeaderText)`\n margin-top: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n ${textWithLoadingDots}\n`;\n\nconst WidgetText = styled(MediumBodyText)`\n color: ${({ theme }) => theme.text.widget};\n font-size: 14px;\n font-weight: bold;\n align-items: center;\n text-align: center;\n display: flex;\n flex-direction: column;\n`;\n\nconst WidgetWrapper = styled.div`\n position: absolute;\n z-index: 3;\n cursor: pointer;\n transition: 0.3s ease padding;\n background: ${({ theme }) => theme.foreground};\n top: 40%;\n right: 0;\n border-bottom-left-radius: 7px;\n border-top-left-radius: 7px;\n padding: 5px 10px;\n overflow: hidden;\n &:hover {\n padding-right: 20px;\n opacity: 0.7;\n }\n`;\n\nexport default React.memo(VideoChat);\n","import React from \"react\";\nimport styled, { withTheme } from \"styled-components\";\nimport { colors } from \"../../../helpers/styles\";\nimport { formatCurrency } from \"../../../helpers/utils\";\nimport { MediumBodyText } from \"../../../shared/Text\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\n\nconst LeaderboardRow = (props) => {\n let color = props.balance >= 0 ? props.theme.profit : props.theme.loss;\n\n let totalBuyin = formatCurrency(props.buyin, props.isInCents);\n\n let winAmount = `${Math.sign(props.balance) >= 0 ? \"+\" : \"-\"}${formatCurrency(\n Math.abs(props.balance),\n props.isInCents\n )}`;\n return (\n \n \n
\n {props.rank && (\n \n {props.rank}\n \n )}\n {props.name}\n
\n {totalBuyin}\n {winAmount}\n
\n \n );\n};\n\nexport default withTheme(LeaderboardRow);\nexport const padding = \"10px\";\n\nconst RowElem = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n padding: 0 ${padding};\n background: ${({ theme }) => theme.modal.background};\n\n ${(props) =>\n props.height &&\n `\n ${Container} {\n height: ${props.height}px;\n border: none;\n }\n `};\n ${(props) =>\n props.highlight &&\n props.theme &&\n `\n ${Container} {\n background: ${props.theme.modal.divider};\n }\n `}\n ${(props) =>\n props.strong &&\n `\n ${PlayerName} {\n font-weight: bold;\n font-size: 1.2em;\n }\n `}\n ${(props) =>\n props.first &&\n `\n ${Container} {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n `}\n ${(props) =>\n props.last &&\n props.theme &&\n `\n ${Container} {\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n border-bottom: 2px solid ${props.theme.modal.divider};\n }\n `}\n`;\n\nconst Rank = styled.div`\n background: ${colors.grey};\n width: 25px;\n height: 25px;\n border-radius: 50%;\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n font-weight: bold;\n`;\n\nconst PlayerName = styled(MediumBodyText)`\n display: flex;\n align-items: center;\n font-size: 1em;\n margin: 0;\n justify-self: flex-start;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 100px;\n margin-left: 10px;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst BuyIn = styled(MediumBodyText)`\n //text-align: center;\n color: grey;\n font-weight: bold;\n font-size: 1em;\n //margin: 0 10px 0 0px;\n`;\n\nconst Winnings = styled(MediumBodyText)`\n font-weight: bold;\n font-size: 1em;\n margin: 0 10px 0 0px;\n`;\n\nconst Container = styled(MediumBodyText)`\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n border: 2px solid ${({ theme }) => theme.modal.divider};\n border-bottom: none;\n padding: 20px 0;\n\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: auto;\n padding: 5px;\n }\n`;\n","import React from \"react\";\nimport { SmallHeaderText } from \"../Text\";\nimport { colors, font } from \"../../helpers/styles\"; // ${font}\nimport { Icon } from \".\";\nimport { faCheckSquare, faSquare } from \"@fortawesome/free-solid-svg-icons\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst CheckboxField = ({ onClick, isOn, text, style, dataTestId }) => {\n return (\n \n \n theme.primary : colors.white}\n isLeft\n />\n \n {text}\n \n );\n};\n\nconst Checkbox = styled.div`\n background: white;\n width: 12px;\n height: 12px;\n display: flex;\n align-items: center;\n margin-right: 8px;\n`;\n\nconst GameMessageToggle = styled.div`\n background: white;\n border-radius: 5px;\n font-family: ${font.header};\n font-size: 16px;\n padding: 8px;\n background: none;\n letter-spacing: 1px;\n color: ${colors.white};\n cursor: pointer;\n display: flex;\n margin-right: 10px;\n flex-grow: 0;\n flex-shrink: 0;\n align-items: center;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 4px;\n }\n`;\n\nexport default CheckboxField;\n","import React, { Fragment, useState, useContext, useEffect } from \"react\";\nimport { OverlayTrigger } from \"react-bootstrap\";\nimport LeaderboardRow, { padding } from \"./LeaderboardRow\";\nimport {\n MediumHeaderText,\n SmallBodyText,\n SmallHeaderText,\n} from \"../../../shared/Text\";\nimport { MainOverlay, removeScrollbars } from \"../../../shared/Overlay\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport { faCrown } from \"@fortawesome/free-solid-svg-icons\";\nimport { colors, styles } from \"../../../helpers/styles\";\nimport styled, { css } from \"styled-components\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\nimport { MediumBodyText } from \"../../../shared/Text\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport { emit } from \"../../../helpers/socket\";\nimport { PrimaryButton } from \"../../../shared/FormElements\";\nimport { OverlayWrapper } from \"../../../shared/Overlay\";\nimport CheckboxField from \"../../../shared/FormElements/CheckboxField\";\n\nconst Leaderboard = ({ isAdmin }) => {\n const {\n gameId,\n sessionReset,\n sessionLeaderboard: sessionUsers,\n leaderboard: users,\n username,\n isInCents,\n } = useContext(GameContext);\n const { isMobile } = useContext(BrowserContext);\n const [showLeaderboard, setShowLeaderboard] = useState(false);\n const [showAllTimePlayers, setShowAllTimePlayers] = useState(false);\n const [leaderboardUsers, setLeaderboardUsers] = useState(sessionUsers);\n const [sessionResetClicked, setSessionResetClicked] = useState(sessionReset);\n const clientUser = users.filter((user) => user.name === username);\n\n useEffect(() => {\n if (showAllTimePlayers) {\n setLeaderboardUsers(users);\n } else {\n setLeaderboardUsers(sessionUsers);\n }\n setSessionResetClicked(sessionReset);\n }, [sessionReset, showAllTimePlayers, sessionUsers, users]);\n\n const onSessionResetClicked = () => {\n emit(\"update_session_reset\", {\n game_id: gameId,\n username: username,\n name: username,\n session_reset: !sessionResetClicked,\n });\n setSessionResetClicked(!sessionResetClicked);\n };\n\n return (\n \n setShowLeaderboard(true)}\n horizontalPadding={isMobile ? \"15px\" : \"40px\"}\n data-testid={\"leaderboard-widget\"}\n >\n \n \n LEADERBOARD\n \n \n \n \n setShowLeaderboard(false)}>\n \n \n \n {\" \"}\n Leaderboard{\" \"}\n \n {\n e.stopPropagation();\n setShowAllTimePlayers(!showAllTimePlayers);\n }}\n isOn={showAllTimePlayers}\n text=\"Show all time players\"\n style={{ padding: 0 }}\n dataTestId={\"show-all-time-players\"}\n />\n \n\n \n {\"Player\"}\n {\"Buy In\"}\n {\"Profit\"}\n \n\n {/** Temp disable this user header until we decide if we want */}\n {false && clientUser.length === 1 && (\n \n \n \n \n \n )}\n \n {!!leaderboardUsers &&\n leaderboardUsers.map((user, i) => (\n \n ))}\n \n {isAdmin && (\n \n \n
\n {\n e.stopPropagation();\n onSessionResetClicked();\n }}\n dataTestId={\"session-reset-button\"}\n >\n {sessionResetClicked ? \"Undo Reset\" : \"Reset Session\"}\n \n
\n \n
\n )}\n
\n
\n
\n
\n \n
\n );\n};\nconst Wrapper = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: scroll; // overriden by removeScrollbars\n top: 0;\n left: 0;\n z-index: 8;\n ${(props) => props.hide && `pointer-events: none;`}\n ${removeScrollbars}\n`;\nconst LeaderboardBody = styled.div`\n width: 100%;\n height: auto;\n min-height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n transition: 0.7s cubic-bezier(0.55, -0.09, 0.43, 1.36) all;\n`;\nconst LeaderboardBodyInner = styled.div`\n display: table;\n width: 30vw;\n min-width: 250px;\n box-shadow: ${styles.largeBoxShadow};\n border-radius: 5px;\n overflow: hidden;\n background: ${({ theme }) => theme.modal.background};\n margin: 40px 0;\n`;\n\nconst LeaderboardTab = styled.div`\n position: absolute;\n pointer-events: all;\n cursor: pointer;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n background: ${({ theme }) => theme.foreground};\n border-radius: 5px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n padding: 10px\n ${(props) => (props.horizontalPadding ? props.horizontalPadding : \"40px\")};\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 10px\n ${(props) => (props.horizontalPadding ? props.horizontalPadding : \"15px\")};\n }\n z-index: 3;\n transition: padding 0.4s ease, top 1s ease-out, transform 1s ease-out;\n color: ${({ theme }) => theme.text.widget};\n &:hover {\n padding-top: 20px;\n opacity: 0.7;\n }\n ${(props) =>\n !props.hide &&\n `\n top: -100%;\n `}\n`;\n\nconst LeaderboardWrapper = styled.div`\n ${(props) =>\n props.hide &&\n css`\n ${LeaderboardBody} {\n top: -50px;\n transform: translate(0, -100%);\n pointer-events: none;\n }\n `}\n`;\n\nexport const LeaderboardHeaderText = styled(MediumHeaderText)`\n text-align: center;\n display: block;\n color: ${colors.white};\n font-weight: bold;\n`;\n\nexport const LeaderboardHeader = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n\n width: 100%;\n min-width: 100px;\n background: ${({ theme }) => theme.tertiary};\n padding: 15px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 8px;\n }\n`;\n\nconst PlayerTitle = styled(MediumBodyText)`\n font-weight: bold;\n font-size: 1em;\n justify-self: flex-start;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 100px;\n margin-left: 50px;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst BuyInTitle = styled(MediumBodyText)`\n font-weight: bold;\n font-size: 1em;\n margin-left: 5px;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst WinningsTitle = styled(MediumBodyText)`\n font-weight: bold;\n font-size: 1em;\n margin-right: 25px;\n color: ${({ theme }) => theme.text.label};\n`;\n\nconst TitlesWrapper = styled(MediumBodyText)`\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n margin-top: 10px;\n background: ${({ theme }) => theme.modal.background};\n\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: 15px;\n margin-top: 8px;\n }\n`;\n\nconst MainRows = styled.div`\n padding: ${padding} 0;\n`;\n\nconst UserRow = styled.div`\n background: ${({ theme }) => theme.background};\n padding: 10px;\n width: 100%;\n`;\n\nconst UserRowInner = styled.div`\n background: ${({ theme }) => theme.background};\n border-radius: 5px;\n overflow: hidden;\n`;\n\nconst SessionResetWrapper = styled.div`\n display: flex;\n width: 100%;\n justify-content: center;\n margin-bottom: 15px;\n`;\n\nconst SessionResetOverlay = (props) => {\n return (\n \n \n Resets all player profits next hand. Full stats will still be available\n in the all time leaderboard.\n \n \n );\n};\n\nexport default Leaderboard;\n","import React, { useState } from \"react\";\nimport { Icon } from \"./FormElements\";\nimport { MainOverlay } from \"./Overlay\";\nimport { faPlus } from \"@fortawesome/free-solid-svg-icons\";\nimport { colors, font } from \"../helpers/styles\";\nimport styled from \"styled-components\";\n\nconst DropDownOptionsPicker = ({\n show,\n initialExpanded,\n optionsList,\n style,\n includeOverlay,\n dataTestId,\n onCloseOverride,\n toggleInner,\n}) => {\n const [expanded, _setExpanded] = useState(initialExpanded || false);\n\n const setExpanded = (expanded) => {\n if (onCloseOverride && !expanded) {\n onCloseOverride();\n } else {\n _setExpanded(expanded);\n }\n };\n\n return (\n \n \n setExpanded(!expanded)}\n toggled={expanded}\n >\n {toggleInner ? (\n toggleInner\n ) : (\n \n \n \n )}\n \n \n {expanded && (\n \n {optionsList.map((action, i) => (\n \n \n {action.inner}\n \n {action.showLabel && {action.name}}\n \n ))}\n \n )}\n {includeOverlay && (\n setExpanded(false)}\n />\n )}\n \n );\n};\n\nconst Wrapper = styled.div`\n ${(props) => props.hide && `pointer-events: none;`}\n`;\n\nconst DropDownList = styled.div`\n margin-top: 10px;\n`;\n\nconst OptionCircle = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: ${({ theme }) => theme.secondary};\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: ${font.body};\n font-weight: bold;\n color: ${colors.white};\n cursor: pointer;\n transition: transform 400ms cubic-bezier(0.26, 0.76, 0.4, 1.12)\n ${(props) => props.delay || 0}ms,\n opacity 200ms ease 0ms;\n span {\n transition: 0.2s ease transform;\n }\n &:hover {\n background: ${({ theme }) => theme.primary};\n }\n ${(props) =>\n props.toggled &&\n `\n background: ${colors.darkGrey2};\n &:hover {\n background: ${colors.darkGrey2};\n }\n span.rotate {\n transform: rotate(45deg);\n }\n `}\n ${(props) =>\n props.selected &&\n props.theme &&\n `\n background: ${props.theme.primary};\n `}\n ${(props) =>\n props.hide &&\n `\n transform: translateX(-100px);\n `}\n ${(props) =>\n props.disabled &&\n `\n pointer-events: none;\n cursor: not-allowed;\n `}\n`;\n\nconst OptionLabel = styled.div`\n display: none;\n margin-left: 10px;\n pointer-events: none;\n background: ${({ theme }) => theme.foreground};\n color: ${({ theme }) => theme.text.label};\n font-weight: bold;\n font-family: ${font.body};\n font-size: 12px;\n border-radius: 5px;\n height: fit-content;\n min-width: max-content;\n padding: 2px 5px;\n`;\n\nconst OptionsCircleWrapper = styled.div`\n display: flex;\n position: relative;\n align-items: center;\n margin-bottom: 10px;\n &:hover {\n cursor: pointer;\n ${OptionLabel} {\n display: block;\n }\n }\n ${(props) =>\n props.isLoading &&\n `\n pointer-events: none;\n opacity: 0.5;\n `}\n`;\n\nexport default DropDownOptionsPicker;\n","import styled from \"styled-components\";\n\nexport const ThemeCircle = styled.div`\n width: 25px;\n height: 25px;\n border-radius: 50%;\n ${(props) =>\n props.theme &&\n `\n background-image: linear-gradient(to bottom right, ${props.theme.primary}, ${props.theme.background}, ${props.theme.tertiary});\n `}\n ${(props) =>\n props.color1 &&\n props.color2 &&\n props.color3 &&\n `\n background-image: linear-gradient(to bottom right, ${props.color1}, ${props.color2}, ${props.color3});\n `}\n`;\n\nexport const dropdownPositioning = {\n position: \"absolute\",\n zIndex: 3,\n top: \"70px\",\n left: \"20px\",\n};\nexport const mobileDropdownPositioning = {\n position: \"absolute\",\n zIndex: 3,\n top: \"60px\",\n left: \"10px\",\n};\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport DropdownOptionsPicker from \"../../../shared/DropdownOptionsPicker\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport {\n faSignInAlt,\n faSignOutAlt,\n faUndo,\n faCommentAlt,\n faSpinner,\n faEdit,\n faGift,\n faPause,\n faPlay,\n faCoins,\n faDollarSign,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { colors } from \"../../../helpers/styles\";\nimport { modals, tableActions, roles } from \"../../../helpers/constants\";\nimport {\n ThemeCircle,\n dropdownPositioning,\n mobileDropdownPositioning,\n} from \"./shared\";\n\nconst PlayerActions = ({\n show,\n queuedAction,\n emitSocketMessage,\n isStanding,\n setCurrentModal,\n isMobile,\n setShowThemePicker,\n setShowSocialMedia,\n isInCents,\n}) => {\n const { activePlayers, username, paused, ongoing } = useContext(GameContext);\n\n const clientPlayer = activePlayers.filter(\n (player) => player.playerName === username\n )[0];\n const numWinners = activePlayers.filter((player) => player.isWinner).length;\n const hasTurn =\n activePlayers.filter((player) => player.playerIsTurn).length > 0;\n\n const [isLoadingStand, setIsLoadingStand] = useState(false);\n\n useEffect(() => {\n setIsLoadingStand(false);\n }, [queuedAction]);\n\n const toggleAction = () => {\n const actionToDo = isStanding\n ? tableActions.ACTION_SIT\n : tableActions.ACTION_STAND;\n emitSocketMessage(\"queue_action\", {\n action:\n queuedAction !== tableActions.ACTION_NONE\n ? tableActions.ACTION_NONE\n : actionToDo,\n });\n setIsLoadingStand(true);\n };\n\n const togglePause = () => {\n emitSocketMessage(\"pause_game\", {});\n };\n\n let buyIn;\n if (\n emitSocketMessage && // player, not spectator\n clientPlayer.requestedBuyIn > 0 &&\n clientPlayer.playerRole !== roles.ROLE_ADMIN\n ) {\n buyIn = {\n name: \"Update buy in request to admin\",\n inner: ,\n onClick: () => setCurrentModal(modals.BUY_IN),\n selected: true,\n showLabel: true,\n };\n } else if (emitSocketMessage && clientPlayer.pendingBuyIn > 0) {\n buyIn = {\n name: \"Change pending buy in\",\n inner: ,\n onClick: () => setCurrentModal(modals.BUY_IN),\n showLabel: true,\n };\n } else {\n buyIn = {\n name: \"Buy in for more\",\n inner: (\n <>\n <>+ \n {isInCents && }\n {!isInCents && }\n \n ),\n onClick: () => setCurrentModal(modals.BUY_IN),\n showLabel: true,\n };\n }\n\n let pauseNextHand;\n if (emitSocketMessage && clientPlayer.playerRole === roles.ROLE_ADMIN) {\n if ((ongoing && numWinners > 0) || !ongoing || !hasTurn) {\n pauseNextHand = {\n name: \"Cannot pause\",\n inner: paused ? (\n \n ) : (\n \n ),\n showLabel: true,\n disabled: true,\n };\n } else {\n pauseNextHand = {\n name: paused ? \"Unpause game\" : \"Pause game after this hand\",\n inner: paused ? (\n \n ) : (\n \n ),\n onClick: togglePause,\n showLabel: true,\n };\n }\n }\n\n let sitOut;\n if (queuedAction !== tableActions.ACTION_NONE) {\n sitOut = {\n name: `Undo ${isStanding ? \"join game\" : \"sit out\"}`,\n inner: ,\n onClick: toggleAction,\n selected: true,\n isLoading: isLoadingStand,\n dataTestId: \"cancel-sit-out-action\",\n showLabel: true,\n };\n } else {\n sitOut = {\n name: `${isStanding ? \"Join game\" : \"Sit out\"} next hand`,\n inner: (\n \n ),\n onClick: toggleAction,\n selected: false,\n isLoading: isLoadingStand,\n dataTestId: `${isStanding ? \"join-game\" : \"sit-out\"}`,\n showLabel: true,\n };\n }\n\n const feedback = {\n name: \"Share your feedback\",\n inner: (\n <>\n \n \n ),\n onClick: () => setCurrentModal(modals.FEEDBACK),\n showLabel: true,\n };\n const changeTheme = {\n name: \"Change theme\",\n inner: ,\n onClick: () => setShowThemePicker(true),\n showLabel: true,\n };\n\n const socialMedia = {\n name: \"Check out what we're up to! 👀\",\n inner: (\n <>\n \n \n ),\n onClick: () => setShowSocialMedia(true),\n showLabel: true,\n };\n\n const actionsList = emitSocketMessage\n ? pauseNextHand\n ? [buyIn, sitOut, pauseNextHand, feedback, changeTheme, socialMedia]\n : [buyIn, sitOut, feedback, changeTheme, socialMedia]\n : [feedback, changeTheme, socialMedia];\n\n return (\n \n );\n};\n\nexport default PlayerActions;\n","import { colors } from \"../styles\";\n\nexport function generateDarkTheme(primary, secondary, tertiary, background) {\n return {\n // general\n primary: primary,\n secondary: colors.mediumGrey,\n secondaryLighter: colors.darkBlueLighter,\n tertiary: tertiary,\n background: background,\n foreground: \"#525252\",\n disabled: \"#8a8a8a\",\n profit: colors.green,\n loss: tertiary,\n // components\n card: {\n heart: tertiary,\n diamond: primary,\n spade: colors.black,\n club: colors.green,\n dark: colors.black,\n light: tertiary,\n },\n modal: {\n background: background,\n subtitle: colors.grey,\n overlay: colors.black,\n divider: \"#525252\",\n cta: secondary,\n },\n chat: {\n background: \"#525252\",\n divider: background,\n gameText: colors.darkGrey2,\n linkText: colors.lightGrey,\n },\n table: {\n outer: \"#525252\",\n inner: secondary,\n },\n openSeat: {\n background: secondary,\n borderColor: \"#525252\",\n },\n player: {\n disabledBackground: background,\n borderColor: \"#525252\",\n borderHighlightedColor: colors.lightGrey,\n pot: background,\n },\n keyboardChar: {\n background: background,\n text: colors.white,\n },\n input: {\n modal: secondary,\n contrast: background,\n noBack: \"#525252\",\n },\n switch: {\n background: secondary,\n },\n flatShadow: \"#585858\",\n // text\n text: {\n mainBody: colors.lightGrey,\n widget: colors.white,\n label: colors.white,\n placeholder: \"#525252\",\n },\n };\n}\n\nconst darkTheme = generateDarkTheme(\n colors.blue,\n colors.darkBlue,\n colors.red,\n colors.darkGrey\n);\n\nexport default darkTheme;\n","import { colors } from \"../styles\";\nimport { themes } from \"../constants\";\nimport { generateLightTheme } from \"./light\";\nimport { generateDarkTheme } from \"./dark\";\n\nconst themeColors = {\n [themes.THEME_DARK_DEFAULT]: {\n isDark: true,\n colors: {\n blue: colors.blue,\n darkBlue: colors.darkBlue,\n red: colors.red,\n darkGrey: colors.darkGrey,\n },\n },\n [themes.THEME_SALOON]: {\n isDark: true,\n colors: {\n lightGreen: \"#654321\",\n green: \"#006400\",\n gold: \"#C3976A\",\n brown: \"#2a1b0e\",\n },\n },\n [themes.THEME_LIGHT_DEFAULT]: {\n isDark: false,\n colors: {\n blue: colors.blue,\n darkBlue: colors.darkBlue,\n red: colors.red,\n lightGrey: colors.lightGrey,\n },\n },\n [themes.THEME_DARK_PURPLE]: {\n isDark: true,\n colors: {\n red: \"#ff6363\",\n purple: \"#543864\",\n yellow: \"#ffa531\",\n blueBlack: \"#202040\",\n },\n },\n [themes.THEME_DARK_GREEN]: {\n isDark: true,\n colors: {\n green: \"#3c6562\",\n darkGreen: \"#00454a\",\n lightRed: \"#ed6363\",\n darkBlue: \"#003545\",\n },\n },\n [themes.THEME_DARK_BLUE_PINK]: {\n isDark: true,\n colors: {\n blue: \"#4d5ade\",\n purple: \"#4d2b80\",\n pink: \"#e14594\",\n darkBlue: \"#182952\",\n },\n },\n};\n\nconst generateSwatch = (themeName) => {\n if (!(themeName in themeColors)) {\n return [];\n }\n return Object.keys(themeColors[themeName][\"colors\"]).map(\n (key) => themeColors[themeName][\"colors\"][key]\n );\n};\n\nconst themesDict = {};\nObject.keys(themeColors).forEach((themeName) => {\n const swatch = generateSwatch(themeName);\n const generatedTheme = themeColors[themeName].isDark\n ? generateDarkTheme(...swatch)\n : generateLightTheme(...swatch);\n themesDict[themeName] = {\n theme: generatedTheme,\n swatch: swatch,\n };\n});\n\nconst defaultTheme = themesDict[themes.THEME_DARK_DEFAULT].theme;\nexport { defaultTheme };\nexport default themesDict;\n","import { colors } from \"../styles\";\n\nexport function generateLightTheme(primary, secondary, tertiary, background) {\n return {\n // general\n primary: primary,\n secondary: secondary,\n secondaryLighter: colors.darkBlueLighter,\n tertiary: tertiary,\n background: background,\n foreground: colors.lightGrey2,\n disabled: colors.darkGrey2,\n profit: colors.green,\n loss: tertiary,\n // components\n card: {\n heart: tertiary,\n diamond: primary,\n spade: colors.black,\n club: colors.green,\n dark: colors.black,\n light: tertiary,\n },\n modal: {\n background: colors.white,\n subtitle: colors.grey,\n overlay: colors.white,\n divider: background,\n cta: background,\n },\n chat: {\n background: colors.white,\n divider: colors.lightGrey2,\n gameText: primary,\n linkText: secondary,\n },\n table: {\n outer: colors.grey,\n inner: colors.darkGrey,\n },\n openSeat: {\n background: colors.lightGrey2,\n borderColor: colors.white,\n },\n player: {\n disabledBackground: colors.grey,\n borderColor: background,\n borderHighlightedColor: background,\n pot: secondary,\n },\n keyboardChar: {\n background: colors.white,\n text: null,\n },\n input: {\n modal: background,\n contrast: colors.white,\n noBack: colors.white,\n },\n switch: {\n background: colors.lightGrey2,\n },\n flatShadow: colors.grey,\n // text\n text: {\n mainBody: colors.darkGrey,\n widget: colors.darkGrey2,\n label: colors.black,\n placeholder: colors.grey,\n },\n };\n}\n","import React from \"react\";\nimport DropdownOptionsPicker from \"../../../shared/DropdownOptionsPicker\";\nimport themesDict from \"../../../helpers/theme\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport { faArrowLeft } from \"@fortawesome/free-solid-svg-icons\";\nimport {\n ThemeCircle,\n dropdownPositioning,\n mobileDropdownPositioning,\n} from \"./shared\";\n\nconst ThemePicker = ({ show, isMobile, theme, setTheme, close }) => {\n const generateThemesList = () => {\n return Object.keys(themesDict).map((themeName) => {\n return {\n name: themeName,\n inner: (\n \n ),\n onClick: () => setTheme(themeName),\n showLabel: false,\n selected: theme === themeName,\n };\n });\n };\n\n const themesList = generateThemesList();\n\n return (\n }\n />\n );\n};\n\nexport default ThemePicker;\n","import React from \"react\";\nimport DropdownOptionsPicker from \"../../../shared/DropdownOptionsPicker\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport { faArrowLeft, faPencilAlt } from \"@fortawesome/free-solid-svg-icons\";\nimport { faTwitter, faPatreon } from \"@fortawesome/free-brands-svg-icons\";\nimport { dropdownPositioning, mobileDropdownPositioning } from \"./shared\";\n\nconst socialMedia = [\n {\n name: \"twitter\",\n link: \"https://twitter.com/lipoker_io\",\n icon: faTwitter,\n color: \"#1E9DEA\",\n },\n {\n name: \"patreon\",\n link: \"https://www.patreon.com/lipoker\",\n icon: faPatreon,\n color: \"#EF6551\",\n },\n {\n name: \"blog\",\n link: \"https://www.notion.so/Lipoker-Blog-5ba5c59a84234bd1a4343f5880780ea0\",\n icon: faPencilAlt,\n color: \"#FFFFFF\",\n },\n];\n\nconst SocialMedia = ({ show, isMobile, close }) => {\n const generateSocialMediaList = () => {\n return socialMedia.map((obj) => {\n return {\n name: obj.name,\n inner: (\n \n \n \n ),\n showLabel: false,\n };\n });\n };\n\n const socialMediaList = generateSocialMediaList();\n\n return (\n }\n />\n );\n};\n\nexport default SocialMedia;\n","import React, { useState } from \"react\";\nimport PlayerActions from \"./PlayerActions\";\nimport ThemePicker from \"./themePicker\";\nimport SocialMedia from \"./SocialMedia\";\n\nconst ActionsDropdown = ({\n queuedAction,\n emitSocketMessage,\n isStanding,\n setCurrentModal,\n isMobile,\n theme,\n setTheme,\n isInCents,\n}) => {\n const [showThemePicker, setShowThemePicker] = useState(false);\n\n const [showSocialMedia, setShowSocialMedia] = useState(false);\n\n return (\n <>\n \n setShowThemePicker(false)}\n />\n setShowSocialMedia(false)}\n />\n \n );\n};\n\nexport default ActionsDropdown;\n","import React, { Fragment } from \"react\";\nimport Notification from \"../shared/Notification\";\nimport { MediumBodyText } from \"../shared/Text\";\nimport { mobileBreakpoint, mobileHeightBreakpoint } from \"../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst Widget = ({\n onClick,\n left,\n style,\n text,\n showNotif,\n setShowNotif,\n notification,\n dataTestId,\n}) => {\n return (\n \n \n {text}\n \n setShowNotif(false)}>\n {notification}\n \n \n );\n};\n\nconst WidgetText = styled(MediumBodyText)`\n color: ${({ theme }) => theme.text.widget};\n font-size: 14px;\n font-weight: bold;\n text-align: center;\n`;\n\nconst WidgetWrapper = styled.div`\n display: flex;\n z-index: 3;\n margin-left: ${(props) => (props.left ? props.left : \"0px\")};\n cursor: pointer;\n transition: 0.3s ease padding;\n border-bottom-left-radius: 7px;\n border-bottom-right-radius: 7px;\n background: ${({ theme }) => theme.foreground};\n padding: 12px 20px;\n height: 100%;\n &:hover {\n padding-top: 20px;\n opacity: 0.7;\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n padding: 5px 10px;\n }\n`;\n\nexport default Widget;\n","import React, { Fragment, useState } from \"react\";\nimport Widget from \"../../shared/Widget\";\nimport { BlindStructureModal } from \"../Modals\";\n\nconst BlindStructureWidget = ({\n isMobile,\n setAllowKeyboardShortcuts,\n setExistsModal,\n initialBlindCents,\n blindIncreaseMinutes,\n}) => {\n const [showBlindStructureModal, _setShowBlindStructureModal] = useState(\n false\n );\n\n const setShowBlindStructureModal = (show) => {\n _setShowBlindStructureModal(show);\n setAllowKeyboardShortcuts(!show);\n setExistsModal(show);\n };\n\n return (\n \n {\n setShowBlindStructureModal(true);\n }}\n text={\"Blinds\"}\n showNotif={false}\n left={isMobile ? \"2px\" : \"6px\"}\n //right={isMobile ? \"85px\" : \"135px\"}\n />\n {\n setShowBlindStructureModal(false);\n }}\n initialBlindCents={initialBlindCents}\n blindIncreaseMinutes={blindIncreaseMinutes}\n />\n \n );\n};\n\nexport default BlindStructureWidget;\n","import React, { Fragment, useState } from \"react\";\nimport { FAQModal } from \"../../components/Modals\";\nimport { Icon } from \"../FormElements\";\nimport { faQuestionCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport Widget from \"../Widget\";\n\nconst FAQWidget = ({\n isMobile,\n setAllowKeyboardShortcuts,\n setExistsModal,\n isFourColorDeck,\n}) => {\n const [showFAQModal, _setShowFAQModal] = useState(false);\n\n const setShowFAQModal = (show) => {\n _setShowFAQModal(show);\n setAllowKeyboardShortcuts(!show);\n setExistsModal(show);\n };\n\n return (\n \n setShowFAQModal(true)}\n text={}\n showNotif={false}\n left={isMobile ? \"2px\" : \"6px\"}\n />\n {\n setShowFAQModal(false);\n }}\n isFourColorDeck={isFourColorDeck}\n />\n \n );\n};\n\nexport default FAQWidget;\n","import React, { Fragment, useState } from \"react\";\nimport { HandRankingsModal } from \"../../components/Modals\";\nimport { logClickHandRankingEvent } from \"../../helpers/logger\";\nimport Widget from \"../Widget\";\n\nconst HandRankingsWidget = ({\n isMobile,\n setAllowKeyboardShortcuts,\n setExistsModal,\n isFourColorDeck,\n playerHand,\n}) => {\n const [showModal, _setShowModal] = useState(false);\n\n const setShowModal = (show) => {\n _setShowModal(show);\n setAllowKeyboardShortcuts(!show);\n setExistsModal(show);\n };\n\n return (\n \n {\n setShowModal(true);\n logClickHandRankingEvent();\n }}\n text={isMobile ? \"Hands\" : \"Hand Rankings\"}\n showNotif={false}\n left={isMobile ? \"2px\" : \"6px\"}\n //right={isMobile ? \"85px\" : \"135px\"}\n />\n {\n setShowModal(false);\n }}\n isFourColorDeck={isFourColorDeck}\n playerHand={playerHand}\n />\n \n );\n};\n\nexport default HandRankingsWidget;\n","import React, { Fragment, useState } from \"react\";\nimport { BrowserSettingsModal } from \"../Modals\";\nimport { Icon } from \"../../shared/FormElements\";\nimport { faCog } from \"@fortawesome/free-solid-svg-icons\";\nimport Widget from \"../../shared/Widget\";\n\nconst SettingsWidget = ({\n gameId,\n username,\n sound,\n setSound,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n betButtonsOnRight,\n setBetButtonsOnRight,\n joinCall,\n setJoinCall,\n setAllowKeyboardShortcuts,\n setExistsModal,\n isMobile,\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds, // timer.DEFAULT_TIMER_SECONDS\n handTimerLengthSeconds, // timer.MEDIUM_HAND_TIMER_SECONDS\n isFourColorDeck,\n setIsFourColorDeck,\n isSpectating,\n isTournament,\n isAdmin,\n isInCents,\n adminPlayers,\n}) => {\n const [showSettingsModal, _setShowSettingsModal] = useState(false);\n const [startTransition, setStartTransition] = useState(true);\n\n const setShowSettingsModal = (show) => {\n console.log(\"settingsWidget\", show);\n setStartTransition(!show);\n _setShowSettingsModal(show);\n setAllowKeyboardShortcuts(!show);\n setExistsModal(show);\n };\n\n return (\n \n setShowSettingsModal(true)}\n text={}\n showNotif={false}\n left={isMobile ? \"2px\" : \"6px\"}\n dataTestId={\"settings-widget\"}\n />\n {\n setShowSettingsModal(false);\n }}\n sound={sound}\n setSound={setSound}\n showVideoChat={showVideoChat}\n setShowVideoChat={setShowVideoChat}\n videoIsOnRight={videoIsOnRight}\n setVideoIsOnRight={setVideoIsOnRight}\n betButtonsOnRight={betButtonsOnRight}\n setBetButtonsOnRight={setBetButtonsOnRight}\n joinCall={joinCall}\n setJoinCall={setJoinCall}\n smallBlindCents={smallBlindCents}\n isTimerEnabled={isTimerEnabled}\n timerLengthSeconds={timerLengthSeconds} // timer.DEFAULT_TIMER_SECONDS\n handTimerLengthSeconds={handTimerLengthSeconds} // timer.MEDIUM_HAND_TIMER_SECONDS\n isFourColorDeck={isFourColorDeck}\n setIsFourColorDeck={setIsFourColorDeck}\n isSpectating={isSpectating}\n isTournament={isTournament}\n isAdmin={isAdmin}\n isInCents={isInCents}\n adminPlayers={adminPlayers}\n startTransition={startTransition}\n setStartTransition={setStartTransition}\n />\n \n );\n};\n\nexport default SettingsWidget;\n","import React, { Fragment } from \"react\";\nimport { Icon } from \"../../shared/FormElements\";\nimport { faEye, faEyeSlash } from \"@fortawesome/free-solid-svg-icons\";\nimport Widget from \"../../shared/Widget\";\n\nconst ShowCardsToGodButton = ({\n emitSocketMessage,\n isGodModeEnabled,\n isGod,\n showCardsToGod,\n god,\n isSpectating,\n}) => {\n const showCardsToGodRequest = () => {\n emitSocketMessage(\"show_cards_to_god\", { show_cards: !showCardsToGod });\n };\n\n if (!isGodModeEnabled || isGod || isSpectating) {\n return <>;\n }\n\n return (\n \n showCardsToGodRequest()}\n text={\n showCardsToGod ? (\n <>\n {\"Hide Cards from \" + god} \n \n ) : (\n <>\n {\"Show Cards to \" + god} \n \n )\n }\n style={ShowCardsGodButtonPosition}\n />\n \n );\n};\n\nconst ShowCardsGodButtonPosition = {\n position: \"absolute\",\n zIndex: 3,\n top: \"70px\",\n right: \"20px\",\n height: \"40px\",\n borderTopLeftRadius: \"7px\",\n borderTopRightRadius: \"7px\",\n paddingTop: \"10px\",\n};\n\nexport default ShowCardsToGodButton;\n","import React, { Fragment, useContext } from \"react\";\nimport { GameContext } from \"../../context/GameContext\";\nimport { Icon } from \"../../shared/FormElements\";\nimport { faRandom } from \"@fortawesome/free-solid-svg-icons\";\nimport Widget from \"../../shared/Widget\";\nimport { colors } from \"../../helpers/styles\";\nimport { roles } from \"../../helpers/constants\";\n\nconst RandomSeatsButton = ({ emitSocketMessage, isSpectating }) => {\n const { activePlayers, username, ongoing } = useContext(GameContext);\n const adminPlayer = activePlayers.filter(\n (player) => player.playerRole === roles.ROLE_ADMIN\n )[0];\n\n const randomizeSeats = () => {\n emitSocketMessage(\"randomize_seats\", {});\n };\n if (\n ongoing ||\n activePlayers.length < 2 ||\n (adminPlayer && adminPlayer.playerName !== username) ||\n isSpectating\n ) {\n return <>;\n }\n\n return (\n \n randomizeSeats()}\n text={\n <>\n {\"Shuffle Seats\"} \n \n }\n style={RandomSeatButtonPosition}\n />\n \n );\n};\n\nconst RandomSeatButtonPosition = {\n position: \"absolute\",\n zIndex: 3,\n top: \"120px\",\n right: \"20px\",\n height: \"40px\",\n borderTopLeftRadius: \"7px\",\n borderTopRightRadius: \"7px\",\n backgroundColor: colors.grey,\n paddingTop: \"10px\",\n};\n\nexport default RandomSeatsButton;\n","import React, { Fragment, useContext } from \"react\";\nimport { BrowserContext } from \"../../context/BrowserContext\";\nimport Leaderboard from \"./Leaderboard\";\nimport PlayerActionsDropdown from \"./PlayerActionsDropdown\";\nimport BlindStructureWidget from \"./BlindStructureWidget\";\nimport FAQWidget from \"../../shared/Widgets/FAQWidget\";\nimport HandRankingsWidget from \"../../shared/Widgets/HandRankingsWidget\";\nimport SettingsWidget from \"./SettingsWidget\";\nimport ShowCardsToGodButton from \"./ShowCardsToGodButton\";\n// import SocialIcons from \"./SocialIcons\";\nimport RandomSeatsButton from \"./RandomSeatsButton\";\nimport styled from \"styled-components\";\nimport { roles } from \"../../helpers/constants\";\nimport { formatCurrency } from \"../../helpers/utils\";\nimport { MediumHeaderText, SmallHeaderText } from \"../../shared/Text\";\nimport { GameContext } from \"../../context/GameContext\";\n\nconst FixedWidgets = ({\n emitSocketMessage,\n gameId,\n username,\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds,\n handTimerLengthSeconds,\n activePlayers,\n isSpectating,\n isTournament,\n initialBlindCents,\n blindIncreaseMinutes,\n}) => {\n const {\n isMobile,\n setAllowKeyboardShortcuts,\n setExistsModal,\n sound,\n setSound,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n betButtonsOnRight,\n setBetButtonsOnRight,\n joinCall,\n setJoinCall,\n setCurrentModal,\n theme,\n setTheme,\n isFourColorDeck,\n setIsFourColorDeck,\n } = useContext(BrowserContext);\n const {\n isGodModeEnabled,\n isGod,\n showCardsToGod,\n god,\n isInCents,\n } = useContext(GameContext);\n const clientPlayer = activePlayers.filter(\n (player) => player.playerName === username\n )[0];\n\n const adminPlayers = activePlayers.filter(\n (player) => player.playerRole === roles.ROLE_ADMIN\n );\n\n return (\n \n {!isSpectating && clientPlayer && (\n \n )}\n {isSpectating && (\n \n )}\n \n \n Lipoker {isGodModeEnabled ? \"God Mode\" : \"\"}\n \n {`Blinds: ${formatCurrency(\n smallBlindCents,\n isInCents\n )}/${formatCurrency(2 * smallBlindCents, isInCents)}`}\n \n \n \n {isTournament && (\n \n )}\n \n \n \n \n \n \n \n );\n};\n\n// a temporary fix, I think the positioning of all of these elements should be refactored to not be absolute positioned\nconst WidgetWrapper = styled.div`\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n`;\n\nconst HeaderWrapper = styled.div`\n position: absolute;\n ${(props) =>\n props.isMobile ? \"top: 5px; left: 13px;\" : \"top: 5px; left: 20px;\"};\n color: ${({ theme }) => theme.secondary};\n`;\n\nexport default FixedWidgets;\n","import React, { Fragment, useState } from \"react\";\nimport { MTTBrowserSettingsModal } from \"../Modals\";\nimport { Icon } from \"../../shared/FormElements\";\nimport { faCog } from \"@fortawesome/free-solid-svg-icons\";\nimport Widget from \"../../shared/Widget\";\n\nconst MTTSettingsWidget = ({\n gameId,\n username,\n sound,\n setSound,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n betButtonsOnRight,\n setBetButtonsOnRight,\n joinCall,\n setJoinCall,\n setAllowKeyboardShortcuts,\n setExistsModal,\n isMobile,\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds, // timer.DEFAULT_TIMER_SECONDS\n handTimerLengthSeconds, // timer.MEDIUM_HAND_TIMER_SECONDS\n isFourColorDeck,\n setIsFourColorDeck,\n isSpectating,\n isTournament,\n isAdmin,\n isInCents,\n adminPlayers,\n}) => {\n const [showSettingsModal, _setShowSettingsModal] = useState(false);\n const [startTransition, setStartTransition] = useState(true);\n\n const setShowSettingsModal = (show) => {\n console.log(\"MTTSettingsWidget\", show);\n setStartTransition(!show);\n _setShowSettingsModal(show);\n setAllowKeyboardShortcuts(!show);\n setExistsModal(show);\n };\n\n return (\n \n setShowSettingsModal(true)}\n text={}\n showNotif={false}\n left={isMobile ? \"2px\" : \"6px\"}\n dataTestId={\"settings-widget\"}\n />\n {\n setShowSettingsModal(false);\n }}\n sound={sound}\n setSound={setSound}\n showVideoChat={showVideoChat}\n setShowVideoChat={setShowVideoChat}\n videoIsOnRight={videoIsOnRight}\n setVideoIsOnRight={setVideoIsOnRight}\n betButtonsOnRight={betButtonsOnRight}\n setBetButtonsOnRight={setBetButtonsOnRight}\n joinCall={joinCall}\n setJoinCall={setJoinCall}\n smallBlindCents={smallBlindCents}\n isTimerEnabled={isTimerEnabled}\n timerLengthSeconds={timerLengthSeconds} // timer.DEFAULT_TIMER_SECONDS\n handTimerLengthSeconds={handTimerLengthSeconds} // timer.MEDIUM_HAND_TIMER_SECONDS\n isFourColorDeck={isFourColorDeck}\n setIsFourColorDeck={setIsFourColorDeck}\n isSpectating={isSpectating}\n isTournament={isTournament}\n isAdmin={isAdmin}\n isInCents={isInCents}\n adminPlayers={adminPlayers}\n startTransition={startTransition}\n setStartTransition={setStartTransition}\n />\n \n );\n};\n\nexport default MTTSettingsWidget;\n","import React, { Fragment, useContext } from \"react\";\nimport { BrowserContext } from \"../../context/BrowserContext\";\n// import PlayerActionsDropdown from \"./PlayerActionsDropdown\";\nimport FAQWidget from \"../../shared/Widgets/FAQWidget\";\nimport HandRankingsWidget from \"../../shared/Widgets/HandRankingsWidget\";\nimport MTTSettingsWidget from \"./MTTSettingsWidget\";\n// import SocialIcons from \"./SocialIcons\";\nimport styled from \"styled-components\";\nimport { roles } from \"../../helpers/constants\";\nimport { formatCurrency } from \"../../helpers/utils\";\nimport { MediumHeaderText, SmallHeaderText } from \"../../shared/Text\";\nimport { GameContext } from \"../../context/GameContext\";\n\nconst MTTLobbyWidgets = ({\n emitSocketMessage,\n gameId,\n username,\n smallBlindCents,\n isTimerEnabled,\n timerLengthSeconds,\n handTimerLengthSeconds,\n activePlayers,\n isSpectating,\n isTournament,\n initialBlindCents,\n blindIncreaseMinutes,\n}) => {\n const {\n isMobile,\n setAllowKeyboardShortcuts,\n setExistsModal,\n sound,\n setSound,\n showVideoChat,\n setShowVideoChat,\n videoIsOnRight,\n setVideoIsOnRight,\n betButtonsOnRight,\n setBetButtonsOnRight,\n joinCall,\n setJoinCall,\n setCurrentModal,\n theme,\n setTheme,\n isFourColorDeck,\n setIsFourColorDeck,\n } = useContext(BrowserContext);\n const { isInCents } = useContext(GameContext);\n const clientPlayer = activePlayers.filter(\n (player) => player.playerName === username\n )[0];\n\n const adminPlayers = activePlayers.filter(\n (player) => player.playerRole === roles.ROLE_ADMIN\n );\n\n return (\n \n {/* {!isSpectating && clientPlayer && (\n \n )}\n {isSpectating && (\n \n )} */}\n \n \n Lipoker Multi-table Tournament\n \n {/* {`Blinds: ${formatCurrency(\n smallBlindCents,\n isInCents\n )}/${formatCurrency(2 * smallBlindCents, isInCents)}`} */}\n \n \n \n \n \n \n \n );\n};\n\n// a temporary fix, I think the positioning of all of these elements should be refactored to not be absolute positioned\nconst WidgetWrapper = styled.div`\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n`;\n\nconst HeaderWrapper = styled.div`\n position: absolute;\n ${(props) =>\n props.isMobile ? \"top: 5px; left: 13px;\" : \"top: 5px; left: 20px;\"};\n color: ${({ theme }) => theme.secondary};\n`;\n\nexport default MTTLobbyWidgets;\n","import React, { useState, Fragment } from \"react\";\nimport { colors } from \"../../../helpers/styles\";\nimport { PrimaryButton } from \"../../../shared/FormElements\";\nimport { LoadingWrapper, BoldText } from \"../../../shared/Text\";\nimport { roles } from \"../../../helpers/constants\";\nimport styled from \"styled-components\";\nimport { emit } from \"../../../helpers/socket\";\n\nconst StartMTTRoundAction = ({ clientRole, MTTId }) => {\n const [actionDone, setActionDone] = useState(false);\n\n const onStartRoundClick = () => {\n emit(\"start_mtt_round\", {\n mtt_id: MTTId,\n });\n setActionDone(true);\n };\n\n let startButton;\n\n if (actionDone) {\n startButton = ;\n } else {\n startButton = (\n \n Start Round\n \n );\n }\n return (\n \n {clientRole === roles.ROLE_MTT_ADMIN && startButton}\n {clientRole !== roles.ROLE_MTT_ADMIN && (\n \n Waiting for MTT Admin to {\"start round\"}\n \n )}\n \n );\n};\n\nconst StartMTTRoundWrapper = styled.div`\n text-align: right;\n`;\n\nexport default StartMTTRoundAction;\n","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n roles,\n} from \"../../../helpers/constants\";\nimport * as Actions from \"./actions\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\nimport { LoadingWrapper, BoldText } from \"../../../shared/Text\";\n\nconst ActionButtons = ({ clientUser }) => {\n const { ownStackCents, username, MTTOngoing, isInCents, MTTId } = useContext(\n GameContext\n );\n\n let actionButtons;\n\n if (!MTTOngoing) {\n actionButtons = (\n \n );\n } else {\n actionButtons = Waiting for Round to End;\n }\n\n return (\n <>\n {actionButtons}\n \n );\n};\n\nconst ActionWrapper = styled.div`\n position: absolute;\n z-index: 2;\n right: 20px;\n bottom: 20px;\n display: flex;\n flex-direction: column;\n align-items: right;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n right: 5px;\n bottom: 15px;\n position: fixed;\n }\n`;\n\nexport default ActionButtons;\n","import React, { useState } from \"react\";\nimport { faSyncAlt } from \"@fortawesome/free-solid-svg-icons\";\nimport { Icon } from \"../FormElements\";\nimport styled from \"styled-components\";\n\nconst RefreshButton = ({ refreshAction }) => {\n const [refreshOnChange, setRefreshOnChange] = useState(false);\n const [disableTransition, setDisableTransition] = useState(false);\n const [disableButton, setDisableButton] = useState(false);\n\n const refresh = () => {\n refreshAction();\n setRefreshOnChange(true);\n setDisableButton(true);\n\n setTimeout(() => {\n setDisableTransition(true);\n setRefreshOnChange(false);\n setTimeout(() => {\n setDisableTransition(false);\n setDisableButton(false);\n }, 50);\n }, 700);\n };\n\n return (\n \n \n \n );\n};\n\nconst RefreshOuter = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 3;\n display: flex;\n align-items: center;\n height: 25px;\n width: 25px;\n margin: 10px;\n justify-content: center;\n border-radius: 5px;\n background: ${({ theme }) => theme.secondary};\n cursor: pointer;\n svg {\n transition: 0.7s ease all;\n }\n &:hover {\n background: ${({ theme }) => theme.background};\n }\n ${(props) =>\n props.refreshOnChange &&\n `\n svg { transform: rotate(360deg); }\n `}\n ${(props) =>\n props.disableTransition &&\n `\n svg { transition: none; }\n `}\n ${(props) =>\n props.disableButton &&\n `\n pointer-events: none;\n background: ${({ theme }) => theme.secondaryLighter};\n `}\n`;\n\nexport default RefreshButton;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Loading = ({ size = \"md\" }) => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nconst LoadingWrapper = styled.div`\n ${(props) =>\n props.size === \"lg\" &&\n `\n transform: scale(2);\n `}\n ${(props) =>\n props.size === \"sm\" &&\n `\n transform: scale(0.7);\n `}\n`;\n\nexport default Loading;\n","import React, { useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { MediumHeaderText } from \"../Text\";\nimport { font, gradientScrollStyles } from \"../../helpers/styles\";\nimport { mobileBreakpoint } from \"../../helpers/constants\";\nimport RefreshButton from \"./RefreshButton\";\nimport Loading from \"../Image/Loading\";\nimport Card from \"../Card\";\n\nconst Table = ({\n isMobile,\n header,\n rowData,\n italicizeCols,\n emptyText,\n onRowClick,\n selectedRow,\n getRows,\n isMTTAdmin,\n}) => {\n useEffect(() => {\n getRows();\n }, []);\n\n return (\n \n \n \n \n \n {header.map((item, i) => (\n {item}\n ))}\n \n \n \n \n \n \n {rowData &&\n rowData.map((row, i) => {\n console.log(Object.keys(row));\n return (\n onRowClick(i)}\n selected={selectedRow === i}\n >\n {header.map((colName, j) => (\n \n {colName === \"game id\" && !row[colName]\n ? \"Not in game\"\n : row[colName]}\n \n ))}\n \n {isMTTAdmin && \"EDIT\"}\n \n {/* Empty column for refresh button */}\n \n );\n })}\n \n \n {(rowData === null || rowData.length === 0) && (\n \n {rowData === null && }\n {rowData && rowData.length === 0 && (\n <>\n
\n \n \n
\n {emptyText}\n \n )}\n
\n )}\n
\n
\n );\n};\n\nconst TableOuter = styled.div`\n position: relative;\n @media screen and (max-width: ${mobileBreakpoint}) {\n width: 90%;\n height: 100%;\n }\n`;\n\nconst TableWrapper = styled.div`\n position: relative;\n width: 50vw;\n height: -webkit-calc(100vh - 200px);\n height: -moz-calc(100vh - 200px);\n height: -o-calc(100vh - 200px);\n height: calc(100vh - 200px);\n border-radius: 5px;\n overflow: scroll;\n ${(props) =>\n props.theme &&\n `\n ${gradientScrollStyles(\"rgba(0,0,0,0.3)\", props.theme.secondary)}\n background-color: ${props.theme.secondary};\n border-bottom: 1px solid ${props.theme.secondary};\n `}\n box-shadow: ${({ theme }) => theme.boxShadow};\n @media screen and (max-width: ${mobileBreakpoint}) {\n width: 100%;\n height: 100%;\n }\n &::-webkit-scrollbar {\n display: none;\n }\n -ms-overflow-style: none;\n scrollbar-width: none;\n`;\n\nconst TableMain = styled.table`\n color: white;\n font-family: ${font.body};\n table-layout: auto;\n width: 100%;\n border-collapse: collapse;\n`;\n\nconst TableHeader = styled.thead``;\n\nconst TableHeaderCell = styled.th`\n background: ${({ theme }) => theme.primary};\n z-index: 2;\n top: 0;\n left: 0;\n position: sticky;\n padding: 8px 16px;\n padding-top: 12px;\n font-weight: bold;\n text-transform: uppercase;\n`;\n\nconst TableBody = styled.tbody`\n display: table-row-group;\n`;\n\nconst TableCell = styled.td`\n padding: 8px 16px;\n ${(props) => props.italicize && `font-style: italic;`}\n`;\n\nconst TableRow = styled.tr`\n transform: scale(1); /* position: relative doesn't work in tr, workaround */\n border: 1px dashed ${({ theme }) => theme.secondaryLighter};\n cursor: pointer;\n ${(props) =>\n props.selected &&\n props.theme &&\n `\n background: ${props.theme.secondaryLighter};\n `}\n &:hover {\n background: ${({ theme }) => theme.secondaryLighter};\n }\n`;\n\nconst EmptyText = styled.div`\n color: white;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: -45px;\n flex-direction: column;\n`;\n\nexport default Table;\n","import React, { useState, useContext, useEffect } from \"react\";\nimport { GameContext } from \"../../context/GameContext\";\nimport { BrowserContext } from \"../../context/BrowserContext\";\nimport ActionButtons from \"./ActionButtons\";\nimport styled from \"styled-components\";\nimport Table from \"../../shared/Table\";\nimport { mobileBreakpoint } from \"../../helpers/constants\";\nimport { PrimaryButton } from \"../../shared/FormElements\";\nimport { emit } from \"../../helpers/socket\";\n\nconst header = [\"name\", \"stack\", \"game id\"];\n\nconst MTTLobby = ({ data, getPlayers, MTTUsers }) => {\n const { username, MTTId, MTTOngoing } = useContext(GameContext);\n console.log(\"MTT Ongoing\", MTTOngoing);\n const { isMobile } = useContext(BrowserContext);\n\n const onUserClick = (index) => {\n const gameId = data[index].metadata.gameId;\n const currentURL = window.location.href;\n window.location.href = `${currentURL}/game/${gameId}?username=${username}&autojoin=true&spectate=true`;\n };\n\n const onStartClick = () => {\n emit(\"start_mtt_round\", {\n mtt_id: MTTId,\n });\n };\n const clientUser = MTTUsers.filter((user) => user.userName === username)[0];\n const MTTAdminUser = MTTUsers.filter(\n (user) => user.userRole === \"ROLE_MTT_ADMIN\"\n )[0];\n\n return (\n \n \n \n \n \n \n );\n};\n\nconst LobbyOuter = styled.div`\n width: 100%;\n height: 100%;\n text-align: center;\n align-items: center;\n display: flex;\n`;\n\nconst LobbyWrapper = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 30px;\n padding-left: 50px;\n @media screen and (max-width: ${mobileBreakpoint}) {\n flex-direction: column-reverse;\n justify-content: flex-start;\n align-items: center;\n padding-left: 0;\n padding-top: 100px;\n height: 95%;\n }\n`;\n\nexport default MTTLobby;\n","import React, { Fragment, useState, useEffect } from \"react\";\nimport { sounds } from \"../../helpers/constants\";\n\nconst AllAudio = ({ setAudioToSoundMap }) => {\n const [audioInitialized, setAudioInitialized] = useState(false);\n\n let callAudio;\n let checkAudio;\n let dingAudio;\n let foldAudio;\n let raiseAudio;\n let winAudio;\n\n const _audioToSoundMap = {\n [sounds.CALL]: callAudio,\n [sounds.CHECK]: checkAudio,\n [sounds.DING]: dingAudio,\n [sounds.FOLD]: foldAudio,\n [sounds.RAISE]: raiseAudio,\n [sounds.WIN]: winAudio,\n };\n\n useEffect(() => {\n // initialize each sound\n Object.keys(_audioToSoundMap).map((soundName) => {\n _audioToSoundMap[soundName] = new Audio(\n `${process.env.PUBLIC_URL}/assets/sounds/${soundName}.mp3`\n );\n });\n\n // the first time the user does an interaction, \"mount/unlock\" the audio\n // to get around the fact that certain browsers require user interaction\n // to auto-play audio\n document.addEventListener(\"click\", unlockAudio);\n\n return () => {\n document.removeEventListener(\"click\", (e) => unlockAudio(e));\n };\n }, []);\n\n const unlockAudio = async (e) => {\n e.preventDefault();\n setTimeout(() => {\n if (!audioInitialized) {\n Object.keys(_audioToSoundMap).map((soundName) => {\n // play and immediately stop\n const audio = _audioToSoundMap[soundName];\n audio.volume = 0;\n audio.play();\n audio.pause();\n audio.volume = 1;\n audio.currentTime = 0;\n });\n setAudioToSoundMap(_audioToSoundMap);\n setAudioInitialized(true);\n document.removeEventListener(\"click\", unlockAudio);\n }\n }, 0);\n };\n\n return ;\n};\n\nexport default AllAudio;\n","import React, { useState, cloneElement } from \"react\";\nimport Notification from \"../Notification\";\n\nconst ModalNotifWrapper = ({\n modalConstant,\n children,\n setModal,\n setExistsModal,\n notification,\n}) => {\n const [showNotif, setShowNotif] = useState(false);\n\n const setShowFeedbackModal = (show) => {\n if (show) {\n setModal(modalConstant);\n } else {\n setModal(null);\n }\n setExistsModal(show);\n };\n\n const hideModal = (showThankYou) => {\n setShowFeedbackModal(false);\n if (showThankYou) {\n setShowNotif(true);\n }\n };\n\n return (\n <>\n setShowNotif(false)}>\n {notification}\n \n {cloneElement(children, { hideModal: hideModal })}\n \n );\n};\n\nexport default ModalNotifWrapper;\n","import React from \"react\";\nimport { SmallBodyText } from \"../../../shared/Text\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport { faCheckCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { colors } from \"../../../helpers/styles\";\n\nexport const feedbackNotif = (\n \n \n Thank you for your feedback!\n \n);\n","/**\n * Modal Conductor should be at the root level,\n * and ensures that only one modal is shown at a time,\n * using a single variable to switch on\n * TODO: migrate all modals to use ModalConductor\n */\nimport React from \"react\";\nimport { modals } from \"../../../helpers/constants\";\nimport { refreshPage } from \"../../../helpers/utils\";\nimport {\n BuyInModal,\n FeedbackModal,\n RaisePercentInfoModal,\n DisconnectedModal,\n NoInternetModal,\n DifferentLogInModal,\n PatreonModal,\n} from \"../../Modals\";\nimport ModalNotifWrapper from \"../../../shared/Modal/ModalNotifWrapper\";\nimport { feedbackNotif } from \"./notifications\";\nimport { Offline, Online } from \"react-detect-offline\";\n\nconst ModalConductor = ({\n currentModal,\n setCurrentModal,\n emitSocketMessage,\n ownStackCents,\n gameId,\n username,\n isMobile,\n setExistsModal,\n isSpectating,\n provider,\n isInCents,\n}) => {\n return (\n <>\n setCurrentModal(null)}\n emitSocketMessage={emitSocketMessage}\n ownStackCents={ownStackCents}\n isInCents={isInCents}\n />\n {\n setCurrentModal(null);\n }}\n />\n \n \n \n \n \n \n \n \n setCurrentModal(modal)}\n setExistsModal={setExistsModal}\n notification={feedbackNotif}\n >\n \n \n setCurrentModal(null)}\n />\n \n );\n};\n\nexport default ModalConductor;\n","import React, { useContext } from \"react\";\nimport AllAudio from \"./AllAudio\";\nimport ModalConductor from \"./ModalConductor\";\nimport { GlobalStyle } from \"../../helpers/styles\";\nimport { BrowserContext } from \"../../context/BrowserContext\";\nimport { connectEmitSocketMessage } from \"../../helpers/socket\";\nimport { GameContext } from \"../../context/GameContext\";\nimport FullStory from \"react-fullstory\";\nimport Heap from \"react-heap\";\nimport \"./polyfills\";\n\nconst FULLSTORY_ORG_ID = \"TFSSC\"; // Fill this in here\nconst FULLSTORY_NAMESPACE = \"FS\";\n\nconst Global = ({ gameId, provider }) => {\n const {\n sessionKey,\n username,\n ownStackCents,\n isSpectating,\n isInCents,\n } = useContext(GameContext);\n const {\n setAudioToSoundMap,\n currentModal,\n setCurrentModal,\n isMobile,\n setExistsModal,\n } = useContext(BrowserContext);\n const emitSocketMessage = connectEmitSocketMessage(\n sessionKey,\n gameId,\n username\n );\n return (\n <>\n \n \n \n \n \n \n );\n};\n\nexport default Global;\n","import React, { useState, useEffect } from \"react\";\nimport Card from \"./\";\nimport CardBack from \"./CardBack\";\nimport sizes from \"./sizes\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst FlipCard = (props) => {\n const { isFlat, ...rest } = props;\n const [isFaceUp, setIsFaceUp] = useState(false);\n\n useEffect(() => {\n setTimeout(() => {\n setIsFaceUp(true);\n }, 400);\n }, []);\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst FlipCardInner = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n text-align: center;\n transition: transform 0.2s cubic-bezier(0.47, 0, 0.75, 0.72);\n transform-style: preserve-3d;\n`;\n\nconst FlipCardOuter = styled.div`\n background-color: transparent;\n ${(props) =>\n props.size &&\n `\n height: ${sizes[props.size][\"height\"]};\n width: ${sizes[props.size][\"width\"]};\n `}\n perspective: 1000px;\n margin: 5px;\n ${(props) =>\n props.isFaceUp &&\n `\n ${FlipCardInner} {\n transform: rotateY(180deg);\n }\n `}\n @media screen and (max-width: ${mobileBreakpoint}), screen and (max-height: ${mobileHeightBreakpoint}) {\n margin: 2px;\n }\n`;\n\nconst FlipCardInnerChild = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n -webkit-backface-visibility: hidden; /* Safari */\n backface-visibility: hidden;\n margin: 0;\n border-radius: 5px;\n overflow: hidden;\n`;\n\nconst FlipCardFront = styled(FlipCardInnerChild)`\n transform: rotateY(180deg);\n`;\n\nconst FlipCardBack = styled(FlipCardInnerChild)``;\n\nexport default FlipCard;\n","import React, { Fragment, useState } from \"react\";\nimport { colors } from \"../../../helpers/styles\";\nimport { BackgroundButton, Icon } from \"../../../shared/FormElements\";\nimport { faCopy, faCheck, faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport { copyTextToClipboard } from \"../../../helpers/utils\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst DURATION = 1000;\nconst CopyJoinLink = () => {\n const [showSuccess, setShowSuccess] = useState(false);\n const [showFail, setShowFail] = useState(false);\n\n const copyGameInfo = (_) => {\n const url = window.location.href;\n copyTextToClipboard(url).then((success) => {\n _showCopyResult(success);\n });\n };\n\n const _showCopyResult = (success) => {\n if (success) {\n setShowSuccess(true);\n } else {\n setShowFail(true);\n }\n setTimeout(() => {\n if (success) {\n setShowSuccess(false);\n } else {\n setShowFail(false);\n }\n }, DURATION);\n };\n\n let inner;\n if (showSuccess) {\n inner = (\n \n \n COPIED\n \n );\n } else if (showFail) {\n inner = (\n \n \n FAILED\n \n );\n } else {\n inner = (\n \n \n COPY GAME LINK\n \n );\n }\n\n return (\n \n {inner}\n \n );\n};\n\nconst JoinLinkButton = styled(BackgroundButton)`\n color: ${({ theme }) => theme.text.widget};\n background: ${({ theme }) => theme.foreground};\n width: 165px;\n ${(props) =>\n props.actionDone &&\n `\n pointer-events: none;\n `}\n @media screen and (max-width: ${mobileBreakpoint}), screen and (max-height: ${mobileHeightBreakpoint}) {\n width: auto;\n }\n &:hover {\n background: ${({ theme }) => theme.background};\n }\n`;\nexport default CopyJoinLink;\n","import React, { useContext, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { formatCurrency } from \"../../../helpers/utils\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport { colors } from \"../../../helpers/styles\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { MediumBodyText } from \"../../../shared/Text\";\nimport { useStateWithLocalStorageString } from \"../../../hooks/useStateWithLocalStorage\";\n\nconst CentralPot = () => {\n const { mainPotCents, betsOnTableSumCents, isInCents } = useContext(\n GameContext\n );\n let [potHovered, setPotHovered] = useState(false);\n let [justSwitchedPot, setJustSwitchedPot] = useState(false);\n const [potType, setPotType] = useStateWithLocalStorageString(\n \"centralPotType\",\n \"defaultPot\"\n );\n\n const potOptions = {\n defaultPot: {\n value: formatCurrency(mainPotCents, isInCents)\n ? formatCurrency(mainPotCents, isInCents)\n : 0,\n hoverText: \"Switch to Total Pot\",\n caption: \"Pot: \",\n switchTo: \"totalPot\",\n },\n totalPot: {\n value: formatCurrency(mainPotCents + betsOnTableSumCents, isInCents)\n ? formatCurrency(mainPotCents + betsOnTableSumCents, isInCents)\n : 0,\n hoverText: \"Switch to Pot\",\n caption: \"Total Pot: \",\n switchTo: \"defaultPot\",\n },\n };\n\n const switchPot = () => {\n setJustSwitchedPot(true);\n setPotType(potOptions[potType].switchTo);\n };\n\n let allPots = (\n setPotHovered(true)}\n onMouseLeave={() => {\n setPotHovered(false);\n setJustSwitchedPot(false);\n }}\n >\n {!potHovered\n ? `${potOptions[potType].caption}${potOptions[potType].value}`\n : !justSwitchedPot\n ? `${potOptions[potType].hoverText}`\n : `${potOptions[potType].caption}${potOptions[potType].value}`}\n \n );\n return <> {allPots} ;\n};\n\nconst MainPot = styled(MediumBodyText)`\n position: relative;\n cursor: pointer;\n color: white;\n cursor: pointer;\n width: 150px;\n height: 30px;\n font-size: 18px;\n background: ${({ theme }) => theme.primary};\n display: flex;\n border-radius: 5px;\n align-items: center;\n justify-content: center;\n color: ${colors.white};\n transition: all 300ms ease-in-out;\n -moz-transition: all 300ms ease-in-out;\n -webkit-transition: all 300ms ease-in-out;\n opacity: 1;\n z-index: -1;\n transform: rotateX(0deg);\n ${(props) =>\n props.potType === \"totalPot\" &&\n `\n transform: rotateX(360deg);\n `}\n\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 0.7em;\n height: 18px;\n width: 100px;\n }\n`;\n\n// const InvalidPot = styled(MainPot)`\n// background: #aaaaaa;\n// color: #555555;\n// `;\n\n// const PotToggleExplanation = styled(MainPot)`\n// // color: ${colors.white};\n// position: absolute;\n// cursor: pointer;\n// // transform: translate(0px, -1.5em);\n// transform: rotateX(180deg);\n// ${(props) =>\n// props.activated\n// ? `opacity: 1;\n// transform: rotateX(0deg);`\n// : `opacity: 0;`}\n// transition: all 300ms ease-in-out;\n// -moz-transition: all 300ms ease-in-out;\n// -webkit-transition: all 300ms ease-in-out;\n// z-index: -1;\n// `;\n\nexport default CentralPot;\n","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../../../shared/Card\";\nimport FlipCard from \"../../../shared/Card/FlipCard\";\n\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport { convertCardStringToValues } from \"../../../helpers/utils\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\nimport CopyJoinLink from \"./CopyJoinLink\";\nimport CentralPot from \"../CentralPotView\";\n\nconst maxCardsNumber = 5;\n\nconst Table = ({ playersAreInHand, isMobile, iframeClientName }) => {\n const { faceUpHoleCards } = useContext(GameContext);\n const { isFourColorDeck } = useContext(BrowserContext);\n\n const emptyCards = new Array(\n maxCardsNumber - Object.keys(faceUpHoleCards).length\n ).fill();\n\n const innerTable = playersAreInHand ? (\n <>\n {Object.keys(faceUpHoleCards).map((_, i) => {\n const cardObject = convertCardStringToValues(faceUpHoleCards[i].card);\n return (\n \n );\n })}\n {emptyCards.map((_, i) => (\n \n ))}\n \n ) : (\n iframeClientName === \"game\" && \n );\n\n return (\n \n \n \n \n \n \n {innerTable}\n \n \n \n );\n};\n\nconst PotWrapper = styled.div`\n display: flex;\n // top: 30px;\n cursor: pointer;\n position: absolute;\n width: auto;\n transform: translateY(-100%);\n top: -10px;\n justify-content: space-around;\n`;\n\nconst TableWrapper = styled.div`\n height: 100%;\n`;\n\nconst TableOuter = styled.div`\n position: absolute;\n width: 70%;\n height: 70%;\n left: 50%;\n top: 5%;\n -webkit-transform: translate(-50%);\n -moz-transform: translate(-50%);\n transform: translate(-50%);\n text-align: center;\n z-index: 0;\n background: ${({ theme }) => theme.table.inner};\n border: 10px solid ${({ theme }) => theme.table.outer};\n border-radius: 200px;\n display: flex;\n align-items: center;\n justify-content: center;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n top: 3%;\n }\n`;\n\nconst TableItems = styled.div`\n position: relative;\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n align-items: center;\n width: 100%;\n`;\n\nconst CardsWrapper = styled.div`\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: center;\n`;\n\nexport default Table;\n","const offsets = {\n xCenterRight: \"75.9%\",\n xCenterLeft: \"24.1%\",\n xEdgeRight: \"94%\",\n xEdgeLeft: \"6%\",\n yTop: \"-18%\",\n yCenterTop: \"4%\",\n yCenterBottom: \"58%\",\n yBottom: \"80%\",\n};\n\nconst xBetEdge = 21;\nconst xBetCenterOff = 24.1;\n\nconst betOffsets = {\n yTop: \"11%\",\n yCenterTop: \"24%\",\n yCenterBottom: \"44%\",\n yBottom: `60%`,\n xCenterRight: `${100 - xBetCenterOff}%`,\n xFarRight: `${100 - xBetEdge}%`,\n xCenter: \"50%\",\n xCenterLeft: `${xBetCenterOff}%`,\n xFarLeft: `${xBetEdge}%`,\n};\n\nexport const playerStyles = {\n playerPos: {\n \"0\": {\n left: offsets.xCenterRight,\n top: offsets.yTop,\n },\n \"1\": {\n left: offsets.xEdgeRight,\n top: offsets.yCenterTop,\n },\n \"2\": {\n left: offsets.xEdgeRight,\n top: offsets.yCenterBottom,\n },\n \"3\": {\n left: offsets.xCenterRight,\n top: offsets.yBottom,\n },\n \"4\": {\n left: \"50%\",\n top: offsets.yBottom,\n },\n \"5\": {\n left: offsets.xCenterLeft,\n top: offsets.yBottom,\n },\n \"6\": {\n left: offsets.xEdgeLeft,\n top: offsets.yCenterBottom,\n },\n \"7\": {\n left: offsets.xEdgeLeft,\n top: offsets.yCenterTop,\n },\n \"8\": {\n left: offsets.xCenterLeft,\n top: offsets.yTop,\n },\n },\n centralPotPos: {\n left: \"50%\",\n top: \"25.5%\",\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n upperPotPos: {\n left: \"50%\",\n top: \"22.5%\",\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n lowerPotPos: {\n left: \"50%\",\n top: \"29.5%\",\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n playerBetPos: {\n \"0\": {\n left: betOffsets.xCenterRight,\n top: betOffsets.yTop,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"1\": {\n left: betOffsets.xFarRight,\n top: betOffsets.yCenterTop,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"2\": {\n left: betOffsets.xFarRight,\n bottom: betOffsets.yCenterBottom,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"3\": {\n left: betOffsets.xCenterRight,\n top: betOffsets.yBottom,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"4\": {\n left: betOffsets.xCenter,\n top: betOffsets.yBottom,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"5\": {\n left: betOffsets.xCenterLeft,\n top: betOffsets.yBottom,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"6\": {\n left: betOffsets.xFarLeft,\n bottom: betOffsets.yCenterBottom,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"7\": {\n left: betOffsets.xFarLeft,\n top: betOffsets.yCenterTop,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n \"8\": {\n left: betOffsets.xCenterLeft,\n top: betOffsets.yTop,\n transform: \"translate(-50%, -50%)\",\n msTransform: \"translate(-50%, -50%)\",\n WebkitTransform: \"translate(-50%, -50%)\",\n },\n },\n};\n","import React from \"react\";\nimport { colors, font } from \"../../helpers/styles\";\nimport styled from \"styled-components\";\n\nconst ActionBar = ({\n show,\n actionsList,\n style,\n handleMouseEnter,\n handleMouseLeave,\n}) => {\n return (\n \n {actionsList.map((action) => (\n \n {action.name}\n \n {action.inner}\n \n \n ))}\n \n );\n};\n\nconst ActionBarContent = styled.div`\n background: ${colors.lightGrey2};\n border: 1px solid ${({ theme }) => theme.foreground};\n border-radius: 30px;\n height: 60px;\n display: flex;\n justify-content: space-between;\n padding: 5px;\n ${(props) =>\n !props.show &&\n `\n opacity: 0;\n pointer-events: none;\n `}\n user-select: none;\n`;\n\nconst ActionBarItemLabel = styled.div`\n position: absolute;\n pointer-events: none;\n top: -10px;\n left: 50%;\n transform: translate(-50%, -100%);\n background: ${({ theme }) => theme.foreground};\n color: ${colors.black};\n font-weight: bold;\n font-family: ${font.body};\n font-size: 12px;\n border-radius: 5px;\n min-width: max-content;\n padding: 2px 5px;\n opacity: 0;\n`;\n\nconst ActionBarItem = styled.div`\n background: ${(props) =>\n props.selected\n ? ({ theme }) => theme.secondary\n : ({ theme }) => theme.primary};\n cursor: pointer;\n font-family: ${font.body};\n ${(props) =>\n props.isLoading &&\n `\n pointer-events: none;\n background: ${({ theme }) => theme.foreground};\n `}\n height: 30px;\n border-radius: 30px;\n color: ${colors.white};\n display: flex;\n align-items: center;\n justify-content: center;\n transition: 0.2s ease transform;\n transform-origin: bottom;\n padding: 4px;\n`;\n\nconst ActionBarItemWrapper = styled.div`\n position: relative;\n margin-left: 10px;\n &:first-child {\n margin: 0;\n }\n &:hover {\n ${ActionBarItem} {\n transform: scale(1.2);\n background: ${({ theme }) => theme.secondary};\n }\n ${ActionBarItemLabel} {\n opacity: 1;\n }\n }\n`;\n\nexport default ActionBar;\n","import React, { useState } from \"react\";\nimport ActionBar from \"../../../shared/ActionBar\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport {\n faSync,\n faBan,\n faCoins,\n faDollarSign,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { colors, font } from \"../../../helpers/styles\";\nimport { formatCurrency } from \"../../../helpers/utils\";\nimport styled from \"styled-components\";\n\nconst actionBarPositioning = {\n position: \"absolute\",\n height: \"auto\",\n top: \"-15px\",\n right: 0,\n transform: \"translate(50%,-100%)\",\n};\n\nconst BuyInActionBar = ({\n emitSocketMessage,\n name,\n pos,\n requestedBuyIn,\n pendingBuyIn,\n isInCents,\n}) => {\n const [showActionBar, setShowActionBar] = useState(false);\n const [actionBarHoverTimeout, setActionBarHoverTimeout] = useState(null);\n const [isApproved, setApproveBuyIn] = useState(false);\n\n const handleMouseEnter = () => {\n clearTimeout(actionBarHoverTimeout);\n setShowActionBar(true);\n };\n\n const handleMouseLeave = () => {\n setActionBarHoverTimeout(setTimeout(() => setShowActionBar(false), 1400));\n };\n\n const approveBuyIn = () => {\n setApproveBuyIn(true);\n setShowActionBar(false);\n emitSocketMessage(\"approve_buy_in\", {\n name: name,\n amount: parseInt(requestedBuyIn),\n });\n };\n\n const declineBuyIn = () => {\n setApproveBuyIn(true);\n setShowActionBar(false);\n emitSocketMessage(\"approve_buy_in\", {\n name: name,\n amount: parseInt(pendingBuyIn),\n });\n };\n\n const actionsList = [\n {\n name: \"Accept\",\n icon: faSync,\n inner: (\n <>\n {pendingBuyIn > 0 ? (\n \n ) : (\n \"+\"\n )}\n \n {formatCurrency(requestedBuyIn, isInCents)}\n \n \n ),\n dataTestId: `accept-buyin${pos}`,\n onClick: () => approveBuyIn(),\n },\n {\n name: \"Decline\",\n icon: faBan,\n inner: ,\n dataTestId: `decline-buyin${pos}`,\n onClick: () => declineBuyIn(),\n },\n ];\n\n console.log(\"BuyInActionBar\", name, pos, requestedBuyIn, pendingBuyIn)\n return (\n <>\n setShowActionBar(!showActionBar)}\n onMouseEnter={handleMouseEnter}\n selected={showActionBar}\n data-testid={`buyin-toggle${pos}`}\n >\n {!isInCents && }\n {isInCents && (\n \n )}\n \n \n \n );\n};\n\nconst ActionBarToggleButton = styled.div`\n width: 27px;\n height: 27px;\n font-family: ${font.header};\n cursor: pointer;\n font-size: 16px;\n border-radius: 50%;\n background-color: ${({ theme }) => theme.tertiary};\n color: ${colors.white};\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n right: 0;\n top: 0;\n transform: translate(50%, -50%);\n font-weight: bold;\n border: 1px solid ${colors.lightGrey2};\n ${(props) =>\n props.selected &&\n `\n background: ${colors.grey};\n color: ${colors.white};\n `}\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 16px;\n height: 16px;\n font-size: 0.5em;\n }\n user-select: none;\n`;\n\nconst BuyInWrapper = styled.div`\n margin-left: 1.5px;\n`;\n\nexport default BuyInActionBar;\n","import React, { Fragment } from \"react\";\nimport styled from \"styled-components\";\nimport Card, {\n cardHeight,\n mobileCardHeight,\n cardHeightRaw,\n mobileCardHeightRaw,\n} from \"../../../shared/Card\";\nimport { playerStyles } from \"./player_styles\";\nimport { SmallBodyText, SmallHeaderTextEllipsis } from \"../../../shared/Text\";\nimport { Icon } from \"../../../shared/FormElements\";\nimport BuyInActionBar from \"./BuyInActionBar\";\nimport { formatCurrency } from \"../../../helpers/utils\";\nimport { colors, font } from \"../../../helpers/styles\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n roles,\n} from \"../../../helpers/constants\";\nimport {\n convertCardStringToValues,\n posFromClientPOV,\n} from \"../../../helpers/utils\";\nimport { emitSocketMessage } from \"../../../helpers/socket\";\nimport {\n faUserCog,\n faStar,\n faEye,\n faEyeSlash,\n faCoins,\n} from \"@fortawesome/free-solid-svg-icons\";\n// import { GameContext } from \"../../context/GameContext\";\n\nconst Player = ({\n name,\n cards,\n balance,\n isClient,\n clientRole,\n playerRole,\n isInHand,\n isTurn,\n isWinner,\n isDealer,\n bestHand,\n pos,\n clientPos,\n pot,\n connected,\n requestedBuyIn,\n pendingBuyIn,\n isMobile,\n isFourColorDeck,\n emitSocketMessage,\n isSpectating,\n maxPlayerNumber,\n isGodModeEnabled,\n isGod,\n showCardsToGod,\n isInCents,\n}) => {\n let playerHand = ;\n let posStyle =\n playerStyles.playerPos[posFromClientPOV(pos, clientPos, maxPlayerNumber)];\n let betPosStyle =\n playerStyles.playerBetPos[\n posFromClientPOV(pos, clientPos, maxPlayerNumber)\n ];\n let nameLabel = (\n \n {playerRole === roles.ROLE_ADMIN && (\n \n )}\n {isTurn && isClient ? \"YOUR TURN\" : name}\n \n );\n\n if (cards) {\n playerHand = (\n \n {Object.keys(cards).map((key) => {\n const cardDisplay = cards[key].card;\n const cardObject = convertCardStringToValues(cardDisplay);\n return (\n \n );\n })}\n \n );\n } else if (!isClient && isInHand) {\n playerHand = (\n \n \n \n \n );\n }\n return (\n \n \n \n \n {isWinner && (\n \n )}\n \n {playerHand}\n \n \n {isDealer && (\n \n D\n \n )}\n\n {/* God Mode enabled -- display Player icons*/}\n {isGodModeEnabled &&\n /* Normal player showing cards to god */\n ((!isGod && showCardsToGod && (\n \n \n {\"Showing cards to God\"}\n \n )) ||\n /* Normal player not showing cards to god */\n (!isGod && !showCardsToGod && (\n \n \n {\"Not showing cards to God\"}\n \n )) ||\n /* Player is god of game */\n (isGod && (\n \n \n \n {\"God - can see certain player's cards\"}\n \n \n )))}\n\n {!isSpectating &&\n clientRole === roles.ROLE_ADMIN &&\n !(requestedBuyIn === null || requestedBuyIn === 0) && (\n \n )}\n {!(pendingBuyIn === null || pendingBuyIn === 0) && (\n +{formatCurrency(pendingBuyIn, isInCents)}\n )}\n {nameLabel}\n \n {isMobile && `/`}\n {connected\n ? `${formatCurrency(balance, isInCents)} `\n : \"DISCONNECTED\"}\n {!isInCents && (\n \n )}\n {!isMobile && !!bestHand && isInHand && ` / ${bestHand}`}\n \n \n {!isTurn && }\n \n {pot !== 0 && (\n \n {`${formatCurrency(pot, isInCents)} `}\n {!isInCents && }\n \n )}\n \n );\n};\n\nconst iconHeight = 30;\nconst mobileIconHeight = 12;\n\nconst PlayerWrapper = styled.div`\n position: absolute;\n display: block;\n width: 145px;\n height: 160px;\n -webkit-transform: translate(-50%, -50%);\n -moz-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 90px;\n height: 80px;\n }\n`;\n\nconst PlayerHeadingContent = styled.div`\n display: block;\n height: ${cardHeightRaw + iconHeight}px;\n\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: ${mobileCardHeightRaw + mobileIconHeight}px;\n }\n`;\n\nconst IconWrapper = styled.div`\n height: ${iconHeight}px;\n img {\n height: ${iconHeight}px;\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: ${mobileIconHeight}px;\n img {\n height: ${mobileIconHeight}px;\n margin-top: -10px;\n }\n }\n`;\n\nconst CardsWrapper = styled.div`\n height: ${cardHeight};\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: ${mobileCardHeight};\n }\n`;\n\nconst NameWrapper = styled.div`\n display: flex;\n flex-direction: row;\n`;\n\nexport const MainContent = styled.div`\n position: absolute;\n z-index: 3;\n bottom: 0;\n width: 100%;\n height: 60px;\n border-radius: 5px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: white;\n padding: 0 8px;\n background: ${({ theme }) => theme.secondary};\n border: 1px solid ${({ theme }) => theme.player.borderColor};\n ${(props) =>\n props.highlight &&\n props.theme &&\n `\n background: ${props.theme.primary};\n border: 1px solid ${props.theme.player.borderHighlightedColor};\n `}\n ${(props) =>\n props.disable &&\n props.theme &&\n `background: ${props.theme.player.disabledBackground};`}\n span {\n margin-top: 2px;\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n display: flex;\n flex-direction: row;\n height: 27px;\n width: 90px;\n padding: 0 6px;\n }\n`;\n\nconst MainContentShadow = styled(MainContent)`\n background: ${({ theme }) => theme.flatShadow};\n border: none;\n transform: translate(4px, 4px);\n z-index: 0;\n pointer-events: none;\n`;\n\nconst PlayerText = styled(SmallBodyText)`\n color: ${colors.white};\n text-align: center;\n background: none;\n line-height: 20px;\n margin: 0 auto;\n width: 60px; //making this 100% makes it off center\n font-weight: bold;\n`;\n\nconst PlayerPot = styled(PlayerText)`\n position: absolute;\n z-index: 2;\n background: ${({ theme }) => theme.player.pot};\n border-radius: 5px;\n color: white;\n transform: translate(-50%, -50%);\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n background: ${colors.grey};\n }\n`;\n\nconst DealerButton = styled.div`\n width: 20px;\n height: 20px;\n font-family: ${font.header};\n font-size: 14px;\n border-radius: 50%;\n background-color: ${colors.white};\n color: ${({ theme }) => theme.secondary};\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n left: 0;\n top: 0;\n transform: translate(650%, -50%);\n font-weight: bold;\n border: 1px solid ${({ theme }) => theme.foreground};\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 10px;\n height: 10px;\n font-size: 0.5em;\n }\n`;\n\nconst RoleLabel = styled.div`\n display: none;\n margin-left: 10px;\n pointer-events: none;\n background: ${({ theme }) => theme.foreground};\n color: ${({ theme }) => theme.text.label};\n font-weight: bold;\n font-family: ${font.body};\n font-size: 12px;\n border-radius: 5px;\n height: fit-content;\n min-width: max-content;\n padding: 2px 5px;\n`;\n\nconst RoleButton = styled.div`\n width: 20px;\n height: 20px;\n font-family: ${font.header};\n font-size: 14px;\n border-radius: 50%;\n background-color: ${colors.white};\n color: ${({ theme }) => theme.secondary};\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n left: 0;\n top: 0;\n transform: translate(-50%, -50%);\n font-weight: bold;\n border: 1px solid ${({ theme }) => theme.foreground};\n &:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.primary};\n ${RoleLabel} {\n display: block;\n }\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 10px;\n height: 10px;\n font-size: 0.5em;\n }\n`;\n\nconst AddMoney = styled.div`\n font-family: ${font.body};\n font-size: 14px;\n border-radius: 5px;\n position: absolute;\n left: 0;\n top: 0;\n transform: translate(50%, -50%);\n background: ${({ theme }) => theme.primary};\n border: 1px solid ${({ theme }) => theme.foreground};\n padding: 2px 6px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n font-size: 8px;\n }\n`;\n\nconst NameText = styled(SmallHeaderTextEllipsis)`\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n text-align: left;\n }\n margin-left: 2px;\n`;\n\nexport default Player;\n","import React, { Fragment, useContext, useState, useEffect } from \"react\";\nimport Player, { MainContent } from \"./Player\";\nimport { playerStyles } from \"./player_styles\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\nimport { colors } from \"../../../helpers/styles\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n roles,\n} from \"../../../helpers/constants\";\nimport { setAutoCheckFoldEmit } from \"../../../helpers/socket\";\nimport { SmallHeaderText } from \"../../../shared/Text\";\nimport { test_players } from \"./test_players\";\nimport styled from \"styled-components\";\nimport { posFromClientPOV } from \"../../../helpers/utils\";\n\nconst IS_TESTING = false;\nconst PlayersAndPots = ({ emitSocketMessage, winningPlayers }) => {\n const {\n username,\n activePlayers,\n faceUpHoleCards,\n dealerPosition,\n isTimerEnabled,\n timerLengthSeconds,\n gameId,\n sessionKey,\n turnNonce,\n isSpectating,\n maxPlayerNumber,\n isGodModeEnabled,\n isInCents,\n } = useContext(GameContext);\n const { isMobile, isFourColorDeck } = useContext(BrowserContext);\n\n const [turnIndex, setTurnIndex] = useState(-1);\n const [turnName, setTurnName] = useState(\"\");\n const [isAnimating, setIsAnimating] = useState(false);\n const [restartingAnimation, setRestartingAnimation] = useState(false);\n const [holeCardCount, setHoleCardCount] = useState(0);\n const [checkFoldTimeoutObject, setCheckFoldTimeoutObject] = useState(null);\n const [timeLeft, setTimeLeft] = useState(timerLengthSeconds * 1000);\n const [endsAt, setEndsAt] = useState(Date.now() + 1000 * timerLengthSeconds);\n\n // does it make sense to have these variables outside useeffect\n const playersListOrigin = IS_TESTING ? test_players : activePlayers;\n const playersList = playersListOrigin.filter((player) => player.isAtTable);\n const clientPlayer = !isSpectating\n ? activePlayers.filter((player) => player.playerName === username)[0]\n : { playerRole: roles.ROLE_SPECTATOR };\n let emptySeats = new Array(maxPlayerNumber).fill(true);\n let newTurnIndex = -1;\n playersList.map((player, i) => {\n if (player.playerIsTurn) {\n newTurnIndex = player.pos;\n if (turnName !== player.playerName) {\n setTurnName(player.playerName);\n }\n }\n });\n let newHoleCardCount = faceUpHoleCards.length;\n let winningPlayersExist = winningPlayers && winningPlayers.length > 0;\n\n let onAnimationEnd = () => {\n setAutoCheckFoldEmit(\n username,\n gameId,\n sessionKey,\n turnName,\n turnNonce,\n (checkFoldTimeoutObject) => {\n setCheckFoldTimeoutObject(checkFoldTimeoutObject);\n }\n );\n };\n\n useEffect(() => {\n let shouldResetTimer =\n (newTurnIndex >= 0 && newTurnIndex !== turnIndex) ||\n holeCardCount !== newHoleCardCount;\n if (shouldResetTimer) {\n setIsAnimating(false);\n if (checkFoldTimeoutObject) {\n clearTimeout(checkFoldTimeoutObject);\n }\n setCheckFoldTimeoutObject(null);\n }\n if (newTurnIndex >= 0 && shouldResetTimer) {\n setRestartingAnimation(true);\n }\n if (restartingAnimation && newTurnIndex >= 0) {\n setRestartingAnimation(false);\n setIsAnimating(true);\n setTimeLeft(timerLengthSeconds * 1000);\n setEndsAt(Date.now() + 1000 * timerLengthSeconds);\n }\n setTurnIndex(newTurnIndex);\n setHoleCardCount(newHoleCardCount);\n }, [\n newTurnIndex,\n newHoleCardCount,\n restartingAnimation,\n isTimerEnabled,\n checkFoldTimeoutObject,\n winningPlayersExist,\n ]);\n\n useEffect(() => {\n if (isTimerEnabled && isAnimating) {\n if (timeLeft > 0) {\n let remainingTime = endsAt - Date.now();\n const id = setTimeout(() => setTimeLeft(remainingTime), 500);\n return () => clearTimeout(id);\n } else {\n onAnimationEnd();\n }\n }\n }, [timeLeft, isAnimating]);\n\n let clientPos =\n !isSpectating && activePlayers.length > 0\n ? (\n activePlayers.find((player) => {\n return player.playerName === username;\n }) || {}\n ).pos\n : 0;\n\n let players = (\n \n {\n /** Players */\n playersList.map((player, i) => {\n if (player) {\n emptySeats[player.pos] = false;\n return (\n \n \n \n );\n }\n })\n }\n {\n /** Open seats */\n emptySeats.map((isEmpty, i) => {\n if (isEmpty) {\n return (\n \n OPEN\n \n );\n }\n return ;\n })\n }\n \n );\n\n return (\n \n {players}\n {turnIndex !== -1 &&\n (isTimerEnabled ? (\n \n ) : (\n \n ))}\n \n );\n};\n\nconst TurnShadow = styled(MainContent)`\n transition: 0.6s ease all;\n position: absolute;\n z-index: -1;\n border: 2px dashed white;\n background: ${({ theme }) => theme.primary};\n border-radius: 30px;\n width: 180px;\n height: 90px;\n transform: translate(-90px, -50%);\n margin-top: 50px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 110px;\n height: 40px;\n margin-top: 27px;\n border-radius: 15px;\n transform: translate(-55px, -50%);\n }\n`;\n\nconst TurnShadowAnimated = styled(TurnShadow)`\n z-index: 4;\n transition: left 0.6s ease, top 0.6s ease, width 0.5s linear;\n padding: 0;\n ${(props) =>\n props.ratio &&\n `\n width: ${props.ratio > 0 ? 180 * props.ratio : 0}px;\n border: ${props.ratio > 0 ? 1 : 0}px solid white;\n height: 13px;\n transform: translate(-90px, 240%);\n `}\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n ${(props) =>\n props.ratio &&\n `\n width: ${props.ratio > 0 ? 110 * props.ratio : 0}px;\n border: ${props.ratio > 0 ? 1 : 0}px solid white;\n height: 15px;\n transform: translate(-55px, 220%);\n `}\n }\n`;\n\nconst OpenSeat = styled.div`\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${({ theme }) => theme.openSeat.background};\n color: ${colors.darkGrey2};\n border: 2px dashed ${({ theme }) => theme.openSeat.borderColor};\n width: 70px;\n height: 40px;\n border-radius: 20px;\n margin-top: 40px;\n -webkit-transform: translate(-50%, -50%);\n -moz-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: 30px;\n width: 50px;\n z-index: -1;\n }\n`;\n\nexport default PlayersAndPots;\n","import React, { useRef, useState, useEffect } from \"react\";\nimport {\n Slider,\n PrimaryButton,\n InputText,\n KeyboardChar,\n} from \"../../../../shared/FormElements\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../../helpers/constants\";\nimport { faQuestionCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { colors } from \"../../../../helpers/styles\";\nimport { SecondaryButton, Icon } from \"../../../../shared/FormElements\";\nimport { modals } from \"../../../../helpers/constants\";\nimport { formatCurrency } from \"../../../../helpers/utils\";\nimport styled from \"styled-components\";\n\nconst RaiseView = ({\n isMobile,\n betOnTableCents,\n betsOnTableSumCents,\n smallBlindCents,\n minBetCents,\n minBetSliderCents,\n maxBetSliderCents,\n onBetClick,\n setShowRaiseView,\n callAmountCents,\n ownBetOnTableCents,\n betValueCents,\n setBetValueCents,\n bigBlindCents,\n mainPotCents,\n isPreFlop,\n setCurrentModal,\n isInCents,\n}) => {\n const betInputElement = useRef(null);\n const [betFocus, setBetFocus] = useState(false);\n const [potFocus, setPotFocus] = useState(false);\n\n useEffect(() => {\n if (!betFocus) {\n // round betValueCents\n if (betValueCents) {\n const betValueCentsFloat = parseInt(betValueCents);\n setBetValueCents(betValueCentsFloat);\n }\n }\n }, [betFocus]);\n\n const enterPressedForBet = (event) => {\n if (!isInCents && !/[0-9]/.test(event.key)) {\n event.preventDefault();\n }\n var code = event.keyCode || event.which;\n const bet = parseInt(betValueCents || minBetCents);\n if (\n code === 13 &&\n bet >= minBetSliderCents &&\n bet <= maxBetSliderCents &&\n bet !== 0\n ) {\n setBetValueCents(bet);\n onBetClick(bet);\n }\n };\n\n const getPercentPot = (betDollars) => {\n const betValueCentsFloat = betDollars\n ? parseFloat(betDollars)\n : parseFloat(betValueCents);\n const mainPotCentsFloat = parseFloat(mainPotCents);\n const betsOnTableSumCentsFloat = parseFloat(betsOnTableSumCents);\n if (mainPotCents + betsOnTableSumCents + callAmountCents === 0) {\n return \"\";\n }\n const percentPot = Math.round(\n ((betValueCentsFloat - callAmountCents - ownBetOnTableCents) /\n (mainPotCentsFloat + betsOnTableSumCentsFloat + callAmountCents)) *\n 100\n );\n return !isNaN(percentPot) ? percentPot : \"\";\n };\n\n const getBetValue = () => {\n const betValueDollarsFloat = parseFloat(betValueCents) / 100;\n if (isNaN(betValueDollarsFloat) || betValueDollarsFloat === null) {\n return \"\";\n }\n if (!isInCents) {\n return Math.round(betValueCents, 0);\n }\n return betFocus\n ? parseFloat(betValueCents) / 100\n : betValueDollarsFloat.toFixed(2);\n };\n\n const betValueFromPercentPot = (val) => {\n const newValue = parseFloat(val);\n const newBet =\n (newValue / 100) *\n parseFloat(mainPotCents + betsOnTableSumCents + callAmountCents) +\n callAmountCents +\n ownBetOnTableCents;\n return newBet;\n };\n\n const setBetFromPercentPot = (val) => {\n const newBet = betValueFromPercentPot(val);\n if (newBet > maxBetSliderCents) {\n setBetValueCents(maxBetSliderCents);\n } else {\n setBetValueCents(newBet);\n }\n };\n\n let raiseButtons;\n\n if (isPreFlop && minBetSliderCents / bigBlindCents < 5) {\n raiseButtons = [3, 4, 5].map((bigBlindCount) => {\n return (\n setBetValueCents(bigBlindCount * bigBlindCents)}\n disable={bigBlindCount * bigBlindCents < minBetSliderCents}\n >\n {`${bigBlindCount} BB`}\n \n );\n });\n } else {\n raiseButtons = [\n { view: \"+ 1/2 pot\", percent: 50 },\n { view: \"+ 3/4 pot\", percent: 75 },\n { view: \"+ pot\", percent: 100 },\n ].map((potObj) => {\n return (\n setBetFromPercentPot(potObj.percent)}\n disable={betValueFromPercentPot(potObj.percent) < minBetSliderCents}\n >\n {potObj.view}\n \n );\n });\n }\n\n return (\n <>\n \n \n \n \n setBetFromPercentPot(e.target.value)}\n value={getPercentPot()}\n placeholder={getPercentPot(minBetCents)}\n onFocus={() => setPotFocus(true)}\n onBlur={() => setPotFocus(false)}\n />\n \n % pot\n {callAmountCents !== 0 && (\n setCurrentModal(modals.RAISE_INFO)}\n />\n )}\n \n \n {raiseButtons}\n setBetValueCents(maxBetSliderCents)}\n >\n ALL-IN\n \n \n \n \n setBetValueCents(\n isInCents\n ? parseFloat(e.target.value).toFixed(2) * 100\n : e.target.value\n )\n }\n value={getBetValue()}\n onKeyPress={enterPressedForBet}\n ref={betInputElement}\n placeholder={formatCurrency(minBetCents, isInCents)}\n onFocus={() => setBetFocus(true)}\n onBlur={() => setBetFocus(false)}\n />\n betInputElement.current.focus()}\n style={{\n position: \"absolute\",\n left: \"10px\",\n top: \"0px\",\n transform: \"translate(0,-50%)\",\n }}\n />\n setBetValueCents(parseInt(e.target.value))}\n value={betValueCents ? betValueCents : minBetSliderCents}\n smallBlindCents={smallBlindCents}\n min={minBetSliderCents}\n max={maxBetSliderCents}\n style={isMobile && { marginBottom: 0, marginRight: \"15px\" }}\n setValue={setBetValueCents}\n betFocus={betFocus}\n potFocus={potFocus}\n />\n \n \n \n \n {betOnTableCents ? `Raise to` : `Bet`}\n \n setShowRaiseView(false)}\n >\n Back\n \n \n \n \n );\n};\n\nconst FullViewWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nconst RaiseOptionsWrapper = styled.div``;\n\nconst RightWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n margin-left: 5px;\n`;\n\nconst TopRaiseViewOptions = styled.div`\n display: flex;\n justify-content: space-between;\n margin-bottom: 10px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: 40px;\n }\n`;\n\nconst BottomRaiseViewOptions = styled.div`\n position: relative;\n background: ${({ theme }) => theme.foreground};\n border-radius: 5px;\n display: flex;\n align-items: center;\n padding: 10px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: 40px;\n }\n`;\n\nconst BetTextField = styled(InputText)`\n position: relative;\n font-weight: bold;\n text-align: center;\n width: 100px;\n height: 60px;\n box-sizing: border-box;\n border-radius: 5px;\n margin-right: 0;\n\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: 25px;\n }\n`;\n\nconst FlatBetTextField = styled(BetTextField)`\n height: 30px;\n`;\n\nconst InfoQuestionMark = styled(Icon)`\n margin-left: 3px;\n color: ${colors.grey};\n size: sm;\n &:hover {\n color: ${({ theme }) => theme.primary};\n }\n`;\n\nexport default RaiseView;\n","import React from \"react\";\nimport { SmallHeaderText } from \"../../../../shared/Text\";\nimport { PrimaryButton } from \"../../../../shared/FormElements\";\nimport { colors } from \"../../../../helpers/styles\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst UnnecessaryFoldView = ({\n isMobile,\n onFoldClick,\n setShowUnnecessaryFoldView,\n}) => {\n return (\n <>\n \n {!isMobile\n ? `You're about to make an unnecessary fold. Are you sure?`\n : `Are you sure?`}\n \n \n FOLD\n \n setShowUnnecessaryFoldView(false)}\n >\n Back\n \n \n );\n};\n\nconst InstructionsText = styled(SmallHeaderText)`\n position: absolute;\n top: -20px;\n text-align: right;\n color: ${colors.grey};\n padding-right: 10px;\n transform: translateY(-100%);\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n color: ${colors.darkGrey};\n top: -10px;\n }\n`;\n\nexport default UnnecessaryFoldView;\n","import styled from \"styled-components\";\n\nexport const ActionButtonWrapper = styled.div`\n max-width: 800px;\n width: 100%;\n display: flex;\n flex-direction: ${(props) =>\n props.betButtonsOnRight ? `row` : `row-reverse`};\n justify-content: space-evenly;\n align-items: center;\n margin: auto;\n`;\n","import React, { Fragment, useState, useEffect } from \"react\";\nimport { PrimaryButton } from \"../../../../shared/FormElements\";\nimport { formatCurrency } from \"../../../../helpers/utils\";\nimport RaiseView from \"./RaiseView\";\nimport UnnecessaryFoldView from \"./UnnecessaryFoldView\";\nimport { ActionButtonWrapper } from \"../shared\";\nimport { actions } from \"../../../../helpers/constants\";\n\nconst MainPlayActions = ({\n isMobile,\n smallBlindCents,\n betOnTableCents,\n ownBetOnTableCents,\n ownStackCents,\n minRaiseByCents,\n emitSocketAction,\n setShowChat,\n faceUpHoleCards,\n activePlayers,\n username,\n betsOnTableSumCents,\n mainPotCents,\n canUserCheck,\n callAmount,\n betButtonsOnRight,\n setCurrentModal,\n isInCents,\n}) => {\n const [betValueCents, setBetValueCents] = useState(null);\n const [actionDone, setActionDone] = useState(false);\n const [showRaiseView, _setShowRaiseView] = useState(false);\n const [showUnnecessaryFoldView, setShowUnnecessaryFoldView] = useState(false);\n\n const maxBetSliderCents = betOnTableCents\n ? ownBetOnTableCents + ownStackCents\n : ownStackCents;\n const minBetSliderCents = betOnTableCents\n ? betOnTableCents + minRaiseByCents\n : 2 * smallBlindCents;\n\n const minBetCents = betOnTableCents\n ? Math.min(\n ownStackCents + ownBetOnTableCents,\n betOnTableCents + minRaiseByCents\n )\n : Math.min(ownStackCents, betOnTableCents + minRaiseByCents);\n\n /**\n * If other players all have zero balance, don't show ability to re-raise\n */\n const otherPlayersHaveZeroBalance = () => {\n let allZeroBalance = true;\n activePlayers\n .filter((player) => player.isAtTable && player.playerName !== username)\n .forEach((player) => {\n if (player.playerBalance !== 0) {\n allZeroBalance = false;\n }\n });\n return allZeroBalance;\n };\n\n const canUserBet =\n betOnTableCents < ownStackCents + ownBetOnTableCents &&\n !otherPlayersHaveZeroBalance();\n\n const canUserRaiseAllIn = minBetSliderCents >= maxBetSliderCents;\n\n useEffect(() => {\n // reset action done when cards are dealt\n setActionDone(false);\n }, [faceUpHoleCards]);\n\n const onCallClick = (e) => {\n emitSocketAction(actions.CALL, -1);\n setActionDone(true);\n };\n\n const onBetClick = () => {\n const bet = betValueCents || minBetCents;\n\n const isBetInRange = bet <= maxBetSliderCents && bet >= minBetSliderCents;\n\n const isRaiseAllIn = minBetSliderCents > maxBetSliderCents;\n\n if (isBetInRange || isRaiseAllIn) {\n const cents = parseInt(bet);\n emitSocketAction(actions.RAISE, cents);\n setActionDone(true);\n setShowRaiseView(false);\n }\n };\n\n const setShowRaiseView = (show) => {\n _setShowRaiseView(show);\n setShowChat(!show);\n };\n\n const onFoldClick = (e) => {\n emitSocketAction(actions.FOLD, -1);\n setActionDone(true);\n };\n\n if (actionDone) {\n return ;\n }\n\n if (showRaiseView) {\n return (\n \n \n \n );\n }\n\n if (showUnnecessaryFoldView) {\n return (\n \n \n \n );\n }\n\n return (\n \n {canUserBet && (\n {\n if (canUserRaiseAllIn) {\n // Raise all-in\n onBetClick();\n } else {\n setShowRaiseView(true);\n }\n }}\n >\n {canUserRaiseAllIn\n ? \"Raise all-in\"\n : betOnTableCents\n ? `Raise to`\n : `Bet`}\n \n )}\n\n \n {canUserCheck\n ? `Check`\n : `Call ${formatCurrency(callAmount, isInCents)}`}\n \n\n {\n if (canUserCheck) {\n setShowUnnecessaryFoldView(true);\n } else {\n onFoldClick(e);\n }\n }}\n secondaryColor\n keyboardChar=\"F\"\n dataTestId=\"fold-button\"\n >\n Fold\n \n \n );\n};\n\nexport default MainPlayActions;\n","export const backendUrl = \"127.0.0.1:5000\"; // not used yet\n\nexport const buyInConfig = {\n UPPER_BB: 300,\n DEFAULT_BB: 100,\n LOWER_BB: 50,\n};\n","import React, { useState, Fragment } from \"react\";\nimport { PrimaryButton, InputText } from \"../../../shared/FormElements\";\nimport { SmallHeaderText } from \"../../../shared/Text\";\nimport { colors } from \"../../../helpers/styles\";\nimport { buyInConfig } from \"../../../helpers/config\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../../helpers/constants\";\nimport styled from \"styled-components\";\nimport { formatCurrency } from \"../../../helpers/utils\";\n\nconst BuyInActions = ({ smallBlindCents, emitSocketMessage, isInCents }) => {\n const [buyInValueDollars, setBuyInValueDollars] = useState(\"\");\n const [actionDone, setActionDone] = useState(false);\n const [showInvalidBuyIn, setShowInvalidBuyIn] = useState(false);\n\n const onEnterPressedForBuyIn = (event) => {\n if (!isInCents && !/[0-9]/.test(event.key)) {\n event.preventDefault();\n }\n var code = event.keyCode || event.which;\n if (code === 13) {\n onBuyInClick();\n }\n };\n\n const onBuyInChange = (e) => {\n setBuyInValueDollars(e.target.value);\n };\n\n const sendSocketBuyIn = (buyInCents) => {\n emitSocketMessage(\"request_buy_in\", { amount: parseInt(buyInCents) });\n setBuyInValueDollars(\"\");\n setActionDone(true);\n };\n\n const onBuyInClick = (e) => {\n let buyInCents = parseFloat(parseFloat(buyInValueDollars).toFixed(2));\n if (isInCents) {\n buyInCents *= 100;\n }\n if (isNaN(buyInCents)) {\n buyInCents = 0;\n }\n\n const bigBlindCents = smallBlindCents * 2;\n if (parseInt(buyInCents) === 0) {\n buyInCents = bigBlindCents * buyInConfig.DEFAULT_BB;\n }\n if (\n (buyInCents >= _getLowerBound() && buyInCents <= _getUpperBound()) ||\n showInvalidBuyIn\n ) {\n sendSocketBuyIn(buyInCents);\n } else {\n setShowInvalidBuyIn(true);\n }\n };\n\n const _getUpperBound = (inDollars) => {\n const bigBlindCents = smallBlindCents * 2;\n return bigBlindCents * buyInConfig.UPPER_BB;\n };\n\n const _getLowerBound = (inDollars) => {\n const bigBlindCents = smallBlindCents * 2;\n return bigBlindCents * buyInConfig.LOWER_BB;\n };\n\n if (actionDone) {\n return ;\n }\n return (\n \n \n {showInvalidBuyIn ? (\n `Typical buy in range is between (${formatCurrency(\n _getLowerBound(isInCents),\n isInCents\n )}, ${formatCurrency(\n _getUpperBound(isInCents),\n isInCents\n )}). Are you sure?`\n ) : (\n <>\n Tap "B" on your keyboard\n
\n to buy in\n \n )}\n
\n \n \n Buy In\n \n {showInvalidBuyIn && (\n setShowInvalidBuyIn(false)}\n >\n Back\n \n )}\n
\n );\n};\n\nconst BuyInWrapper = styled.div`\n display: flex;\n`;\n\nconst BuyInTextField = styled(InputText)`\n width: 100px;\n height: 60px;\n font-weight: bold;\n text-align: center;\n margin-right: 5px;\n\n &::placeholder {\n color: ${colors.grey};\n }\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n height: 40px;\n }\n`;\n\nconst InstructionsText = styled(SmallHeaderText)`\n position: absolute;\n top: -100%;\n text-align: right;\n color: ${colors.grey};\n padding-right: 10px;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n display: none;\n }\n`;\n\nexport default BuyInActions;\n","import React from \"react\";\nimport { PrimaryButton } from \"../../../../shared/FormElements\";\nimport { withTheme } from \"styled-components\";\nimport generateQueuedActions from \"./options\";\nimport { ActionButtonWrapper } from \"../shared\";\n\nconst PreTurnActions = ({\n updateQueuedAction,\n selectedAction,\n canUserCheck,\n callAmount,\n betButtonsOnRight,\n theme,\n isInCents,\n}) => {\n const queuedActions = generateQueuedActions(\n canUserCheck,\n callAmount,\n isInCents\n );\n\n return (\n \n {queuedActions.map((queuedAction) => {\n const selected =\n selectedAction &&\n selectedAction.actionType === queuedAction.actionType &&\n selectedAction.betValue === queuedAction.betValue;\n\n return (\n \n selected\n ? updateQueuedAction(null)\n : updateQueuedAction({\n actionType: queuedAction.actionType,\n betValue: queuedAction.betValue,\n })\n }\n selected={selected}\n >\n {queuedAction.displayName}\n \n );\n })}\n \n );\n};\n\nexport default withTheme(PreTurnActions);\n","import { formatCurrency } from \"../../../../helpers/utils\";\nimport { actions } from \"../../../../helpers/constants\";\n\nexport default function generateQueuedActions(\n canUserCheck,\n callAmount,\n isInCents\n) {\n let queuedActions = [\n {\n actionType: actions.CALL,\n betValue: callAmount,\n keyboardChar: \"C\",\n displayName: `Call ${formatCurrency(callAmount, isInCents)}`,\n hideIfUserCanCheck: true,\n },\n {\n actionType: actions.CHECKFOLD,\n betValue: -1,\n keyboardChar: \"X\",\n displayName: \"Check/Fold\",\n showIfUserCanCheck: true,\n },\n {\n actionType: actions.CHECK,\n betValue: -1,\n keyboardChar: \"C\",\n displayName: \"Check\",\n showIfUserCanCheck: true,\n },\n {\n actionType: actions.FOLD,\n betValue: -1,\n keyboardChar: \"F\",\n displayName: \"Fold\",\n },\n ];\n\n return queuedActions.filter((queuedAction) => {\n if (canUserCheck) return !queuedAction.hideIfUserCanCheck;\n else return !queuedAction.showIfUserCanCheck;\n });\n}\n","import React, { useState, Fragment } from \"react\";\nimport { colors } from \"../../../helpers/styles\";\nimport { PrimaryButton } from \"../../../shared/FormElements\";\nimport { LoadingWrapper, BoldText } from \"../../../shared/Text\";\nimport { roles } from \"../../../helpers/constants\";\nimport styled from \"styled-components\";\n\nconst StartGameAction = ({\n emitSocketMessage,\n adminName,\n clientRole,\n restart = false,\n}) => {\n const [actionDone, setActionDone] = useState(false);\n\n const sendSocketStartGame = () => {\n emitSocketMessage(\"start_game\", {});\n setActionDone(true);\n };\n\n const onStartGameClick = (e) => {\n sendSocketStartGame();\n };\n\n let startButton;\n\n if (actionDone) {\n startButton = ;\n } else {\n startButton = (\n \n {restart ? \"Next hand\" : \"Start Game!\"}\n \n );\n }\n return (\n \n {clientRole === roles.ROLE_ADMIN && startButton}\n {clientRole !== roles.ROLE_ADMIN && (\n \n Waiting for {adminName} to{\" \"}\n {restart ? \"go to next hand\" : \"start game\"}\n \n )}\n \n );\n};\n\nconst StartGameWrapper = styled.div`\n text-align: right;\n`;\n\nexport default StartGameAction;\n","import React, { useState, useEffect } from \"react\";\nimport { font, colors } from \"../../../helpers/styles\";\nimport { PrimaryButton } from \"../../../shared/FormElements\";\nimport styled from \"styled-components\";\n\nconst ShowHandAction = ({\n emitSocketMessage,\n clientPlayer,\n numWinners,\n stillInHand,\n showingHand,\n isSpectating,\n handTimerLengthSeconds,\n}) => {\n const [actionDone, setActionDone] = useState(false);\n const [hideContent, setHideContent] = useState(false);\n const [seconds, setSeconds] = useState(handTimerLengthSeconds);\n const [endsAt, dummyEndsAt] = useState(\n Date.now() + 1000 * handTimerLengthSeconds\n );\n\n const sendSocketShowHand = () => {\n emitSocketMessage(\"player_fields\", {\n fields: { cards: clientPlayer.cards },\n });\n setActionDone(true);\n };\n\n const onShowHandClick = (e) => {\n sendSocketShowHand();\n };\n\n useEffect(() => {\n if (seconds > 0) {\n let remainingTime = Math.floor((endsAt - Date.now()) / 1000);\n const timer = setTimeout(() => setSeconds(remainingTime), 1000);\n return () => clearTimeout(timer);\n } else {\n setSeconds(null);\n setHideContent(true);\n }\n }, [seconds]);\n\n if (hideContent) {\n return <>;\n }\n\n let showHandButton;\n let newHandText = (\n \n {seconds} seconds until new hand\n \n );\n if (isSpectating) {\n return {newHandText};\n }\n\n let showHandText = <>;\n\n if (clientPlayer.showingHand || actionDone) {\n showHandText = (\n Your cards are showing\n );\n }\n if (!actionDone && !showingHand && numWinners > 0 && clientPlayer.cards) {\n showHandButton = (\n \n Show Cards\n \n );\n } else {\n showHandButton = <>;\n }\n\n return (\n <>\n {showHandButton}\n \n {showHandText}\n {newHandText}\n \n \n );\n};\n\nconst RightAlign = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;\n\nconst BoldText = styled.div`\n display: flex;\n margin-left: 5px;\n margin-right: 3px;\n color: ${({ theme }) => theme.primary};\n`;\n\nconst ShowHandTextWrapper = styled.div`\n display: flex;\n flex-direction: row;\n font-family: ${font.header};\n font-size: 22px;\n margin-right: 24px;\n margin-bottom: 10px;\n color: ${colors.darkGrey2};\n letter-spacing: 0.3px;\n font-weight: bold;\n`;\n\nconst ShowHandTextWrapper2 = styled(ShowHandTextWrapper)`\n color: ${({ theme }) => theme.tertiary};\n`;\n\nexport default ShowHandAction;\n","import React, { useContext, useState } from \"react\";\nimport styled from \"styled-components\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n roles,\n modals,\n} from \"../../../helpers/constants\";\nimport { GameContext } from \"../../../context/GameContext\";\nimport { BrowserContext } from \"../../../context/BrowserContext\";\nimport * as Actions from \"./actions\";\nimport { LoadingWrapper, BoldText } from \"../../../shared/Text\";\n\nconst ActionButtons = ({ emitSocketMessage, emitSocketAction, numWinners }) => {\n const {\n smallBlindCents,\n maxPotCents,\n stillInHand,\n stillInGame,\n ownPotCents,\n showBuyIn,\n minRaise,\n ownStackCents,\n faceUpHoleCards,\n activePlayers,\n username,\n mainPotCents,\n betsOnTableSumCents,\n updateQueuedAction,\n queuedAction,\n willExecuteQueuedAction,\n ongoing,\n isSpectating,\n isGod,\n isTournament,\n handTimerLengthSeconds,\n paused,\n isInCents,\n } = useContext(GameContext);\n\n const {\n isMobile,\n setShowChat,\n betButtonsOnRight,\n setCurrentModal,\n } = useContext(BrowserContext);\n\n const clientPlayer = activePlayers.filter(\n (player) => player.playerName === username\n )[0];\n const adminPlayer = activePlayers.filter(\n (player) => player.playerRole === roles.ROLE_ADMIN\n )[0];\n const numPlayersInGame = activePlayers.filter(\n (player) => player.playerIsInGame\n ).length;\n const numValidPlayers = activePlayers.filter(\n (player) => player.playerBalance > 0\n ).length;\n const numRequestedBuyIns = activePlayers.filter(\n (player) => player.requestedBuyIn > 0\n ).length;\n const numPlayersSittingIn = activePlayers.filter(\n (player) => player.queuedAction !== \"ACTION_STAND\"\n ).length;\n const numPlayersConnected = activePlayers.filter((player) => player.connected)\n .length;\n const isMyTurn = clientPlayer ? clientPlayer.playerIsTurn : false;\n const canUserCheck = !(maxPotCents && ownPotCents < maxPotCents);\n const callAmount = maxPotCents - ownPotCents;\n const [patreonShown, setPatreonShown] = useState(false);\n\n let actionButtons;\n\n if (isSpectating) {\n if (numWinners > 0) {\n actionButtons = (\n \n );\n } else {\n if (isGod) {\n actionButtons = (\n You are currently spectating as god\n );\n } else {\n actionButtons = (\n You are currently spectating\n );\n }\n }\n } else if (showBuyIn && !isTournament) {\n actionButtons = (\n \n );\n } else if (\n stillInHand &&\n isMyTurn &&\n !willExecuteQueuedAction &&\n numWinners === 0\n ) {\n actionButtons = (\n \n );\n } else if (stillInHand && !isMyTurn && numWinners === 0) {\n actionButtons = (\n \n );\n } else if (clientPlayer && !stillInGame && ownStackCents > 0) {\n actionButtons = (\n You are currently sitting out\n );\n } else if (ongoing && numWinners > 0 && stillInGame) {\n if (\n clientPlayer.isWinner &&\n clientPlayer.playerBalance > 0 &&\n // on 5th win and then every 10th win\n (clientPlayer.handsWon === 5 || clientPlayer.handsWon % 10 === 0)\n ) {\n setCurrentModal(modals.PATREON);\n }\n\n actionButtons = (\n \n );\n } else if (\n !ongoing &&\n numPlayersSittingIn >= 2 &&\n numPlayersInGame >= 2 &&\n numValidPlayers >= 2 &&\n numPlayersConnected >= 2 &&\n adminPlayer\n ) {\n actionButtons = (\n \n );\n } else if (!ongoing && clientPlayer) {\n if (clientPlayer.playerRole === roles.ROLE_ADMIN) {\n if (numRequestedBuyIns > 0) {\n actionButtons = (\n Waiting for you to approve buy ins\n );\n } else if (numValidPlayers < 2) {\n actionButtons = (\n Waiting for others to buy in\n );\n }\n } else {\n if (clientPlayer.requestedBuyIn > 0 && adminPlayer) {\n actionButtons = (\n \n Waiting for {adminPlayer.playerName} to approve\n buy in\n \n );\n }\n }\n } else if (!stillInHand) {\n actionButtons = null;\n if (clientPlayer && clientPlayer.requestedBuyIn > 0 && adminPlayer) {\n actionButtons = (\n \n Waiting for {adminPlayer.playerName} to approve\n buy in\n \n );\n }\n }\n\n return (\n <>\n \n {actionButtons}\n \n \n );\n};\n\nconst ActionWrapper = styled.div`\n position: absolute;\n z-index: 2;\n ${(props) => (props.betButtonsOnRight ? `right: 20px` : `left: 20px`)}\n bottom: 20px;\n display: flex;\n flex-direction: column;\n align-items: right;\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n right: 5px;\n bottom: 15px;\n position: fixed;\n }\n`;\n\nexport default ActionButtons;\n","import React, { useContext } from \"react\";\nimport Table from \"./Table\";\nimport PlayersAndPots from \"./PlayersAndPots\";\nimport ActionButtons from \"./ActionButtons\";\nimport styled from \"styled-components\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n} from \"../../helpers/constants\";\nimport { BrowserContext } from \"../../context/BrowserContext\";\nimport { removeScrollbars } from \"../../shared/Overlay\";\n\nconst GameWindow = ({\n emitSocketAction,\n emitSocketMessage,\n activePlayers,\n iframeClientName,\n}) => {\n const { showVideoChat, isMobile } = useContext(BrowserContext);\n const playersAreInHand =\n activePlayers.filter((player) => player.playerIsInHand).length > 0;\n const winningPlayers = activePlayers.filter((player) => player.isWinner);\n\n return (\n \n \n \n \n \n \n \n );\n};\n\nconst GameWrapper = styled.div`\n height: 100%;\n width: ${(props) => (props.showVideoChat ? `85` : `100`)}%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: fixed;\n overflow: scroll; // overriden by removeScrollbars\n ${removeScrollbars}\n`;\n\nconst TableWrapper = styled.div`\n height: 50vh;\n width: 75vw;\n margin-top: -10vh;\n position: relative;\n text-align: center;\n display: block;\n z-index: -2;\n transform: translateY(30px);\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n width: 90vw;\n height: 55vh;\n }\n`;\n\nexport default GameWindow;\n","import React, { Component, Fragment } from \"react\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport queryString from \"query-string\";\n\nimport styled, { ThemeProvider } from \"styled-components\";\nimport Chat from \"./Chat\";\nimport * as Modal from \"./Modals\";\nimport VideoChat from \"./VideoChat\";\nimport FixedWidgets from \"./FixedWidgets\";\nimport MTTLobbyWidgets from \"./MTTLobbyWidgets\";\nimport MTTLobby from \"./MTTLobby\";\nimport Global from \"./Global\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"typeface-rambla\";\nimport { hot, setConfig } from \"react-hot-loader\";\nimport { modals } from \"../helpers/constants\";\nimport {\n mobileBreakpoint,\n mobileHeightBreakpoint,\n mobileBreakpointRaw,\n mobileHeightBreakpointRaw,\n themes,\n blinds,\n timer,\n} from \"../helpers/constants\";\nimport themesDict, { defaultTheme } from \"../helpers/theme\";\nimport {\n initSocket,\n forceDisconnect,\n emit,\n socketOff,\n setOnConnect,\n emitEnsureInRoom,\n setOnDisconnect,\n setOnStateChange,\n setOnMTTStateChange,\n setOnLeaderboard,\n setOnSound,\n setBootInactive,\n setOnDistributeChat,\n setOnDifferentLogIn,\n setOnSettingsChange,\n socketIsConnected,\n setOnPlayerStateChange,\n setOnSpectatorStateChange,\n setOnPlayerFieldsChange,\n connectEmitSocketMessage,\n connectEmitSocketAction,\n setMTTGameEnd,\n setMTTPlayers,\n setOnMTTUsersState,\n} from \"../helpers/socket\";\nimport api, { checkAlive } from \"../helpers/api\";\nimport { refreshPage } from \"../helpers/utils\";\nimport {\n initLogger,\n logJoinGameEvent,\n logCreateGameEvent,\n setLoggerIdentity,\n logError,\n} from \"../helpers/logger\";\n\nimport GameWindow from \"./GameWindow\";\nimport { getMTTPlayers, setMTTUsersState } from \"../actions/game\";\n\nclass App extends Component {\n constructor(props) {\n super(props);\n this.state = {\n // this is actually a prop, so can't be in context\n // to avoid prop drilling, use withRouter() on relevant components\n gameId: \"\", // stores url parameter\n MTTId: \"\",\n };\n\n // meant to be called from settings or newgame (not join!)\n // to remove overlay, and only the newgame that involves making a new game\n this._cancelPopup = () => {\n if (this.state.gameId.length > 0) {\n this.props.context.updateDisplay(\"play\");\n }\n this.props.browserContext.setCurrentModal(null);\n // TODO: call endpoint that caches to backend\n };\n this._openNewGameDisplay = () => {\n // this.props.context.updateDisplay(\"newGame\");\n return checkAlive(\n (resolve) => {\n this.props.context.updateDisplay(\"newGame\");\n return true;\n },\n (reject) => {\n this.props.browserContext.setCurrentModal(\n modals.DISCONNECTED_SERVER_NOT_IN_GAME\n );\n return false;\n }\n );\n };\n\n this._openNewMTTDisplay = () => {\n return checkAlive(\n (resolve) => {\n this.props.context.updateDisplay(\"newMTT\");\n return true;\n },\n (reject) => {\n this.props.browserContext.setCurrentModal(\n modals.DISCONNECTED_SERVER_NOT_IN_GAME\n );\n return false;\n }\n );\n };\n\n this._getOverallStats = async () => {\n try {\n const { data } = await api.get(\"/get_overall_stats\", {\n params: {},\n });\n this.setState({\n numGames: data.numGames.toLocaleString(),\n numPlayers: data.numPlayers.toLocaleString(),\n });\n } catch (error) {\n logError(error);\n console.error(error);\n }\n };\n\n this._openSettingsDisplay = () => {\n this.props.context.updateDisplay(\"settings\");\n };\n // this.backend = '172.17.170.145:5000' // use a global url to avoid changing later\n\n // player i uses cards i and i + 1, activePlayers in state\n // is stored as dictionary with 0:{...info}\n // example is {0:{playerPot: 3, playerName: \"Bob\", playerBalance: 14},\n // 1:{playerPot: 3, playerName: \"Joe\", playerBalance: 13}}\n // this is only for the display in Players and Cards.js, will eventually migrate to\n // a dictionary with players with a position value for where on the table they are\n // instead of the key\n\n this._joinGame = async (\n username,\n userPassword,\n gamePassword,\n isGod = false\n ) => {\n const response = await this.props.context.joinGame(\n this.state.gameId,\n username,\n userPassword,\n gamePassword,\n isGod\n );\n if (response.error) {\n return {\n error: response.error,\n type: response?.error?.response?.data?.type,\n field: response?.error?.response?.data?.field,\n };\n } else {\n const newState = await this.props.context.nextState();\n\n initSocket(this.state.gameId, this.state.MTTId, () => {\n emit(\"join\", {\n username: newState.username,\n game_id: this.state.gameId,\n key: newState.sessionKey,\n }); // join room on socket\n\n if (newState.isTournament && newState.totalBuyinCents === 0) {\n //and if new user (not re-join)\n emit(\"request_buy_in\", {\n username: newState.username,\n game_id: this.state.gameId,\n key: newState.sessionKey,\n amount: newState.autoBuyinCents,\n autobuy: true,\n });\n }\n\n this.props.browserContext.setAllowKeyboardShortcuts(true);\n this.props.browserContext.setExistsModal(false);\n\n setLoggerIdentity(\n newState.username,\n this.state.gameId,\n this.props.iframeClientName\n );\n\n logJoinGameEvent();\n\n this._initSocketListeners();\n });\n return {};\n }\n };\n\n this._spectateGame = async (\n username,\n userPassword,\n gamePassword,\n isGod = false\n ) => {\n const response = await this.props.context.spectateGame(\n this.state.gameId,\n username,\n userPassword,\n gamePassword,\n isGod\n );\n if (response.error) {\n return {\n error: response.error,\n type: response?.error?.response?.data?.type,\n field: response?.error?.response?.data?.field,\n };\n } else {\n const newState = await this.props.context.nextState();\n initSocket(this.state.gameId, this.state.MTTId, () => {\n emit(\"spectate\", {\n username: newState.username,\n game_id: this.state.gameId,\n key: newState.sessionKey,\n }); // join room on socket\n\n this.props.browserContext.setAllowKeyboardShortcuts(true);\n this.props.browserContext.setExistsModal(false);\n\n setLoggerIdentity(\n newState.username,\n this.state.gameId,\n this.props.iframeClientName\n );\n\n this._initSocketListenersSpectators();\n });\n return {};\n }\n };\n\n this._joinMTT = async (username, userPassword, MTTPassword) => {\n const response = await this.props.context.joinMTT(\n this.state.MTTId,\n username,\n userPassword,\n MTTPassword\n );\n if (response.error) {\n return {\n error: response.error,\n type: response?.error?.response?.data?.type,\n field: response?.error?.response?.data?.field,\n };\n } else {\n const newState = await this.props.context.nextState();\n\n initSocket(this.state.gameId, this.state.MTTId, () => {\n emit(\"join_mtt\", {\n username: newState.username,\n mtt_id: this.state.MTTId,\n user_password: newState.userPassword,\n key: newState.sessionKey,\n }); // join room on socket\n\n this._initSocketListeners();\n });\n return {};\n }\n };\n\n this._initSocketListeners = () => {\n socketOff();\n this._setChatRecieveSocket();\n this._setGameStateSocket();\n this._setUpdateLeaderboardSocket();\n this._setSoundsSocket();\n this._setBootInactiveSocket();\n this._setDisconectSocket();\n this._setDifferentLogInSocket();\n this._setReconnectSocket();\n this._setSettingsSocket();\n this._setPlayerStateChangeSocket();\n this._setSpectatorStateChangeSocket();\n this._setOnPlayerFieldsChangeSocket();\n this._setMTTGameEnd();\n this._setMTTPlayers();\n this._setOnMTTUsersStateSocket();\n this._setMTTStateSocket();\n };\n\n this._initSocketListenersSpectators = () => {\n socketOff();\n this._setChatRecieveSocket();\n this._setGameStateSocket();\n this._setUpdateLeaderboardSocket();\n this._setDisconectSocket();\n this._setDifferentLogInSocket();\n this._setReconnectSocket();\n this._setSettingsSocket();\n this._setPlayerStateChangeSocket();\n this._setSpectatorStateChangeSocket();\n this._setOnPlayerFieldsChangeSocket();\n this._setMTTGameEnd();\n this._setMTTPlayers();\n this._setOnMTTUsersStateSocket();\n this._setMTTStateSocket();\n };\n\n this._setBootInactiveSocket = () => {\n if (this.props.context.username) {\n // if (this.props.context.username && this.state.gameId) {\n setBootInactive(\n this.props.context.username,\n this.state.gameId,\n (disconnectedUser) => {\n this.props.context.setUserDisconnected(disconnectedUser);\n }\n );\n }\n };\n\n this._setChatRecieveSocket = () => {\n if (this.props.context.username) {\n //if (this.props.context.username && this.state.gameId) {\n setOnDistributeChat((chat_obj) => {\n let timeout = 0;\n if (\"timeout\" in chat_obj) {\n timeout = chat_obj[\"timeout\"];\n }\n setTimeout(() => {\n this.props.context.receiveChatMessage(chat_obj);\n }, timeout * 1000);\n });\n }\n };\n\n this._setDifferentLogInSocket = () => {\n setOnDifferentLogIn(() => {\n // Auto-reconnect code,\n // OLD: prone to looping when server class db fields change and db needs to be migrated locally\n // OLD: Reconnect loop needed or else it reconnects with a socket that can send to the server but not recieve\n\n this.props.context.updateDisplay(\"different_log_in\");\n });\n };\n\n this._setReconnectSocket = () => {\n setOnConnect(() => {\n emitEnsureInRoom(\n this.props.context.username,\n this.state.gameId,\n this.props.context.sessionKey,\n this.props.context.isSpectating,\n () => {\n this._cancelPopup();\n // No identify method for fs, since reidentifying causes a split\n // if (!this.props.context.isSpectating) {\n // this._initSocketListeners();\n // } else {\n // this._initSocketListenersSpectators();\n // }\n }\n );\n });\n };\n\n this._setDisconectSocket = () => {\n setOnDisconnect(() => {\n // Auto-reconnect code\n // OLD: prone to looping when server class db fields change and db needs to be migrated locally\n // OLD: Reconnect loop needed or else it reconnects with a socket that can send to the server but not recieve\n\n // if alive and connected, then don't set to refresh\n // else, set it to refresh\n return checkAlive(\n (resolve) => {\n setTimeout(() => {\n if (!socketIsConnected()) {\n this.props.context.updateDisplay(\"disconnected\");\n }\n }, 1200);\n },\n (reject) => {\n setTimeout(() => {\n if (!socketIsConnected()) {\n this.props.context.updateDisplay(\"disconnected\");\n }\n }, 1200);\n }\n );\n });\n };\n\n this._setGameStateSocket = () => {\n setOnStateChange((newGameState) => {\n let timeout = newGameState[\"timeout\"];\n setTimeout(() => {\n this.props.context.updateGameStateFromSocket(newGameState);\n }, timeout * 1000);\n });\n };\n\n this._setMTTStateSocket = () => {\n setOnMTTStateChange((newMTTState) => {\n let timeout = newMTTState[\"timeout\"];\n console.log(\"mtt end timeout\", timeout);\n setTimeout(() => {\n this.props.context.updateMTTStateFromSocket(newMTTState);\n }, timeout * 1000);\n });\n };\n\n this._setUpdateLeaderboardSocket = () => {\n setOnLeaderboard((leaderboard_resp) => {\n let timeout = 0;\n if (\"timeout\" in leaderboard_resp) {\n timeout = leaderboard_resp[\"timeout\"];\n }\n setTimeout(() => {\n this.props.context.updateLeaderboard(leaderboard_resp);\n }, timeout * 1000);\n });\n };\n\n this._setSoundsSocket = () => {\n setOnSound((data) => {\n this.props.browserContext.playSound(data.action);\n });\n };\n\n this._setMTTGameEnd = () => {\n setMTTGameEnd((data) => {\n setTimeout(() => {\n this.props.context.updateDisplay(\"MTTGameEnd\");\n }, data[\"timeout\"] * 1000);\n });\n };\n\n this._setMTTPlayers = () => {\n setMTTPlayers((data) => {\n this.props.context.updateMTTState(data.gameId);\n if (data[\"reason\"] == \"mtt_distribute\") {\n this.props.context.updateDisplay(\"MTTDistribute\");\n }\n setTimeout(() => {\n emit(\"start_mtt_games_in_round\", {\n mtt_id: this.props.context.MTTId,\n });\n }, 7 * 1000);\n\n // initSocket(data.gameId, this.state.MTTId, () => {\n // this._initSocketListeners();\n // });\n });\n };\n\n this._setOnMTTUsersStateSocket = () => {\n setOnMTTUsersState((data) => {\n this.props.context.setMTTUsersState(data.users, data.reason);\n });\n };\n\n this._createGame = async (\n smallBlindCents,\n gamePassword,\n preferredGameId = \"\",\n iframeClientName = \"game\",\n isTimerEnabled = false,\n timerLengthSeconds = 30,\n handTimerLengthSeconds = timer.MEDIUM_HAND_TIMER_SECONDS,\n isGodModeEnabled = false,\n isTournament = false,\n autoBuyinCents = 1000,\n blindIncreaseSeconds = 600,\n isInCents = true,\n cb = null\n ) => {\n try {\n const gameId = await this.props.context.createGame(\n smallBlindCents,\n gamePassword,\n preferredGameId,\n isTimerEnabled,\n timerLengthSeconds,\n handTimerLengthSeconds,\n isGodModeEnabled,\n isTournament,\n autoBuyinCents,\n Math.max(blindIncreaseSeconds, 60),\n isInCents\n );\n forceDisconnect();\n let pathname = `/${iframeClientName}/${gameId}`;\n this.props.history.push({\n pathname: pathname,\n search: this.props.location.search,\n });\n logCreateGameEvent();\n if (cb) {\n cb();\n }\n } catch (error) {\n logError(error);\n console.error(error);\n }\n };\n\n this._createMTT = async (\n smallBlindCents,\n MTTPassword,\n timerLengthSeconds = 30,\n startingStack = 1000,\n blindIncreaseSeconds = 600,\n isInCents = true,\n cb = null\n ) => {\n try {\n const MTTId = await this.props.context.createMTT(\n smallBlindCents,\n MTTPassword,\n timerLengthSeconds,\n startingStack,\n blindIncreaseSeconds,\n isInCents\n );\n forceDisconnect();\n let pathname = `mtt/${MTTId}`;\n this.props.history.push({\n pathname: pathname,\n search: this.props.location.search,\n });\n if (cb) {\n cb();\n }\n } catch (error) {\n logError(error);\n console.error(error);\n }\n };\n\n this._setSettingsSocket = () => {\n setOnSettingsChange((data) => {\n this.props.context.setGameSettings(\n data.small_blind,\n data.is_timer_enabled,\n data.timer_length_seconds,\n data.hand_timer_length_seconds,\n data.session_reset\n );\n });\n };\n\n this._setOnPlayerFieldsChangeSocket = () => {\n setOnPlayerFieldsChange((data) => {\n this.props.context.setPlayerFields(data.username, data.fields);\n });\n };\n\n this._setPlayerStateChangeSocket = () => {\n setOnPlayerStateChange((data) => {\n const timeout = data[\"timeout\"];\n setTimeout(async () => {\n this.props.context.setPlayerState(data.players, data.reason);\n // only notify once it switches to their turn, not on every state change while it's their turn\n const turnSoundReasons = [\n \"REASON_ACTION\",\n \"REASON_DEAL\",\n \"REASON_FLOP\",\n \"REASON_NEW_HAND\",\n ];\n const clientPlayer = data.players.filter(\n (player) => player.name === this.props.context.username\n )[0];\n const isMyTurn = clientPlayer ? clientPlayer.turn : false;\n\n const willBecomeUserTurn =\n isMyTurn && turnSoundReasons.includes(data.reason);\n\n if (willBecomeUserTurn) {\n // Important: Don't do anything until the player state is updated\n // Queued actions may need to be cancelled based on the previous bet\n await this.props.context.nextState();\n if (this.props.context.willExecuteQueuedAction) {\n this.props.context.executeQueuedAction();\n } else {\n // Play a turn sound if it is the user's turn and they don't have any queued actions\n this.props.browserContext.playSoundDelay(\"DING\", 500);\n }\n }\n }, timeout * 1000);\n });\n };\n\n this._setSpectatorStateChangeSocket = () => {\n setOnSpectatorStateChange((data) => {\n const timeout = data[\"timeout\"];\n setTimeout(async () => {\n this.props.context.setSpectatorState(data.spectators, data.reason);\n }, timeout * 1000);\n });\n };\n\n this._parseQueryParams = () => {\n const params = queryString.parse(this.props.location.search);\n // This only sends user to join/spectate a game if autojoin is true, otherwise some form of NewPlayerModal will be displayed\n if (params.autojoin === \"true\") {\n if (params.username) {\n if (params.spectate === \"true\") {\n //?username=&autojoin=true&spectate=true\n this._spectateGame(\n decodeURI(params.username),\n \"\",\n this.props.context.hasGamePassword\n ? this.props.context.prefilledGamePassword\n : \"\"\n );\n } else {\n //?username=&autojoin=true&spectate=false\n //if game is not full, join game (implement checker in the future)\n this._joinGame(\n decodeURI(params.username),\n \"\",\n this.props.context.hasGamePassword\n ? this.props.context.prefilledGamePassword\n : \"\"\n );\n }\n }\n }\n };\n }\n\n checkMobile = () => {\n const isMobile =\n window.innerWidth <= mobileBreakpointRaw ||\n window.innerHeight <= mobileHeightBreakpointRaw;\n this.props.browserContext.setIsMobile(isMobile);\n };\n\n componentWillUnmount() {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n // this function smh\n static getDerivedStateFromProps(props, prevState) {\n let gameId = props.match.params.gameId\n ? props.match.params.gameId\n : props.context.gameId\n ? props.context.gameId\n : \"\";\n let MTTId = props.match.params.MTTId\n ? props.match.params.MTTId\n : props.context.MTTId\n ? props.context.MTTId\n : \"\";\n return {\n ...prevState,\n gameId,\n MTTId,\n };\n }\n\n async componentDidMount() {\n console.log(\"Didmount called\");\n\n // Load the stats for the site intro page\n this._getOverallStats();\n\n document.onreadystatechange = () => {\n console.log(\"Didmount state called\");\n this.props.context.updateDisplay(\"loading\");\n if (document.readyState === \"complete\") {\n if (this.state.MTTId) {\n this.props.context.checkMTTExists(this.state.MTTId);\n } else if (!this.state.gameId) {\n this.props.context.updateDisplay(\"initial\");\n } else {\n this.props.context.checkGameExists(\n this.state.gameId,\n this.props.iframeClientName,\n (exists) => {\n if (!exists) {\n this._createGame(\n blinds.DEFAULT_SMALL_BLIND_CENTS,\n \"\",\n this.state.gameId,\n this.props.iframeClientName,\n false,\n 30,\n 8,\n false,\n false,\n 1000,\n 600,\n true,\n this._parseQueryParams\n );\n console.log(\"Created game\");\n } else if (this.props.context.display === \"login\") {\n this._parseQueryParams();\n }\n }\n );\n }\n }\n };\n\n this.checkMobile();\n window.addEventListener(\"resize\", this.checkMobile);\n initLogger();\n }\n\n render() {\n if (this.props.context.display === \"loading\") return ;\n if (this.props.context.display === \"disconnected\") {\n if (this.state.gameId.length > 0) {\n this.props.browserContext.setCurrentModal(\n modals.DISCONNECTED_SERVER_IN_GAME\n );\n } else {\n this.props.browserContext.setCurrentModal(\n modals.DISCONNECTED_SERVER_NOT_IN_GAME\n );\n }\n }\n if (this.props.context.display === \"different_log_in\") {\n this.props.browserContext.setCurrentModal(modals.DIFFERENT_LOG_IN);\n }\n\n let currentOverlay = <>; // this is used for modals that are mandatory parts of game flow, ModalController is for interrupts of default game flow\n if (\n this.props.context.display === \"initial\" &&\n !this.state.gameId &&\n !this.state.MTTId\n ) {\n currentOverlay = (\n \n );\n }\n\n if (this.props.context.display === \"login\") {\n const params = queryString.parse(this.props.location.search);\n currentOverlay = (\n \n );\n }\n if (this.props.context.display === \"settings\") {\n currentOverlay = (\n \n );\n }\n if (this.props.context.display === \"newGame\") {\n currentOverlay = (\n \n );\n }\n if (this.props.context.display === \"newMTT\") {\n currentOverlay = (\n \n );\n }\n if (this.props.context.display === \"MTTGameEnd\") {\n currentOverlay = ;\n }\n\n if (this.props.context.display === \"MTTDistribute\") {\n currentOverlay = (\n \n );\n }\n \n if (this.state.MTTId) {\n console.log(\"MTT ID: \", this.state.MTTId);\n }\n \n const emitSocketMessage = connectEmitSocketMessage(\n this.props.context.sessionKey,\n this.state.gameId,\n this.props.context.username\n );\n\n const emitSocketAction = connectEmitSocketAction(\n this.props.context.sessionKey,\n this.state.gameId,\n this.props.context.username\n );\n console.log(\"Display: \", this.props.context.display);\n\n return (\n \n <>\n \n {currentOverlay}\n \n \n \n {!this.state.MTTId ||\n this.props.context.display == \"play\" ||\n this.props.context.display == \"MTTGameEnd\" ? (\n <>\n \n \n {\" \"}\n \n ) : (\n <>\n \n \n \n \n )}\n \n {/* Intentionally prop drilling for memo performance optimization. Will do without prop drilling later. */}\n \n \n \n \n );\n }\n}\n\nconst Wrapper = styled.div`\n height: 100vh;\n background: ${({ theme }) => theme.background};\n\n display: flex;\n ${(props) =>\n props.reverseOrder &&\n `\n flex-direction: row-reverse;\n `}\n @media screen and (max-width: ${mobileBreakpoint}),\n screen and (max-height: ${mobileHeightBreakpoint}) {\n right: 5px;\n bottom: 71px;\n }\n`;\n\nlet CentralLayout = styled.div`\n height: 100%;\n display: flex;\n overflow: hidden;\n flex-direction: column;\n justify-content: space-around;\n align-items: center;\n position: relative;\n ${(props) => (props.fullWidth ? \"width: 100%;\" : \"width: 85%;\")}\n`;\n\nexport const LeaderboardWidthPercent = 15;\n\nsetConfig({ reloadHooks: true });\nexport default hot(module)(App);\n","import App from \"./components/App\";\nimport classnames from \"classnames\";\nimport ReactDOM from \"react-dom\";\nimport React from \"react\";\nimport { BrowserRouter as Router, Route } from \"react-router-dom\";\nimport \"./index.css\";\nimport \"typeface-rambla\";\nimport { GameProvider, GameConsumer } from \"./context/GameContext\";\nimport { BrowserProvider, BrowserConsumer } from \"./context/BrowserContext\";\nimport { initSentry } from \"./helpers/logger\";\ninitSentry();\n\nReactDOM.render(\n \n \n \n \n {(context) => (\n \n {(browserContext) => (\n
\n (\n \n )}\n />\n\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n
\n )}\n
\n )}\n
\n
\n
\n
,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}