{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/util/object.ts","webpack:///./src/State.ts","webpack:///./src/localStorageState.ts","webpack:///./src/state/GameStatistics.ts","webpack:///./src/websocketHandler.ts","webpack:///./src/IconButton.tsx","webpack:///./src/GameStatisticsPane.tsx","webpack:///./src/SettingsPane.tsx","webpack:///./src/InlineCard.tsx","webpack:///./src/Draw.tsx","webpack:///./src/state/Settings.ts","webpack:///./src/AppStateProvider.tsx","webpack:///./src/memoize.ts","webpack:///./src/beep.ts","webpack:///./src/WebsocketProvider.tsx","webpack:///./src/Errors.tsx","webpack:///./src/ReadyCheck.tsx","webpack:///./src/LandlordSelector.tsx","webpack:///./src/util/array.ts","webpack:///./src/NumDecksSelector.tsx","webpack:///./src/KittySizeSelector.tsx","webpack:///./src/RankSelector.tsx","webpack:///./src/Kicker.tsx","webpack:///./src/RandomizePlayersButton.tsx","webpack:///./src/GameMode.tsx","webpack:///./src/icons/BarChart.tsx","webpack:///./src/GameStatisticsButton.tsx","webpack:///./src/icons/Gear.tsx","webpack:///./src/SettingsButton.tsx","webpack:///./src/Header.tsx","webpack:///./src/MovePlayerButton.tsx","webpack:///./src/Players.tsx","webpack:///./src/ScoringSettings.tsx","webpack:///./src/Initialize.tsx","webpack:///./src/preloadedCards.ts","webpack:///./src/util/cardHelpers.ts","webpack:///./src/Card.tsx","webpack:///./src/LabeledPlay.tsx","webpack:///./src/BeepButton.tsx","webpack:///./src/Cards.tsx","webpack:///./src/BidArea.tsx","webpack:///./src/Trump.tsx","webpack:///./src/FriendSelect.tsx","webpack:///./src/Friends.tsx","webpack:///./src/ChatInput.tsx","webpack:///./src/Exchange.tsx","webpack:///./src/JoinRoom.tsx","webpack:///./src/Credits.tsx","webpack:///./src/ChatMessage.tsx","webpack:///./src/icons/PaperPlane.tsx","webpack:///./src/Chat.tsx","webpack:///./src/Beeper.tsx","webpack:///./src/Trick.tsx","webpack:///./src/ProgressBar.tsx","webpack:///./src/Points.tsx","webpack:///./src/AutoPlayButton.tsx","webpack:///./src/Play.tsx","webpack:///./src/DebugInfo.tsx","webpack:///./src/Notification.tsx","webpack:///./src/Root.tsx","webpack:///./src/index.tsx","webpack:///./src/WasmContext.tsx","webpack:///./src/Timeout.tsx","webpack:///./src/TimerProvider.tsx"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","installedWasmModules","wasmImportObjects","p0i32","p1i32","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","forEach","wasmModuleId","installedWasmModuleData","importObject","req","fetch","WebAssembly","compileStreaming","all","then","items","instantiate","instantiateStreaming","x","arrayBuffer","bytes","res","w","instance","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","mapper","keys","k","noPersistence","loadDefault","persist","combineState","before","after","localStorageState","extractor","serializer","localStorage","getItem","setItem","booleanLocalStorageState","defaultValue","state","numberLocalStorageState","isNaN","parseInt","templateObject_1","templateObject_2","templateObject_3","extendStatics","gamesPlayed","gamesPlayedAsDefending","gamesPlayedAsLandlord","gamesWon","gamesWonAsDefending","gamesWonAsLandlord","ranksUp","fourColor","darkMode","svgCards","showCardLabels","showLastTrick","beepOnTurn","showTrickInPlayerOrder","reverseCardOrder","unsetAutoPlayWhenWinnerChanges","separateCardsBySuit","disableSuitHighlights","suitColorOverrides","val","JSON","parse","stringify","playDrawCardSound","showDebugInfo","__assign","assign","arguments","this","settings","gameStatistics","connected","everConnected","roomName","location","hash","stringLocalStorageState","changeLogLastViewed","gameState","headerMessages","errors","messages","confetti","firstStartAt","halfTimeBreakNow","AppStateContext","updateState","SettingsContext","Consumer","props","_a","setState","Provider","newState","combined","children","f","called","getContext","AudioContext","vol","freq","duration","beepContext","v","createOscillator","u","createGain","connect","frequency","destination","gain","start","currentTime","stop","alert","__spreadArrays","il","Array","a","jl","truncateMessages","array","lastBeeped","performance","now","lastReadyChecked","allHandlers","Message","Broadcast","newMessage","from","from_game","_","State","Header","variant","updates","ownResult","newGameStatistics","is_defending","is_landlord","won_game","ranks_up","gameWinners","entries","filter","map","group","join","replace","FirstStartAt","newTime","send","partials","h","partial","beepHandler","confirm","readyCheckHandler","timeoutHandler","WebsocketContext","getFileReader","queue","fr","FileReader","handler","readAsArrayBuffer","blob","enqueue","readyState","EMPTY","DONE","getBlobArrayBuffer","inflight","arr","next","log","decodeWireFormat","WasmContext","_b","_c","timer","setTimer","_d","websocket","setWebsocket","stateRef","updateStateRef","timerRef","setTimerRef","setTimeoutRef","clearTimeoutRef","current","runtimeWebsocketHost","_WEBSOCKET_HOST","uri","protocol","host","pathname","endsWith","ws","WebSocket","addEventListener","buf","Uint8Array","close","websocketHandler","msg","localTimerRef","className","onClick","Timeout","callback","idx","landlordId","onChange","players","player","id","identity","large","small","equality","valueToRemove","index","findIndex","count","fn","fill","reduce","b","sort","Math","random","numDecks","newNumDecks","numPlayers","deckLen","computeDeckLen","decks","kittyOffset","defaultOptions","options","includes","kittySize","newKittySize","label","allRanks","rank","onChangeRank","selection","setSelection","onKick","disabled","RandomizePlayersButton","Action","ReorderPlayers","rules","href","gameMode","__makeTemplateObject","cooked","raw","Button","button","width","focusable","role","xmlns","viewBox","height","y","rx","Row","div","LabelCell","Cell","ranksPerGame","ranks","numGames","toFixed","GameStatisticsRow","numerator","denominator","numPlayed","numWon","gamesPlayedAsAttacking","gamesWonAsAttacking","style","display","contentStyle","position","top","left","transform","modalOpen","setModalOpen","paddingLeft","isOpen","onRequestClose","shouldCloseOnOverlayClick","shouldCloseOnEsc","content","SuitOverrides","labels","suit","SuitColorPicker","suitColor","suitColors","setSuitColor","color","setSuitColors","evt","preventDefault","showPicker","setShowPicker","cursor","right","bottom","onChangeComplete","hex","handleChange","partialSettings","onChangeSettings","link","setLink","editor","marginBottom","placeholder","SetChatLink","checked","newOverrides","chatLink","rel","MovePlayerButton","relative","newIndex","withoutPlayer","newPlayers","MovePlayerLeft","MovePlayerRight","observers","landlord","landlords_team","movable","makeDescriptor","metalevel","level","descriptor","marginTop","textAlign","MakeObserver","textDecoration","MakePlayer","__rest","indexOf","getOwnPropertySymbols","propertyIsEnumerable","GameScoringSettings","explainScoring","highlighted","setHighlighted","updateSettings","SetGameScoringParameters","params","bonusEnabled","bonus_level_policy","smaller_landlord_team_size","scoreTransitions","results","stepSize","step_size","totalPoints","total_points","bonusScoreTransitions","scoreSegments","maxPts","maxLandlordDelta","maxNonLandlordDelta","span","max","point_threshold","segment","landlord_delta","non_landlord_delta","bonusSegment","landlord_bonus","last","validStepSizes","curStepSize","maxSteps","floor","padding","frac","bg","landlord_won","onMouseEnter","onMouseLeave","background","txt","text","step_size_per_deck","perDeck","ss","step_adjustments","adjustments","deadzone_size","deadzoneSize","num_steps_to_non_landlord_turnover","steps","__awaiter","thisArg","_arguments","P","generator","step","rejected","done","__generator","body","g","sent","trys","ops","verb","iterator","op","TypeError","pop","Picker","DifficultySettings","propagated","friend_selection_policy","setFriendSelectionPolicy","multiple_join_policy","setMultipleJoinPolicy","advancement_policy","setAdvancementPolicy","hide_landlord_points","setHideLandlordsPoints","hide_played_cards","setHidePlayedCards","kitty_penalty","setKittyPenalty","throw_penalty","setThrowPenalty","play_takeback_policy","setPlayTakebackPolicy","bid_takeback_policy","setBidTakebackPolicy","DeckSettings","isNotDefault","min","exclude_big_joker","exclude_small_joker","setDeckAtIndex","deck","filtered","newDecks","setSpecialDecks","numbers","border","margin","ScoringSettings","game_scoring_parameters","UncommonSettings","game_shadowing_policy","setGameShadowingPolicy","game_start_policy","setGameStartPolicy","first_landlord_selection_policy","setFirstLandlordSelectionPolicy","kitty_bid_policy","setKittyBidPolicy","bid_policy","setBidPolicy","bid_reinforcement_policy","setBidReinforcementPolicy","joker_bid_policy","setJokerBidPolicy","should_reveal_kitty_at_end_of_game","setShouldRevealKittyAtEndOfGame","hide_throw_halting_player","setHideThrowHaltingPlayer","onSelectString","action","onSelectStringDefault","setKittyTheftPolicy","setTrickDrawPolicy","setThrowEvaluationPolicy","shouldTimeout","Date","MilliSecondsInOneHour","modeAsString","game_mode","numFriends","FindingFriends","num_friends","decksEffective","num_decks","special_decks","currentPlayer","find","landlordIndex","setGameSettings","gameSettings","kittySizeSet","_i","SetGameMode","SetNumDecks","SetKittySize","SetSpecialDecks","SetFriendSelectionPolicy","SetMultipleJoinPolicy","SetFirstLandlordSelectionPolicy","SetHideLandlordsPoints","SetHidePlayedCards","SetAdvancementPolicy","SetKittyBidPolicy","SetKittyPenalty","SetKittyTheftPolicy","SetThrowPenalty","SetTrickDrawPolicy","SetThrowEvaluationPolicy","SetLandlordEmoji","SetBidPolicy","SetBidReinforcementPolicy","SetJokerBidPolicy","SetShouldRevealKittyAtEndOfGame","SetHideThrowHaltingPlayer","SetPlayTakebackPolicy","SetBidTakebackPolicy","SetGameShadowingPolicy","SetGameStartPolicy","chat_link","playerId","Kick","num","kitty_size","kitty_theft_policy","trick_draw_policy","throw_evaluation_policy","newLandlord","SetLandlord","newRank","SetRank","landlord_emoji","fallback","onEmojiClick","emojiObject","emoji","place","effect","gameSettings_1","fetchJSON","json","catch","cardLookup","preloadedCards","suitToUnicode","clubs","diamonds","hearts","spades","suitToFilledUnicode","cardInfoToSuit","cardInfo","typ","InlineCardBase","Suit","Diamonds","Hearts","Spades","Clubs","LittleJoker","BigJoker","Unknown","card","unicode","number","unicodeToCard","Component","suitCard","suitComponent","cardToUnicodeSuit","SvgCard","cardBoundsCache","suitColorCache","CardCanvas","font","dpr","ctx","scale","textMetrics","measureText","removeChild","computeCanvasBounds","getComputedStyle","computeSuitColor","effectiveHeight","round","actualBoundingBoxAscent","actualBoundingBoxDescent","effectiveWidth","actualBoundingBoxRight","actualBoundingBoxLeft","backgroundColor","colorOverride","fontSize","textLength","nonSVG","display_value","smaller","cards","groupedCards","gidx","clickable","moreCards","highlightedSuit","setHighlightedSuit","hands","selectedCards","notifyEmpty","sortAndGroupCards","cardsInHand","flatMap","ct","unselected","selectedCardGroups","trump","unselectedCardGroups","reverse","onSelect","notify","unclickable","onCardClick","findValidBids","previousBidsRef","currentBidsRef","bidSetTimeRef","header","autobid","bids","bid","validBids","epoch","bidPolicy","bidReinforcementPolicy","jokerBidPolicy","levelId","NoTrump","prefixButtons","bidTakeBacksEnabled","suffixButtons","bidChangedTime","Bid","__extends","setPrototypeOf","__proto__","__","constructor","_super","Draw","_this","could_draw","drawCardAudio","autodraw","pickUpKittyDelay","drawCard","pickUpKitty","revealCard","onAutodrawClicked","canDraw","Audio","play","render","pickUpKittyDisabled","newDelay_1","removed_cards","revealed_cards","kitty","Standard","suit_1","rank_1","friend","initial_skip","handleCardChange","select","handleOrdinalChange","cardOptions","currentValue","notTrumpFilter","policyFilter","PointCardNotAllowed","points","HighestCardNotAllowed","Unrestricted","TrumpsIncluded","formatOptionLabel","marginLeft","friends","player_id","suffix","showPlayed","skip","Exchange","moveCardToKitty","moveCardToHand","startGame","putDownKitty","pickFriends","fixFriends","propFriends","componentDidMount","componentDidUpdate","MoveCardToKitty","MoveCardToHand","SetFriends","exchanger","landlordIdx","exchangerIdx","isLandlord","isExchanger","kittyTheftEnabled","nextPlayer","finalized","exchangeUI","lastBid","bidUI","friendUI","newFriends","editable","setEditable","room_name","shouldGenerate","setShouldGenerate","editableRoomName","setRoomName","trim","maxLength","nonEditableRoomName","title","generateRoomName","crypto","getRandomValues","toString","substr","onSubmit","setName","autoFocus","ChangeLog","float","renderScoringMessage","changes","old_parameters","parameters","adj","actor_name","renderMessage","ChatBox","Input","input","draft","setDraft","autoComplete","opacity","anchor","rect","getBoundingClientRect","html","documentElement","innerHeight","clientHeight","innerWidth","clientWidth","scrollIntoView","block","inline","ref","defaultBeeper","beeper","interval","setInterval","clearInterval","namesById","String","blankCards","trick","played_cards","betterPlayer","better_player","playedByID","cardsFromMappingByID","playOrder","played","played_card_mappings","mapping_1","singles_1","mm","Repeated","Tractor","members","mmm","player_queue","winning","current_winner","better","landlord_suffix","bad_throw_cards","CheckpointCircle","borderWidth","borderStyle","borderColor","borderRadius","justifyContent","alignItems","convertToPercentage","proportion","challengerPoints","landlordPoints","checkpointColors","checkpoints","checkpoint","landlordPosition","landlordWidth","challengerPosition","hideLandlordPoints","calculatePoints","landlordTeam","penalties","pointsPerPlayer","totalPointsPlayed","values","nonLandlordPoints","nonLandlordPointsWithPenalties","penalty","computeScore","penaltyDelta","gameScoringParameters","smallerTeamSize","non_landlord_points","score","nextThreshold","next_threshold","playerPointElements","onLandlordTeam","thresholdStr","transition","threshold","canSubmit","isCurrentPlayerTurn","playDescription","currentWinner","autoplay","setAutoplay","observedWinner","TrickFormatHelper","decomp","decomposeTrickFormat","trick_format","format","trickDrawPolicy","trickSuit","bestMatch","playable","description","cidx","fontWeight","selected","setSelected","grouping","setGrouping","findViablePlays","canPlayCards","nextThresholdReachable","sendEvent","takeBackCards","endTrick","endGameEarly","startNewGame","playPhase","isSpectator","hand","toRemove","newSelected","lastPlay","canPlay","game_ended_early","canTakeBack","shouldBeBeeping","remainingCardsInHands","playerHand","noCardsLeft","canFinish","canEndGameEarly","observed_points","landlordSuffix","landlordTeamSize","PlayCardsWithHint","pid","last_trick","_props","appState","HalfTimeBreak","marginRight","Confetti","timerContext","previousHeaderMessages","setPreviousHeaderMessages","showHeaderMessages","setShowHeaderMessages","every","classList","add","remove","clearConfetti","Initialize","Play","WasmProvider","dsn","release","_VERSION","ignoreErrors","root","getElementById","TimerProvider","bootstrap","TimerContext","_fn","_delay","_id","_interval","_TimerProvider","worker","setWorker","timeoutId","callbacks","Map","timerWorker","Worker","has","delete","terminate","delay","set","postMessage","command"],"mappings":"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","file":"main.9d27c8e7c30e9049c7f7.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"1\":\"playing-cards\"}[chunkId]||chunkId) + \".\" + {\"1\":\"468cb70658cefe90a978\",\"3\":\"f867ee41ad32c350d6b3\",\"4\":\"5a00f5644b375b1ed58d\",\"5\":\"100cd358e9b04284fa26\"}[chunkId] + \".js\"\n \t}\n\n \t// object to store loaded and loading wasm modules\n \tvar installedWasmModules = {};\n\n \tfunction promiseResolve() { return Promise.resolve(); }\n\n \tvar wasmImportObjects = {\n \t\t\"JvMb\": function() {\n \t\t\treturn {\n \t\t\t\t\"./shengji-core_bg.js\": {\n \t\t\t\t\t\"__wbindgen_json_serialize\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[\"ZTyI\"].exports[\"b\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_json_parse\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[\"ZTyI\"].exports[\"a\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_string_new\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[\"ZTyI\"].exports[\"e\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_object_drop_ref\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[\"ZTyI\"].exports[\"c\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_rethrow\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[\"ZTyI\"].exports[\"d\"](p0i32);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t};\n \t\t},\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n\n \t\t// Fetch + compile chunk loading for webassembly\n\n \t\tvar wasmModules = {\"3\":[\"JvMb\"]}[chunkId] || [];\n\n \t\twasmModules.forEach(function(wasmModuleId) {\n \t\t\tvar installedWasmModuleData = installedWasmModules[wasmModuleId];\n\n \t\t\t// a Promise means \"currently loading\" or \"already loaded\".\n \t\t\tif(installedWasmModuleData)\n \t\t\t\tpromises.push(installedWasmModuleData);\n \t\t\telse {\n \t\t\t\tvar importObject = wasmImportObjects[wasmModuleId]();\n \t\t\t\tvar req = fetch(__webpack_require__.p + \"\" + {\"JvMb\":\"4b184d7e0b2d4dfbfcc7\"}[wasmModuleId] + \".module.wasm\");\n \t\t\t\tvar promise;\n \t\t\t\tif(importObject instanceof Promise && typeof WebAssembly.compileStreaming === 'function') {\n \t\t\t\t\tpromise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {\n \t\t\t\t\t\treturn WebAssembly.instantiate(items[0], items[1]);\n \t\t\t\t\t});\n \t\t\t\t} else if(typeof WebAssembly.instantiateStreaming === 'function') {\n \t\t\t\t\tpromise = WebAssembly.instantiateStreaming(req, importObject);\n \t\t\t\t} else {\n \t\t\t\t\tvar bytesPromise = req.then(function(x) { return x.arrayBuffer(); });\n \t\t\t\t\tpromise = bytesPromise.then(function(bytes) {\n \t\t\t\t\t\treturn WebAssembly.instantiate(bytes, importObject);\n \t\t\t\t\t});\n \t\t\t\t}\n \t\t\t\tpromises.push(installedWasmModules[wasmModuleId] = promise.then(function(res) {\n \t\t\t\t\treturn __webpack_require__.w[wasmModuleId] = (res.instance || res).exports;\n \t\t\t\t}));\n \t\t\t}\n \t\t});\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \t// object with all WebAssembly.instance exports\n \t__webpack_require__.w = {};\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"2YZa\",2]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var mapValues = function (object, mapper) {\n var result = {};\n Object.keys(object).forEach(function (k) {\n result[k] = mapper(object[k]);\n });\n return result;\n};\nvar filter = function (object, predicate) {\n var result = {};\n Object.keys(object).forEach(function (key) {\n var value = object[key];\n if (predicate(key, value)) {\n result[key] = value;\n }\n });\n return result;\n};\nexport default {\n mapValues: mapValues,\n filter: filter,\n};\n","import ObjectUtils from \"./util/object\";\nexport var noPersistence = function (loadDefault) {\n return {\n loadDefault: loadDefault,\n persist: function () { },\n };\n};\nexport var combineState = function (object) {\n return {\n loadDefault: function () {\n return ObjectUtils.mapValues(object, function (p) { return p.loadDefault(); });\n },\n persist: function (before, after) {\n Object.keys(after).forEach(function (k) {\n if (before[k] !== after[k]) {\n object[k].persist(before[k], after[k]);\n }\n });\n },\n };\n};\n","export var localStorageState = function (key, extractor, serializer) {\n return {\n loadDefault: function () { return extractor(window.localStorage.getItem(key)); },\n persist: function (before, after) {\n window.localStorage.setItem(key, serializer(after));\n },\n };\n};\nexport var booleanLocalStorageState = function (key, defaultValue) {\n if (defaultValue === void 0) { defaultValue = false; }\n return localStorageState(key, function (value) { return value === \"on\" || defaultValue; }, function (state) { return (state ? \"on\" : \"off\"); });\n};\nexport var stringLocalStorageState = function (key, defaultValue) {\n if (defaultValue === void 0) { defaultValue = \"\"; }\n return localStorageState(key, function (value) { return (typeof value === \"string\" ? value : defaultValue); }, function (state) { return state; });\n};\nexport var numberLocalStorageState = function (key, defaultValue) {\n if (defaultValue === void 0) { defaultValue = 0; }\n return localStorageState(key, function (value) {\n return value != null && !isNaN(value) ? parseInt(value, 10) : defaultValue;\n }, function (state) { return state; });\n};\nexport function JSONLocalStorageState(key, defaultValue) {\n return localStorageState(key, function (value) {\n try {\n var val = JSON.parse(value);\n if (val !== undefined && val !== null) {\n return val;\n }\n else {\n return defaultValue;\n }\n }\n catch (e) {\n return defaultValue;\n }\n }, function (state) { return JSON.stringify(state); });\n}\n","import { combineState } from \"../State\";\nimport { numberLocalStorageState } from \"../localStorageState\";\nvar gamesPlayed = numberLocalStorageState(\"games_played\");\nvar gamesPlayedAsDefending = numberLocalStorageState(\"games_played_as_defending\");\nvar gamesPlayedAsLandlord = numberLocalStorageState(\"games_played_as_landlord\");\nvar gamesWon = numberLocalStorageState(\"games_won\");\nvar gamesWonAsDefending = numberLocalStorageState(\"games_won_as_defending\");\nvar gamesWonAsLandlord = numberLocalStorageState(\"games_won_as_landlord\");\nvar ranksUp = numberLocalStorageState(\"ranks_up\");\nvar gameStatistics = combineState({\n gamesPlayed: gamesPlayed,\n gamesPlayedAsDefending: gamesPlayedAsDefending,\n gamesPlayedAsLandlord: gamesPlayedAsLandlord,\n gamesWon: gamesWon,\n gamesWonAsDefending: gamesWonAsDefending,\n gamesWonAsLandlord: gamesWonAsLandlord,\n ranksUp: ranksUp,\n});\nexport default gameStatistics;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport beep from \"./beep\";\nvar truncate = function (length) { return function (array) {\n if (array.length > length) {\n return array.slice(array.length - length);\n }\n else {\n return array;\n }\n}; };\nvar truncateMessages = truncate(300);\nvar messageHandler = function (state, message) {\n if (message.Message !== undefined) {\n return { messages: truncateMessages(__spreadArrays(state.messages, [message.Message])) };\n }\n else {\n return null;\n }\n};\nvar broadcastHandler = function (state, message) {\n if (message.Broadcast !== undefined) {\n var newMessage = {\n from: \"GAME\",\n message: message.Broadcast.message,\n data: message.Broadcast.data,\n from_game: true,\n };\n return { messages: truncateMessages(__spreadArrays(state.messages, [newMessage])) };\n }\n else {\n return null;\n }\n};\nvar errorHandler = function (state, message) {\n if (message.Error !== undefined) {\n return { errors: __spreadArrays(state.errors, [message.Error]) };\n }\n else {\n return null;\n }\n};\nvar stateHandler = function (_, message) {\n if (message.State !== undefined) {\n return { gameState: message.State.state };\n }\n else {\n return null;\n }\n};\nvar headerMessageHandler = function (_, message) {\n if (message.Header !== undefined) {\n return { headerMessages: message.Header.messages };\n }\n else {\n return null;\n }\n};\nvar lastBeeped = performance.now();\nvar beepHandler = function (message) {\n if (message === \"Beep\") {\n var now = performance.now();\n // Rate-limit beeps to prevent annoyance.\n if (now - lastBeeped >= 1000) {\n beep(3, 261.63, 200);\n lastBeeped = now;\n }\n }\n return null;\n};\nvar lastReadyChecked = performance.now();\nvar readyCheckHandler = function (message, send) {\n if (message === \"ReadyCheck\") {\n var now = performance.now();\n // Rate-limit beeps to prevent annoyance.\n if (now - lastReadyChecked >= 1000) {\n beep(3, 261.63, 200);\n lastReadyChecked = now;\n if (confirm(\"Are you ready to start the game?\")) {\n send(\"Ready\");\n }\n }\n }\n return null;\n};\nvar firstStartAtHandler = function (state, message) {\n if (message.FirstStartAt !== undefined) {\n var newTime = parseInt(message.FirstStartAt);\n console.error(\"got first start: \", message.FirstStartAt, newTime);\n if (state.firstStartAt == 0) {\n state.firstStartAt = newTime;\n }\n else if (state.firstStartAt >= newTime) {\n // check if the new time makes sense\n state.firstStartAt = newTime;\n }\n else {\n console.error(\"bad firstStartAt time\", state.firstStartAt, newTime);\n }\n }\n return null;\n};\nvar timeoutHandler = function (message, state) {\n if (message === \"Timeout\") {\n state.halfTimeBreakNow = true;\n state.firstStartAt = 0;\n }\n return null;\n};\nvar gameFinishedHandler = function (state, message) {\n if (message.Broadcast !== undefined &&\n message.Broadcast.data.variant.type === \"GameFinished\") {\n var result = message.Broadcast.data.variant.result;\n var updates = {};\n if (state.name in result) {\n var ownResult = result[state.name];\n var gameStatistics = state.gameStatistics;\n var newGameStatistics = __assign({}, gameStatistics);\n newGameStatistics.gamesPlayed++;\n if (ownResult.is_defending) {\n newGameStatistics.gamesPlayedAsDefending++;\n if (ownResult.is_landlord) {\n newGameStatistics.gamesPlayedAsLandlord++;\n }\n }\n if (ownResult.won_game) {\n newGameStatistics.gamesWon++;\n if (ownResult.is_defending) {\n newGameStatistics.gamesWonAsDefending++;\n if (ownResult.is_landlord) {\n newGameStatistics.gamesWonAsLandlord++;\n }\n }\n }\n newGameStatistics.ranksUp += ownResult.ranks_up;\n updates.gameStatistics = newGameStatistics;\n }\n var gameWinners = Object.entries(result)\n .filter(function (r) { return r[1].confetti; })\n .map(function (r) { return r[0]; });\n if (gameWinners.length > 0) {\n var group = gameWinners\n .join(\", \")\n .replace(/, ((?:.(?!, ))+)$/, \" and $1\");\n updates.confetti = group + \" successfully defended on A!\";\n }\n if (updates.gameStatistics !== undefined ||\n updates.confetti !== undefined) {\n return updates;\n }\n }\n return null;\n};\nvar allHandlers = [\n messageHandler,\n broadcastHandler,\n errorHandler,\n stateHandler,\n headerMessageHandler,\n gameFinishedHandler,\n firstStartAtHandler,\n];\nvar composedHandlers = function (state, message, send) {\n var partials = {};\n if (message !== \"Beep\" && message !== \"ReadyCheck\"\n && message !== \"Timeout\") {\n allHandlers.forEach(function (h) {\n var partial = h(state, message);\n partials = __assign(__assign({}, partials), partial);\n state = __assign(__assign({}, state), partial);\n });\n }\n beepHandler(message);\n readyCheckHandler(message, send);\n timeoutHandler(message, state);\n return partials;\n};\nexport default composedHandlers;\n","var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nvar Button = styled.button(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n outline: none;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n background-color: transparent;\\n transition: opacity 100ms ease-in-out, color 150ms ease-in-out,\\n transform 100ms ease-in-out;\\n color: #111;\\n &:hover {\\n color: #666;\\n }\\n\"], [\"\\n outline: none;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n background-color: transparent;\\n transition: opacity 100ms ease-in-out, color 150ms ease-in-out,\\n transform 100ms ease-in-out;\\n color: #111;\\n &:hover {\\n color: #666;\\n }\\n\"])));\nvar IconButton = function (props) {\n return React.createElement(Button, __assign({ className: \"icon-button\" }, props));\n};\nexport default IconButton;\nvar templateObject_1;\n","var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nvar Row = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n display: table-row;\\n line-height: 23px;\\n\"], [\"\\n display: table-row;\\n line-height: 23px;\\n\"])));\nvar LabelCell = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n display: table-cell;\\n padding-right: 2em;\\n font-weight: bold;\\n\"], [\"\\n display: table-cell;\\n padding-right: 2em;\\n font-weight: bold;\\n\"])));\nvar Cell = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject([\"\\n display: table-cell;\\n\"], [\"\\n display: table-cell;\\n\"])));\nvar percentage = function (numerator, denominator) {\n if (denominator > 0) {\n return ((numerator / denominator) * 100).toFixed(2) + \"%\";\n }\n return \"n/a\";\n};\nvar ranksPerGame = function (ranks, numGames) {\n if (numGames > 0) {\n return (ranks / numGames).toFixed(3);\n }\n return \"n/a\";\n};\nvar GameStatisticsRow = function (_a) {\n var label = _a.label, numPlayed = _a.numPlayed, numWon = _a.numWon;\n return (React.createElement(Row, null,\n React.createElement(LabelCell, null, label),\n React.createElement(Cell, null, numPlayed),\n React.createElement(Cell, null, numWon),\n React.createElement(Cell, null, percentage(numWon, numPlayed))));\n};\nvar GameStatisticsPane = function (props) {\n var gameStatistics = props.gameStatistics;\n var gamesPlayedAsAttacking = gameStatistics.gamesPlayed - gameStatistics.gamesPlayedAsDefending;\n var gamesWonAsAttacking = gameStatistics.gamesWon - gameStatistics.gamesWonAsDefending;\n return (React.createElement(\"div\", { className: \"gameStatistics\" },\n React.createElement(\"h3\", null, \"win statistics\"),\n React.createElement(\"div\", { style: { display: \"table\" } },\n React.createElement(Row, null,\n React.createElement(Cell, null),\n React.createElement(LabelCell, null, \"played\"),\n React.createElement(LabelCell, null, \"won\"),\n React.createElement(LabelCell, null, \"percentage\")),\n React.createElement(GameStatisticsRow, { label: \"attacking\", numPlayed: gamesPlayedAsAttacking, numWon: gamesWonAsAttacking }),\n React.createElement(GameStatisticsRow, { label: \"defending\", numPlayed: gameStatistics.gamesPlayedAsDefending, numWon: gameStatistics.gamesWonAsDefending }),\n React.createElement(GameStatisticsRow, { label: \"as landlord\", numPlayed: gameStatistics.gamesPlayedAsLandlord, numWon: gameStatistics.gamesWonAsLandlord }),\n React.createElement(GameStatisticsRow, { label: \"total\", numPlayed: gameStatistics.gamesPlayed, numWon: gameStatistics.gamesWon })),\n React.createElement(\"h3\", null, \"rank up statistics\"),\n React.createElement(\"div\", { style: { display: \"table\" } },\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"ranks/game\"),\n React.createElement(Cell, null, ranksPerGame(gameStatistics.ranksUp, gameStatistics.gamesPlayed))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"ranks/win\"),\n React.createElement(Cell, null, ranksPerGame(gameStatistics.ranksUp, gameStatistics.gamesWon))))));\n};\nexport default GameStatisticsPane;\nvar templateObject_1, templateObject_2, templateObject_3;\n","var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from \"react\";\nimport { CompactPicker } from \"react-color\";\nimport styled from \"styled-components\";\nvar Row = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n display: table-row;\\n line-height: 23px;\\n\"], [\"\\n display: table-row;\\n line-height: 23px;\\n\"])));\nvar LabelCell = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n display: table-cell;\\n padding-right: 2em;\\n\"], [\"\\n display: table-cell;\\n padding-right: 2em;\\n\"])));\nvar Cell = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject([\"\\n display: table-cell;\\n\"], [\"\\n display: table-cell;\\n\"])));\nvar SettingsPane = function (props) {\n var settings = props.settings;\n var handleChange = function (partialSettings) { return function () {\n return props.onChangeSettings(__assign(__assign({}, props.settings), partialSettings));\n }; };\n var _a = React.useState(\"\"), link = _a[0], setLink = _a[1];\n var setChatLink = function (event) {\n event.preventDefault();\n if (link.length > 0) {\n window.send({ Action: { SetChatLink: link } });\n }\n else {\n window.send({ Action: { SetChatLink: null } });\n }\n setLink(\"\");\n };\n var editor = (React.createElement(\"div\", { style: { marginBottom: \"15px\" } },\n React.createElement(\"input\", { type: \"text\", style: { width: \"150px\" }, value: link, onChange: function (evt) {\n evt.preventDefault();\n setLink(evt.target.value);\n }, placeholder: \"https://... link to voice chat\" }),\n React.createElement(\"input\", { type: \"button\", onClick: setChatLink, value: \"set\" })));\n return (React.createElement(\"div\", { className: \"settings\" },\n React.createElement(\"div\", { style: { display: \"table\" } },\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"four-color mode\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"four-color-mode\", type: \"checkbox\", checked: settings.fourColor, onChange: handleChange({ fourColor: !settings.fourColor }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"dark mode\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"dark-mode\", type: \"checkbox\", checked: settings.darkMode, onChange: handleChange({ darkMode: !settings.darkMode }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"use SVG cards\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"svg-cards\", type: \"checkbox\", checked: settings.svgCards, onChange: handleChange({ svgCards: !settings.svgCards }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"always show card labels\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"show-card-labels\", type: \"checkbox\", checked: settings.showCardLabels, onChange: handleChange({\n showCardLabels: !settings.showCardLabels,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"show last trick\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"show-last-trick\", type: \"checkbox\", checked: settings.showLastTrick, onChange: handleChange({\n showLastTrick: !settings.showLastTrick,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"beep on turn\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"beep-on-turn\", type: \"checkbox\", checked: settings.beepOnTurn, onChange: handleChange({ beepOnTurn: !settings.beepOnTurn }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"reverse card order (in hand)\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"reverse-card-order\", type: \"checkbox\", checked: settings.reverseCardOrder, onChange: handleChange({\n reverseCardOrder: !settings.reverseCardOrder,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"separate cards by effective suit (in hand)\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"separate-cards-by-suit\", type: \"checkbox\", checked: settings.separateCardsBySuit, onChange: handleChange({\n separateCardsBySuit: !settings.separateCardsBySuit,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"disable suit highlights\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"disable-suit-highlights\", type: \"checkbox\", checked: settings.disableSuitHighlights, onChange: handleChange({\n disableSuitHighlights: !settings.disableSuitHighlights,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"unset auto-play if winner changes\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"unset-auto-play-when-winner-changes\", type: \"checkbox\", checked: settings.unsetAutoPlayWhenWinnerChanges, onChange: handleChange({\n unsetAutoPlayWhenWinnerChanges: !settings.unsetAutoPlayWhenWinnerChanges,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"show tricks in player order\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"show-trick-in-player-order\", type: \"checkbox\", checked: settings.showTrickInPlayerOrder, onChange: handleChange({\n showTrickInPlayerOrder: !settings.showTrickInPlayerOrder,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"suit color overrides\"),\n React.createElement(Cell, null, settings.svgCards ? (\"disabled with SVG cards\") : (React.createElement(SuitOverrides, { suitColors: settings.suitColorOverrides, setSuitColors: function (newOverrides) {\n return props.onChangeSettings(__assign(__assign({}, props.settings), { suitColorOverrides: newOverrides }));\n } })))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"play sound when drawing card\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"play-sound-when-drawing-card\", type: \"checkbox\", checked: settings.playDrawCardSound, onChange: handleChange({\n playDrawCardSound: !settings.playDrawCardSound,\n }) }))),\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"show debugging information\"),\n React.createElement(Cell, null,\n React.createElement(\"input\", { name: \"show-debug-info\", type: \"checkbox\", checked: settings.showDebugInfo, onChange: handleChange({\n showDebugInfo: !settings.showDebugInfo,\n }) })))),\n React.createElement(\"hr\", null),\n React.createElement(\"div\", { style: { display: \"table\" } },\n React.createElement(Row, null,\n React.createElement(LabelCell, null, \"chat link\"),\n React.createElement(Cell, null, editor)))));\n};\nvar SuitOverrides = function (props) {\n var suits = [\"β™’\", \"β™‘\", \"♀\", \"♧\", \"πŸƒŸ\", \"πŸƒ\"];\n var labels = [\"♦\", \"β™₯\", \"β™ \", \"♣\", \"LJ\", \"HJ\"];\n return (React.createElement(React.Fragment, null,\n suits.map(function (suit, idx) { return (React.createElement(SuitColorPicker, { key: suit, suit: suit, label: labels[idx], suitColor: props.suitColors[suit], setSuitColor: function (color) {\n var n = __assign({}, props.suitColors);\n n[suit] = color;\n props.setSuitColors(n);\n } })); }),\n React.createElement(\"button\", { className: \"normal\", onClick: function (evt) {\n evt.preventDefault();\n props.setSuitColors({});\n } }, \"reset\")));\n};\nvar SuitColorPicker = function (props) {\n var _a = React.useState(false), showPicker = _a[0], setShowPicker = _a[1];\n return (React.createElement(React.Fragment, null,\n React.createElement(\"span\", { className: props.suit, style: { color: props.suitColor, cursor: \"pointer\" }, onClick: function () { return setShowPicker(true); } }, props.label),\n showPicker ? (React.createElement(\"div\", { style: { position: \"absolute\" } },\n React.createElement(\"div\", { style: { position: \"fixed\", top: 0, left: 0, right: 0, bottom: 0 }, onClick: function () { return setShowPicker(false); } }),\n React.createElement(CompactPicker, { color: props.suitColor, onChangeComplete: function (c) { return props.setSuitColor(c.hex); } }))) : null));\n};\nexport default SettingsPane;\nvar templateObject_1, templateObject_2, templateObject_3;\n","var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport { cardToUnicodeSuit, unicodeToCard, } from \"./util/cardHelpers\";\nimport { SettingsContext } from \"./AppStateProvider\";\nvar InlineCardBase = styled.span(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n padding-left: 0.1em;\\n padding-right: 0.1em;\\n\"], [\"\\n padding-left: 0.1em;\\n padding-right: 0.1em;\\n\"])));\n// eslint-disable-next-line react/display-name\nvar Suit = function (className) { return function (props) {\n var settings = React.useContext(SettingsContext);\n return (React.createElement(InlineCardBase, __assign({ className: className }, props, { style: {\n color: settings.suitColorOverrides[className],\n } })));\n}; };\nvar Diamonds = Suit(\"β™’\");\nvar Hearts = Suit(\"β™‘\");\nvar Spades = Suit(\"♀\");\nvar Clubs = Suit(\"♧\");\nvar LittleJoker = Suit(\"πŸƒŸ\");\nvar BigJoker = Suit(\"πŸƒ\");\nvar Unknown = Suit(\"πŸ‚ \");\nvar suitComponent = function (suitCard) {\n switch (suitCard.suit) {\n case \"diamonds\":\n return Diamonds;\n case \"hearts\":\n return Hearts;\n case \"clubs\":\n return Clubs;\n case \"spades\":\n return Spades;\n }\n};\nvar InlineCard = function (props) {\n var card = unicodeToCard(props.card);\n switch (card.type) {\n case \"unknown\":\n return React.createElement(Unknown, null, \"\\uD83C\\uDCA0\");\n case \"big_joker\":\n return React.createElement(BigJoker, null, \"HJ\");\n case \"little_joker\":\n return React.createElement(LittleJoker, null, \"LJ\");\n case \"suit_card\":\n // eslint-disable-next-line no-case-declarations\n var Component = suitComponent(card);\n return (React.createElement(Component, null,\n card.rank,\n cardToUnicodeSuit(card)));\n }\n};\nexport default InlineCard;\nvar templateObject_1;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* tslint:disable:max-classes-per-file variable-name forin */\nimport * as React from \"react\";\nimport Header from \"./Header\";\nimport Players from \"./Players\";\nimport LabeledPlay from \"./LabeledPlay\";\nimport BeepButton from \"./BeepButton\";\nimport BidArea from \"./BidArea\";\nimport InlineCard from \"./InlineCard\";\nvar Draw = /** @class */ (function (_super) {\n __extends(Draw, _super);\n function Draw(props) {\n var _this = _super.call(this, props) || this;\n _this.could_draw = false;\n _this.timeout = null;\n _this.drawCardAudio = null;\n _this.state = {\n autodraw: true,\n pickUpKittyDelay: 7,\n };\n _this.drawCard = _this.drawCard.bind(_this);\n _this.pickUpKitty = _this.pickUpKitty.bind(_this);\n _this.revealCard = _this.revealCard.bind(_this);\n _this.onAutodrawClicked = _this.onAutodrawClicked.bind(_this);\n return _this;\n }\n Draw.prototype.drawCard = function () {\n var canDraw = this.props.state.propagated.players[this.props.state.position].name ===\n this.props.name;\n if (this.timeout !== null) {\n this.props.clearTimeout(this.timeout);\n this.timeout = null;\n }\n if (canDraw) {\n if (this.props.playDrawCardSound) {\n if (this.drawCardAudio === null) {\n this.drawCardAudio = new Audio(\"434472_dersuperanton_taking-card.mp3\");\n }\n // eslint-disable-next-line\n this.drawCardAudio.play();\n }\n window.send({ Action: \"DrawCard\" });\n }\n };\n Draw.prototype.pickUpKitty = function (evt) {\n evt.preventDefault();\n window.send({ Action: \"PickUpKitty\" });\n };\n Draw.prototype.revealCard = function (evt) {\n evt.preventDefault();\n window.send({ Action: \"RevealCard\" });\n };\n Draw.prototype.onAutodrawClicked = function (evt) {\n this.setState({\n autodraw: evt.target.checked,\n });\n if (evt.target.checked) {\n this.drawCard();\n }\n else {\n if (this.timeout !== null) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n };\n Draw.prototype.render = function () {\n var _this = this;\n var canDraw = this.props.state.propagated.players[this.props.state.position].name ===\n this.props.name && this.props.state.deck.length > 0;\n if (canDraw &&\n !this.could_draw &&\n this.timeout === null &&\n this.state.autodraw) {\n this.timeout = this.props.setTimeout(function () {\n _this.drawCard();\n }, 600 / this.props.state.num_decks); // shorter the timeout when there are more people playing\n }\n this.could_draw = canDraw;\n var next = this.props.state.propagated.players[this.props.state.position]\n .id;\n if (this.props.state.deck.length === 0 &&\n this.props.state.bids.length > 0) {\n next = this.props.state.bids[this.props.state.bids.length - 1].id;\n }\n var players = {};\n var playerId = -1;\n this.props.state.propagated.players.forEach(function (p) {\n players[p.id] = p;\n if (p.name === _this.props.name) {\n playerId = p.id;\n }\n });\n var landlord = this.props.state.propagated.landlord;\n var pickUpKittyDisabled = this.props.state.deck.length > 0 ||\n (this.props.state.bids.length === 0 &&\n this.props.state.autobid === null) ||\n (landlord !== null && landlord !== playerId) ||\n (landlord === null &&\n ((this.props.state.propagated\n .first_landlord_selection_policy === \"ByWinningBid\" &&\n this.props.state.bids[this.props.state.bids.length - 1]\n .id !== playerId) ||\n (this.props.state.propagated\n .first_landlord_selection_policy === \"ByFirstBid\" &&\n this.props.state.bids[0].id !== playerId)));\n if (!pickUpKittyDisabled &&\n this.state.pickUpKittyDelay > 0) {\n var newDelay_1 = this.state.pickUpKittyDelay - 1;\n this.props.setTimeout(function () {\n _this.setState({\n pickUpKittyDelay: newDelay_1\n });\n }, 1000);\n }\n return (React.createElement(\"div\", null,\n React.createElement(Header, { gameMode: this.props.state.game_mode, chatLink: this.props.state.propagated.chat_link }),\n React.createElement(Players, { players: this.props.state.propagated.players, observers: this.props.state.propagated.observers, landlord: this.props.state.propagated.landlord, next: next, name: this.props.name }),\n React.createElement(BidArea, { bids: this.props.state.bids, autobid: this.props.state.autobid, hands: this.props.state.hands, epoch: 0, name: this.props.name, landlord: this.props.state.propagated.landlord, players: this.props.state.propagated.players, bidPolicy: this.props.state.propagated.bid_policy, bidReinforcementPolicy: this.props.state.propagated.bid_reinforcement_policy, jokerBidPolicy: this.props.state.propagated.joker_bid_policy, numDecks: this.props.state.num_decks, header: React.createElement(React.Fragment, null,\n React.createElement(\"h2\", null,\n \"Bids (\",\n this.props.state.deck.length,\n \" cards remaining in the deck)\"),\n this.props.state.removed_cards.length > 0 ? (React.createElement(\"p\", null,\n \"Note:\",\n \" \",\n this.props.state.removed_cards.map(function (c) { return (React.createElement(InlineCard, { key: c, card: c })); }),\n \" \",\n \"have been removed from the deck\")) : null), prefixButtons: React.createElement(React.Fragment, null,\n React.createElement(\"button\", { onClick: function (evt) {\n evt.preventDefault();\n _this.drawCard();\n }, disabled: !canDraw }, \"Draw card\"),\n React.createElement(\"label\", null,\n \"auto-draw\",\n React.createElement(\"input\", { type: \"checkbox\", name: \"autodraw\", checked: this.state.autodraw, onChange: this.onAutodrawClicked }))), suffixButtons: React.createElement(React.Fragment, null,\n React.createElement(\"button\", { onClick: this.pickUpKitty, disabled: pickUpKittyDisabled || this.state.pickUpKittyDelay > 0 },\n \"Pick up cards from the bottom \",\n (!pickUpKittyDisabled && this.state.pickUpKittyDelay > 0) ? this.state.pickUpKittyDelay : \"\"),\n React.createElement(\"button\", { onClick: this.revealCard, disabled: this.props.state.propagated.landlord == null ||\n this.props.state.deck.length > 0 ||\n this.props.state.bids.length > 0 ||\n this.props.state.autobid !== null ||\n this.props.state.revealed_cards >=\n this.props.state.kitty.length }, \"Reveal card from the bottom\"),\n React.createElement(BeepButton, null)), bidTakeBacksEnabled: this.props.state.propagated.bid_takeback_policy ===\n \"AllowBidTakeback\" }),\n React.createElement(LabeledPlay, { className: \"kitty\", cards: this.props.state.kitty, label: \"\\u5E95\\u724C\" })));\n };\n return Draw;\n}(React.Component));\nexport default Draw;\n","import { combineState } from \"../State\";\nimport { booleanLocalStorageState, JSONLocalStorageState, } from \"../localStorageState\";\nvar fourColor = booleanLocalStorageState(\"four_color\");\nvar darkMode = booleanLocalStorageState(\"dark_mode\");\nvar svgCards = booleanLocalStorageState(\"svg_cards\");\nvar showCardLabels = booleanLocalStorageState(\"show_card_labels\");\nvar showLastTrick = booleanLocalStorageState(\"show_last_trick\");\nvar beepOnTurn = booleanLocalStorageState(\"beep_on_turn\");\nvar reverseCardOrder = booleanLocalStorageState(\"reverse_card_order\");\nvar unsetAutoPlayWhenWinnerChanges = booleanLocalStorageState(\"unset_autoplay_on_winner_change\");\nvar showTrickInPlayerOrder = booleanLocalStorageState(\"show_trick_in_player_order\");\nvar separateCardsBySuit = booleanLocalStorageState(\"separate_cards_by_suit\");\nvar disableSuitHighlights = booleanLocalStorageState(\"disable_suit_highlights\");\nvar suitColorOverrides = JSONLocalStorageState(\"suit_color_overrides\", {});\nvar playDrawCardSound = booleanLocalStorageState(\"play_draw_card_sound\");\nvar showDebugInfo = booleanLocalStorageState(\"show_debug_info\");\nvar settings = combineState({\n fourColor: fourColor,\n darkMode: darkMode,\n showCardLabels: showCardLabels,\n showLastTrick: showLastTrick,\n beepOnTurn: beepOnTurn,\n reverseCardOrder: reverseCardOrder,\n unsetAutoPlayWhenWinnerChanges: unsetAutoPlayWhenWinnerChanges,\n showTrickInPlayerOrder: showTrickInPlayerOrder,\n svgCards: svgCards,\n separateCardsBySuit: separateCardsBySuit,\n disableSuitHighlights: disableSuitHighlights,\n suitColorOverrides: suitColorOverrides,\n playDrawCardSound: playDrawCardSound,\n showDebugInfo: showDebugInfo,\n});\nexport default settings;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from \"react\";\nimport gameStatistics from \"./state/GameStatistics\";\nimport settings from \"./state/Settings\";\nimport { combineState, noPersistence } from \"./State\";\nimport { stringLocalStorageState, numberLocalStorageState, } from \"./localStorageState\";\nvar appState = combineState({\n settings: settings,\n gameStatistics: gameStatistics,\n connected: noPersistence(function () { return false; }),\n everConnected: noPersistence(function () { return false; }),\n roomName: noPersistence(function () { return window.location.hash.slice(1, 17); }),\n name: stringLocalStorageState(\"name\"),\n changeLogLastViewed: numberLocalStorageState(\"change_log_last_viewed\"),\n gameState: noPersistence(function () { return null; }),\n headerMessages: noPersistence(function () { return []; }),\n errors: noPersistence(function () { return []; }),\n messages: noPersistence(function () { return []; }),\n confetti: noPersistence(function () { return null; }),\n firstStartAt: noPersistence(function () { return 0; }),\n halfTimeBreakNow: noPersistence(function () { return false; }),\n});\nexport var AppStateContext = React.createContext({\n state: appState.loadDefault(),\n updateState: function () { },\n});\nexport var SettingsContext = React.createContext(appState.loadDefault().settings);\nexport var AppStateConsumer = AppStateContext.Consumer;\nvar AppStateProvider = function (props) {\n var _a = React.useState(function () {\n return appState.loadDefault();\n }), state = _a[0], setState = _a[1];\n var updateState = function (newState) {\n setState(function (s) {\n var combined = __assign(__assign({}, s), newState);\n appState.persist(state, combined);\n return combined;\n });\n };\n return (React.createElement(AppStateContext.Provider, { value: { state: state, updateState: updateState } },\n React.createElement(SettingsContext.Provider, { value: state.settings }, props.children)));\n};\nexport default AppStateProvider;\n","var memoize = function (f) {\n var state = { called: false };\n return function () {\n if (state.called) {\n return state.result;\n }\n else {\n state = { called: true, result: f() };\n return state.result;\n }\n };\n};\nexport default memoize;\n","import memoize from \"./memoize\";\nvar getContext = memoize(function () { return new window.AudioContext(); });\nvar beep = function (vol, freq, duration) {\n if (window.AudioContext !== undefined) {\n var beepContext = getContext();\n var v = beepContext.createOscillator();\n var u = beepContext.createGain();\n v.connect(u);\n v.frequency.value = freq;\n v.type = \"square\";\n u.connect(beepContext.destination);\n u.gain.value = vol * 0.01;\n v.start(beepContext.currentTime);\n v.stop(beepContext.currentTime + duration * 0.001);\n }\n else {\n alert(\"Your browser doesn't support the beep feature! Beep!\");\n }\n};\nexport default beep;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from \"react\";\nimport { AppStateContext } from \"./AppStateProvider\";\nimport websocketHandler from \"./websocketHandler\";\nimport { TimerContext } from \"./TimerProvider\";\nimport memoize from \"./memoize\";\nimport WasmContext from \"./WasmContext\";\nexport var WebsocketContext = React.createContext({\n send: function () { },\n});\nvar getFileReader = memoize(function () {\n var queue = [];\n var fr = new FileReader();\n fr.onload = function () {\n var next = queue.shift();\n next.handler(fr.result);\n if (queue.length > 0) {\n fr.readAsArrayBuffer(queue[0].blob);\n }\n };\n return {\n enqueue: function (blob, handler) {\n queue.push({ blob: blob, handler: handler });\n if (queue.length > 0 &&\n (fr.readyState === FileReader.EMPTY ||\n fr.readyState === FileReader.DONE)) {\n fr.readAsArrayBuffer(queue[0].blob);\n }\n },\n };\n});\nvar getBlobArrayBuffer = memoize(function () {\n var queue = [];\n var inflight = [];\n var onload = function (arr) {\n var next = queue.shift();\n inflight.shift();\n next.handler(arr);\n if (queue.length > 0) {\n inflight.push(0);\n queue[0].blob.arrayBuffer().then(onload, function (err) { return console.log(err); });\n }\n };\n return {\n enqueue: function (blob, handler) {\n queue.push({ blob: blob, handler: handler });\n if (inflight.length === 0 && queue.length > 0) {\n inflight.push(0);\n blob.arrayBuffer().then(onload, function (err) { return console.log(err); });\n }\n },\n };\n});\nvar WebsocketProvider = function (props) {\n var _a = React.useContext(AppStateContext), state = _a.state, updateState = _a.updateState;\n var decodeWireFormat = React.useContext(WasmContext).decodeWireFormat;\n var _b = React.useContext(TimerContext), setTimeout = _b.setTimeout, clearTimeout = _b.clearTimeout;\n var _c = React.useState(null), timer = _c[0], setTimer = _c[1];\n var _d = React.useState(null), websocket = _d[0], setWebsocket = _d[1];\n // Because state/updateState are passed in and change every time something\n // happens, we need to maintain a reference to these props to prevent stale\n // closures which may happen if state/updateState is changed between when an\n // event listener is registered and when it fires.\n // https://reactjs.org/docs/hooks-faq.html#why-am-i-seeing-stale-props-or-state-inside-my-function\n var stateRef = React.useRef(state);\n var updateStateRef = React.useRef(updateState);\n var timerRef = React.useRef(timer);\n var setTimerRef = React.useRef(setTimer);\n var setTimeoutRef = React.useRef(setTimeout);\n var clearTimeoutRef = React.useRef(clearTimeout);\n React.useEffect(function () {\n stateRef.current = state;\n updateStateRef.current = updateState;\n }, [state, updateState]);\n React.useEffect(function () {\n setTimeoutRef.current = setTimeout;\n clearTimeoutRef.current = clearTimeout;\n }, [setTimeout, clearTimeout]);\n React.useEffect(function () {\n timerRef.current = timer;\n setTimerRef.current = setTimer;\n }, [timer, setTimerRef]);\n React.useEffect(function () {\n var runtimeWebsocketHost = window._WEBSOCKET_HOST;\n var uri = runtimeWebsocketHost !== undefined && runtimeWebsocketHost !== null\n ? runtimeWebsocketHost\n : (location.protocol === \"https:\" ? \"wss://\" : \"ws://\") +\n location.host +\n location.pathname +\n (location.pathname.endsWith(\"/\") ? \"api\" : \"/api\");\n var ws = new WebSocket(uri);\n setWebsocket(ws);\n ws.addEventListener(\"open\", function () {\n return updateStateRef.current({ connected: true, everConnected: true });\n });\n ws.addEventListener(\"close\", function () {\n return updateStateRef.current({ connected: false });\n });\n ws.addEventListener(\"message\", function (event) {\n if (timerRef.current !== null) {\n clearTimeoutRef.current(timerRef.current);\n }\n setTimerRef.current(null);\n var f = function (buf) {\n var message = decodeWireFormat(new Uint8Array(buf));\n if (message === \"Kicked\") {\n ws.close();\n }\n else {\n updateStateRef.current(__assign({ connected: true, everConnected: true }, websocketHandler(stateRef.current, message, function (msg) {\n ws.send(JSON.stringify(msg));\n })));\n }\n };\n if (event.data.arrayBuffer !== undefined) {\n var b2a = getBlobArrayBuffer();\n b2a.enqueue(event.data, f);\n }\n else {\n var frs = getFileReader();\n frs.enqueue(event.data, f);\n }\n });\n return function () {\n if (timerRef.current !== null) {\n clearTimeoutRef.current(timerRef.current);\n }\n };\n }, []);\n var send = function (value) {\n if (timerRef.current !== null) {\n clearTimeoutRef.current(timerRef.current);\n }\n // We expect a response back from the server within 5 seconds. Otherwise,\n // we should assume we have lost our websocket connection.\n var localTimerRef = setTimeoutRef.current(function () {\n if (timerRef.current === localTimerRef) {\n updateStateRef.current({ connected: false });\n }\n }, 5000);\n setTimerRef.current(localTimerRef);\n websocket === null || websocket === void 0 ? void 0 : websocket.send(JSON.stringify(value));\n };\n // TODO(read this from consumers instead of globals)\n window.send = send;\n return (React.createElement(WebsocketContext.Provider, { value: { send: send } }, props.children));\n};\nexport default WebsocketProvider;\n","import * as React from \"react\";\nimport { AppStateContext } from \"./AppStateProvider\";\nimport Timeout from \"./Timeout\";\nvar Errors = function (props) {\n var updateState = React.useContext(AppStateContext).updateState;\n return (React.createElement(\"div\", { className: \"errors\", onClick: function () { return updateState({ errors: [] }); } },\n React.createElement(Timeout, { timeout: 5000, callback: function () { return updateState({ errors: [] }); } }),\n props.errors.map(function (err, idx) { return (React.createElement(\"p\", { key: idx },\n React.createElement(\"code\", null, err))); })));\n};\nexport default Errors;\n","import * as React from \"react\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nvar ReadyCheck = function () {\n var send = React.useContext(WebsocketContext).send;\n return (React.createElement(\"button\", { onClick: function () {\n return confirm(\"Are you ready to start the game?\") && send(\"ReadyCheck\");\n } }, \"Check if everyone is ready!\"));\n};\nexport default ReadyCheck;\n","import * as React from \"react\";\nvar LandlordSelector = function (props) {\n var handleChange = function (e) {\n if (e.target.value === \"\") {\n props.onChange(null);\n }\n else {\n props.onChange(parseInt(e.target.value, 10));\n }\n };\n return (React.createElement(\"div\", { className: \"landlord-picker\" },\n React.createElement(\"label\", null,\n \"Current leader:\",\n \" \",\n React.createElement(\"select\", { value: props.landlordId === null ? \"\" : props.landlordId, onChange: handleChange },\n React.createElement(\"option\", { value: \"\" }, \"determined by the bid\"),\n props.players.map(function (player) { return (React.createElement(\"option\", { value: player.id, key: player.id }, player.name)); })))));\n};\nexport default LandlordSelector;\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nvar sum = function (array) { return array.reduce(function (a, b) { return a + b; }, 0); };\nvar identity = function (l, r) { return l === r; };\n// Subtracts one array from another. Works with arrays with duplicate values,\n// and throws an exception if the smaller array is not completely contained in\n// the larger one.\nvar minus = function (large, small, equality) {\n if (equality === void 0) { equality = identity; }\n var result = __spreadArrays(large);\n small.forEach(function (valueToRemove) {\n var index = result.findIndex(function (t) { return equality(t, valueToRemove); });\n if (index >= 0) {\n result.splice(index, 1);\n }\n });\n return result;\n};\nvar mapObject = function (array, mapper) {\n var result = {};\n array.forEach(function (t) {\n var _a = mapper(t), key = _a[0], value = _a[1];\n result[key] = value;\n });\n return result;\n};\nvar range = function (count, fn) {\n return Array(count)\n .fill(undefined)\n .map(function (_, idx) { return fn(idx); });\n};\nvar shuffled = function (array) {\n return array\n .map(function (a) { return ({ sort: Math.random(), value: a }); })\n .sort(function (a, b) { return a.sort - b.sort; })\n .map(function (a) { return a.value; });\n};\nexport default {\n mapObject: mapObject,\n minus: minus,\n range: range,\n sum: sum,\n shuffled: shuffled,\n};\n","import * as React from \"react\";\nimport ArrayUtils from \"./util/array\";\nvar NumDecksSelector = function (props) {\n var handleChange = function (e) {\n var newNumDecks = e.target.value === \"\" ? null : parseInt(e.target.value, 10);\n props.onChange(newNumDecks);\n };\n return (React.createElement(\"div\", { className: \"num-decks-picker\" },\n React.createElement(\"label\", null,\n \"Number of decks:\",\n \" \",\n React.createElement(\"select\", { value: props.numDecks === null ? \"\" : props.numDecks, onChange: handleChange },\n React.createElement(\"option\", { value: \"\" }, \"default\"),\n ArrayUtils.range(props.numPlayers, function (idx) {\n var val = idx + 1;\n return (React.createElement(\"option\", { value: val, key: idx }, val));\n })))));\n};\nexport default NumDecksSelector;\n","import * as React from \"react\";\nimport ArrayUtils from \"./util/array\";\nimport WasmContext from \"./WasmContext\";\nvar KittySizeSelector = function (props) {\n var computeDeckLen = React.useContext(WasmContext).computeDeckLen;\n var handleChange = function (e) {\n var newKittySize = e.target.value === \"\" ? null : parseInt(e.target.value, 10);\n props.onChange(newKittySize);\n };\n var deckLen = computeDeckLen(props.decks);\n var kittyOffset = deckLen % props.numPlayers;\n var defaultOptions = [\n kittyOffset,\n kittyOffset + props.numPlayers,\n kittyOffset + 2 * props.numPlayers,\n kittyOffset + 3 * props.numPlayers,\n kittyOffset + 4 * props.numPlayers,\n ];\n var potentialOptions = ArrayUtils.range(kittyOffset + 4 * props.numPlayers, function (v) { return v; });\n var options = potentialOptions.filter(function (v) {\n return !defaultOptions.includes(v) &&\n v < deckLen - props.numPlayers &&\n // Note: this isn't quite right, but it seems fine for the common case of no short decks.\n (deckLen - v) % props.numPlayers <= props.decks.length * 4;\n });\n return (React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Number of cards in the bottom:\",\n \" \",\n React.createElement(\"select\", { value: props.kittySize !== undefined && props.kittySize !== null\n ? props.kittySize\n : \"\", onChange: handleChange },\n React.createElement(\"optgroup\", { label: \"Standard\" },\n React.createElement(\"option\", { value: \"\" }, \"default\"),\n defaultOptions\n .filter(function (v) { return v < deckLen - props.numPlayers; })\n .map(function (v) { return (React.createElement(\"option\", { value: v, key: v },\n v,\n \" card\",\n v === 1 ? \"\" : \"s\")); })),\n React.createElement(\"optgroup\", { label: \"Requires removing cards from the deck\" }, options.map(function (v) { return (React.createElement(\"option\", { value: v, key: v },\n v,\n \" card\",\n v === 1 ? \"\" : \"s\")); }))))));\n};\nexport default KittySizeSelector;\n","import * as React from \"react\";\n// prettier-ignore\nvar allRanks = [\n '2', '3', '4', '5', '6', '7', '8',\n '9', '10', 'J', 'Q', 'K', 'A'\n];\nvar RankSelector = function (props) {\n var handleChange = function (e) {\n if (e.target.value !== \"\") {\n props.onChangeRank(e.target.value);\n }\n };\n return (React.createElement(\"div\", { className: \"rank-picker\" },\n React.createElement(\"label\", null,\n \"Your rank:\",\n \" \",\n React.createElement(\"select\", { value: props.rank, onChange: handleChange }, allRanks.map(function (rank) { return (React.createElement(\"option\", { value: rank, key: rank }, rank)); })))));\n};\nexport default RankSelector;\n","import * as React from \"react\";\nvar Kicker = function (props) {\n var _a = React.useState(null), selection = _a[0], setSelection = _a[1];\n var handleChange = function (e) {\n setSelection(e.target.value === \"\" ? null : parseInt(e.target.value, 10));\n };\n return (React.createElement(\"div\", { className: \"kicker\" },\n React.createElement(\"label\", null,\n \"Kick player:\",\n \" \",\n React.createElement(\"select\", { value: selection === null ? \"\" : selection, onChange: handleChange },\n React.createElement(\"option\", { value: \"\" }),\n props.players.map(function (player) { return (React.createElement(\"option\", { value: player.id, key: player.id }, player.name)); })),\n React.createElement(\"button\", { onClick: function () { return props.onKick(selection); }, disabled: selection === null }, \"Kick\"))));\n};\nexport default Kicker;\n","import * as React from \"react\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nimport ArrayUtils from \"./util/array\";\nexport var RandomizePlayersButton = function (props) {\n var players = props.players;\n var send = React.useContext(WebsocketContext).send;\n var randomize = function () {\n send({\n Action: { ReorderPlayers: ArrayUtils.shuffled(players.map(function (p) { return p.id; })) },\n });\n };\n return React.createElement(\"button\", { onClick: randomize }, props.children);\n};\n","import * as React from \"react\";\nvar GameMode = function (props) {\n var rules = (React.createElement(\"a\", { href: \"rules\", target: \"_blank\" }, \"rules\"));\n if (props.gameMode === \"Tractor\") {\n return (React.createElement(\"span\", null,\n \"\\u5347\\u7EA7 / \",\n React.createElement(\"span\", { className: \"red\" }, \"Tractor\"),\n \" (\",\n rules,\n \")\"));\n }\n else {\n return (React.createElement(\"span\", null,\n \"\\u627E\\u670B\\u53CB / \",\n React.createElement(\"span\", { className: \"red\" }, \"Finding Friends\"),\n \" (\",\n rules,\n \")\"));\n }\n};\nexport default GameMode;\n","import * as React from \"react\";\nvar BarChart = function (_a) {\n var _b = _a.width, width = _b === void 0 ? \"100%\" : _b;\n return (React.createElement(\"svg\", { focusable: \"false\", role: \"img\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 16 16\", fill: \"currentColor\", width: width },\n React.createElement(\"rect\", { width: \"4\", height: \"5\", x: \"1\", y: \"10\", rx: \"1\" }),\n React.createElement(\"rect\", { width: \"4\", height: \"9\", x: \"6\", y: \"6\", rx: \"1\" }),\n React.createElement(\"rect\", { width: \"4\", height: \"14\", x: \"11\", y: \"1\", rx: \"1\" })));\n};\nexport default BarChart;\n","import * as React from \"react\";\nimport * as ReactModal from \"react-modal\";\nimport IconButton from \"./IconButton\";\nimport BarChart from \"./icons/BarChart\";\nimport GameStatisticsPane from \"./GameStatisticsPane\";\nimport { AppStateContext } from \"./AppStateProvider\";\nvar contentStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n};\nvar GameStatisticsButton = function () {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var state = React.useContext(AppStateContext).state;\n return (React.createElement(React.Fragment, null,\n React.createElement(IconButton, { style: { paddingLeft: \"10px\" }, onClick: function () { return setModalOpen(true); } },\n React.createElement(BarChart, { width: \"2em\" })),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () { return setModalOpen(false); }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } },\n React.createElement(GameStatisticsPane, { gameStatistics: state.gameStatistics }))));\n};\nexport default GameStatisticsButton;\n","import * as React from \"react\";\nvar Gear = function (_a) {\n var _b = _a.width, width = _b === void 0 ? \"100%\" : _b;\n return (React.createElement(\"svg\", { focusable: \"false\", role: \"img\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\", width: width },\n React.createElement(\"path\", { fill: \"currentcolor\", d: \"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\" })));\n};\nexport default Gear;\n","import * as React from \"react\";\nimport * as ReactModal from \"react-modal\";\nimport IconButton from \"./IconButton\";\nimport Gear from \"./icons/Gear\";\nimport SettingsPane from \"./SettingsPane\";\nimport { AppStateContext } from \"./AppStateProvider\";\nvar contentStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n};\nvar SettingsButton = function () {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var _b = React.useContext(AppStateContext), state = _b.state, updateState = _b.updateState;\n return (React.createElement(React.Fragment, null,\n React.createElement(IconButton, { onClick: function () { return setModalOpen(true); } },\n React.createElement(Gear, { width: \"2em\" })),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () { return setModalOpen(false); }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } },\n React.createElement(SettingsPane, { settings: state.settings, onChangeSettings: function (settings) { return updateState({ settings: settings }); } }))));\n};\nexport default SettingsButton;\n","import * as React from \"react\";\nimport GameMode from \"./GameMode\";\nimport GameStatisticsButton from \"./GameStatisticsButton\";\nimport SettingsButton from \"./SettingsButton\";\nvar Header = function (props) { return (React.createElement(\"div\", null,\n React.createElement(\"h1\", null,\n React.createElement(GameMode, { gameMode: props.gameMode }),\n \"\\u00A0\",\n React.createElement(SettingsButton, null),\n React.createElement(GameStatisticsButton, null)),\n props.chatLink !== undefined && props.chatLink !== null ? (React.createElement(\"p\", null,\n \"Join the chat at\",\n \" \",\n React.createElement(\"a\", { href: props.chatLink, target: \"_blank\", rel: \"noreferrer\" }, props.chatLink))) : null)); };\nexport default Header;\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport * as React from \"react\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\n// eslint-disable-next-line react/display-name\nvar MovePlayerButton = function (relative, children) { return function (props) {\n var players = props.players, player = props.player;\n var send = React.useContext(WebsocketContext).send;\n var movePlayer = function () {\n var index = players.findIndex(function (p) { return p === player; });\n var newIndex = (index + relative) % players.length;\n var withoutPlayer = players.filter(function (p) { return p !== player; });\n var newPlayers = __spreadArrays(withoutPlayer.slice(0, newIndex), [\n player\n ], withoutPlayer.slice(newIndex, withoutPlayer.length));\n send({ Action: { ReorderPlayers: newPlayers.map(function (p) { return p.id; }) } });\n };\n return React.createElement(\"button\", { onClick: movePlayer }, children);\n}; };\nexport var MovePlayerLeft = MovePlayerButton(-1, \"<\");\nexport var MovePlayerRight = MovePlayerButton(1, \">\");\n","import * as React from \"react\";\nimport classNames from \"classnames\";\nimport { MovePlayerLeft, MovePlayerRight } from \"./MovePlayerButton\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nvar Players = function (props) {\n var players = props.players, observers = props.observers, landlord = props.landlord, \n // eslint-disable-next-line @typescript-eslint/naming-convention\n landlords_team = props.landlords_team, movable = props.movable, next = props.next, name = props.name;\n var send = React.useContext(WebsocketContext).send;\n var makeDescriptor = function (p) {\n if (p.metalevel <= 1) {\n return [p.name + \" (rank \" + p.level + \")\"];\n }\n else {\n return [\n p.name + \" (rank \" + p.level,\n React.createElement(\"sup\", { key: \"meta-\" + p.id }, p.metalevel),\n \")\",\n ];\n }\n };\n return (React.createElement(\"table\", { className: \"players\" },\n React.createElement(\"tbody\", null,\n React.createElement(\"tr\", null,\n players.map(function (player) {\n var className = classNames(\"player\", {\n landlord: player.id === landlord || (landlords_team === null || landlords_team === void 0 ? void 0 : landlords_team.includes(player.id)),\n movable: movable,\n next: player.id === next,\n });\n var descriptor = makeDescriptor(player);\n if (player.id === landlord) {\n descriptor.push(\" (当庄)\");\n }\n if (player.name === name) {\n descriptor.push(\" (You!)\");\n }\n return (React.createElement(\"td\", { key: player.id, className: className },\n descriptor,\n movable && (React.createElement(\"span\", { style: {\n display: \"block\",\n marginTop: \"6px\",\n textAlign: \"center\",\n width: \"100%\",\n } },\n React.createElement(MovePlayerLeft, { players: players, player: player }),\n React.createElement(\"span\", { style: { cursor: \"pointer\" }, onClick: function (_) {\n send({ Action: { MakeObserver: player.id } });\n } }, \"\\u2714\\uFE0F\"),\n React.createElement(MovePlayerRight, { players: players, player: player })))));\n }),\n observers.map(function (player) {\n var className = classNames(\"player observer\", { movable: movable });\n var descriptor = makeDescriptor(player);\n if (player.name === name) {\n descriptor.push(\" (You!)\");\n }\n return (React.createElement(\"td\", { key: player.id, className: className },\n React.createElement(\"span\", { style: { textDecoration: \"line-through\" } }, descriptor),\n movable && (React.createElement(\"span\", { style: {\n display: \"block\",\n marginTop: \"6px\",\n textAlign: \"center\",\n width: \"100%\",\n } },\n React.createElement(\"span\", { style: { cursor: \"pointer\" }, onClick: function (_) {\n send({ Action: { MakePlayer: player.id } });\n } }, \"\\uD83D\\uDCA4\")))));\n })))));\n};\nexport default Players;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from \"react\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nimport { WasmContext } from \"./WasmContext\";\nexport var GameScoringSettings = function (props) {\n var send = React.useContext(WebsocketContext).send;\n var explainScoring = React.useContext(WasmContext).explainScoring;\n var _a = React.useState(null), highlighted = _a[0], setHighlighted = _a[1];\n var updateSettings = function (updates) {\n send({\n Action: {\n SetGameScoringParameters: __assign(__assign({}, props.params), updates),\n },\n });\n };\n var bonusEnabled = props.params.bonus_level_policy === \"BonusLevelForSmallerLandlordTeam\";\n var _b = explainScoring({\n params: props.params,\n smaller_landlord_team_size: false,\n decks: props.decks,\n }), scoreTransitions = _b.results, stepSize = _b.step_size, totalPoints = _b.total_points;\n var bonusScoreTransitions = bonusEnabled\n ? explainScoring({\n params: props.params,\n smaller_landlord_team_size: true,\n decks: props.decks,\n }).results\n : scoreTransitions;\n var scoreSegments = [];\n var maxPts = 0;\n var maxLandlordDelta = 0;\n var maxNonLandlordDelta = 0;\n for (var i = 1; i < scoreTransitions.length; i++) {\n var span = Math.max(scoreTransitions[i].point_threshold -\n scoreTransitions[i - 1].point_threshold, 10);\n var segment = scoreTransitions[i - 1];\n maxLandlordDelta = Math.max(segment.results.landlord_delta, maxLandlordDelta);\n maxNonLandlordDelta = Math.max(segment.results.non_landlord_delta, maxNonLandlordDelta);\n scoreSegments.push({\n span: span,\n segment: segment,\n bonusSegment: bonusScoreTransitions[i - 1].results.landlord_bonus\n ? bonusScoreTransitions[i - 1]\n : null,\n });\n maxPts += span;\n }\n var last = scoreTransitions.length - 1;\n scoreSegments.push({\n span: 5 * props.decks.length,\n segment: scoreTransitions[last],\n bonusSegment: bonusScoreTransitions[last].results.landlord_bonus\n ? bonusScoreTransitions[last]\n : null,\n });\n maxPts += 5 * props.decks.length;\n maxNonLandlordDelta = Math.max(scoreTransitions[last].results.non_landlord_delta, maxNonLandlordDelta);\n maxLandlordDelta = Math.max(scoreTransitions[last].results.landlord_delta, maxLandlordDelta);\n var text = function (idx) {\n var txt = \"Attacking team wins, but doesn't level up.\";\n var segment = scoreSegments[idx];\n if (segment.segment.results.landlord_won) {\n txt = \"Defending team wins, and goes up \" + segment.segment.results.landlord_delta + \" level\" + (segment.segment.results.landlord_delta === 1 ? \"\" : \"s\") + \".\";\n if (segment.bonusSegment !== null) {\n txt += \" If the team is unexpectedly small, they go up \" + segment.bonusSegment.results.landlord_delta + \" level\" + (segment.bonusSegment.results.landlord_delta === 1 ? \"\" : \"s\") + \".\";\n }\n }\n else if (segment.segment.results.non_landlord_delta > 0) {\n txt = \"Attacking team wins, and goes up \" + segment.segment.results.non_landlord_delta + \" level\" + (segment.segment.results.non_landlord_delta === 1 ? \"\" : \"s\") + \".\";\n }\n return React.createElement(React.Fragment, null, txt);\n };\n var validStepSizes = [];\n for (var curStepSize = 0; curStepSize <= totalPoints / 3; curStepSize += 5 * props.decks.length) {\n if (curStepSize === 0) {\n continue;\n }\n if (totalPoints % curStepSize === 0) {\n validStepSizes.push(\"\" + curStepSize);\n }\n }\n var maxSteps = Math.floor(totalPoints / stepSize);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", null,\n React.createElement(\"div\", { style: { width: \"95%\", padding: \"5px 0 5px 0\" } },\n scoreSegments.map(function (segment, idx) {\n var frac = segment.span / maxPts;\n var bg = \"rgb(255, 255, 0)\";\n if (segment.segment.results.landlord_won) {\n var f = segment.segment.results.landlord_delta / maxLandlordDelta;\n bg = \"rgba(0, 255, 0, \" + f + \")\";\n }\n else if (segment.segment.results.non_landlord_delta > 0) {\n var f = segment.segment.results.non_landlord_delta /\n maxNonLandlordDelta;\n bg = \"rgba(255, 0, 0, \" + f + \")\";\n }\n return (React.createElement(\"div\", { key: idx, onMouseEnter: function (_) {\n setHighlighted(idx);\n }, onMouseLeave: function (_) {\n setHighlighted(null);\n }, style: {\n width: 100 * frac + \"%\",\n background: bg,\n padding: \"5px 0 5px 0\",\n display: \"inline-block\",\n cursor: \"pointer\",\n } }, segment.segment.point_threshold));\n }),\n highlighted !== null ? (React.createElement(\"p\", null,\n \" \",\n text(highlighted))) : (React.createElement(\"p\", null, \"Hover over the scores above for more details.\"))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Step size: \",\n stepSize,\n \" points\")),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null, \"Base step size: \"),\n React.createElement(\"select\", { value: \"\" + props.params.step_size_per_deck * props.decks.length, onChange: function (evt) {\n evt.preventDefault();\n var perDeck = parseInt(evt.target.value, 10) / props.decks.length;\n updateSettings({\n step_size_per_deck: perDeck,\n });\n } }, validStepSizes.map(function (ss, idx) { return (React.createElement(\"option\", { key: idx }, ss)); })),\n \" \",\n \"(default: \",\n 20 * props.decks.length,\n \")\"),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Adjustment to step size for \",\n props.decks.length,\n \" decks:\",\n \" \"),\n React.createElement(\"select\", { value: props.params.step_adjustments[props.decks.length] !== undefined\n ? props.params.step_adjustments[props.decks.length]\n : \"none\", onChange: function (evt) {\n var _a;\n evt.preventDefault();\n if (evt.target.value === \"none\") {\n var _b = props.params.step_adjustments, _c = props.decks.length, _ = _b[_c], adjustments = __rest(_b, [typeof _c === \"symbol\" ? _c : _c + \"\"]);\n updateSettings({ step_adjustments: adjustments });\n }\n else {\n var adjustments = __assign(__assign({}, props.params.step_adjustments), (_a = {}, _a[props.decks.length] = parseInt(evt.target.value, 10), _a));\n updateSettings({ step_adjustments: adjustments });\n }\n } },\n React.createElement(\"option\", { key: \"none\" }, \"none\"),\n Array((props.params.step_size_per_deck * props.decks.length) / 5)\n .fill(undefined)\n .map(function (_, idx) { return (React.createElement(\"option\", { key: idx }, (idx + 1) * 5)); })),\n \" \",\n \"(default: none)\"),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null, \"Number of steps where nobody gains a level: \"),\n React.createElement(\"select\", { value: \"\" + props.params.deadzone_size, onChange: function (evt) {\n evt.preventDefault();\n var deadzoneSize = parseInt(evt.target.value, 10);\n updateSettings({\n deadzone_size: deadzoneSize,\n });\n } }, Array(Math.max(maxSteps, props.params.deadzone_size))\n .fill(undefined)\n .map(function (_, idx) { return (React.createElement(\"option\", { key: idx }, idx)); })),\n \" \",\n \"(default: 1)\"),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null, \"Number of steps for the attacking team to win: \"),\n React.createElement(\"select\", { value: \"\" + props.params.num_steps_to_non_landlord_turnover, onChange: function (evt) {\n evt.preventDefault();\n var steps = parseInt(evt.target.value, 10);\n updateSettings({\n num_steps_to_non_landlord_turnover: steps,\n });\n } }, Array(Math.max(maxSteps, props.params.num_steps_to_non_landlord_turnover))\n .fill(undefined)\n .map(function (_, idx) { return (React.createElement(\"option\", { key: idx + 1 }, idx + 1)); })),\n \" \",\n \"(default: 2)\"),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null, \"Grant a bonus level for unexpectedly small team\"),\n \" \",\n React.createElement(\"input\", { id: \"small-team-bonus\", type: \"checkbox\", onChange: function (evt) {\n evt.preventDefault();\n updateSettings({\n bonus_level_policy: evt.target.checked\n ? \"BonusLevelForSmallerLandlordTeam\"\n : \"NoBonusLevel\",\n });\n }, checked: bonusEnabled })))));\n};\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport * as React from \"react\";\nimport ReactTooltip from \"react-tooltip\";\nimport * as ReactModal from \"react-modal\";\nimport ReadyCheck from \"./ReadyCheck\";\nimport LandlordSelector from \"./LandlordSelector\";\nimport NumDecksSelector from \"./NumDecksSelector\";\nimport KittySizeSelector from \"./KittySizeSelector\";\nimport RankSelector from \"./RankSelector\";\nimport Kicker from \"./Kicker\";\nimport ArrayUtils from \"./util/array\";\nimport { RandomizePlayersButton } from \"./RandomizePlayersButton\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nimport Header from \"./Header\";\nimport Players from \"./Players\";\nimport { GameScoringSettings } from \"./ScoringSettings\";\nimport { AppStateContext } from \"./AppStateProvider\";\nvar Picker = React.lazy(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, import(\"emoji-picker-react\")];\n case 1: return [2 /*return*/, _a.sent()];\n }\n}); }); });\nvar MilliSecondsInOneHour = 3600000;\nvar contentStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n};\nvar DifficultySettings = function (props) {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var s = (React.createElement(React.Fragment, null,\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Friend selection restriction:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.friend_selection_policy, onChange: props.setFriendSelectionPolicy },\n React.createElement(\"option\", { value: \"Unrestricted\" }, \"Non-trump cards\"),\n React.createElement(\"option\", { value: \"TrumpsIncluded\" }, \"All cards, including trumps\"),\n React.createElement(\"option\", { value: \"HighestCardNotAllowed\" }, \"Non-trump cards, except the highest\"),\n React.createElement(\"option\", { value: \"PointCardNotAllowed\" }, \"Non-trump, non-point cards (except K when playing A)\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Multiple joining policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.multiple_join_policy, onChange: props.setMultipleJoinPolicy },\n React.createElement(\"option\", { value: \"Unrestricted\" }, \"Players can join the defending team multiple times.\"),\n React.createElement(\"option\", { value: \"NoDoubleJoin\" }, \"Each player can only join the defending team once.\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Rank advancement policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.advancement_policy, onChange: props.setAdvancementPolicy },\n React.createElement(\"option\", { value: \"Unrestricted\" }, \"A must be defended\"),\n React.createElement(\"option\", { value: \"FullyUnrestricted\" }, \"Unrestricted\"),\n React.createElement(\"option\", { value: \"DefendPoints\" }, \"Points (5, 10, K) and A must be defended\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Point visibility:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.hide_landlord_points ? \"hide\" : \"show\", onChange: props.setHideLandlordsPoints },\n React.createElement(\"option\", { value: \"show\" }, \"Show all players' points\"),\n React.createElement(\"option\", { value: \"hide\" }, \"Hide defending team's points\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Played card visibility (in chat):\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.hide_played_cards ? \"hide\" : \"show\", onChange: props.setHidePlayedCards },\n React.createElement(\"option\", { value: \"show\" }, \"Show played cards in chat\"),\n React.createElement(\"option\", { value: \"hide\" }, \"Hide played cards in chat\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Penalty for points left in the bottom:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.kitty_penalty, onChange: props.setKittyPenalty },\n React.createElement(\"option\", { value: \"Times\" }, \"Twice the size of the last trick\"),\n React.createElement(\"option\", { value: \"Power\" }, \"Two to the power of the size of the last trick\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Penalty for incorrect throws:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.throw_penalty, onChange: props.setThrowPenalty },\n React.createElement(\"option\", { value: \"None\" }, \"No penalty\"),\n React.createElement(\"option\", { value: \"TenPointsPerAttempt\" }, \"Ten points per bad throw\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Play takeback:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.play_takeback_policy, onChange: props.setPlayTakebackPolicy },\n React.createElement(\"option\", { value: \"AllowPlayTakeback\" }, \"Allow taking back plays\"),\n React.createElement(\"option\", { value: \"NoPlayTakeback\" }, \"Disallow taking back plays\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Bid takeback:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.bid_takeback_policy, onChange: props.setBidTakebackPolicy },\n React.createElement(\"option\", { value: \"AllowBidTakeback\" }, \"Allow bid takeback\"),\n React.createElement(\"option\", { value: \"NoBidTakeback\" }, \"No bid takeback\"))))));\n return (React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Difficulty settings:\",\n \" \",\n React.createElement(\"button\", { className: \"normal\", onClick: function (evt) {\n evt.preventDefault();\n setModalOpen(true);\n } }, \"Open\"),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () { return setModalOpen(false); }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } }, s))));\n};\nvar DeckSettings = function (props) {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var isNotDefault = function (d) {\n return !(d.min === \"2\" && !d.exclude_big_joker && !d.exclude_small_joker);\n };\n var onChange = function (decks) {\n // exclude the decks that are the same as default\n var filtered = decks.filter(function (d) { return isNotDefault(d); });\n props.setSpecialDecks(filtered);\n };\n var setDeckAtIndex = function (deck, index) {\n var newDecks = __spreadArrays(props.decks);\n newDecks[index] = deck;\n onChange(newDecks);\n };\n var numbers = [\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"10\",\n \"J\",\n \"Q\",\n \"K\",\n \"A\",\n ];\n var s = (React.createElement(React.Fragment, null,\n props.decks.map(function (d, i) { return (React.createElement(\"div\", { key: i, style: {\n display: \"inline-block\",\n border: \"1px solid #000\",\n padding: \"5px\",\n margin: \"5px\",\n } },\n \"Deck \",\n i + 1,\n isNotDefault(d) ? \" (modified)\" : \" (standard)\",\n React.createElement(\"form\", null,\n React.createElement(\"label\", { style: { display: \"block\" } },\n \"Include HJ (\\u5927\\u738B)\",\n \" \",\n React.createElement(\"input\", { type: \"checkbox\", checked: !d.exclude_big_joker, onChange: function (evt) {\n return setDeckAtIndex(__assign(__assign({}, d), { exclude_big_joker: !evt.target.checked }), i);\n } })),\n React.createElement(\"label\", { style: { display: \"block\" } },\n \"Include LJ (\\u5C0F\\u738B)\",\n \" \",\n React.createElement(\"input\", { type: \"checkbox\", checked: !d.exclude_small_joker, onChange: function (evt) {\n return setDeckAtIndex(__assign(__assign({}, d), { exclude_small_joker: !evt.target.checked }), i);\n } })),\n React.createElement(\"label\", null,\n \"Minimum card:\",\n \" \",\n React.createElement(\"select\", { value: d.min, onChange: function (evt) {\n return setDeckAtIndex(__assign(__assign({}, d), { min: evt.target.value }), i);\n } }, numbers.map(function (n) { return (React.createElement(\"option\", { key: n, value: n }, n)); })))))); }),\n React.createElement(\"pre\", null, JSON.stringify(props.decks, null, 2))));\n return (React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"More deck customization:\",\n \" \",\n React.createElement(\"button\", { className: \"normal\", onClick: function (evt) {\n evt.preventDefault();\n setModalOpen(true);\n } }, \"Open\"),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () { return setModalOpen(false); }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } }, s))));\n};\nvar ScoringSettings = function (props) {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n return (React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Scoring settings:\",\n \" \",\n React.createElement(\"button\", { className: \"normal\", onClick: function (evt) {\n evt.preventDefault();\n setModalOpen(true);\n } }, \"Open\"),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () { return setModalOpen(false); }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } },\n React.createElement(GameScoringSettings, { params: props.state.propagated.game_scoring_parameters, decks: props.decks })))));\n};\nvar UncommonSettings = function (props) {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var s = (React.createElement(React.Fragment, null,\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Game shadowing policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.game_shadowing_policy, onChange: props.setGameShadowingPolicy },\n React.createElement(\"option\", { value: \"AllowMultipleSessions\" }, \"Allow players to be shadowed by joining with the same name\"),\n React.createElement(\"option\", { value: \"SingleSessionOnly\" }, \"Do not allow players to be shadowed\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Game start policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.game_start_policy, onChange: props.setGameStartPolicy },\n React.createElement(\"option\", { value: \"AllowAnyPlayer\" }, \"Allow any player to start a game\"),\n React.createElement(\"option\", { value: \"AllowLandlordOnly\" }, \"Allow only landlord to start a game\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Landlord selection from bid:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.first_landlord_selection_policy, onChange: props.setFirstLandlordSelectionPolicy },\n React.createElement(\"option\", { value: \"ByWinningBid\" }, \"Winning bid decides both landlord and trump\"),\n React.createElement(\"option\", { value: \"ByFirstBid\" }, \"First bid decides landlord, winning bid decides trump\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Trump policy for cards revealed from the bottom:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.kitty_bid_policy, onChange: props.setKittyBidPolicy },\n React.createElement(\"option\", { value: \"FirstCard\" }, \"First card revealed\"),\n React.createElement(\"option\", { value: \"FirstCardOfLevelOrHighest\" }, \"First card revealed of the appropriate rank\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Bid policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.bid_policy, onChange: props.setBidPolicy },\n React.createElement(\"option\", { value: \"JokerOrGreaterLength\" }, \"Joker bids to outbid non-joker bids with the same number of cards\"),\n React.createElement(\"option\", { value: \"GreaterLength\" }, \"All bids must have more cards than the previous bids\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Bid reinforcement policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.bid_reinforcement_policy, onChange: props.setBidReinforcementPolicy },\n React.createElement(\"option\", { value: \"ReinforceWhileWinning\" }, \"The current winning bid can be reinforced\"),\n React.createElement(\"option\", { value: \"ReinforceWhileEquivalent\" }, \"A bid can be reinforced after it is overturned\"),\n React.createElement(\"option\", { value: \"OverturnOrReinforceWhileWinning\" }, \"The current winning bid can be overturned by the same bidder\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Joker bid policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.joker_bid_policy, onChange: props.setJokerBidPolicy },\n React.createElement(\"option\", { value: \"NotAllowed\" }, \"Do not allow jokers bid\"),\n React.createElement(\"option\", { value: \"BothTwoOrMore\" }, \"At least two jokers (or number of decks) to bid no trump\"),\n React.createElement(\"option\", { value: \"BothNumDecks\" }, \"All the low or high jokers to bid no trump\"),\n React.createElement(\"option\", { value: \"LJNumDecksHJNumDecksLessOne\" }, \"All the low jokers or all but one high joker to bid no trump\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Should reveal kitty at end of game:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.should_reveal_kitty_at_end_of_game\n ? \"show\"\n : \"hide\", onChange: props.setShouldRevealKittyAtEndOfGame },\n React.createElement(\"option\", { value: \"hide\" }, \"Do not reveal contents of the kitty at the end of the game in chat\"),\n React.createElement(\"option\", { value: \"show\" }, \"Reveal contents of the kitty at the end of the game in chat\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Show player which defeats throw:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.hide_throw_halting_player ? \"hide\" : \"show\", onChange: props.setHideThrowHaltingPlayer },\n React.createElement(\"option\", { value: \"hide\" }, \"Hide the player who defeats a potential throw\"),\n React.createElement(\"option\", { value: \"show\" }, \"Show the player who defeats a potential throw\"))))));\n return (React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"More game settings:\",\n \" \",\n React.createElement(\"button\", { className: \"normal\", onClick: function (evt) {\n evt.preventDefault();\n setModalOpen(true);\n } }, \"Open\"),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () { return setModalOpen(false); }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } }, s))));\n};\nvar Initialize = function (props) {\n var send = React.useContext(WebsocketContext).send;\n var state = React.useContext(AppStateContext).state;\n var _a = React.useState(false), showPicker = _a[0], setShowPicker = _a[1];\n var setGameMode = function (evt) {\n evt.preventDefault();\n if (evt.target.value === \"Tractor\") {\n send({ Action: { SetGameMode: \"Tractor\" } });\n }\n else {\n send({\n Action: {\n SetGameMode: {\n FindingFriends: {\n num_friends: null,\n },\n },\n },\n });\n }\n };\n var setNumFriends = function (evt) {\n evt.preventDefault();\n if (evt.target.value === \"\") {\n send({\n Action: {\n SetGameMode: {\n FindingFriends: {\n num_friends: null,\n },\n },\n },\n });\n }\n else {\n var num = parseInt(evt.target.value, 10);\n send({\n Action: {\n SetGameMode: {\n FindingFriends: {\n num_friends: num,\n },\n },\n },\n });\n }\n };\n var onSelectString = function (action) { return function (evt) {\n var _a;\n evt.preventDefault();\n if (evt.target.value !== \"\") {\n send({ Action: (_a = {}, _a[action] = evt.target.value, _a) });\n }\n }; };\n var onSelectStringDefault = function (action, defaultValue) { return function (evt) {\n var _a, _b;\n evt.preventDefault();\n if (evt.target.value !== \"\") {\n send({ Action: (_a = {}, _a[action] = evt.target.value, _a) });\n }\n else {\n send({ Action: (_b = {}, _b[action] = defaultValue, _b) });\n }\n }; };\n var setFriendSelectionPolicy = onSelectString(\"SetFriendSelectionPolicy\");\n var setMultipleJoinPolicy = onSelectString(\"SetMultipleJoinPolicy\");\n var setFirstLandlordSelectionPolicy = onSelectString(\"SetFirstLandlordSelectionPolicy\");\n var setBidPolicy = onSelectString(\"SetBidPolicy\");\n var setBidReinforcementPolicy = onSelectString(\"SetBidReinforcementPolicy\");\n var setJokerBidPolicy = onSelectString(\"SetJokerBidPolicy\");\n var setKittyTheftPolicy = onSelectString(\"SetKittyTheftPolicy\");\n var setKittyBidPolicy = onSelectString(\"SetKittyBidPolicy\");\n var setTrickDrawPolicy = onSelectString(\"SetTrickDrawPolicy\");\n var setThrowEvaluationPolicy = onSelectString(\"SetThrowEvaluationPolicy\");\n var setPlayTakebackPolicy = onSelectString(\"SetPlayTakebackPolicy\");\n var setGameShadowingPolicy = onSelectString(\"SetGameShadowingPolicy\");\n var setGameStartPolicy = onSelectString(\"SetGameStartPolicy\");\n var setBidTakebackPolicy = onSelectString(\"SetBidTakebackPolicy\");\n var setShouldRevealKittyAtEndOfGame = function (evt) {\n evt.preventDefault();\n if (evt.target.value !== \"\") {\n send({\n Action: {\n SetShouldRevealKittyAtEndOfGame: evt.target.value === \"show\",\n },\n });\n }\n };\n var setHideThrowHaltingPlayer = function (evt) {\n evt.preventDefault();\n if (evt.target.value !== \"\") {\n send({\n Action: {\n SetHideThrowHaltingPlayer: evt.target.value === \"hide\",\n },\n });\n }\n };\n var setKittyPenalty = onSelectStringDefault(\"SetKittyPenalty\", null);\n var setAdvancementPolicy = onSelectStringDefault(\"SetAdvancementPolicy\", \"Unrestricted\");\n var setThrowPenalty = onSelectStringDefault(\"SetThrowPenalty\", null);\n var setHideLandlordsPoints = function (evt) {\n evt.preventDefault();\n send({ Action: { SetHideLandlordsPoints: evt.target.value === \"hide\" } });\n };\n var setHidePlayedCards = function (evt) {\n evt.preventDefault();\n send({ Action: { SetHidePlayedCards: evt.target.value === \"hide\" } });\n };\n var startGame = function (evt) {\n evt.preventDefault();\n // Do a timeout check whenever we start a new game\n if (shouldTimeout()) {\n send(\"Timeout\");\n }\n else {\n // update all players with the original start time\n send({ Action: \"StartGame\" });\n send({ FirstStartAt: \"\" + state.firstStartAt });\n }\n };\n // return true if we need to do a timeout\n var shouldTimeout = function () {\n var firstStartAt = state.firstStartAt;\n var current = Date.now();\n if (firstStartAt == 0) {\n state.firstStartAt = current;\n }\n else if (current - firstStartAt > MilliSecondsInOneHour * 8) {\n // if the saved value is greater than 8 hours, reset to zero.\n // this is not likely to happen, just a safe guard\n state.firstStartAt = current;\n // } else if (current - firstStartAt > 1000 * 15) {\n }\n else if (current - firstStartAt > MilliSecondsInOneHour * 2.5) {\n return true;\n }\n return false;\n };\n var setEmoji = function (evt, emojiObject) {\n evt.preventDefault();\n send({\n Action: {\n SetLandlordEmoji: emojiObject !== undefined && emojiObject !== null\n ? emojiObject.emoji\n : null,\n },\n });\n };\n var modeAsString = props.state.propagated.game_mode === \"Tractor\"\n ? \"Tractor\"\n : \"FindingFriends\";\n var numFriends = props.state.propagated.game_mode === \"Tractor\" ||\n props.state.propagated.game_mode.FindingFriends.num_friends === null\n ? \"\"\n : props.state.propagated.game_mode.FindingFriends.num_friends;\n var decksEffective = props.state.propagated.num_decks !== undefined &&\n props.state.propagated.num_decks !== null &&\n props.state.propagated.num_decks > 0\n ? props.state.propagated.num_decks\n : Math.max(Math.floor(props.state.propagated.players.length / 2), 1);\n var decks = __spreadArrays(props.state.propagated.special_decks);\n while (decks.length < decksEffective) {\n decks.push({\n exclude_big_joker: false,\n exclude_small_joker: false,\n min: \"2\",\n });\n }\n decks.length = decksEffective;\n var currentPlayer = props.state.propagated.players.find(function (p) { return p.name === props.name; });\n if (currentPlayer === undefined) {\n currentPlayer = props.state.propagated.observers.find(function (p) { return p.name === props.name; });\n }\n if (currentPlayer === undefined) {\n currentPlayer = {\n id: -1,\n name: props.name,\n level: \"\",\n metalevel: 0,\n };\n }\n var landlordIndex = props.state.propagated.players.findIndex(function (p) { return p.id === props.state.propagated.landlord; });\n var saveGameSettings = function (evt) {\n evt.preventDefault();\n localStorage.setItem(\"gameSettingsInLocalStorage\", JSON.stringify(props.state.propagated));\n };\n var setGameSettings = function (gameSettings) {\n if (gameSettings !== null) {\n var kittySizeSet = false;\n var kittySize = null;\n for (var _i = 0, _a = Object.entries(gameSettings); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n switch (key) {\n case \"game_mode\":\n send({\n Action: {\n SetGameMode: value,\n },\n });\n break;\n case \"num_decks\":\n send({\n Action: {\n SetNumDecks: value,\n },\n });\n if (kittySizeSet) {\n // reset the size again, as setting deck num resets kitty_size to default\n send({\n Action: {\n SetKittySize: kittySize,\n },\n });\n }\n break;\n case \"special_decks\":\n send({\n Action: {\n SetSpecialDecks: value,\n },\n });\n break;\n case \"kitty_size\":\n send({\n Action: {\n SetKittySize: value,\n },\n });\n kittySizeSet = true;\n kittySize = value;\n break;\n case \"friend_selection_policy\":\n send({\n Action: {\n SetFriendSelectionPolicy: value,\n },\n });\n break;\n case \"multiple_join_policy\":\n send({\n Action: {\n SetMultipleJoinPolicy: value,\n },\n });\n break;\n case \"first_landlord_selection_policy\":\n send({\n Action: {\n SetFirstLandlordSelectionPolicy: value,\n },\n });\n break;\n case \"hide_landlord_points\":\n send({\n Action: {\n SetHideLandlordsPoints: value,\n },\n });\n break;\n case \"hide_played_cards\":\n send({ Action: { SetHidePlayedCards: value } });\n break;\n case \"advancement_policy\":\n send({\n Action: {\n SetAdvancementPolicy: value,\n },\n });\n break;\n case \"kitty_bid_policy\":\n send({\n Action: {\n SetKittyBidPolicy: value,\n },\n });\n break;\n case \"kitty_penalty\":\n send({\n Action: {\n SetKittyPenalty: value,\n },\n });\n break;\n case \"kitty_theft_policy\":\n send({\n Action: {\n SetKittyTheftPolicy: value,\n },\n });\n break;\n case \"throw_penalty\":\n send({\n Action: {\n SetThrowPenalty: value,\n },\n });\n break;\n case \"trick_draw_policy\":\n send({\n Action: {\n SetTrickDrawPolicy: value,\n },\n });\n break;\n case \"throw_evaluation_policy\":\n send({\n Action: {\n SetThrowEvaluationPolicy: value,\n },\n });\n break;\n case \"landlord_emoji\":\n send({\n Action: {\n SetLandlordEmoji: value,\n },\n });\n break;\n case \"bid_policy\":\n send({\n Action: {\n SetBidPolicy: value,\n },\n });\n break;\n case \"bid_reinforcement_policy\":\n send({\n Action: {\n SetBidReinforcementPolicy: value,\n },\n });\n break;\n case \"joker_bid_policy\":\n send({\n Action: {\n SetJokerBidPolicy: value,\n },\n });\n break;\n case \"should_reveal_kitty_at_end_of_game\":\n send({\n Action: {\n SetShouldRevealKittyAtEndOfGame: value,\n },\n });\n break;\n case \"hide_throw_halting_player\":\n send({ Action: { SetHideThrowHaltingPlayer: value } });\n break;\n case \"game_scoring_parameters\":\n send({\n Action: {\n SetGameScoringParameters: value,\n },\n });\n break;\n case \"play_takeback_policy\":\n send({\n Action: {\n SetPlayTakebackPolicy: value,\n },\n });\n break;\n case \"bid_takeback_policy\":\n send({\n Action: {\n SetBidTakebackPolicy: value,\n },\n });\n break;\n case \"game_shadowing_policy\":\n send({\n Action: {\n SetGameShadowingPolicy: value,\n },\n });\n break;\n case \"game_start_policy\":\n send({\n Action: {\n SetGameStartPolicy: value,\n },\n });\n break;\n }\n }\n }\n };\n var loadGameSettings = function (evt) {\n evt.preventDefault();\n var settings = localStorage.getItem(\"gameSettingsInLocalStorage\");\n if (settings !== null) {\n var gameSettings_1;\n try {\n gameSettings_1 = JSON.parse(settings);\n var fetchAsync = function () { return __awaiter(void 0, void 0, void 0, function () {\n var fetchResult, fetchJSON, combined;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, fetch(\"default_settings.json\")];\n case 1:\n fetchResult = _a.sent();\n return [4 /*yield*/, fetchResult.json()];\n case 2:\n fetchJSON = _a.sent();\n combined = __assign(__assign({}, fetchJSON), gameSettings_1);\n if (combined.bonus_level_policy !== undefined &&\n combined.game_scoring_parameters !== undefined &&\n combined.bonus_level_policy !==\n combined.game_scoring_parameters.bonus_level_policy) {\n combined.game_scoring_parameters.bonus_level_policy =\n combined.bonus_level_policy;\n }\n setGameSettings(combined);\n return [2 /*return*/];\n }\n });\n }); };\n fetchAsync().catch(function (e) {\n console.error(e);\n localStorage.setItem(\"gameSettingsInLocalStorage\", JSON.stringify(props.state.propagated));\n });\n }\n catch (err) {\n localStorage.setItem(\"gameSettingsInLocalStorage\", JSON.stringify(props.state.propagated));\n }\n }\n };\n var resetGameSettings = function (evt) {\n evt.preventDefault();\n var fetchAsync = function () { return __awaiter(void 0, void 0, void 0, function () {\n var fetchResult, fetchJSON;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, fetch(\"default_settings.json\")];\n case 1:\n fetchResult = _a.sent();\n return [4 /*yield*/, fetchResult.json()];\n case 2:\n fetchJSON = _a.sent();\n setGameSettings(fetchJSON);\n return [2 /*return*/];\n }\n });\n }); };\n fetchAsync().catch(function (e) { return console.error(e); });\n };\n return (React.createElement(\"div\", null,\n React.createElement(Header, { gameMode: props.state.propagated.game_mode, chatLink: props.state.propagated.chat_link }),\n React.createElement(Players, { players: props.state.propagated.players, observers: props.state.propagated.observers, landlord: props.state.propagated.landlord, next: null, movable: true, name: props.name }),\n React.createElement(\"p\", null,\n \"Send link to other players to allow them to join the game:\",\n \" \",\n React.createElement(\"a\", { href: window.location.href, target: \"_blank\", rel: \"noreferrer\" },\n React.createElement(\"code\", null, window.location.href))),\n props.state.propagated.players.length >= 4 ? (React.createElement(React.Fragment, null,\n React.createElement(\"button\", { disabled: props.state.propagated.game_start_policy ===\n \"AllowLandlordOnly\" &&\n landlordIndex !== -1 &&\n props.state.propagated.players[landlordIndex].name !== props.name, onClick: startGame }, \"Start game\"),\n React.createElement(ReadyCheck, null))) : (React.createElement(\"h2\", null, \"Waiting for players...\")),\n React.createElement(RandomizePlayersButton, { players: props.state.propagated.players }, \"Randomize player order\"),\n React.createElement(Kicker, { players: props.state.propagated.players, onKick: function (playerId) { return send({ Kick: playerId }); } }),\n React.createElement(\"div\", { className: \"game-settings\" },\n React.createElement(\"h3\", null, \"Game settings\"),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Game mode:\",\n \" \",\n React.createElement(\"select\", { value: modeAsString, onChange: setGameMode },\n React.createElement(\"option\", { value: \"Tractor\" }, \"\\u5347\\u7EA7 / Tractor\"),\n React.createElement(\"option\", { value: \"FindingFriends\" }, \"\\u627E\\u670B\\u53CB / Finding Friends\")))),\n React.createElement(\"div\", null, props.state.propagated.game_mode !== \"Tractor\" ? (React.createElement(\"label\", null,\n \"Number of friends:\",\n \" \",\n React.createElement(\"select\", { value: numFriends, onChange: setNumFriends },\n React.createElement(\"option\", { value: \"\" }, \"default\"),\n ArrayUtils.range(Math.max(Math.floor(props.state.propagated.players.length / 2) - 1, 0), function (idx) { return (React.createElement(\"option\", { value: idx + 1, key: idx }, idx + 1)); })))) : null),\n React.createElement(NumDecksSelector, { numPlayers: props.state.propagated.players.length, numDecks: props.state.propagated.num_decks, onChange: function (newNumDecks) {\n return send({ Action: { SetNumDecks: newNumDecks } });\n } }),\n React.createElement(DeckSettings, { decks: decks, setSpecialDecks: function (d) { return send({ Action: { SetSpecialDecks: d } }); } }),\n React.createElement(KittySizeSelector, { numPlayers: props.state.propagated.players.length, decks: decks, kittySize: props.state.propagated.kitty_size, onChange: function (newKittySize) {\n return send({ Action: { SetKittySize: newKittySize } });\n } }),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Bids after cards are exchanged from the bottom:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.kitty_theft_policy, onChange: setKittyTheftPolicy },\n React.createElement(\"option\", { value: \"AllowKittyTheft\" }, \"Allowed (\\u7092\\u5730\\u76AE)\"),\n React.createElement(\"option\", { value: \"NoKittyTheft\" }, \"Not allowed\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Card protection policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.trick_draw_policy, onChange: setTrickDrawPolicy },\n React.createElement(\"option\", { value: \"NoProtections\" }, \"No protections\"),\n React.createElement(\"option\", { value: \"LongerTuplesProtected\" }, \"Longer tuple (triple) is protected from shorter (pair)\"),\n React.createElement(\"option\", { value: \"OnlyDrawTractorOnTractor\" }, \"Only tractors can draw tractors\"),\n React.createElement(\"option\", { value: \"NoFormatBasedDraw\" }, \"No format-based requirements (pairs do not draw pairs)\")))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Multi-throw evaluation policy:\",\n \" \",\n React.createElement(\"select\", { value: props.state.propagated.throw_evaluation_policy, onChange: setThrowEvaluationPolicy },\n React.createElement(\"option\", { value: \"All\" }, \"Subsequent throw must beat all cards to win\"),\n React.createElement(\"option\", { value: \"Highest\" }, \"Subsequent throw must beat highest card to win\"),\n React.createElement(\"option\", { value: \"TrickUnitLength\" }, \"Subsequent throw must beat largest component to win\")))),\n React.createElement(ScoringSettings, { state: props.state, decks: decks }),\n React.createElement(UncommonSettings, { state: props.state, setBidPolicy: setBidPolicy, setBidReinforcementPolicy: setBidReinforcementPolicy, setJokerBidPolicy: setJokerBidPolicy, setShouldRevealKittyAtEndOfGame: setShouldRevealKittyAtEndOfGame, setHideThrowHaltingPlayer: setHideThrowHaltingPlayer, setFirstLandlordSelectionPolicy: setFirstLandlordSelectionPolicy, setGameStartPolicy: setGameStartPolicy, setGameShadowingPolicy: setGameShadowingPolicy, setKittyBidPolicy: setKittyBidPolicy }),\n React.createElement(DifficultySettings, { state: props.state, setFriendSelectionPolicy: setFriendSelectionPolicy, setMultipleJoinPolicy: setMultipleJoinPolicy, setAdvancementPolicy: setAdvancementPolicy, setHideLandlordsPoints: setHideLandlordsPoints, setHidePlayedCards: setHidePlayedCards, setKittyPenalty: setKittyPenalty, setThrowPenalty: setThrowPenalty, setPlayTakebackPolicy: setPlayTakebackPolicy, setBidTakebackPolicy: setBidTakebackPolicy }),\n React.createElement(\"h3\", null, \"Continuation settings\"),\n React.createElement(LandlordSelector, { players: props.state.propagated.players, landlordId: props.state.propagated.landlord, onChange: function (newLandlord) {\n return send({ Action: { SetLandlord: newLandlord } });\n } }),\n React.createElement(RankSelector, { rank: currentPlayer.level, onChangeRank: function (newRank) {\n return send({ Action: { SetRank: newRank } });\n } }),\n React.createElement(\"h3\", null, \"Misc settings\"),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Landlord label:\",\n \" \",\n props.state.propagated.landlord_emoji !== null &&\n props.state.propagated.landlord_emoji !== undefined &&\n props.state.propagated.landlord_emoji !== \"\"\n ? props.state.propagated.landlord_emoji\n : \"当庄\",\n \" \",\n React.createElement(\"button\", { className: \"normal\", onClick: function () {\n showPicker ? setShowPicker(false) : setShowPicker(true);\n } }, showPicker ? \"Hide\" : \"Pick\"),\n React.createElement(\"button\", { className: \"normal\", disabled: props.state.propagated.landlord_emoji == null, onClick: function () {\n send({ Action: { SetLandlordEmoji: null } });\n } }, \"Default\"),\n showPicker ? (React.createElement(React.Suspense, { fallback: \"...\" },\n React.createElement(Picker, { onEmojiClick: setEmoji }))) : null)),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n \"Setting Management:\",\n React.createElement(\"button\", { className: \"normal\", \"data-tip\": true, \"data-for\": \"saveTip\", onClick: saveGameSettings }, \"Save\"),\n React.createElement(ReactTooltip, { id: \"saveTip\", place: \"top\", effect: \"solid\" }, \"Save game settings\"),\n React.createElement(\"button\", { className: \"normal\", \"data-tip\": true, \"data-for\": \"loadTip\", onClick: loadGameSettings }, \"Load\"),\n React.createElement(ReactTooltip, { id: \"loadTip\", place: \"top\", effect: \"solid\" }, \"Load saved game settings\"),\n React.createElement(\"button\", { className: \"normal\", \"data-tip\": true, \"data-for\": \"resetTip\", onClick: resetGameSettings }, \"Reset\"),\n React.createElement(ReactTooltip, { id: \"resetTip\", place: \"top\", effect: \"solid\" }, \"Reset game settings to defaults\"))))));\n};\nexport default Initialize;\n","/* eslint-disable @typescript-eslint/no-var-requires */\nvar cardsJson = require(\"./generated/cards.json\");\nexport default cardsJson.cards;\n","import preloadedCards from \"../preloadedCards\";\nimport ArrayUtils from \"../util/array\";\nexport var cardLookup = ArrayUtils.mapObject(preloadedCards, function (c) { return [c.value, c]; });\nvar suitToUnicode = {\n clubs: \"♧\",\n diamonds: \"β™’\",\n hearts: \"β™‘\",\n spades: \"♀\",\n};\nvar suitToFilledUnicode = {\n clubs: \"♣\",\n diamonds: \"♦\",\n hearts: \"β™₯\",\n spades: \"β™ \",\n};\nvar cardInfoToSuit = function (cardInfo) {\n switch (cardInfo.typ) {\n case \"β™’\":\n return \"diamonds\";\n case \"♧\":\n return \"clubs\";\n case \"β™‘\":\n return \"hearts\";\n case \"♀\":\n return \"spades\";\n default:\n throw new Error(\"Invalid cardInfo\");\n }\n};\nexport var unicodeToCard = function (unicode) {\n if (unicode === \"πŸ‚ \") {\n return { type: \"unknown\" };\n }\n if (!(unicode in cardLookup)) {\n throw new Error(\"Invalid card string: \" + unicode);\n }\n var cardInfo = cardLookup[unicode];\n if (unicode === \"πŸƒŸ\") {\n return { type: \"little_joker\" };\n }\n else if (unicode === \"πŸƒ\") {\n return { type: \"big_joker\" };\n }\n else {\n return {\n rank: cardInfo.number,\n suit: cardInfoToSuit(cardInfo),\n type: \"suit_card\",\n };\n }\n};\nexport var cardToUnicodeSuit = function (card, fill) {\n if (fill === void 0) { fill = true; }\n var table = fill ? suitToFilledUnicode : suitToUnicode;\n return table[card.suit];\n};\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as React from \"react\";\nimport classNames from \"classnames\";\nimport memoize from \"./memoize\";\nimport InlineCard from \"./InlineCard\";\nimport { cardLookup } from \"./util/cardHelpers\";\nimport { SettingsContext } from \"./AppStateProvider\";\nvar SvgCard = React.lazy(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, import(\"./SvgCard\")];\n case 1: return [2 /*return*/, _a.sent()];\n }\n}); }); });\nvar Card = function (props) {\n var settings = React.useContext(SettingsContext);\n if (!(props.card in cardLookup)) {\n var nonSVG = (React.createElement(\"span\", { className: classNames(\"card\", \"unknown\", props.className) },\n React.createElement(CardCanvas, { card: props.card, height: props.smaller ? 95 : 120, suit: classNames(\"unknown\", settings.fourColor ? \"four-color\" : null, settings.darkMode ? \"dark-mode\" : null), backgroundColor: settings.darkMode ? \"#000\" : \"#fff\" })));\n if (settings.svgCards) {\n return (React.createElement(React.Suspense, { fallback: nonSVG },\n React.createElement(\"span\", { className: classNames(\"card\", \"svg\", \"unknown\", props.className) },\n React.createElement(SvgCard, { fourColor: settings.fourColor, smaller: props.smaller, card: \"πŸ‚ \" }))));\n }\n else {\n return nonSVG;\n }\n }\n else {\n var cardInfo = cardLookup[props.card];\n var nonSVG = (React.createElement(\"span\", { className: classNames(\"card\", cardInfo.typ, props.className), onClick: props.onClick, onMouseEnter: props.onMouseEnter, onMouseLeave: props.onMouseLeave },\n React.createElement(\"div\", { className: \"card-label\" },\n React.createElement(InlineCard, { card: props.card })),\n React.createElement(CardCanvas, { card: cardInfo.display_value, height: props.smaller ? 95 : 120, suit: classNames(cardInfo.typ, settings.fourColor ? \"four-color\" : null, settings.darkMode ? \"dark-mode\" : null), colorOverride: settings.suitColorOverrides[cardInfo.typ], backgroundColor: settings.darkMode ? \"#000\" : \"#fff\" })));\n if (settings.svgCards) {\n return (React.createElement(React.Suspense, { fallback: nonSVG },\n React.createElement(\"span\", { className: classNames(\"card\", \"svg\", cardInfo.typ, props.className), onClick: props.onClick, onMouseEnter: props.onMouseEnter, onMouseLeave: props.onMouseLeave },\n React.createElement(\"div\", { className: \"card-label\" },\n React.createElement(InlineCard, { card: props.card })),\n React.createElement(SvgCard, { fourColor: settings.fourColor, smaller: props.smaller, card: props.card }))));\n }\n else {\n return nonSVG;\n }\n }\n};\nvar computeCanvasBounds = function (font, dpr) {\n var c = document.createElement(\"canvas\");\n c.style.display = \"none\";\n document.body.appendChild(c);\n var ctx = c.getContext(\"2d\");\n ctx.scale(dpr, dpr);\n ctx.font = font;\n var text = \"πŸ‚ \";\n var textMetrics = ctx.measureText(text);\n document.body.removeChild(c);\n return textMetrics;\n};\nvar computeSuitColor = function (suit) {\n var c = document.createElement(\"span\");\n c.className = suit;\n c.style.display = \"none\";\n document.body.appendChild(c);\n var color = getComputedStyle(c).color;\n document.body.removeChild(c);\n return color;\n};\nvar cardBoundsCache = {};\nvar suitColorCache = {};\nvar CardCanvas = function (props) {\n var font = props.height + \"px solid\";\n if (!(font in cardBoundsCache)) {\n cardBoundsCache[font] = memoize(function () { return computeCanvasBounds(font, 1); });\n }\n if (!(props.suit in suitColorCache)) {\n suitColorCache[props.suit] = memoize(function () { return computeSuitColor(props.suit); });\n }\n var textMetrics = cardBoundsCache[font]();\n var style = suitColorCache[props.suit]();\n var effectiveHeight = Math.round(textMetrics.actualBoundingBoxAscent +\n textMetrics.actualBoundingBoxDescent +\n 2);\n var effectiveWidth = Math.round(textMetrics.actualBoundingBoxRight +\n Math.min(textMetrics.actualBoundingBoxLeft, 0) +\n 2);\n return (React.createElement(\"svg\", { focusable: \"false\", role: \"img\", xmlns: \"http://www.w3.org/2000/svg\", height: effectiveHeight, width: effectiveWidth },\n React.createElement(\"rect\", { fill: props.backgroundColor !== undefined ? props.backgroundColor : \"#fff\", x: textMetrics.actualBoundingBoxLeft, y: 0, width: textMetrics.width - 2, height: effectiveHeight }),\n React.createElement(\"text\", { fill: props.colorOverride !== undefined ? props.colorOverride : style, fontSize: props.height + \"px\", textLength: textMetrics.width + \"px\", x: Math.min(textMetrics.actualBoundingBoxLeft, 0) + 1, y: effectiveHeight - textMetrics.actualBoundingBoxDescent - 1 }, props.card)));\n};\nexport default Card;\n","import * as React from \"react\";\nimport classNames from \"classnames\";\nimport Card from \"./Card\";\nvar LabeledPlay = function (props) {\n var className = classNames(\"label\", {\n next: props.next !== undefined &&\n props.next !== null &&\n props.id === props.next,\n });\n var cards = props.cards.map(function (card, idx) { return React.createElement(Card, { card: card, key: idx }); });\n var groupedCards = props.groupedCards !== undefined\n ? props.groupedCards.map(function (c, gidx) { return (React.createElement(\"div\", { className: \"card-group\", key: gidx }, c.map(function (card, idx) { return (React.createElement(Card, { card: card, key: gidx + \"-\" + idx })); }))); })\n : cards;\n return (React.createElement(\"div\", { className: classNames(\"labeled-play\", props.className, {\n clickable: props.onClick !== undefined,\n }), onClick: props.onClick !== undefined\n ? function (evt) {\n evt.preventDefault();\n props.onClick();\n }\n : undefined },\n React.createElement(\"div\", { className: \"play\" }, groupedCards),\n props.moreCards !== undefined && props.moreCards.length > 0 ? (React.createElement(\"div\", { className: \"play more\" }, props.moreCards.map(function (card, idx) { return (React.createElement(Card, { card: card, key: idx, smaller: true })); }))) : null,\n React.createElement(\"div\", { className: className }, props.label)));\n};\nexport default LabeledPlay;\n","import * as React from \"react\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nvar BeepButton = function () {\n var send = React.useContext(WebsocketContext).send;\n return (React.createElement(\"button\", { onClick: function () {\n return confirm(\"Do you really want to send a beep to the current player?\") &&\n send(\"Beep\");\n } }, \"\\uD83D\\uDECE\\uFE0F\"));\n};\nexport default BeepButton;\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport * as React from \"react\";\nimport classNames from \"classnames\";\nimport Card from \"./Card\";\nimport ArrayUtils from \"./util/array\";\nimport WasmContext from \"./WasmContext\";\nimport { SettingsContext } from \"./AppStateProvider\";\nvar Cards = function (props) {\n var _a = React.useState(null), highlightedSuit = _a[0], setHighlightedSuit = _a[1];\n var hands = props.hands, selectedCards = props.selectedCards, notifyEmpty = props.notifyEmpty;\n var sortAndGroupCards = React.useContext(WasmContext).sortAndGroupCards;\n var _b = React.useContext(SettingsContext), separateCardsBySuit = _b.separateCardsBySuit, disableSuitHighlights = _b.disableSuitHighlights, reverseCardOrder = _b.reverseCardOrder;\n var handleSelect = function (card) { return function () {\n if (props.onCardClick !== undefined) {\n props.onCardClick(card);\n }\n if (selectedCards !== undefined && props.onSelect !== undefined) {\n props.onSelect(__spreadArrays(selectedCards, [card]));\n }\n }; };\n var handleUnselect = function (card) { return function () {\n if (selectedCards !== undefined) {\n var index = selectedCards.indexOf(card);\n if (index >= 0) {\n props.onSelect(ArrayUtils.minus(selectedCards, [card]));\n }\n }\n }; };\n var cardsInHand = props.playerId in hands.hands\n ? Object.entries(hands.hands[props.playerId]).flatMap(function (_a) {\n var c = _a[0], ct = _a[1];\n return Array(ct).fill(c);\n })\n : [];\n var unselected = selectedCards === undefined\n ? cardsInHand\n : ArrayUtils.minus(cardsInHand, selectedCards);\n var selectedCardGroups = props.selectedCards !== undefined\n ? sortAndGroupCards({\n cards: props.selectedCards,\n trump: props.trump,\n }).map(function (g) {\n return g.cards.map(function (c) { return ({\n card: c,\n suit: g.suit,\n }); });\n })\n : [];\n var unselectedCardGroups = sortAndGroupCards({\n cards: unselected,\n trump: props.trump,\n }).map(function (g) {\n return g.cards.map(function (c) { return ({\n card: c,\n suit: g.suit,\n }); });\n });\n if (!separateCardsBySuit) {\n selectedCardGroups = [selectedCardGroups.flatMap(function (g) { return g; })];\n unselectedCardGroups = [unselectedCardGroups.flatMap(function (g) { return g; })];\n }\n if (reverseCardOrder) {\n unselectedCardGroups.reverse();\n unselectedCardGroups.forEach(function (g) { return g.reverse(); });\n }\n return (React.createElement(\"div\", { className: \"hand\" },\n props.selectedCards !== undefined ? (React.createElement(\"div\", { className: \"selected-cards\" },\n selectedCardGroups.map(function (g, gidx) { return (React.createElement(\"div\", { style: { display: \"inline-block\" }, key: gidx }, g.map(function (c, idx) { return (React.createElement(Card, { key: gidx + \"-\" + idx, onClick: handleUnselect(c.card), card: c.card })); }))); }),\n props.selectedCards.length === 0 && (React.createElement(Card, { card: \"\\uD83C\\uDCA0\", className: classNames({ notify: notifyEmpty }) })))) : null,\n React.createElement(\"div\", { className: classNames(\"unselected-cards\", {\n unclickable: props.onSelect === undefined && props.onCardClick === undefined,\n }) },\n unselectedCardGroups.map(function (g, gidx) { return (React.createElement(\"div\", { style: { display: \"inline-block\" }, key: gidx }, g.map(function (c, idx) { return (React.createElement(Card, { key: gidx + \"-\" + idx, className: classNames(!disableSuitHighlights && highlightedSuit === c.suit\n ? \"highlighted\"\n : null), onClick: handleSelect(c.card), card: c.card, onMouseEnter: function (_) { return setHighlightedSuit(c.suit); }, onMouseLeave: function (_) { return setHighlightedSuit(null); } })); }))); }),\n unselectedCardGroups.length === 0 && React.createElement(Card, { card: \"\\uD83C\\uDCA0\" }))));\n};\nexport default Cards;\n","import * as React from \"react\";\nimport Cards from \"./Cards\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nimport LabeledPlay from \"./LabeledPlay\";\nimport WasmContext from \"./WasmContext\";\nvar BidArea = function (props) {\n var send = React.useContext(WebsocketContext).send;\n var findValidBids = React.useContext(WasmContext).findValidBids;\n var takeBackBid = function (evt) {\n evt.preventDefault();\n send({ Action: \"TakeBackBid\" });\n };\n var previousBidsRef = React.useRef([]);\n var currentBidsRef = React.useRef([]);\n var bidSetTimeRef = React.useRef(0);\n var players = {};\n var playerId = -1;\n props.players.forEach(function (p) {\n players[p.id] = p;\n if (p.name === props.name) {\n playerId = p.id;\n }\n });\n if (playerId === null || playerId < 0) {\n // Spectator mode\n return (React.createElement(\"div\", null,\n props.header,\n props.autobid !== null ? (React.createElement(LabeledPlay, { label: players[props.autobid.id].name + \" (from bottom)\", cards: [props.autobid.card] })) : null,\n props.bids.map(function (bid, idx) {\n var name = players[bid.id].name;\n return (React.createElement(LabeledPlay, { label: name, key: idx, cards: Array(bid.count).fill(bid.card) }));\n }),\n props.bids.length === 0 && props.autobid === null ? (React.createElement(LabeledPlay, { label: \"No bids yet...\", cards: [\"πŸ‚ \"] })) : null));\n }\n else {\n var validBids = findValidBids({\n id: playerId,\n bids: props.bids,\n hands: props.hands,\n players: props.players,\n landlord: props.landlord,\n epoch: props.epoch,\n bid_policy: props.bidPolicy,\n bid_reinforcement_policy: props.bidReinforcementPolicy,\n joker_bid_policy: props.jokerBidPolicy,\n num_decks: props.numDecks,\n });\n var levelId = props.landlord !== null && props.landlord !== undefined\n ? props.landlord\n : playerId;\n var trump = props.trump !== null && props.trump !== undefined\n ? props.trump\n : {\n NoTrump: {\n number: players[levelId].level,\n },\n };\n validBids.sort(function (a, b) {\n if (a.card < b.card) {\n return -1;\n }\n else if (a.card > b.card) {\n return 1;\n }\n else if (a.count < b.count) {\n return -1;\n }\n else if (a.count > b.count) {\n return 1;\n }\n else {\n return 0;\n }\n });\n if (validBids.length != currentBidsRef.current.length) {\n previousBidsRef.current = currentBidsRef.current;\n currentBidsRef.current = validBids;\n bidSetTimeRef.current = Date.now();\n console.log(\"preivous bids: \" + previousBidsRef.current.map(function (bid) { return \"\" + bid.count + bid.card + \" \"; }));\n console.log(\"current bids: \" + currentBidsRef.current.map(function (bid) { return \"\" + bid.count + bid.card + \" \"; }));\n }\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", null,\n props.header,\n props.autobid !== null ? (React.createElement(LabeledPlay, { label: players[props.autobid.id].name + \" (from bottom)\", cards: [props.autobid.card] })) : null,\n props.bids.map(function (bid, idx) {\n var name = players[bid.id].name;\n return (React.createElement(LabeledPlay, { label: name, key: idx, cards: Array(bid.count).fill(bid.card) }));\n }),\n props.bids.length === 0 && props.autobid === null ? (React.createElement(LabeledPlay, { label: \"No bids yet...\", cards: [\"πŸ‚ \"] })) : null),\n props.prefixButtons,\n props.bidTakeBacksEnabled ? (React.createElement(\"button\", { onClick: takeBackBid, disabled: props.bids.length === 0 ||\n props.bids[props.bids.length - 1].id !== playerId ||\n props.bids[props.bids.length - 1].epoch !== props.epoch }, \"Take back bid\")) : null,\n props.suffixButtons,\n validBids.length > 0 ? (React.createElement(\"p\", null, \"Click a bid option to bid\")) : (React.createElement(\"p\", null, \"No available bids!\")),\n validBids.map(function (bid, idx) {\n return (React.createElement(LabeledPlay, { cards: Array(bid.count).fill(bid.card), key: idx, label: \"Bid option \" + (idx + 1), onClick: function () {\n var bidChangedTime = Date.now() - bidSetTimeRef.current;\n console.log(\"bidding card set \", bidChangedTime, 'ms ago');\n // if the cards just changed, use the previous cards to bid\n if (bidChangedTime < 500 && idx < previousBidsRef.current.length) {\n console.log(\"use previous cards to bid\");\n send({ Action: { Bid: [previousBidsRef.current[idx].card, previousBidsRef.current[idx].count] } });\n }\n else {\n send({ Action: { Bid: [bid.card, bid.count] } });\n }\n } }));\n }),\n React.createElement(Cards, { hands: props.hands, playerId: playerId, trump: trump })));\n }\n};\nexport default BidArea;\n","import * as React from \"react\";\nimport InlineCard from \"./InlineCard\";\nimport preloadedCards from \"./preloadedCards\";\nvar Trump = function (props) {\n var trump = props.trump;\n if (trump.Standard !== undefined) {\n var _a = trump.Standard, suit_1 = _a.suit, rank_1 = _a.number;\n var card = preloadedCards.filter(function (v) { return v.typ === suit_1 && v.number === rank_1; })[0].value;\n return (React.createElement(\"div\", { className: \"trump\" },\n \"The trump suit is \",\n React.createElement(InlineCard, { card: card }),\n \" (rank \",\n rank_1,\n \")\"));\n }\n else {\n return React.createElement(\"div\", { className: \"trump\" },\n \"No trump, rank \",\n trump.NoTrump.number);\n }\n};\nexport default Trump;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from \"react\";\nimport Select from \"react-select\";\nimport ArrayUtils from \"./util/array\";\nimport preloadedCards from \"./preloadedCards\";\nimport InlineCard from \"./InlineCard\";\nimport { cardLookup } from \"./util/cardHelpers\";\nvar FriendSelect = function (props) {\n var handleChange = function (transform) { return function (value) {\n props.onChange(__assign({ card: props.friend.card, initial_skip: props.friend.initial_skip }, transform(value)));\n }; };\n var handleCardChange = handleChange(function (select) { return ({\n card: select.value,\n }); });\n var handleOrdinalChange = handleChange(function (select) { return ({\n initial_skip: parseInt(select.value, 10),\n }); });\n var rank = props.trump.Standard !== undefined\n ? props.trump.Standard.number\n : props.trump.NoTrump.number;\n var cardOptions = [];\n var currentValue = {};\n if (props.friend.card !== \"\") {\n var c = cardLookup[props.friend.card];\n currentValue.label = \"\" + c.number + c.typ;\n currentValue.value = c.value;\n }\n var notTrumpFilter = function (c) {\n return (c.number !== null &&\n c.number !== rank &&\n (props.trump.Standard == null || c.typ !== props.trump.Standard.suit));\n };\n var policyFilters = {\n PointCardNotAllowed: function (c) {\n return (notTrumpFilter(c) &&\n (c.points === 0 || (rank === \"A\" && c.number === \"K\")));\n },\n HighestCardNotAllowed: function (c) {\n return (notTrumpFilter(c) &&\n ((rank !== \"A\" && c.number !== \"A\") ||\n (rank === \"A\" && c.number !== \"K\")));\n },\n Unrestricted: function (c) { return notTrumpFilter(c); },\n TrumpsIncluded: function (c) { return true; },\n };\n var policyFilter = policyFilters[props.friend_selection_policy];\n preloadedCards\n .filter(function (c) { return policyFilter(c); })\n .forEach(function (c) {\n return cardOptions.push({\n label: \"\" + c.number + c.typ,\n value: c.value,\n });\n });\n return (React.createElement(\"div\", { className: \"friend-select\" },\n React.createElement(\"div\", { style: { width: \"100px\", display: \"inline-block\" } },\n React.createElement(Select, { value: currentValue, onChange: handleCardChange, options: cardOptions, formatOptionLabel: function (_a) {\n var value = _a.value;\n return value !== undefined && value !== null && value !== \"\" ? (React.createElement(InlineCard, { card: value })) : (value);\n } })),\n React.createElement(\"div\", { style: { width: \"100px\", display: \"inline-block\", marginLeft: \"10px\" } },\n React.createElement(Select, { value: props.friend.initial_skip !== null\n ? {\n value: \"\" + props.friend.initial_skip,\n label: \"#\" + (props.friend.initial_skip + 1),\n }\n : undefined, onChange: handleOrdinalChange, options: ArrayUtils.range(props.num_decks, function (idx) {\n return { value: \"\" + idx, label: \"#\" + (idx + 1) };\n }) }))));\n};\nexport default FriendSelect;\n","import * as React from \"react\";\nimport InlineCard from \"./InlineCard\";\nvar Friends = function (props) {\n var gameMode = props.gameMode;\n if (gameMode !== \"Tractor\") {\n return (React.createElement(\"div\", { className: \"pending-friends\" }, gameMode.FindingFriends.friends.map(function (friend, idx) {\n if (friend.player_id !== null) {\n return null;\n }\n if (friend.card === null ||\n friend.card === undefined ||\n friend.card.length === 0) {\n return null;\n }\n return (React.createElement(\"p\", { key: idx },\n \"The person to play the \",\n nth(friend.initial_skip + 1),\n \" \",\n React.createElement(InlineCard, { card: friend.card }),\n \" is a friend.\",\n \" \",\n props.showPlayed\n ? friend.initial_skip - friend.skip + \" played in previous tricks.\"\n : \"\"));\n })));\n }\n else {\n return null;\n }\n};\nfunction nth(n) {\n var suffix = [\"st\", \"nd\", \"rd\"][(((((n < 0 ? -n : n) + 90) % 100) - 10) % 10) - 1];\n return \"\" + n + (suffix !== undefined ? suffix : \"th\");\n}\nexport default Friends;\n","var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport IconButton from \"./IconButton\";\nimport PaperPlane from \"./icons/PaperPlane\";\nvar ChatBox = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n border-radius: 25px;\\n border: 0px;\\n outline: none;\\n background-color: #eee;\\n display: flex;\\n flex-direction: row;\\n padding-left: 1em;\\n padding-right: 1em;\\n margin: 0.5em;\\n\"], [\"\\n border-radius: 25px;\\n border: 0px;\\n outline: none;\\n background-color: #eee;\\n display: flex;\\n flex-direction: row;\\n padding-left: 1em;\\n padding-right: 1em;\\n margin: 0.5em;\\n\"])));\nvar Input = styled.input(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n outline: none;\\n background-color: #eee;\\n border: none;\\n margin-top: 0.6em;\\n margin-bottom: 0.6em;\\n font-size: 14px;\\n line-height: 14px;\\n height: 14px;\\n flex: 1;\\n\"], [\"\\n outline: none;\\n background-color: #eee;\\n border: none;\\n margin-top: 0.6em;\\n margin-bottom: 0.6em;\\n font-size: 14px;\\n line-height: 14px;\\n height: 14px;\\n flex: 1;\\n\"])));\nvar ChatInput = function (props) {\n var _a = React.useState(\"\"), draft = _a[0], setDraft = _a[1];\n var handleSubmit = function (event) {\n event.preventDefault();\n if (draft.length > 0) {\n props.onSubmit(draft);\n setDraft(\"\");\n }\n };\n var disabled = draft === \"\";\n return (React.createElement(\"form\", { onSubmit: handleSubmit, autoComplete: \"off\" },\n React.createElement(ChatBox, null,\n React.createElement(Input, { type: \"text\", placeholder: \"type message here\", value: draft, onChange: function (e) { return setDraft(e.target.value); } }),\n React.createElement(IconButton, { type: \"submit\", style: {\n opacity: disabled ? 0 : 1,\n transform: disabled ? \"translate(1em, 0)\" : \"none\",\n margin: \"auto\",\n }, disabled: disabled },\n React.createElement(PaperPlane, { width: \"16px\" })))));\n};\nexport default ChatInput;\nvar templateObject_1, templateObject_2;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\n/* tslint:disable:max-classes-per-file variable-name forin */\nimport * as React from \"react\";\nimport BeepButton from \"./BeepButton\";\nimport BidArea from \"./BidArea\";\nimport Trump from \"./Trump\";\nimport FriendSelect from \"./FriendSelect\";\nimport InlineCard from \"./InlineCard\";\nimport Card from \"./Card\";\nimport Header from \"./Header\";\nimport Friends from \"./Friends\";\nimport Players from \"./Players\";\nimport LabeledPlay from \"./LabeledPlay\";\nimport Cards from \"./Cards\";\nvar Exchange = /** @class */ (function (_super) {\n __extends(Exchange, _super);\n function Exchange(props) {\n var _this = _super.call(this, props) || this;\n _this.moveCardToKitty = _this.moveCardToKitty.bind(_this);\n _this.moveCardToHand = _this.moveCardToHand.bind(_this);\n _this.startGame = _this.startGame.bind(_this);\n _this.pickUpKitty = _this.pickUpKitty.bind(_this);\n _this.putDownKitty = _this.putDownKitty.bind(_this);\n _this.pickFriends = _this.pickFriends.bind(_this);\n _this.state = {\n friends: [],\n };\n _this.fixFriends = _this.fixFriends.bind(_this);\n return _this;\n }\n Exchange.prototype.fixFriends = function () {\n if (this.props.state.game_mode !== \"Tractor\") {\n var gameMode = this.props.state.game_mode.FindingFriends;\n var numFriends = gameMode.num_friends;\n var propFriends = gameMode.friends;\n if (numFriends !== this.state.friends.length) {\n if (propFriends.length !== numFriends) {\n var friends = __spreadArrays(this.state.friends);\n while (friends.length < numFriends) {\n friends.push({\n card: \"\",\n skip: 0,\n initial_skip: 0,\n player_id: null,\n });\n }\n while (friends.length > numFriends) {\n friends.pop();\n }\n this.setState({ friends: friends });\n }\n else {\n this.setState({ friends: propFriends });\n }\n }\n }\n else {\n if (this.state.friends.length !== 0) {\n this.setState({ friends: [] });\n }\n }\n };\n Exchange.prototype.componentDidMount = function () {\n this.fixFriends();\n };\n Exchange.prototype.componentDidUpdate = function () {\n this.fixFriends();\n };\n Exchange.prototype.moveCardToKitty = function (card) {\n window.send({ Action: { MoveCardToKitty: card } });\n };\n Exchange.prototype.moveCardToHand = function (card) {\n window.send({ Action: { MoveCardToHand: card } });\n };\n Exchange.prototype.startGame = function (evt) {\n evt.preventDefault();\n window.send({ Action: \"BeginPlay\" });\n };\n Exchange.prototype.pickUpKitty = function (evt) {\n evt.preventDefault();\n window.send({ Action: \"PickUpKitty\" });\n };\n Exchange.prototype.putDownKitty = function (evt) {\n evt.preventDefault();\n window.send({ Action: \"PutDownKitty\" });\n };\n Exchange.prototype.pickFriends = function (evt) {\n evt.preventDefault();\n if (this.props.state.game_mode !== \"Tractor\" &&\n this.props.state.game_mode.FindingFriends.num_friends ===\n this.state.friends.length) {\n window.send({\n Action: {\n SetFriends: this.state.friends,\n },\n });\n }\n else {\n this.fixFriends();\n }\n };\n Exchange.prototype.render = function () {\n var _this = this;\n var exchanger = this.props.state.exchanger === null\n ? this.props.state.landlord\n : this.props.state.exchanger;\n var landlordIdx = -1;\n var exchangerIdx = -1;\n var playerId = -1;\n this.props.state.propagated.players.forEach(function (player, idx) {\n if (player.id === _this.props.state.landlord) {\n landlordIdx = idx;\n }\n if (player.id === exchanger) {\n exchangerIdx = idx;\n }\n if (player.name === _this.props.name) {\n playerId = player.id;\n }\n });\n var isLandlord = this.props.state.propagated.players[landlordIdx].name === this.props.name;\n var isExchanger = this.props.state.propagated.players[exchangerIdx].name ===\n this.props.name;\n var kittyTheftEnabled = this.props.state.propagated.kitty_theft_policy === \"AllowKittyTheft\";\n var nextPlayer = kittyTheftEnabled &&\n !this.props.state.finalized &&\n this.props.state.exchanger !== null\n ? this.props.state.exchanger\n : this.props.state.landlord;\n var exchangeUI = isExchanger && !this.props.state.finalized ? (React.createElement(React.Fragment, null,\n React.createElement(\"h2\", null, \"Your hand\"),\n React.createElement(Cards, { hands: this.props.state.hands, playerId: playerId, onCardClick: function (c) { return _this.moveCardToKitty(c); }, trump: this.props.state.trump }),\n React.createElement(\"h2\", null,\n \"Discarded cards \",\n this.props.state.kitty.length,\n \" /\",\n \" \",\n this.props.state.kitty_size),\n React.createElement(\"div\", { className: \"kitty\" }, this.props.state.kitty.map(function (c, idx) { return (React.createElement(Card, { key: idx, onClick: function () { return _this.moveCardToHand(c); }, card: c })); })),\n kittyTheftEnabled ? (React.createElement(\"button\", { onClick: this.putDownKitty, disabled: this.props.state.kitty.length !== this.props.state.kitty_size }, \"Finalize exchanged cards\")) : null)) : null;\n var lastBid = this.props.state.bids[this.props.state.bids.length - 1];\n var startGame = (React.createElement(\"button\", { onClick: this.startGame, disabled: this.props.state.kitty.length !== this.props.state.kitty_size ||\n (kittyTheftEnabled &&\n !this.props.state.finalized &&\n this.props.state.autobid === null) }, \"Start game\"));\n var bidUI = kittyTheftEnabled &&\n this.props.state.finalized &&\n this.props.state.autobid === null &&\n (!isExchanger || lastBid.epoch + 1 !== this.props.state.epoch) ? (React.createElement(React.Fragment, null,\n React.createElement(BidArea, { bids: this.props.state.bids, autobid: this.props.state.autobid, hands: this.props.state.hands, epoch: this.props.state.epoch, name: this.props.name, landlord: this.props.state.propagated.landlord, players: this.props.state.propagated.players, bidPolicy: this.props.state.propagated.bid_policy, bidReinforcementPolicy: this.props.state.propagated.bid_reinforcement_policy, jokerBidPolicy: this.props.state.propagated.joker_bid_policy, numDecks: this.props.state.num_decks, header: React.createElement(\"h2\", null,\n \"Bids (round \",\n this.props.state.epoch + 1,\n \" of bidding)\"), suffixButtons: React.createElement(React.Fragment, null,\n React.createElement(\"button\", { onClick: this.pickUpKitty, disabled: lastBid.id !== playerId ||\n lastBid.epoch !== this.props.state.epoch }, \"Pick up cards from the bottom\"),\n isLandlord ? startGame : null), bidTakeBacksEnabled: this.props.state.propagated.bid_takeback_policy ===\n \"AllowBidTakeback\" }),\n React.createElement(LabeledPlay, { className: \"kitty\", cards: this.props.state.kitty, label: \"\\u5E95\\u724C\" }))) : null;\n var friendUI = this.props.state.game_mode !== \"Tractor\" && isLandlord ? (React.createElement(\"div\", null,\n React.createElement(Friends, { gameMode: this.props.state.game_mode, showPlayed: false }),\n this.state.friends.map(function (friend, idx) {\n var onChange = function (x) {\n var newFriends = __spreadArrays(_this.state.friends);\n newFriends[idx] = x;\n _this.setState({ friends: newFriends });\n _this.fixFriends();\n };\n return (React.createElement(FriendSelect, { onChange: onChange, key: idx, friend: friend, trump: _this.props.state.trump, friend_selection_policy: _this.props.state.propagated.friend_selection_policy, num_decks: _this.props.state.num_decks }));\n }),\n React.createElement(\"button\", { onClick: this.pickFriends }, \"Pick friends\"))) : null;\n return (React.createElement(\"div\", null,\n React.createElement(Header, { gameMode: this.props.state.game_mode, chatLink: this.props.state.propagated.chat_link }),\n React.createElement(Players, { players: this.props.state.propagated.players, observers: this.props.state.propagated.observers, landlord: this.props.state.landlord, next: this.props.state.landlord, name: this.props.name }),\n React.createElement(Trump, { trump: this.props.state.trump }),\n this.props.state.removed_cards.length > 0 ? (React.createElement(\"p\", null,\n \"Note:\",\n \" \",\n this.props.state.removed_cards.map(function (c) { return (React.createElement(InlineCard, { key: c, card: c })); }),\n \" \",\n \"have been removed from the deck\")) : null,\n friendUI,\n exchangeUI,\n exchangeUI === null && bidUI === null && playerId >= 0 ? (React.createElement(React.Fragment, null,\n React.createElement(Cards, { hands: this.props.state.hands, playerId: playerId, trump: this.props.state.trump }),\n React.createElement(\"p\", null, \"Waiting...\"))) : null,\n playerId !== nextPlayer && React.createElement(BeepButton, null),\n isLandlord && bidUI === null ? startGame : null,\n bidUI));\n };\n return Exchange;\n}(React.Component));\nexport default Exchange;\n","import * as React from \"react\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nimport { TimerContext } from \"./TimerProvider\";\nimport LabeledPlay from \"./LabeledPlay\";\nvar JoinRoom = function (props) {\n var _a = React.useState(false), editable = _a[0], setEditable = _a[1];\n var _b = React.useState(props.room_name.length !== 16), shouldGenerate = _b[0], setShouldGenerate = _b[1];\n var send = React.useContext(WebsocketContext).send;\n var setTimeout = React.useContext(TimerContext).setTimeout;\n var handleChange = function (event) {\n return props.setName(event.target.value.trim());\n };\n var handleRoomChange = function (event) {\n return props.setRoomName(event.target.value.trim());\n };\n var handleSubmit = function (event) {\n event.preventDefault();\n if (props.name.length > 0 && props.room_name.length === 16) {\n send({\n room_name: props.room_name,\n name: props.name,\n });\n }\n };\n var editableRoomName = (React.createElement(\"input\", { type: \"text\", placeholder: \"Enter a room code\", value: props.room_name, onChange: handleRoomChange, maxLength: 16 }));\n var nonEditableRoomName = (React.createElement(\"span\", { title: \"Set the room name\", onClick: function (evt) {\n evt.preventDefault();\n setEditable(true);\n } }, props.room_name));\n var generateRoomName = function () {\n var arr = new Uint8Array(8);\n window.crypto.getRandomValues(arr);\n setShouldGenerate(false);\n props.setRoomName(Array.from(arr, function (d) { return (\"0\" + d.toString(16)).substr(-2); }).join(\"\"));\n };\n if (shouldGenerate) {\n setTimeout(generateRoomName, 0);\n }\n return (React.createElement(\"div\", null,\n React.createElement(LabeledPlay, { cards: [\"πŸƒŸ\", \"πŸƒŸ\", \"πŸƒ\", \"πŸƒ\"], label: null }),\n React.createElement(\"form\", { className: \"join-room\", onSubmit: handleSubmit },\n React.createElement(\"div\", null,\n React.createElement(\"h2\", null,\n React.createElement(\"label\", null,\n React.createElement(\"strong\", null, \"Room Name:\"),\n \" \",\n editable ? editableRoomName : nonEditableRoomName,\n \" \",\n React.createElement(\"span\", { title: \"Generate new room\", onClick: function () { return generateRoomName(); } }, \"\\uD83C\\uDFB2\"),\n \" \"))),\n React.createElement(\"div\", null,\n React.createElement(\"label\", null,\n React.createElement(\"strong\", null, \"Player Name:\"),\n \" \",\n React.createElement(\"input\", { type: \"text\", placeholder: \"Enter your name here\", value: props.name, onChange: handleChange, autoFocus: true })),\n React.createElement(\"input\", { type: \"submit\", value: \"Join (or create) the game!\", disabled: props.room_name.length !== 16 ||\n props.name.length === 0 ||\n props.name.length > 32 }))),\n React.createElement(\"div\", null,\n React.createElement(\"p\", null, \"Welcome to the game! Enter your name above to create a new game, or (re-)join the game if it already exists.\"),\n React.createElement(\"p\", null,\n \"If you're unfamiliar with the game, it might be helpful to\",\n \" \",\n React.createElement(\"a\", { href: \"rules\", target: \"_blank\" }, \"read the rules\"),\n \" \",\n \"and then shadow another player\\u2014you can just join with the same name, case-sensitive.\"),\n React.createElement(\"p\", null, \"Once you are in the game, share the room link with at least three friends to start playing!\"),\n React.createElement(\"p\", null, \"This is a game with many house rules, so be sure to check out the game settings to see if your favorite rules are implemented. There's also a settings gear at the top, which can change how the game looks to you.\"))));\n};\nexport default JoinRoom;\n","import * as React from \"react\";\nimport * as ReactModal from \"react-modal\";\nimport { AppStateContext } from \"./AppStateProvider\";\nvar contentStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n};\nvar changeLogVersion = 13;\nvar ChangeLog = function () {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var _b = React.useContext(AppStateContext), state = _b.state, updateState = _b.updateState;\n React.useEffect(function () {\n if (state.changeLogLastViewed !== changeLogVersion) {\n setModalOpen(true);\n }\n }, []);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"a\", { onClick: function (evt) {\n evt.preventDefault();\n setModalOpen(true);\n }, href: window.location.href }, \"Change Log\"),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () {\n setModalOpen(false);\n updateState({ changeLogLastViewed: changeLogVersion });\n }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } },\n React.createElement(\"h2\", null, \"Change Log\"),\n React.createElement(\"p\", null, \"3/21/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Added option to view (most of) the UI in dark mode.\"),\n React.createElement(\"li\", null, \"Added button to randomize the player order.\"),\n React.createElement(\"li\", null, \"Added button to check if everyone is ready.\")),\n React.createElement(\"p\", null, \"3/15/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Added option in Finding Friends to select friends using trumps.\")),\n React.createElement(\"p\", null, \"2/15/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support protecting tractors from four-of-a-kind.\")),\n React.createElement(\"p\", null, \"2/4/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support configuring custom deck properties, like short decks or removing jokers.\")),\n React.createElement(\"p\", null, \"2/2/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix bug where unselecting cards would temporarily remove them from the game.\")),\n React.createElement(\"p\", null, \"1/31/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Players can now choose kitty sizes which require cards to be removed from the game.\")),\n React.createElement(\"p\", null, \"1/27/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"When ending the game early, let players see what cards were remaining.\")),\n React.createElement(\"p\", null, \"1/22/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add the ability to end the game early when there are insufficient points remaining to matter.\")),\n React.createElement(\"p\", null, \"1/21/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add a scoring progress bar with point thresholds.\"),\n React.createElement(\"li\", null, \"Add a setting to prevent friends from joining twice (in difficulty settings).\")),\n React.createElement(\"p\", null, \"1/18/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Ammend the \\u201CPointCardNotAllowed\\u201D friend selection policy. King is now a valid friend when the landlord's rank is Ace.\")),\n React.createElement(\"p\", null, \"1/8/2021:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add settings for reinforcing a bid after it has been overturned, and for overbidding yourself.\"),\n React.createElement(\"li\", null, \"Add a setting to show debug information, to help with more detailed bug reports.\")),\n React.createElement(\"p\", null, \"12/11/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support a friend selection policy that disallows point cards.\")),\n React.createElement(\"p\", null, \"12/07/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add a setting which hides the indication of which player that can defeat a throw.\"),\n React.createElement(\"li\", null, \"Add a card-protection setting which disables format-based play requirements.\")),\n React.createElement(\"p\", null, \"11/22/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null,\n \"More rigorously define trick-format decomposition, especially when more than four decks are involved. See the issues referenced in\",\n \" \",\n React.createElement(\"a\", { href: \"https://github.com/rbtying/shengji/pull/258/files\", target: \"_blank\", rel: \"noreferrer\" }, \"PR #258\"),\n \" \",\n \"for details.\")),\n React.createElement(\"p\", null, \"11/13/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix bug in longest-component throw-evaluation policy where the winner for tricks of single cards was always the first player.\")),\n React.createElement(\"p\", null, \"11/11/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support a throw evaluation policy based on the longest component.\")),\n React.createElement(\"p\", null, \"11/01/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support more granular step sizes in scoring settings on a per-number-of-decks basis.\")),\n React.createElement(\"p\", null, \"9/27/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support limiting joker/no-trump bids in games with more than two decks.\")),\n React.createElement(\"p\", null, \"9/18/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix performance issues in long games.\")),\n React.createElement(\"p\", null, \"8/30/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support end of game kitty reveal.\")),\n React.createElement(\"p\", null, \"8/09/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support configuring different score thresholds for each game.\")),\n React.createElement(\"p\", null, \"8/07/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Allow card colors to be customized\"),\n React.createElement(\"li\", null, \"Add option to play sound during draw. Sound sourced from dersuperanton at freesound.org\")),\n React.createElement(\"p\", null, \"8/02/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Support beeps in exchange phase\")),\n React.createElement(\"p\", null, \"7/26/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix a bug where throws in trump of the trump-rank-card would be incorrectly blocked\"),\n React.createElement(\"li\", null, \"Implement helper which lets you know what plays you can make and tells you about format-decompositions\"),\n React.createElement(\"li\", null, \"Allow player to specify preferred grouping in case of ambiguity, e.g. 22333 as either [22][333] or [2233][3]\"),\n React.createElement(\"li\", null, \"Add UI hint which shows you cards in the same suit\"),\n React.createElement(\"li\", null, \"Add UI setting which allows you to separate cards by suit\")),\n React.createElement(\"p\", null, \"7/23/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Move a bunch of settings into modals to make interface cleaner\")),\n React.createElement(\"p\", null, \"7/19/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Bid by clicking on a predefined set of valid bids\")),\n React.createElement(\"p\", null, \"7/18/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Allow zero-sized kitty in the UI\")),\n React.createElement(\"p\", null, \"7/15/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add game option for limiting who can start a game\")),\n React.createElement(\"p\", null, \"7/09/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add a game option for (disallowing) shadowing of other players\")),\n React.createElement(\"p\", null, \"7/02/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#21) Add a screen and confetti when you successfully defend A!\")),\n React.createElement(\"p\", null, \"7/02/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#171) Add game option disable taking back bids\"),\n React.createElement(\"li\", null, \"(#68) Add game option disable taking back plays\"),\n React.createElement(\"li\", null, \"(#17) Add game option for \\u201Cstealing\\u201D the bottom cards\")),\n React.createElement(\"p\", null, \"7/01/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add the option to use SVG cards rather than text cards.\")),\n React.createElement(\"p\", null, \"6/28/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#163) add game option to reward a bonus level for landlord team to win with a smaller size team\")),\n React.createElement(\"p\", null, \"6/26/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#160) add game option to allow outbid only with more cards\")),\n React.createElement(\"p\", null, \"6/25/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#158) add user option to display bid cards in separate row in Draw stage\")),\n React.createElement(\"p\", null, \"6/24/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#156) add FirstLandlordSelectionPolicy to set the first bidder as landlord when no landlord is selected\")),\n React.createElement(\"p\", null, \"6/21/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#145) Save, load, reset game settings\"),\n React.createElement(\"li\", null, \"(#154) Landlord emoji option\")),\n React.createElement(\"p\", null, \"6/20/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add the ability to wrap-around after defending on A.\"),\n React.createElement(\"li\", null, \"Show throw breakdowns in the UI to make throws more obvious.\")),\n React.createElement(\"p\", null, \"6/17/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix bug where points display was highlighted blue.\")),\n React.createElement(\"p\", null, \"6/14/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix bug where previous-trick showed current trick.\"),\n React.createElement(\"li\", null, \"(#134) Fix bug where defend-points allowed defending team to skip defending points.\")),\n React.createElement(\"p\", null, \"6/13/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#133) Improve trick list to show landlord, better coloring of team and winning trick.\")),\n React.createElement(\"p\", null, \"6/12/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#131) Add option to disallow using highest non-trump card to select friend.\")),\n React.createElement(\"p\", null, \"6/7/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#127) Simplify friend selection description.\")),\n React.createElement(\"p\", null, \"6/6/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"(#125) Highlight all members of the landlord's team in the trick view.\")),\n React.createElement(\"p\", null, \"6/5/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix a bug (#35) so as to disallow picking trump cards as friend.\")),\n React.createElement(\"p\", null, \"5/25/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Fix bug in longest-tuple-protected mode where tractors of longer tuples would erroneously get drawn out.\"),\n React.createElement(\"li\", null, \"Add support for throw evaluation based on the highest card in the throw.\")),\n React.createElement(\"p\", null, \"5/24/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add game result statistics tracking.\")),\n React.createElement(\"p\", null, \"5/13/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"Add an option to protect triples from being drawn out by pairs\"),\n React.createElement(\"li\", null, \"Fill in the suit character in the trump UI\")),\n React.createElement(\"p\", null, \"5/8/2020:\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"When leader is set to winner-of-bid, players bid their own levels rather than a random selected one.\"),\n React.createElement(\"li\", null, \"Card labels are not visible above the settings pane.\"),\n React.createElement(\"li\", null, \"Cards can be revealed from the bottom when the deck is fully drawn to determine trump.\")),\n React.createElement(\"hr\", null),\n React.createElement(\"p\", null, \"Changes prior to 5/8/2020 not listed\"))));\n};\nvar Credits = function () { return (React.createElement(\"p\", { style: { padding: \"0 20px\" } },\n \"Made by Robert Ying, Abra Shen, and other\",\n \" \",\n React.createElement(\"a\", { href: \"https://github.com/rbtying/shengji/graphs/contributors\", target: \"_blank\", rel: \"noreferrer\" }, \"friends\"),\n \". Consider buying us boba via Venmo at @Robert-Ying, or contributing on\",\n \" \",\n React.createElement(\"a\", { href: \"https://github.com/rbtying/shengji\", target: \"_blank\", rel: \"noreferrer\" }, \"GitHub\"),\n \"!\",\n React.createElement(\"span\", { style: { float: \"right\" } },\n React.createElement(ChangeLog, null)))); };\nexport default Credits;\n","import * as React from \"react\";\nimport InlineCard from \"./InlineCard\";\nimport classNames from \"classnames\";\nimport ArrayUtil from \"./util/array\";\nvar renderMessage = function (message) {\n var _a;\n var variant = (_a = message.data) === null || _a === void 0 ? void 0 : _a.variant;\n switch (variant === null || variant === void 0 ? void 0 : variant.type) {\n case \"MadeBid\":\n return (React.createElement(\"span\", null,\n message.data.actor_name,\n \" bid\",\n \" \",\n ArrayUtil.range(variant.count, function (i) { return (React.createElement(InlineCard, { card: variant.card, key: i })); })));\n case \"PlayedCards\":\n return (React.createElement(\"span\", null,\n message.data.actor_name,\n \" played\",\n \" \",\n variant.cards.map(function (card, i) { return (React.createElement(InlineCard, { card: card, key: i })); })));\n case \"EndOfGameKittyReveal\":\n return (React.createElement(\"span\", null,\n variant.cards.map(function (card, i) { return (React.createElement(InlineCard, { card: card, key: i })); }),\n \" \",\n \"in kitty\"));\n case \"GameScoringParametersChanged\":\n return renderScoringMessage(message);\n default:\n return React.createElement(\"span\", null, message.message);\n }\n};\nvar renderScoringMessage = function (message) {\n var _a;\n var changes = [];\n var variant = (_a = message.data) === null || _a === void 0 ? void 0 : _a.variant;\n if ((variant === null || variant === void 0 ? void 0 : variant.type) === \"GameScoringParametersChanged\") {\n if (variant.old_parameters.step_size_per_deck !==\n variant.parameters.step_size_per_deck) {\n changes.push(React.createElement(\"span\", { key: changes.length },\n \"step size: \",\n variant.parameters.step_size_per_deck,\n \"\\u5206 per deck\"));\n }\n if (variant.old_parameters.deadzone_size !== variant.parameters.deadzone_size) {\n changes.push(React.createElement(\"span\", { key: changes.length },\n \"non-leveling steps: \",\n variant.parameters.deadzone_size,\n \" \"));\n }\n if (variant.old_parameters.num_steps_to_non_landlord_turnover !==\n variant.parameters.num_steps_to_non_landlord_turnover) {\n changes.push(React.createElement(\"span\", { key: changes.length },\n \"steps to turnover:\",\n \" \",\n variant.parameters.num_steps_to_non_landlord_turnover,\n \" \"));\n }\n for (var k in variant.parameters.step_adjustments) {\n var adj = variant.parameters.step_adjustments[k];\n if (adj !== variant.old_parameters.step_adjustments[k]) {\n changes.push(React.createElement(\"span\", { key: changes.length },\n \"step size adjustment for \",\n k,\n \" decks set to \",\n adj,\n \" \"));\n }\n }\n for (var k in variant.old_parameters.step_adjustments) {\n var adj = variant.parameters.step_adjustments[k];\n if (adj === undefined || adj === null || adj === 0) {\n changes.push(React.createElement(\"span\", { key: changes.length },\n \"adjustment for \",\n k,\n \" decks removed \"));\n }\n }\n if (variant.old_parameters.bonus_level_policy !==\n variant.parameters.bonus_level_policy) {\n if (variant.parameters.bonus_level_policy ===\n \"BonusLevelForSmallerLandlordTeam\") {\n changes.push(React.createElement(\"span\", { key: changes.length }, \"small-team bonus enabled\"));\n }\n else {\n changes.push(React.createElement(\"span\", { key: changes.length }, \"small-team bonus disabled\"));\n }\n }\n return (React.createElement(\"span\", null,\n message.data.actor_name,\n \" updated the scoring parameters: \",\n changes));\n }\n else {\n return null;\n }\n};\nvar ChatMessage = function (props) {\n var _a;\n var message = props.message;\n return (React.createElement(React.Fragment, null,\n ((_a = message.data) === null || _a === void 0 ? void 0 : _a.variant.type) === \"StartingGame\" ? (React.createElement(\"p\", { className: classNames(\"message\", {\n \"game-message\": message.from_game,\n }) }, \"\\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C \\uD83D\\uDE9C\")) : null,\n React.createElement(\"p\", { className: classNames(\"message\", { \"game-message\": message.from_game }) },\n React.createElement(\"span\", null,\n message.from,\n \": \"),\n \" \",\n renderMessage(message))));\n};\nexport default ChatMessage;\n","import * as React from \"react\";\nvar PaperPlane = function (_a) {\n var _b = _a.width, width = _b === void 0 ? \"100%\" : _b;\n return (React.createElement(\"svg\", { focusable: \"false\", role: \"img\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\", width: width },\n React.createElement(\"path\", { fill: \"currentcolor\", d: \"M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z\" })));\n};\nexport default PaperPlane;\n","import * as React from \"react\";\nimport ChatMessage from \"./ChatMessage\";\nimport ChatInput from \"./ChatInput\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nvar Chat = function (props) {\n var anchor = React.useRef(null);\n var send = React.useContext(WebsocketContext).send;\n React.useEffect(function () {\n var _a;\n if (anchor.current !== null) {\n var rect = anchor.current.getBoundingClientRect();\n var html = document.documentElement;\n var isVisible = rect.top >= 0 &&\n rect.left >= 0 &&\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n rect.bottom <= (window.innerHeight || html.clientHeight) &&\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n rect.right <= (window.innerWidth || html.clientWidth);\n if (isVisible) {\n (_a = anchor.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: \"nearest\", inline: \"start\" });\n }\n }\n }, [props.messages]);\n var handleSubmit = function (message) { return send({ Message: message }); };\n return (React.createElement(\"div\", { className: \"chat\" },\n React.createElement(\"div\", { className: \"messages\" },\n props.messages.map(function (m, idx) { return (React.createElement(ChatMessage, { message: m, key: idx })); }),\n React.createElement(\"div\", { className: \"chat-anchor\", ref: anchor })),\n React.createElement(ChatInput, { onSubmit: handleSubmit })));\n};\nexport default Chat;\n","import * as React from \"react\";\nimport beep from \"./beep\";\nimport { TimerContext } from \"./TimerProvider\";\nvar defaultBeeper = function () { return beep(3, 440, 200); };\nvar Beeper = function (_a) {\n var _b = _a.beeper, beeper = _b === void 0 ? defaultBeeper : _b, _c = _a.interval, interval = _c === void 0 ? 5000 : _c;\n var _d = React.useContext(TimerContext), setInterval = _d.setInterval, clearInterval = _d.clearInterval;\n React.useEffect(function () {\n beeper();\n var timer = setInterval(beeper, interval);\n return function () { return clearInterval(timer); };\n }, []);\n return null;\n};\nexport default Beeper;\n","import * as React from \"react\";\nimport classNames from \"classnames\";\nimport LabeledPlay from \"./LabeledPlay\";\nimport ArrayUtils from \"./util/array\";\nvar Trick = function (props) {\n var namesById = ArrayUtils.mapObject(props.players, function (p) { return [\n String(p.id),\n p.name,\n ]; });\n var blankCards = props.trick.played_cards.length > 0\n ? Array(props.trick.played_cards[0].cards.length).fill(\"πŸ‚ \")\n : [\"πŸ‚ \"];\n var betterPlayer = props.trick.played_cards.length > 0\n ? props.trick.played_cards[0].better_player\n : null;\n var playedByID = {};\n var cardsFromMappingByID = {};\n var playOrder = [];\n props.trick.played_cards.forEach(function (played, idx) {\n playOrder.push(played.id);\n playedByID[played.id] = played;\n var m = props.trick.played_card_mappings[idx];\n if (m !== undefined && m !== null && m.length > 0) {\n // We should coalesce blocks of `Repeated` of count 1 together, since\n // that displays more nicely.\n var mapping_1 = [];\n var singles_1 = [];\n m.forEach(function (mm) {\n if (mm.Repeated !== undefined && mm.Repeated.count === 1) {\n singles_1.push(mm.Repeated.card.card);\n }\n else if (mm.Repeated !== undefined) {\n mapping_1.push(ArrayUtils.range(mm.Repeated.count, function (_) { return mm.Repeated.card.card; }));\n }\n else if (mm.Tractor !== undefined) {\n mapping_1.push(mm.Tractor.members.flatMap(function (mmm) {\n return ArrayUtils.range(mm.Tractor.count, function (_) { return mmm.card; });\n }));\n }\n });\n mapping_1.push(singles_1);\n cardsFromMappingByID[played.id] = mapping_1;\n }\n });\n if (props.showTrickInPlayerOrder) {\n playOrder = props.players.map(function (p) { return p.id; });\n }\n else {\n props.trick.player_queue.forEach(function (id) { return playOrder.push(id); });\n }\n return (React.createElement(\"div\", { className: \"trick\" }, playOrder.map(function (id) {\n var _a, _b;\n var winning = props.trick.current_winner === id;\n var better = betterPlayer === id;\n var cards = id in playedByID ? playedByID[id].cards : blankCards;\n var suffix = winning ? \" (!)\" : better ? \" (-)\" : \"\";\n var className = classNames(winning\n ? \"winning\"\n : props.trick.player_queue[0] === id\n ? \"notify\"\n : \"\", {\n landlord: id === props.landlord || ((_a = props.landlords_team) === null || _a === void 0 ? void 0 : _a.includes(id)),\n });\n return (React.createElement(LabeledPlay, { key: id, id: id, label: namesById[id] +\n (id === props.landlord ? \" \" + props.landlord_suffix : \"\") +\n suffix, className: className, groupedCards: cardsFromMappingByID[id], cards: cards, next: props.next, moreCards: (_b = playedByID[id]) === null || _b === void 0 ? void 0 : _b.bad_throw_cards }));\n })));\n};\nexport default Trick;\n","import * as React from \"react\";\nvar CheckpointCircle = function (props) {\n return (React.createElement(\"div\", { style: {\n position: \"relative\",\n left: props.position,\n transform: \"translate(-50%, 0%)\",\n backgroundColor: props.color,\n marginTop: props.marginTop,\n height: \"30px\",\n width: \"30px\",\n borderWidth: \"5px\",\n borderStyle: \"solid\",\n borderColor: props.borderColor !== undefined ? props.borderColor : props.color,\n borderRadius: \"25px\",\n } },\n React.createElement(\"div\", { style: {\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n } }, props.text)));\n};\nvar convertToPercentage = function (proportion) {\n return (100 * proportion).toFixed(2) + \"%\";\n};\nvar ProgressBar = function (props) {\n var landlordColor = \"#d9534f\";\n var challengerColor = \"#5bc0de\";\n var neutralColor = \"lightgray\";\n var totalPoints = props.totalPoints, challengerPoints = props.challengerPoints, landlordPoints = props.landlordPoints;\n var checkpointColors = props.checkpoints.map(function (checkpoint) {\n if (challengerPoints >= checkpoint) {\n return challengerColor;\n }\n else if (landlordPoints >= totalPoints - checkpoint) {\n return landlordColor;\n }\n else {\n return neutralColor;\n }\n });\n var landlordPosition = convertToPercentage((totalPoints - landlordPoints) / totalPoints);\n var landlordWidth = convertToPercentage(landlordPoints / totalPoints);\n var challengerPosition = convertToPercentage(challengerPoints / totalPoints);\n return (React.createElement(\"div\", { style: { color: \"#000\" } },\n React.createElement(\"div\", { style: {\n width: \"100%\",\n borderRadius: \"5px\",\n backgroundColor: \"lightgray\",\n } },\n React.createElement(\"div\", { style: {\n width: challengerPosition,\n height: \"20px\",\n borderRadius: \"5px\",\n backgroundColor: challengerColor,\n } }),\n !props.hideLandlordPoints && (React.createElement(\"div\", { className: \"progress-bar-landlord\", style: {\n marginTop: \"-20px\",\n position: \"relative\",\n left: landlordPosition,\n width: landlordWidth,\n height: \"20px\",\n borderRadius: \"5px\",\n backgroundColor: landlordColor,\n } }))),\n props.checkpoints.map(function (checkpoint, i) {\n return (React.createElement(CheckpointCircle, { key: i, text: checkpoint, color: checkpointColors[i], position: convertToPercentage(checkpoint / totalPoints), marginTop: i === 0 ? \"-30px\" : \"-40px\" }));\n }),\n React.createElement(CheckpointCircle, { text: challengerPoints, color: \"#fff\", borderColor: challengerColor, position: challengerPosition, marginTop: \"-40px\" }),\n !props.hideLandlordPoints && (React.createElement(CheckpointCircle, { text: totalPoints - landlordPoints, color: \"#fff\", borderColor: landlordColor, position: landlordPosition, marginTop: \"-40px\" }))));\n};\nexport default ProgressBar;\n","import * as React from \"react\";\nimport ProgressBar from \"./ProgressBar\";\nimport ArrayUtils from \"./util/array\";\nimport ObjectUtils from \"./util/object\";\nimport LabeledPlay from \"./LabeledPlay\";\nimport classNames from \"classnames\";\nimport { cardLookup } from \"./util/cardHelpers\";\nimport WasmContext from \"./WasmContext\";\nexport var calculatePoints = function (players, landlordTeam, points, penalties) {\n var pointsPerPlayer = ObjectUtils.mapValues(points, function (cards) {\n return ArrayUtils.sum(cards.map(function (card) { return cardLookup[card].points; }));\n });\n var totalPointsPlayed = ArrayUtils.sum(Object.values(pointsPerPlayer));\n var nonLandlordPoints = ArrayUtils.sum(players\n .filter(function (p) { return !landlordTeam.includes(p.id); })\n .map(function (p) { return pointsPerPlayer[p.id]; }));\n var nonLandlordPointsWithPenalties = nonLandlordPoints;\n players.forEach(function (p) {\n var penalty = penalties[p.id];\n if (penalty > 0) {\n if (landlordTeam.includes(p.id)) {\n nonLandlordPointsWithPenalties += penalty;\n }\n else {\n nonLandlordPointsWithPenalties -= penalty;\n }\n }\n });\n return {\n nonLandlordPoints: nonLandlordPoints,\n nonLandlordPointsWithPenalties: nonLandlordPointsWithPenalties,\n totalPointsPlayed: totalPointsPlayed,\n };\n};\nvar Points = function (props) {\n var pointsPerPlayer = ObjectUtils.mapValues(props.points, function (cards) {\n return ArrayUtils.sum(cards.map(function (card) { return cardLookup[card].points; }));\n });\n var _a = React.useContext(WasmContext), computeScore = _a.computeScore, explainScoring = _a.explainScoring;\n var _b = calculatePoints(props.players, props.landlordTeam, props.points, props.penalties), totalPointsPlayed = _b.totalPointsPlayed, nonLandlordPointsWithPenalties = _b.nonLandlordPointsWithPenalties, nonLandlordPoints = _b.nonLandlordPoints;\n var penaltyDelta = nonLandlordPointsWithPenalties - nonLandlordPoints;\n var _c = computeScore({\n params: props.gameScoringParameters,\n decks: props.decks,\n smaller_landlord_team_size: props.smallerTeamSize,\n non_landlord_points: nonLandlordPointsWithPenalties,\n }), score = _c.score, nextThreshold = _c.next_threshold;\n var playerPointElements = props.players.map(function (player) {\n var onLandlordTeam = props.landlordTeam.includes(player.id);\n var cards = props.points[player.id].length > 0 ? props.points[player.id] : [\"πŸ‚ \"];\n var penalty = player.id in props.penalties ? props.penalties[player.id] : 0;\n if (props.hideLandlordPoints && onLandlordTeam) {\n return null;\n }\n else {\n return (React.createElement(LabeledPlay, { key: player.id, className: classNames({ landlord: onLandlordTeam }), label: player.name + \": \" + (pointsPerPlayer[player.id] - penalty) + \"\\u5206\", cards: cards }));\n }\n });\n // TODO: Pass the landlord as a Player object instead of numeric ID\n var landlord = props.players.find(function (p) { return p.id === props.landlord; });\n var thresholdStr = \"\";\n if (score.landlord_won) {\n thresholdStr = landlord.name + \"'s team will go up \" + score.landlord_delta + \" level\" + (score.landlord_delta === 1 ? \"\" : \"s\");\n if (score.landlord_bonus) {\n thresholdStr += \", including a small-team bonus\";\n }\n }\n else if (score.non_landlord_delta === 0) {\n thresholdStr = \"Neither team will go up a level\";\n }\n else {\n thresholdStr = \"The attacking team will go up \" + score.non_landlord_delta + \" level\" + (score.non_landlord_delta === 1 ? \"\" : \"s\");\n }\n thresholdStr += \" (next threshold: \" + nextThreshold + \"\\u5206)\";\n var _d = explainScoring({\n params: props.gameScoringParameters,\n smaller_landlord_team_size: props.smallerTeamSize,\n decks: props.decks,\n }), scoreTransitions = _d.results, totalPoints = _d.total_points;\n return (React.createElement(\"div\", { className: \"points\" },\n React.createElement(\"h2\", null, \"Points\"),\n React.createElement(ProgressBar, { checkpoints: scoreTransitions\n .map(function (transition) { return transition.point_threshold; })\n .filter(function (threshold) { return threshold >= 10 && threshold < totalPoints; }), totalPoints: totalPoints, landlordPoints: totalPointsPlayed - nonLandlordPoints, challengerPoints: nonLandlordPointsWithPenalties, hideLandlordPoints: props.hideLandlordPoints }),\n React.createElement(\"p\", null,\n penaltyDelta === 0\n ? nonLandlordPoints\n : nonLandlordPoints + \" + \" + penaltyDelta,\n \"\\u5206\",\n props.hideLandlordPoints ? null : \" / \" + totalPointsPlayed + \"\\u5206\",\n \" stolen from \",\n landlord.name,\n \"'s team. \",\n thresholdStr),\n playerPointElements));\n};\nexport default Points;\n","import * as React from \"react\";\nvar AutoPlayButton = function (props) {\n var onSubmit = props.onSubmit, canSubmit = props.canSubmit, isCurrentPlayerTurn = props.isCurrentPlayerTurn, playDescription = props.playDescription, currentWinner = props.currentWinner, unsetAutoPlayWhenWinnerChanges = props.unsetAutoPlayWhenWinnerChanges;\n var _a = React.useState(null), autoplay = _a[0], setAutoplay = _a[1];\n React.useEffect(function () {\n if (autoplay !== null) {\n if (!canSubmit) {\n setAutoplay(null);\n }\n else if (unsetAutoPlayWhenWinnerChanges &&\n autoplay.observedWinner !== currentWinner) {\n setAutoplay(null);\n }\n else if (isCurrentPlayerTurn) {\n setAutoplay(null);\n onSubmit();\n }\n }\n }, [\n autoplay,\n canSubmit,\n currentWinner,\n isCurrentPlayerTurn,\n unsetAutoPlayWhenWinnerChanges,\n ]);\n var handleClick = function () {\n if (isCurrentPlayerTurn) {\n onSubmit();\n }\n else if (autoplay !== null) {\n setAutoplay(null);\n }\n else {\n setAutoplay({ observedWinner: currentWinner });\n }\n };\n return (React.createElement(\"button\", { onClick: handleClick, disabled: !canSubmit }, isCurrentPlayerTurn\n ? \"Play selected cards\" + (playDescription !== null ? \" (\" + playDescription + \")\" : \"\")\n : autoplay !== null\n ? \"Don't autoplay selected cards\"\n : \"Autoplay selected cards\"));\n};\nexport default AutoPlayButton;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from \"react\";\nimport * as ReactModal from \"react-modal\";\nimport Header from \"./Header\";\nimport Beeper from \"./Beeper\";\nimport Trump from \"./Trump\";\nimport Friends from \"./Friends\";\nimport Trick from \"./Trick\";\nimport Cards from \"./Cards\";\nimport Points, { calculatePoints } from \"./Points\";\nimport LabeledPlay from \"./LabeledPlay\";\nimport Players from \"./Players\";\nimport ArrayUtils from \"./util/array\";\nimport AutoPlayButton from \"./AutoPlayButton\";\nimport BeepButton from \"./BeepButton\";\nimport { WebsocketContext } from \"./WebsocketProvider\";\nimport WasmContext from \"./WasmContext\";\nimport InlineCard from \"./InlineCard\";\nvar contentStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n};\nvar Play = function (props) {\n var send = React.useContext(WebsocketContext).send;\n var _a = React.useState([]), selected = _a[0], setSelected = _a[1];\n var _b = React.useState([]), grouping = _b[0], setGrouping = _b[1];\n var _c = React.useContext(WasmContext), findViablePlays = _c.findViablePlays, canPlayCards = _c.canPlayCards, nextThresholdReachable = _c.nextThresholdReachable, sortAndGroupCards = _c.sortAndGroupCards;\n var playCards = function () {\n send({ Action: { PlayCardsWithHint: [selected, grouping[0].grouping] } });\n setSelected([]);\n setGrouping([]);\n };\n var sendEvent = function (event) { return function () { return send(event); }; };\n var takeBackCards = sendEvent({ Action: \"TakeBackCards\" });\n var endTrick = sendEvent({ Action: \"EndTrick\" });\n var endGameEarly = sendEvent({ Action: \"EndGameEarly\" });\n var startNewGame = sendEvent({ Action: \"StartNewGame\" });\n var playPhase = props.playPhase;\n // TODO: instead of telling who the player is by checking the name, pass in\n // the Player object\n var isSpectator = true;\n var currentPlayer = playPhase.propagated.players.find(function (p) { return p.name === props.name; });\n if (currentPlayer === undefined) {\n currentPlayer = playPhase.propagated.observers.find(function (p) { return p.name === props.name; });\n }\n else {\n isSpectator = false;\n }\n if (currentPlayer === undefined) {\n currentPlayer = {\n id: -1,\n name: props.name,\n level: \"\",\n metalevel: 0,\n };\n }\n React.useEffect(function () {\n // When the hands change, our `selected` cards may become invalid, since we\n // could have raced and selected cards that we just played.\n //\n // In that case, let's fix the selected cards.\n var hand = currentPlayer.id in playPhase.hands.hands\n ? __assign({}, playPhase.hands.hands[currentPlayer.id]) : {};\n selected.forEach(function (card) {\n if (card in hand) {\n hand[card] = hand[card] - 1;\n }\n else {\n hand[card] = -1;\n }\n });\n var toRemove = Object.entries(hand)\n .filter(function (x) { return x[1] < 0; })\n .map(function (x) { return x[0]; });\n var newSelected = ArrayUtils.minus(selected, toRemove);\n setSelected(newSelected);\n setGrouping(findViablePlays(playPhase.trump, newSelected));\n }, [playPhase.hands.hands, currentPlayer.id]);\n var nextPlayer = playPhase.trick.player_queue[0];\n var lastPlay = playPhase.trick.played_cards[playPhase.trick.played_cards.length - 1];\n var isCurrentPlayerTurn = currentPlayer.id === nextPlayer;\n var canPlay = false;\n if (!isSpectator) {\n canPlay = canPlayCards({\n trick: playPhase.trick,\n id: currentPlayer.id,\n hands: playPhase.hands,\n cards: selected,\n trick_draw_policy: playPhase.propagated.trick_draw_policy,\n });\n // In order to play the first trick, the grouping must be disambiguated!\n if (lastPlay === undefined) {\n canPlay = canPlay && grouping.length === 1;\n }\n }\n canPlay = canPlay && !playPhase.game_ended_early;\n var canTakeBack = lastPlay !== undefined &&\n currentPlayer.id === lastPlay.id &&\n !playPhase.game_ended_early;\n var shouldBeBeeping = props.beepOnTurn && isCurrentPlayerTurn && !playPhase.game_ended_early;\n var remainingCardsInHands = ArrayUtils.sum(Object.values(playPhase.hands.hands).map(function (playerHand) {\n return ArrayUtils.sum(Object.values(playerHand));\n }));\n var _d = calculatePoints(playPhase.propagated.players, playPhase.landlords_team, playPhase.points, playPhase.penalties), totalPointsPlayed = _d.totalPointsPlayed, nonLandlordPointsWithPenalties = _d.nonLandlordPointsWithPenalties;\n var noCardsLeft = remainingCardsInHands === 0 && playPhase.trick.played_cards.length === 0;\n var canFinish = noCardsLeft || playPhase.game_ended_early;\n var canEndGameEarly = !canFinish &&\n !nextThresholdReachable({\n decks: playPhase.decks,\n params: playPhase.propagated.game_scoring_parameters,\n non_landlord_points: nonLandlordPointsWithPenalties,\n observed_points: totalPointsPlayed,\n });\n var landlordSuffix = playPhase.propagated.landlord_emoji !== undefined &&\n playPhase.propagated.landlord_emoji !== null &&\n playPhase.propagated.landlord_emoji !== \"\"\n ? playPhase.propagated.landlord_emoji\n : \"(当庄)\";\n var landlordTeamSize = playPhase.landlords_team.length;\n var configFriendTeamSize = 0;\n var smallerTeamSize = false;\n if (playPhase.game_mode !== \"Tractor\") {\n configFriendTeamSize =\n playPhase.game_mode.FindingFriends.num_friends != null\n ? playPhase.game_mode.FindingFriends.num_friends + 1\n : playPhase.propagated.players.length / 2;\n smallerTeamSize = landlordTeamSize < configFriendTeamSize;\n }\n var getCardsFromHand = function (pid) {\n var cardsInHand = pid in playPhase.hands.hands\n ? Object.entries(playPhase.hands.hands[pid]).flatMap(function (_a) {\n var c = _a[0], ct = _a[1];\n return Array(ct).fill(c);\n })\n : [];\n return sortAndGroupCards({\n cards: cardsInHand,\n trump: props.playPhase.trump,\n });\n };\n return (React.createElement(\"div\", null,\n shouldBeBeeping ? React.createElement(Beeper, null) : null,\n React.createElement(Header, { gameMode: playPhase.propagated.game_mode, chatLink: playPhase.propagated.chat_link }),\n React.createElement(Players, { players: playPhase.propagated.players, observers: playPhase.propagated.observers, landlord: playPhase.landlord, landlords_team: playPhase.landlords_team, name: props.name, next: nextPlayer }),\n React.createElement(Trump, { trump: playPhase.trump }),\n React.createElement(Friends, { gameMode: playPhase.game_mode, showPlayed: true }),\n playPhase.removed_cards.length > 0 ? (React.createElement(\"p\", null,\n \"Note:\",\n \" \",\n playPhase.removed_cards.map(function (c) { return (React.createElement(InlineCard, { key: c, card: c })); }),\n \" \",\n \"have been removed from the deck\")) : null,\n React.createElement(Trick, { trick: playPhase.trick, players: playPhase.propagated.players, landlord: playPhase.landlord, landlord_suffix: landlordSuffix, landlords_team: playPhase.landlords_team, next: nextPlayer, name: props.name, showTrickInPlayerOrder: props.showTrickInPlayerOrder }),\n React.createElement(AutoPlayButton, { onSubmit: playCards, playDescription: grouping.length === 1 && lastPlay === undefined\n ? grouping[0].description\n : null, canSubmit: canPlay, currentWinner: playPhase.trick.current_winner, unsetAutoPlayWhenWinnerChanges: props.unsetAutoPlayWhenWinnerChanges, isCurrentPlayerTurn: isCurrentPlayerTurn }),\n playPhase.propagated.play_takeback_policy === \"AllowPlayTakeback\" && (React.createElement(\"button\", { onClick: takeBackCards, disabled: !canTakeBack }, \"Take back last play\")),\n React.createElement(\"button\", { onClick: endTrick, disabled: playPhase.trick.player_queue.length > 0 || playPhase.game_ended_early }, \"Finish trick\"),\n canEndGameEarly && (React.createElement(\"button\", { onClick: function () {\n confirm(\"Do you want to end the game early? There may still be points in the bottom...\") && endGameEarly();\n } }, \"End game early\")),\n canFinish && React.createElement(\"button\", { onClick: startNewGame }, \"Finish game\"),\n React.createElement(BeepButton, null),\n canFinish && !noCardsLeft && (React.createElement(\"div\", null,\n React.createElement(\"p\", null, \"Cards remaining (that were not played):\"),\n playPhase.propagated.players.map(function (p) { return (React.createElement(LabeledPlay, { key: p.id, label: p.name, cards: getCardsFromHand(p.id).flatMap(function (g) { return g.cards; }) })); }))),\n !canFinish && (React.createElement(React.Fragment, null,\n playPhase.trick.trick_format !== null &&\n !isSpectator &&\n playPhase.trick.player_queue.includes(currentPlayer.id) ? (React.createElement(TrickFormatHelper, { format: playPhase.trick.trick_format, hands: playPhase.hands, playerId: currentPlayer.id, trickDrawPolicy: playPhase.propagated.trick_draw_policy })) : null,\n lastPlay === undefined &&\n isCurrentPlayerTurn &&\n grouping.length > 1 && (React.createElement(\"div\", null,\n React.createElement(\"p\", null, \"It looks like you are making a play that can be interpreted in multiple ways!\"),\n React.createElement(\"p\", null, \"Which of the following did you mean?\"),\n grouping.map(function (g, gidx) { return (React.createElement(\"button\", { key: gidx, onClick: function (evt) {\n evt.preventDefault();\n setGrouping([g]);\n }, className: \"normal\" }, g.description)); }))),\n React.createElement(Cards, { hands: playPhase.hands, playerId: currentPlayer.id, trump: playPhase.trump, selectedCards: selected, onSelect: function (newSelected) {\n setSelected(newSelected);\n setGrouping(findViablePlays(playPhase.trump, newSelected));\n }, notifyEmpty: isCurrentPlayerTurn }))),\n playPhase.last_trick !== undefined &&\n playPhase.last_trick !== null &&\n props.showLastTrick ? (React.createElement(\"div\", null,\n React.createElement(\"p\", null, \"Previous trick\"),\n React.createElement(Trick, { trick: playPhase.last_trick, players: playPhase.propagated.players, landlord: playPhase.landlord, landlord_suffix: landlordSuffix, landlords_team: playPhase.landlords_team, name: props.name, showTrickInPlayerOrder: props.showTrickInPlayerOrder }))) : null,\n React.createElement(Points, { points: playPhase.points, penalties: playPhase.penalties, decks: playPhase.decks, players: playPhase.propagated.players, landlordTeam: playPhase.landlords_team, landlord: playPhase.landlord, hideLandlordPoints: playPhase.propagated.hide_landlord_points, gameScoringParameters: playPhase.propagated.game_scoring_parameters, smallerTeamSize: smallerTeamSize }),\n React.createElement(LabeledPlay, { className: \"kitty\", cards: playPhase.kitty, label: \"\\u5E95\\u724C\" })));\n};\nvar TrickFormatHelper = function (props) {\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var decomposeTrickFormat = React.useContext(WasmContext).decomposeTrickFormat;\n var decomp = decomposeTrickFormat({\n trick_format: props.format,\n hands: props.hands,\n player_id: props.playerId,\n trick_draw_policy: props.trickDrawPolicy,\n });\n var trickSuit = props.format.suit;\n var bestMatch = decomp.findIndex(function (d) { return d.playable.length > 0; });\n return (React.createElement(React.Fragment, null,\n React.createElement(\"button\", { onClick: function (evt) {\n evt.preventDefault();\n setModalOpen(true);\n } }, \"?\"),\n React.createElement(ReactModal, { isOpen: modalOpen, onRequestClose: function () { return setModalOpen(false); }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } },\n React.createElement(\"p\", null,\n \"In order to win, you have to play \",\n decomp[0].description,\n \" in\",\n \" \",\n trickSuit),\n decomp[0].playable.length > 0 && (React.createElement(\"p\", null,\n \"It looks like you are able to match this format, e.g. with\",\n decomp[0].playable.map(function (c, cidx) { return (React.createElement(InlineCard, { key: cidx, card: c })); }))),\n decomp.length > 1 && props.trickDrawPolicy !== \"NoFormatBasedDraw\" && (React.createElement(React.Fragment, null,\n React.createElement(\"p\", null,\n \"If you can't play that, but you \",\n React.createElement(\"em\", null, \"can\"),\n \" play one of the following, you have to play it\"),\n React.createElement(\"ol\", null, decomp.slice(1).map(function (d, idx) { return (React.createElement(\"li\", { key: idx, style: {\n fontWeight: idx === bestMatch - 1 ? \"bold\" : \"normal\",\n } },\n d.description,\n \" in \",\n trickSuit,\n idx === bestMatch - 1 && (React.createElement(React.Fragment, null,\n \" \",\n \"(for example:\",\n \" \",\n d.playable.map(function (c, cidx) { return (React.createElement(InlineCard, { key: cidx, card: c })); }),\n \")\")))); })))),\n React.createElement(\"p\", null,\n \"Otherwise, you have to play as many \",\n trickSuit,\n \" as you can. The remaining cards can be anything.\"),\n trickSuit !== \"Trump\" && (React.createElement(\"p\", null,\n \"If you have no cards in \",\n trickSuit,\n \", you can play\",\n \" \",\n decomp[0].description,\n \" in Trump to potentially win the trick.\")))));\n};\nexport default Play;\n","import * as React from \"react\";\nimport { AppStateContext } from \"./AppStateProvider\";\nexport var DebugInfo = function (_props) {\n var appState = React.useContext(AppStateContext);\n return (React.createElement(\"pre\", null, JSON.stringify({\n gameState: appState.state.gameState,\n settings: appState.state.settings,\n roomName: appState.state.roomName,\n }, null, 2)));\n};\nexport default DebugInfo;\n","import * as React from \"react\";\nimport * as ReactModal from \"react-modal\";\nimport { AppStateContext } from \"./AppStateProvider\";\nvar contentStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n};\nvar HalfTimeBreak = function () {\n var _a = React.useContext(AppStateContext), state = _a.state, updateState = _a.updateState;\n return (React.createElement(React.Fragment, null,\n React.createElement(ReactModal, { isOpen: state.halfTimeBreakNow, onRequestClose: function () {\n updateState({ halfTimeBreakNow: false });\n }, shouldCloseOnOverlayClick: true, shouldCloseOnEsc: true, style: { content: contentStyle } },\n React.createElement(\"h2\", null, \"\\u4EB2\\u4EEC\\uFF0C\\u8BE5\\u90A3\\u4E2A\\u4EC0\\u4E48\\u4E86\\u5427\\uFF1F\"),\n React.createElement(\"div\", { style: { width: \"100%\", height: \"100%\" } },\n React.createElement(\"img\", { src: \"https://i.pinimg.com/originals/ed/77/6e/ed776e900ec6390e82b360fd5ff7c0ee.jpg\", width: \"auto\", height: \"75%\", style: {\n display: \"block\",\n marginLeft: \"auto\",\n marginRight: \"auto\"\n } })))));\n};\nvar Notification = function () { return (React.createElement(\"p\", { style: { padding: \"0 20px\" } },\n React.createElement(\"span\", { style: { float: \"right\" } },\n React.createElement(HalfTimeBreak, null)))); };\nexport default Notification;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as React from \"react\";\nimport classNames from \"classnames\";\nimport Errors from \"./Errors\";\nimport Initialize from \"./Initialize\";\nimport Draw from \"./Draw\";\nimport Exchange from \"./Exchange\";\nimport JoinRoom from \"./JoinRoom\";\nimport { AppStateContext } from \"./AppStateProvider\";\nimport { TimerContext } from \"./TimerProvider\";\nimport Credits from \"./Credits\";\nimport Chat from \"./Chat\";\nimport Play from \"./Play\";\nimport DebugInfo from \"./DebugInfo\";\nimport Notification from \"./Notification\";\nvar Confetti = React.lazy(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, import(\"./Confetti\")];\n case 1: return [2 /*return*/, _a.sent()];\n }\n}); }); });\nvar Root = function () {\n var send = window.send;\n var _a = React.useContext(AppStateContext), state = _a.state, updateState = _a.updateState;\n var timerContext = React.useContext(TimerContext);\n var _b = React.useState([]), previousHeaderMessages = _b[0], setPreviousHeaderMessages = _b[1];\n var _c = React.useState(state.headerMessages.length > 0), showHeaderMessages = _c[0], setShowHeaderMessages = _c[1];\n React.useEffect(function () {\n if (state.headerMessages.length > 0 &&\n (previousHeaderMessages.length !== state.headerMessages.length ||\n !previousHeaderMessages.every(function (m, i) { return state.headerMessages[i] === m; }))) {\n setShowHeaderMessages(true);\n }\n else if (state.headerMessages.length === 0) {\n setShowHeaderMessages(false);\n }\n setPreviousHeaderMessages(state.headerMessages);\n }, [state.headerMessages]);\n React.useEffect(function () {\n if (state.settings.darkMode) {\n document.body.classList.add(\"dark-mode\");\n }\n else {\n document.body.classList.remove(\"dark-mode\");\n }\n return function () {\n document.body.classList.remove(\"dark-mode\");\n };\n }, [state.settings.darkMode]);\n var headerMessages = showHeaderMessages ? (React.createElement(\"div\", { className: \"header-message\", onClick: function () { return setShowHeaderMessages(false); } }, state.headerMessages.map(function (msg, idx) { return (React.createElement(\"p\", { key: idx }, msg)); }))) : null;\n if (state.connected) {\n if (state.gameState === null || state.roomName.length !== 16) {\n return (React.createElement(\"div\", null,\n headerMessages,\n React.createElement(Errors, { errors: state.errors }),\n React.createElement(\"div\", { className: \"game\" },\n React.createElement(\"h1\", null,\n \"\\u5347\\u7EA7 / \",\n React.createElement(\"span\", { className: \"red\" }, \"Tractor\"),\n \" / \\u627E\\u670B\\u53CB /\",\n \" \",\n React.createElement(\"span\", { className: \"red\" }, \"Finding Friends\")),\n React.createElement(JoinRoom, { name: state.name, room_name: state.roomName, setName: function (name) { return updateState({ name: name }); }, setRoomName: function (roomName) {\n updateState({ roomName: roomName });\n window.location.hash = roomName;\n } })),\n React.createElement(\"hr\", null),\n React.createElement(Credits, null),\n React.createElement(Notification, null)));\n }\n else {\n return (React.createElement(\"div\", { className: classNames(state.settings.fourColor ? \"four-color\" : null, state.settings.showCardLabels ? \"always-show-labels\" : null) },\n headerMessages,\n React.createElement(Errors, { errors: state.errors }),\n state.confetti !== null ? (React.createElement(React.Suspense, { fallback: null },\n React.createElement(Confetti, { confetti: state.confetti, clearConfetti: function () { return updateState({ confetti: null }); } }))) : null,\n React.createElement(\"div\", { className: \"game\" },\n state.gameState.Initialize !== undefined ? null : (React.createElement(\"a\", { href: window.location.href, className: \"reset-link\", onClick: function (evt) {\n evt.preventDefault();\n if (window.confirm(\"Do you really want to reset the game?\")) {\n send({ Action: \"ResetGame\" });\n }\n } }, \"Reset game\")),\n state.gameState.Initialize !== undefined ? (React.createElement(Initialize, { state: state.gameState.Initialize, name: state.name })) : null,\n state.gameState.Draw !== undefined ? (React.createElement(Draw, { state: state.gameState.Draw, playDrawCardSound: state.settings.playDrawCardSound, name: state.name, setTimeout: timerContext.setTimeout, clearTimeout: timerContext.clearTimeout })) : null,\n state.gameState.Exchange !== undefined ? (React.createElement(Exchange, { state: state.gameState.Exchange, name: state.name })) : null,\n state.gameState.Play !== undefined ? (React.createElement(Play, { playPhase: state.gameState.Play, name: state.name, showLastTrick: state.settings.showLastTrick, unsetAutoPlayWhenWinnerChanges: state.settings.unsetAutoPlayWhenWinnerChanges, showTrickInPlayerOrder: state.settings.showTrickInPlayerOrder, beepOnTurn: state.settings.beepOnTurn })) : null,\n state.settings.showDebugInfo ? React.createElement(DebugInfo, null) : null),\n React.createElement(Chat, { messages: state.messages }),\n React.createElement(\"hr\", null),\n React.createElement(Credits, null),\n React.createElement(Notification, null)));\n }\n }\n else if (state.everConnected) {\n return (React.createElement(React.Fragment, null,\n React.createElement(\"p\", null, \"It looks like you got disconnected from the server, please refresh! If the game is still ongoing, you should be able to re-join with the same name and pick up where you left off.\")));\n }\n else {\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { className: \"game\" },\n React.createElement(\"h1\", null,\n \"\\u5347\\u7EA7 / \",\n React.createElement(\"span\", { className: \"red\" }, \"Tractor\"),\n \" / \\u627E\\u670B\\u53CB /\",\n \" \",\n React.createElement(\"span\", { className: \"red\" }, \"Finding Friends\")),\n React.createElement(\"p\", null, \"Welcome! This website helps you play \\u5347\\u7EA7 / Tractor / \\u627E\\u670B\\u53CB / Finding Friends with other people online.\"),\n React.createElement(\"p\", null,\n \"If you're not familiar with the rules, check them out\",\n \" \",\n React.createElement(\"a\", { href: \"rules\" }, \"here\"),\n \"!\"),\n React.createElement(\"p\", null, \"Connecting to the server...\")),\n React.createElement(\"hr\", null),\n React.createElement(Credits, null),\n React.createElement(Notification, null)));\n }\n};\nexport default Root;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as ReactModal from \"react-modal\";\nimport * as Sentry from \"@sentry/react\";\nimport \"./style.css\";\nimport AppStateProvider from \"./AppStateProvider\";\nimport WebsocketProvider from \"./WebsocketProvider\";\nimport TimerProvider from \"./TimerProvider\";\nimport Root from \"./Root\";\nvar WasmProvider = React.lazy(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, import(\"./WasmProvider\")];\n case 1: return [2 /*return*/, _a.sent()];\n }\n}); }); });\nvar bootstrap = function () {\n Sentry.init({\n dsn: \"https://dfdd871554eb4ab48de73a6575c1117a@o476591.ingest.sentry.io/5516535\",\n release: window._VERSION,\n ignoreErrors: [\n /Promise.*is.*defined/,\n /WebAssembly.*is.*defined/,\n /fetch.*is.*defined/,\n \"Can't find variable: fetch\",\n \"Can't find variable: WebAssembly\",\n /Loading chunk.*failed/,\n /ChunkLoadError/,\n /Const declarations are not supported in strict mode/,\n ],\n });\n var root = document.getElementById(\"root\");\n ReactModal.setAppElement(root);\n ReactDOM.render(React.createElement(Sentry.ErrorBoundary, { fallback: \"An error has occured, please try refreshing! If that doesn't resolve the issue, consider using the latest version of Mozilla Firefox or Google Chrome browsers.\" },\n React.createElement(React.Suspense, { fallback: \"loading...\" },\n React.createElement(WasmProvider, null,\n React.createElement(TimerProvider, null,\n React.createElement(AppStateProvider, null,\n React.createElement(WebsocketProvider, null,\n React.createElement(Root, null))))))), root);\n};\nbootstrap();\n","import * as React from \"react\";\nexport var WasmContext = React.createContext({\n findViablePlays: function (_, __) { return []; },\n findValidBids: function (_) { return []; },\n sortAndGroupCards: function (_) { return []; },\n decomposeTrickFormat: function (_) { return []; },\n canPlayCards: function (_) { return false; },\n explainScoring: function (_) { return ({ results: [], step_size: 0, total_points: 0 }); },\n nextThresholdReachable: function (_) { return true; },\n computeScore: function (_) { return ({\n score: {\n landlord_won: true,\n landlord_bonus: false,\n landlord_delta: 0,\n non_landlord_delta: 0,\n },\n next_threshold: 0,\n }); },\n computeDeckLen: function (_) { return 0; },\n decodeWireFormat: function (_) { },\n});\nexport default WasmContext;\n","import * as React from \"react\";\nimport { TimerContext } from \"./TimerProvider\";\nvar Timeout = function (props) {\n var _a = React.useContext(TimerContext), setTimeout = _a.setTimeout, clearTimeout = _a.clearTimeout;\n React.useEffect(function () {\n var timeout = setTimeout(props.callback, props.timeout);\n return function () { return clearTimeout(timeout); };\n });\n return null;\n};\nexport default Timeout;\n","// Provides a WebWorker-based timer implementation which doesn't get\n// wakeup-limited by the browser when the tab is running in the background.\n//\n// Relies on timer-worker.js to service the underlying timing requests.\nimport * as React from \"react\";\nexport var TimerContext = React.createContext({\n setTimeout: function (_fn, _delay) { return 0; },\n clearTimeout: function (_id) { },\n setInterval: function (_fn, _interval) { return 0; },\n clearInterval: function (_id) { },\n});\nvar _TimerProvider = function (props) {\n var _a = React.useState(null), worker = _a[0], setWorker = _a[1];\n var timeoutId = React.useRef(0);\n var callbacks = React.useRef(new Map());\n React.useEffect(function () {\n var timerWorker = new Worker(\"timer-worker.js\");\n timerWorker.addEventListener(\"message\", function (evt) {\n var data = evt.data;\n var id = data.id;\n if (callbacks.current.has(id)) {\n callbacks.current.get(id)();\n }\n if (data.variant === \"timeout\") {\n callbacks.current.delete(id);\n }\n });\n setWorker(timerWorker);\n return function () {\n timerWorker.terminate();\n };\n }, []);\n var setTimeout = function (fn, delay) {\n timeoutId.current += 1;\n delay = delay === undefined ? 0 : delay;\n var id = timeoutId.current;\n callbacks.current.set(id, fn);\n if (worker !== null) {\n worker.postMessage({ command: \"setTimeout\", id: id, timeout: delay });\n }\n return id;\n };\n var clearTimeout = function (id) {\n worker.postMessage({ command: \"clearTimeout\", id: id });\n callbacks.current.delete(id);\n };\n var setInterval = function (fn, interval) {\n timeoutId.current += 1;\n interval = interval === undefined ? 0 : interval;\n var id = timeoutId.current;\n callbacks.current.set(id, fn);\n if (worker !== null) {\n worker.postMessage({ command: \"setInterval\", id: id, interval: interval });\n }\n return id;\n };\n var clearInterval = function (id) {\n if (worker !== null) {\n worker.postMessage({ command: \"clearInterval\", id: id });\n }\n callbacks.current.delete(id);\n };\n return (React.createElement(TimerContext.Provider, { value: { setTimeout: setTimeout, clearTimeout: clearTimeout, setInterval: setInterval, clearInterval: clearInterval } }, props.children));\n};\nvar TimerProvider = function (props) { return (React.createElement(_TimerProvider, null, props.children)); };\nexport default TimerProvider;\n"],"sourceRoot":""}