townsquare/js/app.019f9a94.js.map

1 line
255 KiB
Plaintext

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/icons/washerwoman.png","webpack:///./src/assets/icons/barista.png","webpack:///./src/assets/icons/cerenovus.png","webpack:///./src/assets/icons/amnesiac.png","webpack:///./src/assets/icons/shabaloth.png","webpack:///./src/assets/icons/lunatic.png","webpack:///./src/assets/icons/oracle.png","webpack:///./src/assets/icons/ravenkeeper.png","webpack:///./src/assets/icons/undertaker.png","webpack:///./src/assets/icons/chambermaid.png","webpack:///./src/assets/icons/plus.png","webpack:///./src/assets/icons/recluse.png","webpack:///./src/assets/icons/mutant.png","webpack:///./src/store/socket.js","webpack:///./src/assets/icons/chef.png","webpack:///./src/assets/icons/zombuul.png","webpack:///./src/assets/icons/sailor.png","webpack:///./src/assets/icons/widow.png","webpack:///./src/assets/icons/bonecollector.png","webpack:///./src/assets/icons/baron.png","webpack:///./src/assets/icons/bureaucrat.png","webpack:///./src/assets/icons/leviathan.png","webpack:///./src/assets/icons/artist.png","webpack:///./src/assets/icons/sage.png","webpack:///./src/assets/icons/scapegoat.png","webpack:///./src/assets/icons/philosopher.png","webpack:///./src/components/TownSquare.vue?b88a","webpack:///./src/assets/icons/butcher.png","webpack:///./src/assets/icons/towncrier.png","webpack:///./src/assets/icons/vortox.png","webpack:///./src/assets/icons/deviant.png","webpack:///./src/assets/icons/imp.png","webpack:///./src/assets/icons/moonchild.png","webpack:///./src/components/Gradients.vue?8fc3","webpack:///./src/assets/icons/snakecharmer.png","webpack:///./src/assets/icons/fortuneteller.png","webpack:///./src/assets/icons/fool.png","webpack:///./src/assets/icons/apprentice.png","webpack:///./src/components/modals/RoleModal.vue?2d9b","webpack:///./src/assets/icons/librarian.png","webpack:///./src/assets/icons/soldier.png","webpack:///./src/assets/icons/minstrel.png","webpack:///./src/assets/icons/exorcist.png","webpack:///./src/assets/icons/harlot.png","webpack:///./src/assets/icons/goon.png","webpack:///./src/App.vue?bf3e","webpack:///./src/components/TownSquare.vue?3ae2","webpack:///./src/components/Player.vue?ac85","webpack:///./src/components/Token.vue?7221","webpack:///src/components/Token.vue","webpack:///./src/components/Token.vue?ca97","webpack:///./src/components/Token.vue","webpack:///src/components/Player.vue","webpack:///./src/components/Player.vue?1369","webpack:///./src/components/Player.vue","webpack:///./src/components/modals/ReminderModal.vue?dbf8","webpack:///./src/components/modals/Modal.vue?a0b7","webpack:///src/components/modals/Modal.vue","webpack:///./src/components/modals/Modal.vue?a5e5","webpack:///./src/components/modals/Modal.vue","webpack:///src/components/modals/ReminderModal.vue","webpack:///./src/components/modals/ReminderModal.vue?c533","webpack:///./src/components/modals/ReminderModal.vue","webpack:///./src/components/modals/RoleModal.vue?b83b","webpack:///src/components/modals/RoleModal.vue","webpack:///./src/components/modals/RoleModal.vue?15f8","webpack:///./src/components/modals/RoleModal.vue","webpack:///src/components/TownSquare.vue","webpack:///./src/components/TownSquare.vue?335a","webpack:///./src/components/TownSquare.vue","webpack:///./src/components/TownInfo.vue?ef09","webpack:///src/components/TownInfo.vue","webpack:///./src/components/TownInfo.vue?6260","webpack:///./src/components/TownInfo.vue","webpack:///./src/components/Menu.vue?040b","webpack:///./src/components/Screenshot.vue?cb59","webpack:///src/components/Screenshot.vue","webpack:///./src/components/Screenshot.vue?82cf","webpack:///./src/components/Screenshot.vue","webpack:///src/components/Menu.vue","webpack:///./src/components/Menu.vue?9842","webpack:///./src/components/Menu.vue","webpack:///./src/components/modals/RolesModal.vue?b0d7","webpack:///src/components/modals/RolesModal.vue","webpack:///./src/components/modals/RolesModal.vue?b003","webpack:///./src/components/modals/RolesModal.vue","webpack:///./src/components/modals/EditionModal.vue?cf1c","webpack:///src/components/modals/EditionModal.vue","webpack:///./src/components/modals/EditionModal.vue?d6f4","webpack:///./src/components/modals/EditionModal.vue","webpack:///./src/components/Intro.vue?948a","webpack:///src/components/Intro.vue","webpack:///./src/components/Intro.vue?a380","webpack:///./src/components/Intro.vue","webpack:///./src/components/modals/ReferenceModal.vue?7898","webpack:///src/components/modals/ReferenceModal.vue","webpack:///./src/components/modals/ReferenceModal.vue?c23b","webpack:///./src/components/modals/ReferenceModal.vue","webpack:///./src/components/Vote.vue?a38d","webpack:///src/components/Vote.vue","webpack:///./src/components/Vote.vue?2a1c","webpack:///./src/components/Vote.vue","webpack:///./src/components/Gradients.vue?a942","webpack:///src/components/Gradients.vue","webpack:///./src/components/Gradients.vue?d8ff","webpack:///./src/components/Gradients.vue","webpack:///src/App.vue","webpack:///./src/App.vue?b65f","webpack:///./src/App.vue","webpack:///./src/store/modules/players.js","webpack:///./src/store/modules/session.js","webpack:///./src/store/index.js","webpack:///./src/main.js","webpack:///./src/components/Vote.vue?41a1","webpack:///./src/assets/icons/cannibal.png","webpack:///./src/App.vue?6ee5","webpack:///./src/assets/icons/goblin.png","webpack:///./src/assets/icons/x.png","webpack:///./src/assets/icons sync ^\\.\\/.*\\.png$","webpack:///./src/assets/icons/butler.png","webpack:///./src/assets/icons/juggler.png","webpack:///./src/assets/icons/balloonist.png","webpack:///./src/assets/icons/innkeeper.png","webpack:///./src/assets/icons/good.png","webpack:///./src/assets/icons/flowergirl.png","webpack:///./src/components/TownInfo.vue?4928","webpack:///./src/assets/icons/monk.png","webpack:///./src/assets/icons/nodashii.png","webpack:///./src/assets/icons/saint.png","webpack:///./src/assets/icons/fanggu.png","webpack:///./src/assets/icons/dreamer.png","webpack:///./src/components/Player.vue?6d3c","webpack:///./src/assets/icons/pithag.png","webpack:///./src/assets/icons/bishop.png","webpack:///./src/components/modals/Modal.vue?3563","webpack:///./src/assets/icons/mathematician.png","webpack:///./src/assets/icons/assassin.png","webpack:///./src/assets/icons/godfather.png","webpack:///./src/assets/icons/thief.png","webpack:///./src/assets/icons/tinker.png","webpack:///./src/components/Intro.vue?efdc","webpack:///./src/assets/icons/pukka.png","webpack:///./src/assets/icons/voudon.png","webpack:///./src/components/modals/ReminderModal.vue?706c","webpack:///./src/assets/icons/seamstress.png","webpack:///./src/assets/icons/klutz.png","webpack:///./src/assets/icons/matron.png","webpack:///./src/assets/icons/mayor.png","webpack:///./src/assets/icons/professor.png","webpack:///./src/assets/icons/investigator.png","webpack:///./src/assets/icons/tealady.png","webpack:///./src/components/Menu.vue?c516","webpack:///./src/assets/icons/empath.png","webpack:///./src/components/Token.vue?0f0c","webpack:///./src/components/modals/RolesModal.vue?53f0","webpack:///./src/assets/icons/evil.png","webpack:///./src/assets/icons/fisherman.png","webpack:///./src/assets/icons/po.png","webpack:///./src/components/Screenshot.vue?d943","webpack:///./src/assets/icons/grandmother.png","webpack:///./src/assets/icons/gossip.png","webpack:///./src/assets/icons/devilsadvocate.png","webpack:///./src/components/modals/EditionModal.vue?4589","webpack:///./src/assets/icons/beggar.png","webpack:///./src/assets/icons/slayer.png","webpack:///./src/assets/icons/savant.png","webpack:///./src/assets/icons/drunk.png","webpack:///./src/assets/icons/gambler.png","webpack:///./src/store/persistence.js","webpack:///./src/assets/icons/eviltwin.png","webpack:///./src/assets/icons/spy.png","webpack:///./src/assets/icons/courtier.png","webpack:///./src/assets/icons/gunslinger.png","webpack:///./src/assets/icons/virgin.png","webpack:///./src/assets/icons/judge.png","webpack:///./src/assets/icons/sweetheart.png","webpack:///./src/assets/icons/poisoner.png","webpack:///./src/assets/icons/scarletwoman.png","webpack:///./src/assets/icons/vigormortis.png","webpack:///./src/assets/icons/witch.png","webpack:///./src/assets/icons/mastermind.png","webpack:///./src/components/modals/ReferenceModal.vue?5383","webpack:///./src/assets/icons/clockmaker.png","webpack:///./src/assets/icons/barber.png","webpack:///./src/assets/icons/custom.png","webpack:///./src/assets/icons/pacifist.png"],"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","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","LiveSession","store","this","_wss","_socket","_isSpectator","_gamestate","_store","_pingInterval","_pingTimer","_players","state","session","sessionId","connect","channel","disconnect","WebSocket","addEventListener","_handleMessage","onopen","_onOpen","onclose","commit","clearInterval","command","params","readyState","send","JSON","stringify","_send","sendGamestate","_ping","playerId","_handlePing","clearTimeout","setTimeout","parse","err","console","log","_updateGamestate","_updatePlayer","_updateSeat","_handleVote","_handleLock","_handleBye","Math","random","toString","substr","isSpectator","_open","close","players","map","player","id","isDead","isVoteless","role","team","gamestate","edition","nomination","x","forEach","index","indexOf","now","Date","getTime","alert","keys","seat","oldIndex","findIndex","votes","vote","lockedVote","lock","subscribe","type","payload","location","hash","claimSeat","lockVote","sendPlayer","param","split","render","_vm","_h","$createElement","_c","_self","class","screenshot","grimoire","isScreenshot","style","backgroundImage","background","attrs","on","keyup","_e","takeScreenshot","ref","staticRenderFns","staticClass","public","isPublic","spectator","zoom","_l","from","max","swap","move","nominate","$event","$emit","handleTrigger","_v","stopPropagation","openRoleModal","bluffs","selectedPlayer","dead","you","voteLocked","toggleStatus","nightOrder","first","isNightOrder","_s","_f","firstNightReminder","other","otherNightReminder","cancel","swapPlayer","movePlayer","nominatePlayer","updatePlayer","active","isMenuOpen","changeName","reminder","removeReminder","setRole","reminders","ability","props","default","filters","nameToFontSize","methods","component","components","Token","required","computed","indexAdjusted","isSwap","handleEmojis","text","replace","width","height","y","$refs","getBoundingClientRect","prompt","$store","playerIndex","directives","rawName","modals","availableReminders","expression","toggleModal","addReminder","_t","Modal","roles","some","availableRoles","Player","RoleModal","ReminderModal","method","confirm","to","undefined","teams","traveler","alive","townsfolk","outsider","minion","demon","nonTravelers","getters","filter","game","leaveSession","playerCount","success","isScreenshotSuccess","open","toggleMenu","tab","toggleGrimoire","toggleNightOrder","setZoom","round","setBackground","hostSession","joinSession","copySessionUrl","addPlayer","randomizeSeatings","clearPlayers","clearRoles","stream","canvas","video","navigator","mediaDevices","getDisplayMedia","cursor","audio","srcObject","play","context","getContext","setAttribute","videoWidth","videoHeight","drawImage","toBlob","blob","item","ClipboardItem","clipboard","write","Screenshot","dimensions","capture","permissions","query","then","url","href","link","writeText","dispatch","teamRoles","selected","disabled","selectedRoles","assignRoles","selectRandomRoles","randomElement","arr","floor","roleSelection","values","reduce","a","b","hasSelectedSetupRoles","setup","$set","composition","available","sort","pop","mounted","watch","isCustom","script","handleURL","handleUpload","openUpload","promptURL","setEdition","editions","scripts","upload","click","file","files","size","reader","FileReader","parseScript","readAsText","res","fetch","json","editionName","playersByRole","join","find","rolesGrouped","nominator","nominee","ceil","voters","stop","start","finish","nominatorStyle","transform","nomineeStyle","rotation","min","canVote","reorder","voteTimer","setInterval","gradient","gradients","Vote","ReferenceModal","Intro","TownInfo","TownSquare","Menu","EditionModal","RolesModal","Gradients","menu","toLocaleLowerCase","NEWPLAYER","firstNight","otherNight","includes","Map","set","actions","rootState","mutations","namespaced","claimedSeat","use","getRolesByEdition","selectedEdition","localeCompare","Store","reference","document","title","modal","status","plugins","faIcons","fabIcons","add","config","productionTip","h","App","$mount","webpackContext","req","webpackContextResolve","e","Error","code","resolve","localStorage","getItem","parseFloat","setItem","removeItem"],"mappings":"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","file":"js/app.019f9a94.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\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\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\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 = \"/townsquare/\";\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([\"56d7\",\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = __webpack_public_path__ + \"img/washerwoman.a0c66e53.png\";","module.exports = __webpack_public_path__ + \"img/barista.fd2bba67.png\";","module.exports = __webpack_public_path__ + \"img/cerenovus.736554ca.png\";","module.exports = __webpack_public_path__ + \"img/amnesiac.03ce8f67.png\";","module.exports = __webpack_public_path__ + \"img/shabaloth.f461dd08.png\";","module.exports = __webpack_public_path__ + \"img/lunatic.f2982146.png\";","module.exports = __webpack_public_path__ + \"img/oracle.63459162.png\";","module.exports = __webpack_public_path__ + \"img/ravenkeeper.552f1f2f.png\";","module.exports = __webpack_public_path__ + \"img/undertaker.1df72155.png\";","module.exports = __webpack_public_path__ + \"img/chambermaid.b6f002ce.png\";","module.exports = __webpack_public_path__ + \"img/plus.c11bf1ed.png\";","module.exports = __webpack_public_path__ + \"img/recluse.a6519a1d.png\";","module.exports = __webpack_public_path__ + \"img/mutant.b28a535c.png\";","class LiveSession {\n constructor(store) {\n // this._wss = \"ws://localhost:8081/\";\n this._wss = \"wss://baumgart.biz:8080/\";\n this._socket = null;\n this._isSpectator = true;\n this._gamestate = [];\n this._store = store;\n this._pingInterval = 30 * 1000; // 30 seconds between pings\n this._pingTimer = null;\n this._players = {}; // map of players connected to a session\n // reconnect to previous session\n if (this._store.state.session.sessionId) {\n this.connect(this._store.state.session.sessionId);\n }\n }\n\n /**\n * Open a new session for the passed channel.\n * @param channel\n * @private\n */\n _open(channel) {\n this.disconnect();\n this._socket = new WebSocket(this._wss + channel);\n this._socket.addEventListener(\"message\", this._handleMessage.bind(this));\n this._socket.onopen = this._onOpen.bind(this);\n this._socket.onclose = () => {\n this._socket = null;\n this._store.commit(\"session/setSessionId\", \"\");\n clearInterval(this._pingTimer);\n this._pingTimer = null;\n };\n }\n\n /**\n * Send a message through the socket.\n * @param command\n * @param params\n * @private\n */\n _send(command, params) {\n if (this._socket && this._socket.readyState === 1) {\n this._socket.send(JSON.stringify([command, params]));\n }\n }\n\n /**\n * Open event handler for socket.\n * @private\n */\n _onOpen() {\n if (this._isSpectator) {\n this._send(\"req\", \"gs\");\n } else {\n this.sendGamestate();\n }\n this._ping();\n }\n\n /**\n * Send a ping message with player ID and ST flag.\n * @private\n */\n _ping() {\n this._send(\"ping\", [this._isSpectator, this._store.state.session.playerId]);\n this._handlePing();\n clearTimeout(this._pingTimer);\n this._pingTimer = setTimeout(this._ping.bind(this), this._pingInterval);\n }\n\n /**\n * Handle an incoming socket message.\n * @param data\n * @private\n */\n _handleMessage({ data }) {\n let command, params;\n try {\n [command, params] = JSON.parse(data);\n } catch (err) {\n console.log(\"unsupported socket message\", data);\n }\n switch (command) {\n case \"req\":\n if (params === \"gs\") {\n this.sendGamestate();\n }\n break;\n case \"gs\":\n this._updateGamestate(params);\n break;\n case \"player\":\n this._updatePlayer(params);\n break;\n case \"claim\":\n this._updateSeat(params);\n break;\n case \"ping\":\n this._handlePing(params);\n break;\n case \"nomination\":\n this._store.commit(\"session/nomination\", params);\n break;\n case \"vote\":\n this._handleVote(params);\n break;\n case \"lock\":\n this._handleLock(params);\n break;\n case \"bye\":\n this._handleBye(params);\n break;\n }\n }\n\n /**\n * Connect to a new live session, either as host or spectator.\n * Set a unique playerId if there isn't one yet.\n * @param channel\n */\n connect(channel) {\n if (!this._store.state.session.playerId) {\n this._store.commit(\n \"session/setPlayerId\",\n Math.random()\n .toString(36)\n .substr(2)\n );\n }\n this._store.commit(\"session/setPlayerCount\", 0);\n this._isSpectator = this._store.state.session.isSpectator;\n this._open(channel);\n }\n\n /**\n * Close the current session, if any.\n */\n disconnect() {\n this._store.commit(\"session/setPlayerCount\", 0);\n if (this._socket) {\n this._send(\"bye\", this._store.state.session.playerId);\n this._socket.close();\n this._socket = null;\n }\n }\n\n /**\n * Publish the current gamestate.\n */\n sendGamestate() {\n if (this._isSpectator) return;\n this._gamestate = this._store.state.players.players.map(player => ({\n name: player.name,\n id: player.id,\n isDead: player.isDead,\n isVoteless: player.isVoteless,\n ...(player.role && player.role.team === \"traveler\"\n ? {\n role: {\n id: player.role.id,\n team: \"traveler\",\n name: player.role.name\n }\n }\n : {})\n }));\n this._send(\"gs\", {\n gamestate: this._gamestate,\n edition: this._store.state.edition,\n nomination: this._store.state.session.nomination\n });\n }\n\n /**\n * Update the gamestate based on incoming data.\n * @param gamestate\n * @param edition\n * @param nomination\n * @private\n */\n _updateGamestate({ gamestate, edition, nomination }) {\n if (!this._isSpectator) return;\n this._store.commit(\"setEdition\", edition);\n this._store.commit(\"session/nomination\", nomination);\n const players = this._store.state.players.players;\n // adjust number of players\n if (players.length < gamestate.length) {\n for (let x = players.length; x < gamestate.length; x++) {\n this._store.commit(\"players/add\", gamestate[x].name);\n }\n } else if (players.length > gamestate.length) {\n for (let x = players.length; x > gamestate.length; x--) {\n this._store.commit(\"players/remove\", x - 1);\n }\n }\n // update status for each player\n gamestate.forEach((state, x) => {\n const player = players[x];\n const { role } = state;\n // update relevant properties\n [\"name\", \"id\", \"isDead\", \"isVoteless\"].forEach(property => {\n const value = state[property];\n if (player[property] !== value) {\n this._store.commit(\"players/update\", { player, property, value });\n }\n });\n // roles are special, because of travelers\n if (role && player.role.id !== role.id) {\n this._store.commit(\"players/update\", {\n player,\n property: \"role\",\n value: role\n });\n } else if (!role && player.role.team === \"traveler\") {\n this._store.commit(\"players/update\", {\n player,\n property: \"role\",\n value: {}\n });\n }\n });\n }\n\n /**\n * Publish a player update.\n * @param player\n * @param property\n * @param value\n */\n sendPlayer({ player, property, value }) {\n if (this._isSpectator || property === \"reminders\") return;\n const index = this._store.state.players.players.indexOf(player);\n if (property === \"role\") {\n if (value.team && value.team === \"traveler\") {\n // update local gamestate to remember this player as a traveler\n this._gamestate[index].role = {\n id: player.role.id,\n team: \"traveler\",\n name: player.role.name\n };\n this._send(\"player\", {\n index,\n property,\n value: this._gamestate[index].role\n });\n } else if (this._gamestate[index].role) {\n delete this._gamestate[index].role;\n this._send(\"player\", { index, property, value: {} });\n }\n } else {\n this._send(\"player\", { index, property, value });\n }\n }\n\n /**\n * Update a player based on incoming data.\n * @param index\n * @param property\n * @param value\n * @private\n */\n _updatePlayer({ index, property, value }) {\n const player = this._store.state.players.players[index];\n if (!player) return;\n // special case where a player stops being a traveler\n if (\n property === \"role\" &&\n value.team !== \"traveler\" &&\n player.role.team === \"traveler\"\n ) {\n // reset to an unknown role\n this._store.commit(\"players/update\", {\n player,\n property: \"role\",\n value: {}\n });\n } else {\n // just update the player otherwise\n this._store.commit(\"players/update\", { player, property, value });\n }\n }\n\n /**\n * Handle a ping message by another player / storyteller\n * @param isSpectator\n * @param playerId\n * @private\n */\n _handlePing([isSpectator, playerId] = []) {\n const now = new Date().getTime();\n if (playerId) {\n this._players[playerId] = now;\n if (!this._isSpectator && !isSpectator) {\n alert(\"Another storyteller joined the session!\");\n }\n }\n // remove players that haven't sent a ping in twice the timespan\n for (let player in this._players) {\n if (now - this._players[player] > this._pingInterval * 2) {\n delete this._players[player];\n }\n }\n // remove claimed seats from players that are no longer connected\n this._store.state.players.players.forEach(player => {\n if (!this._isSpectator && player.id && !this._players[player.id]) {\n this._store.commit(\"players/update\", {\n player,\n property: \"id\",\n value: \"\"\n });\n }\n });\n this._store.commit(\n \"session/setPlayerCount\",\n Object.keys(this._players).length\n );\n }\n\n /**\n * Handle a player leaving the sessions\n * @param playerId\n * @private\n */\n _handleBye(playerId) {\n delete this._players[playerId];\n this._store.commit(\n \"session/setPlayerCount\",\n Object.keys(this._players).length\n );\n }\n\n /**\n * Claim a seat, needs to be confirmed by the Storyteller.\n * @param seat either -1 or the index of the seat claimed\n */\n claimSeat(seat) {\n if (!this._isSpectator) return;\n if (this._store.state.players.players.length > seat) {\n this._send(\"claim\", [seat, this._store.state.session.playerId]);\n }\n }\n\n /**\n * Update a player id associated with that seat.\n * @param index seat index or -1\n * @param value playerId to add / remove\n * @private\n */\n _updateSeat([index, value]) {\n if (this._isSpectator) return;\n const property = \"id\";\n const players = this._store.state.players.players;\n // remove previous seat\n const oldIndex = players.findIndex(({ id }) => id === value);\n if (oldIndex >= 0 && oldIndex !== index) {\n this._store.commit(\"players/update\", {\n player: players[oldIndex],\n property,\n value: \"\"\n });\n }\n // add playerId to new seat\n if (index >= 0) {\n const player = players[index];\n if (!player) return;\n this._store.commit(\"players/update\", { player, property, value });\n }\n // update player session list as if this was a ping\n this._handlePing([true, value]);\n }\n\n /**\n * A player nomination. ST only\n * @param nomination [nominator, nominee]\n */\n nomination(nomination) {\n if (this._isSpectator) return;\n const players = this._store.state.players.players;\n if (\n !nomination ||\n (players.length > nomination[0] && players.length > nomination[1])\n ) {\n this._send(\"nomination\", nomination);\n }\n }\n\n /**\n * Send a vote. Player only\n * @param index Seat of the player\n */\n vote([index]) {\n if (!this._isSpectator) return;\n const player = this._store.state.players.players[index];\n if (this._store.state.session.playerId === player.id) {\n // send vote only if it is your own vote\n this._send(\"vote\", [index, this._store.state.session.votes[index]]);\n }\n }\n\n /**\n * Handle an incoming vote, but not if it is for your own seat.\n * @param vote\n */\n _handleVote(vote) {\n const player = this._store.state.players.players[vote[0]];\n if (this._store.state.session.playerId !== player.id) {\n this._store.commit(\"session/vote\", vote);\n }\n }\n\n /**\n * Lock a vote. ST only\n */\n lockVote() {\n if (this._isSpectator) return;\n const { lockedVote, votes, nomination } = this._store.state.session;\n const { players } = this._store.state.players;\n const index = (nomination[1] + lockedVote - 1) % players.length;\n this._send(\"lock\", [this._store.state.session.lockedVote, votes[index]]);\n }\n\n /**\n * Update vote lock and the locked vote, if it differs.\n * @param lock\n * @param vote\n * @private\n */\n _handleLock([lock, vote]) {\n this._store.commit(\"session/lockVote\", lock);\n if (lock > 1) {\n const { lockedVote, nomination } = this._store.state.session;\n const { players } = this._store.state.players;\n const index = (nomination[1] + lockedVote - 1) % players.length;\n if (this._store.state.session.votes[index] !== vote) {\n this._store.commit(\"session/vote\", [index, vote]);\n }\n }\n }\n}\n\nmodule.exports = store => {\n // setup\n const session = new LiveSession(store);\n\n // listen to mutations\n store.subscribe(({ type, payload }) => {\n switch (type) {\n case \"session/setSessionId\":\n if (payload) {\n session.connect(payload);\n } else {\n window.location.hash = \"\";\n session.disconnect();\n }\n break;\n case \"session/claimSeat\":\n session.claimSeat(payload);\n break;\n case \"session/nomination\":\n session.nomination(payload);\n break;\n case \"session/vote\":\n session.vote(payload);\n break;\n case \"session/lockVote\":\n session.lockVote();\n break;\n case \"players/set\":\n case \"players/swap\":\n case \"players/move\":\n case \"players/clear\":\n case \"players/remove\":\n case \"players/add\":\n case \"setEdition\":\n session.sendGamestate();\n break;\n case \"players/update\":\n session.sendPlayer(payload);\n break;\n }\n });\n\n // check for session Id in hash\n const [command, param] = window.location.hash.substr(1).split(\"/\");\n if (command === \"play\") {\n store.commit(\"session/setSpectator\", true);\n store.commit(\"session/setSessionId\", param);\n }\n};\n","module.exports = __webpack_public_path__ + \"img/chef.d4e7f9a6.png\";","module.exports = __webpack_public_path__ + \"img/zombuul.ec71a259.png\";","module.exports = __webpack_public_path__ + \"img/sailor.631521c2.png\";","module.exports = __webpack_public_path__ + \"img/widow.ec8d8cb0.png\";","module.exports = __webpack_public_path__ + \"img/bonecollector.846af8c8.png\";","module.exports = __webpack_public_path__ + \"img/baron.9ce9bd3b.png\";","module.exports = __webpack_public_path__ + \"img/bureaucrat.88ec372a.png\";","module.exports = __webpack_public_path__ + \"img/leviathan.dfbff6e8.png\";","module.exports = __webpack_public_path__ + \"img/artist.f89690cd.png\";","module.exports = __webpack_public_path__ + \"img/sage.5afc100d.png\";","module.exports = __webpack_public_path__ + \"img/scapegoat.8bd95c23.png\";","module.exports = __webpack_public_path__ + \"img/philosopher.92032c70.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=style&index=0&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/butcher.e0b672b7.png\";","module.exports = __webpack_public_path__ + \"img/towncrier.18a4377b.png\";","module.exports = __webpack_public_path__ + \"img/vortox.6add3a3a.png\";","module.exports = __webpack_public_path__ + \"img/deviant.e8a761ae.png\";","module.exports = __webpack_public_path__ + \"img/imp.cd0fa5b8.png\";","module.exports = __webpack_public_path__ + \"img/moonchild.6c84161e.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Gradients.vue?vue&type=style&index=0&id=1e202a64&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Gradients.vue?vue&type=style&index=0&id=1e202a64&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/snakecharmer.e512cc1e.png\";","module.exports = __webpack_public_path__ + \"img/fortuneteller.4396927c.png\";","module.exports = __webpack_public_path__ + \"img/fool.a730aab3.png\";","module.exports = __webpack_public_path__ + \"img/apprentice.b7055345.png\";","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleModal.vue?vue&type=style&index=0&id=06abb511&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleModal.vue?vue&type=style&index=0&id=06abb511&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/librarian.6fd7f267.png\";","module.exports = __webpack_public_path__ + \"img/soldier.451de0df.png\";","module.exports = __webpack_public_path__ + \"img/minstrel.1647382d.png\";","module.exports = __webpack_public_path__ + \"img/exorcist.8c0f5cac.png\";","module.exports = __webpack_public_path__ + \"img/harlot.1a418200.png\";","module.exports = __webpack_public_path__ + \"img/goon.719106f2.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ screenshot: _vm.grimoire.isScreenshot },style:({\n backgroundImage: _vm.grimoire.background\n ? (\"url('\" + (_vm.grimoire.background) + \"')\")\n : ''\n }),attrs:{\"id\":\"app\",\"tabindex\":\"-1\"},on:{\"keyup\":_vm.keyup}},[_c('transition',{attrs:{\"name\":\"zoom\"}},[(!_vm.players.length)?_c('Intro'):_vm._e(),(_vm.players.length && !_vm.session.nomination)?_c('TownInfo'):_vm._e(),(_vm.session.nomination)?_c('Vote'):_vm._e()],1),_c('TownSquare',{on:{\"screenshot\":_vm.takeScreenshot}}),_c('Menu',{ref:\"menu\"}),_c('EditionModal'),_c('RolesModal'),_c('ReferenceModal'),_c('Gradients')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"square\",class:{\n public: _vm.grimoire.isPublic,\n spectator: _vm.session.isSpectator,\n vote: _vm.session.nomination\n },style:({ zoom: _vm.grimoire.zoom }),attrs:{\"id\":\"townsquare\"}},[_c('ul',{staticClass:\"circle\",class:['size-' + _vm.players.length]},_vm._l((_vm.players),function(player,index){return _c('Player',{key:index,class:{\n from: Math.max(_vm.swap, _vm.move, _vm.nominate) === index,\n swap: _vm.swap > -1,\n move: _vm.move > -1,\n nominate: _vm.nominate > -1\n },attrs:{\"player\":player},on:{\"screenshot\":function($event){return _vm.$emit('screenshot', $event)},\"trigger\":function($event){return _vm.handleTrigger(index, $event)}}})}),1),(_vm.players.length > 6)?_c('div',{ref:\"bluffs\",staticClass:\"bluffs\"},[_c('h3',[_vm._v(\"Demon bluffs\")]),_c('font-awesome-icon',{attrs:{\"icon\":\"camera\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.takeScreenshot($event)}}}),_c('ul',_vm._l((_vm.bluffs),function(index){return _c('li',{key:index,on:{\"click\":function($event){return _vm.openRoleModal(index * -1)}}},[_c('Token',{attrs:{\"role\":_vm.grimoire.bluffs[index - 1]}})],1)}),0)],1):_vm._e(),_c('ReminderModal',{attrs:{\"player-index\":_vm.selectedPlayer}}),_c('RoleModal',{attrs:{\"player-index\":_vm.selectedPlayer}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{ref:\"player\",staticClass:\"player\",class:[\n {\n dead: _vm.player.isDead,\n 'no-vote': _vm.player.isVoteless,\n you: _vm.player.id === _vm.session.playerId,\n 'vote-yes': _vm.session.votes[_vm.index],\n 'vote-lock': _vm.voteLocked\n },\n _vm.player.role.team\n ]},[_c('div',{staticClass:\"shroud\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),_c('div',{staticClass:\"life\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),(_vm.nightOrder.get(_vm.player).first && _vm.grimoire.isNightOrder)?_c('div',{staticClass:\"night first\"},[_c('em',[_vm._v(_vm._s(_vm.nightOrder.get(_vm.player).first)+\".\")]),(_vm.player.role.firstNightReminder)?_c('span',[_vm._v(_vm._s(_vm._f(\"handleEmojis\")(_vm.player.role.firstNightReminder)))]):_vm._e()]):_vm._e(),(_vm.nightOrder.get(_vm.player).other && _vm.grimoire.isNightOrder)?_c('div',{staticClass:\"night other\"},[_c('em',[_vm._v(_vm._s(_vm.nightOrder.get(_vm.player).other)+\".\")]),(_vm.player.role.otherNightReminder)?_c('span',[_vm._v(_vm._s(_vm._f(\"handleEmojis\")(_vm.player.role.otherNightReminder)))]):_vm._e()]):_vm._e(),_c('Token',{attrs:{\"role\":_vm.player.role},on:{\"set-role\":function($event){return _vm.$emit('trigger', ['openRoleModal'])}}}),_c('font-awesome-icon',{staticClass:\"vote\",attrs:{\"icon\":\"skull\",\"title\":\"Voted YES\"},on:{\"click\":function($event){return _vm.vote()}}}),_c('font-awesome-icon',{staticClass:\"vote\",attrs:{\"icon\":\"times\",\"title\":\"Voted NO\"},on:{\"click\":function($event){return _vm.vote()}}}),_c('font-awesome-icon',{staticClass:\"cancel\",attrs:{\"icon\":\"times-circle\",\"title\":\"Cancel\"},on:{\"click\":function($event){return _vm.cancel()}}}),_c('font-awesome-icon',{staticClass:\"swap\",attrs:{\"icon\":\"exchange-alt\",\"title\":\"Swap seats with this player\"},on:{\"click\":function($event){return _vm.swapPlayer(_vm.player)}}}),_c('font-awesome-icon',{staticClass:\"move\",attrs:{\"icon\":\"redo-alt\",\"title\":\"Move player to this seat\"},on:{\"click\":function($event){return _vm.movePlayer(_vm.player)}}}),_c('font-awesome-icon',{staticClass:\"nominate\",attrs:{\"icon\":\"hand-point-right\",\"title\":\"Nominate this player\"},on:{\"click\":function($event){return _vm.nominatePlayer(_vm.player)}}}),(_vm.player.id)?_c('font-awesome-icon',{staticClass:\"seat\",attrs:{\"icon\":\"chair\"}}):_vm._e(),(_vm.player.isDead && !_vm.player.isVoteless)?_c('font-awesome-icon',{staticClass:\"has-vote\",attrs:{\"icon\":\"vote-yea\",\"title\":\"Ghost vote\"},on:{\"click\":function($event){return _vm.updatePlayer('isVoteless', true)}}}):_vm._e(),_c('div',{staticClass:\"name\",class:{ active: _vm.isMenuOpen },on:{\"click\":function($event){_vm.isMenuOpen = !_vm.isMenuOpen}}},[_vm._v(\" \"+_vm._s(_vm.player.name)+\" \")]),_c('transition',{attrs:{\"name\":\"fold\"}},[(_vm.isMenuOpen)?_c('ul',{staticClass:\"menu\"},[(!_vm.session.isSpectator)?[_c('li',{on:{\"click\":_vm.changeName}},[_c('font-awesome-icon',{attrs:{\"icon\":\"user-edit\"}}),_vm._v(\"Rename \")],1),(!_vm.session.nomination)?_c('li',{on:{\"click\":function($event){return _vm.nominatePlayer()}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"hand-point-right\"}}),_vm._v(\" Nomination \")],1):_vm._e(),_c('li',{on:{\"click\":function($event){return _vm.movePlayer()}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"redo-alt\"}}),_vm._v(\" Move player \")],1),_c('li',{on:{\"click\":function($event){return _vm.swapPlayer()}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"exchange-alt\"}}),_vm._v(\" Swap seats \")],1),_c('li',{on:{\"click\":_vm.takeScreenshot}},[_c('font-awesome-icon',{attrs:{\"icon\":\"camera\"}}),_vm._v(\" Screenshot \")],1),_c('li',{on:{\"click\":function($event){return _vm.$emit('trigger', ['removePlayer'])}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"times-circle\"}}),_vm._v(\" Remove \")],1)]:_vm._e(),(_vm.session.isSpectator)?_c('li',{on:{\"click\":_vm.claimSeat}},[_c('font-awesome-icon',{attrs:{\"icon\":\"chair\"}}),(_vm.player.id !== _vm.session.playerId)?[_vm._v(\" Claim seat \")]:[_vm._v(\" Vacate seat \")]],2):_vm._e()],2):_vm._e()])],1),(_vm.player.reminders)?_vm._l((_vm.player.reminders),function(reminder){return _c('div',{key:reminder.role + ' ' + reminder.name,staticClass:\"reminder\",class:[reminder.role],on:{\"click\":function($event){return _vm.removeReminder(reminder)}}},[_c('span',{staticClass:\"icon\",style:({\n backgroundImage: (\"url(\" + (require('../assets/icons/' +\n reminder.role +\n '.png')) + \")\")\n })}),_vm._v(\" \"+_vm._s(reminder.name)+\" \")])}):_vm._e(),_c('div',{staticClass:\"reminder add\",on:{\"click\":function($event){return _vm.$emit('trigger', ['openReminderModal'])}}},[_c('span',{staticClass:\"icon\"})])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"token\",class:[_vm.role.id],on:{\"click\":_vm.setRole}},[(_vm.role.id)?_c('span',{staticClass:\"icon\",style:({\n backgroundImage: (\"url(\" + (require('../assets/icons/' +\n _vm.role.id +\n '.png')) + \")\")\n })}):_vm._e(),(_vm.role.firstNight)?_c('span',{staticClass:\"leaf-left\"}):_vm._e(),(_vm.role.otherNight)?_c('span',{staticClass:\"leaf-right\"}):_vm._e(),(_vm.role.reminders && _vm.role.reminders.length)?_c('span',{class:['leaf-top' + _vm.role.reminders.length]}):_vm._e(),(_vm.role.setup)?_c('span',{staticClass:\"leaf-orange\"}):_vm._e(),_c('svg',{staticClass:\"name\",attrs:{\"viewBox\":\"0 0 150 150\"}},[_c('path',{attrs:{\"d\":\"M 13 75 C 13 160, 138 160, 138 75\",\"id\":\"curve\",\"fill\":\"transparent\"}}),_c('text',{staticClass:\"label\",attrs:{\"width\":\"150\",\"x\":\"66.6%\",\"text-anchor\":\"middle\",\"font-size\":_vm._f(\"nameToFontSize\")(_vm.role.name)}},[_c('textPath',{attrs:{\"xlink:href\":\"#curve\"}},[_vm._v(\" \"+_vm._s(_vm.role.name)+\" \")])])]),_c('div',{staticClass:\"edition\",class:[(\"edition-\" + (_vm.role.edition)), _vm.role.team]}),(_vm.role.ability)?_c('div',{staticClass:\"ability\"},[_vm._v(\" \"+_vm._s(_vm.role.ability)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"token\" @click=\"setRole\" :class=\"[role.id]\">\n <span\n class=\"icon\"\n v-if=\"role.id\"\n v-bind:style=\"{\n backgroundImage: `url(${require('../assets/icons/' +\n role.id +\n '.png')})`\n }\"\n ></span>\n <span class=\"leaf-left\" v-if=\"role.firstNight\"></span>\n <span class=\"leaf-right\" v-if=\"role.otherNight\"></span>\n <span\n v-if=\"role.reminders && role.reminders.length\"\n v-bind:class=\"['leaf-top' + role.reminders.length]\"\n ></span>\n <span class=\"leaf-orange\" v-if=\"role.setup\"></span>\n <svg viewBox=\"0 0 150 150\" class=\"name\">\n <path\n d=\"M 13 75 C 13 160, 138 160, 138 75\"\n id=\"curve\"\n fill=\"transparent\"\n />\n <text\n width=\"150\"\n x=\"66.6%\"\n text-anchor=\"middle\"\n class=\"label\"\n v-bind:font-size=\"role.name | nameToFontSize\"\n >\n <textPath xlink:href=\"#curve\">\n {{ role.name }}\n </textPath>\n </text>\n </svg>\n <div\n class=\"edition\"\n v-bind:class=\"[`edition-${role.edition}`, role.team]\"\n ></div>\n <div class=\"ability\" v-if=\"role.ability\">\n {{ role.ability }}\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Token\",\n props: {\n role: {\n type: Object,\n default: () => ({})\n }\n },\n data() {\n return {};\n },\n filters: {\n nameToFontSize: name => (name && name.length > 10 ? \"20px\" : \"24px\")\n },\n methods: {\n setRole() {\n this.$emit(\"set-role\");\n }\n }\n};\n</script>\n\n<style scoped lang=\"scss\">\n.token {\n border-radius: 50%;\n height: 100%;\n width: 100%;\n background: url(\"../assets/token.png\") center center;\n background-size: 100%;\n text-align: center;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .icon {\n background-size: 100%;\n position: absolute;\n width: 100%;\n height: 100%;\n margin-top: 3%;\n }\n\n span {\n position: absolute;\n width: 100%;\n height: 100%;\n background-size: 100%;\n pointer-events: none;\n\n &.leaf-left {\n background-image: url(\"../assets/leaf-left.png\");\n }\n\n &.leaf-orange {\n background-image: url(\"../assets/leaf-orange.png\");\n }\n\n &.leaf-right {\n background-image: url(\"../assets/leaf-right.png\");\n }\n\n &.leaf-top1 {\n background-image: url(\"../assets/leaf-top1.png\");\n }\n\n &.leaf-top2 {\n background-image: url(\"../assets/leaf-top2.png\");\n }\n\n &.leaf-top3 {\n background-image: url(\"../assets/leaf-top3.png\");\n }\n\n &.leaf-top4 {\n background-image: url(\"../assets/leaf-top4.png\");\n }\n\n &.leaf-top5 {\n background-image: url(\"../assets/leaf-top5.png\");\n }\n }\n\n .name {\n width: 100%;\n height: 100%;\n .label {\n fill: black;\n stroke: white;\n stroke-width: 2px;\n paint-order: stroke;\n font-family: \"Papyrus\", serif;\n font-weight: bold;\n text-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);\n letter-spacing: 1px;\n }\n }\n\n .edition {\n position: absolute;\n right: 0;\n bottom: 5px;\n width: 30px;\n height: 30px;\n background-size: 100%;\n display: none;\n }\n\n .ability {\n display: flex;\n position: absolute;\n padding: 5px 10px;\n left: 120%;\n width: 250px;\n z-index: 25;\n font-size: 80%;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 10px;\n border: 3px solid black;\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.5));\n text-align: left;\n justify-items: center;\n align-content: center;\n align-items: center;\n pointer-events: none;\n opacity: 0;\n transition: opacity 200ms ease-in-out;\n\n &:before {\n content: \" \";\n border: 10px solid transparent;\n width: 0;\n height: 0;\n border-right-color: black;\n position: absolute;\n margin-right: 2px;\n right: 100%;\n }\n\n #app.screenshot & {\n display: none;\n }\n }\n\n &:hover .ability {\n opacity: 1;\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Token.vue?vue&type=template&id=77841dfe&scoped=true&\"\nimport script from \"./Token.vue?vue&type=script&lang=js&\"\nexport * from \"./Token.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Token.vue?vue&type=style&index=0&id=77841dfe&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"77841dfe\",\n null\n \n)\n\nexport default component.exports","<template>\n <li>\n <div\n ref=\"player\"\n class=\"player\"\n :class=\"[\n {\n dead: player.isDead,\n 'no-vote': player.isVoteless,\n you: player.id === session.playerId,\n 'vote-yes': session.votes[index],\n 'vote-lock': voteLocked\n },\n player.role.team\n ]\"\n >\n <div class=\"shroud\" @click=\"toggleStatus()\"></div>\n <div class=\"life\" @click=\"toggleStatus()\"></div>\n\n <div\n class=\"night first\"\n v-if=\"nightOrder.get(player).first && grimoire.isNightOrder\"\n >\n <em>{{ nightOrder.get(player).first }}.</em>\n <span v-if=\"player.role.firstNightReminder\">{{\n player.role.firstNightReminder | handleEmojis\n }}</span>\n </div>\n <div\n class=\"night other\"\n v-if=\"nightOrder.get(player).other && grimoire.isNightOrder\"\n >\n <em>{{ nightOrder.get(player).other }}.</em>\n <span v-if=\"player.role.otherNightReminder\">{{\n player.role.otherNightReminder | handleEmojis\n }}</span>\n </div>\n\n <Token\n :role=\"player.role\"\n @set-role=\"$emit('trigger', ['openRoleModal'])\"\n />\n\n <!-- Overlay icons -->\n <font-awesome-icon\n icon=\"skull\"\n class=\"vote\"\n title=\"Voted YES\"\n @click=\"vote()\"\n />\n <font-awesome-icon\n icon=\"times\"\n class=\"vote\"\n title=\"Voted NO\"\n @click=\"vote()\"\n />\n <font-awesome-icon\n icon=\"times-circle\"\n class=\"cancel\"\n title=\"Cancel\"\n @click=\"cancel()\"\n />\n <font-awesome-icon\n icon=\"exchange-alt\"\n class=\"swap\"\n @click=\"swapPlayer(player)\"\n title=\"Swap seats with this player\"\n />\n <font-awesome-icon\n icon=\"redo-alt\"\n class=\"move\"\n @click=\"movePlayer(player)\"\n title=\"Move player to this seat\"\n />\n <font-awesome-icon\n icon=\"hand-point-right\"\n class=\"nominate\"\n @click=\"nominatePlayer(player)\"\n title=\"Nominate this player\"\n />\n\n <!-- Claimed seat icon -->\n <font-awesome-icon icon=\"chair\" v-if=\"player.id\" class=\"seat\" />\n\n <!-- Ghost vote icon -->\n <font-awesome-icon\n icon=\"vote-yea\"\n class=\"has-vote\"\n v-if=\"player.isDead && !player.isVoteless\"\n @click=\"updatePlayer('isVoteless', true)\"\n title=\"Ghost vote\"\n />\n\n <div\n class=\"name\"\n @click=\"isMenuOpen = !isMenuOpen\"\n v-bind:class=\"{ active: isMenuOpen }\"\n >\n {{ player.name }}\n </div>\n\n <transition name=\"fold\">\n <ul class=\"menu\" v-if=\"isMenuOpen\">\n <template v-if=\"!session.isSpectator\">\n <li @click=\"changeName\">\n <font-awesome-icon icon=\"user-edit\" />Rename\n </li>\n <li v-if=\"!session.nomination\" @click=\"nominatePlayer()\">\n <font-awesome-icon icon=\"hand-point-right\" />\n Nomination\n </li>\n <li @click=\"movePlayer()\">\n <font-awesome-icon icon=\"redo-alt\" />\n Move player\n </li>\n <li @click=\"swapPlayer()\">\n <font-awesome-icon icon=\"exchange-alt\" />\n Swap seats\n </li>\n <li @click=\"takeScreenshot\">\n <font-awesome-icon icon=\"camera\" />\n Screenshot\n </li>\n <li @click=\"$emit('trigger', ['removePlayer'])\">\n <font-awesome-icon icon=\"times-circle\" />\n Remove\n </li>\n </template>\n <li @click=\"claimSeat\" v-if=\"session.isSpectator\">\n <font-awesome-icon icon=\"chair\" />\n <template v-if=\"player.id !== session.playerId\">\n Claim seat\n </template>\n <template v-else> Vacate seat </template>\n </li>\n </ul>\n </transition>\n </div>\n\n <template v-if=\"player.reminders\">\n <div\n class=\"reminder\"\n v-bind:key=\"reminder.role + ' ' + reminder.name\"\n v-for=\"reminder in player.reminders\"\n v-bind:class=\"[reminder.role]\"\n @click=\"removeReminder(reminder)\"\n >\n <span\n class=\"icon\"\n v-bind:style=\"{\n backgroundImage: `url(${require('../assets/icons/' +\n reminder.role +\n '.png')})`\n }\"\n ></span>\n {{ reminder.name }}\n </div>\n </template>\n <div class=\"reminder add\" @click=\"$emit('trigger', ['openReminderModal'])\">\n <span class=\"icon\"></span>\n </div>\n </li>\n</template>\n\n<script>\nimport Token from \"./Token\";\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n components: {\n Token\n },\n props: {\n player: {\n type: Object,\n required: true\n }\n },\n computed: {\n ...mapState(\"players\", [\"players\"]),\n ...mapState([\"grimoire\", \"session\"]),\n ...mapGetters({ nightOrder: \"players/nightOrder\" }),\n index: function() {\n return this.players.indexOf(this.player);\n },\n voteLocked: function() {\n const session = this.session;\n const players = this.players.length;\n if (!session.nomination) return false;\n const indexAdjusted =\n (this.index - 1 + players - session.nomination[1]) % players;\n return indexAdjusted < session.lockedVote - 1;\n }\n },\n data() {\n return {\n isMenuOpen: false,\n isSwap: false\n };\n },\n filters: {\n handleEmojis: text => text.replace(/:([^: ]+?):/g, \"\").replace(/ •/g, \"\\n•\")\n },\n methods: {\n takeScreenshot() {\n const { width, height, x, y } = this.$refs.player.getBoundingClientRect();\n this.$emit(\"screenshot\", { width, height, x, y });\n this.isMenuOpen = false;\n },\n toggleStatus() {\n if (this.grimoire.isPublic) {\n if (!this.player.isDead) {\n this.updatePlayer(\"isDead\", true);\n } else if (this.player.isVoteless) {\n this.updatePlayer(\"isVoteless\", false);\n this.updatePlayer(\"isDead\", false);\n } else {\n this.updatePlayer(\"isVoteless\", true);\n }\n } else {\n this.updatePlayer(\"isDead\", !this.player.isDead);\n if (this.player.isVoteless) {\n this.updatePlayer(\"isVoteless\", false);\n }\n }\n },\n changeName() {\n if (this.session.isSpectator) return;\n const name = prompt(\"Player name\", this.player.name) || this.player.name;\n this.updatePlayer(\"name\", name);\n this.isMenuOpen = false;\n },\n removeReminder(reminder) {\n const reminders = [...this.player.reminders];\n reminders.splice(this.player.reminders.indexOf(reminder), 1);\n this.updatePlayer(\"reminders\", reminders);\n },\n updatePlayer(property, value) {\n if (this.session.isSpectator && property !== \"reminders\") return;\n this.$store.commit(\"players/update\", {\n player: this.player,\n property,\n value\n });\n },\n swapPlayer(player) {\n this.isMenuOpen = false;\n this.$emit(\"trigger\", [\"swapPlayer\", player]);\n },\n movePlayer(player) {\n this.isMenuOpen = false;\n this.$emit(\"trigger\", [\"movePlayer\", player]);\n },\n nominatePlayer(player) {\n this.isMenuOpen = false;\n this.$emit(\"trigger\", [\"nominatePlayer\", player]);\n },\n cancel() {\n this.$emit(\"trigger\", [\"cancel\"]);\n },\n claimSeat() {\n this.isMenuOpen = false;\n this.$emit(\"trigger\", [\"claimSeat\"]);\n },\n vote() {\n if (this.player.id !== this.session.playerId) return;\n this.$store.commit(\"session/vote\", [this.index]);\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n@import \"../vars.scss\";\n\n.fold-enter-active,\n.fold-leave-active {\n transition: transform 250ms ease-in-out;\n transform-origin: left center;\n transform: perspective(200px);\n}\n.fold-enter,\n.fold-leave-to {\n transform: perspective(200px) rotateY(90deg);\n}\n\n/***** Player token *****/\n.circle .player {\n margin-bottom: 10px;\n padding-top: $token + 6px;\n padding-bottom: 5px;\n\n .shroud {\n top: 0;\n left: 0;\n position: absolute;\n width: 100%;\n height: 2/3 * $token;\n cursor: pointer;\n transform: rotateX(0deg);\n transform-origin: top center;\n transition: transform 200ms ease-in-out;\n z-index: 2;\n filter: drop-shadow(0 0 5px rgba(0, 0, 0, 0.8));\n\n &:before {\n content: \" \";\n background: url(\"../assets/shroud.png\") center -10px no-repeat;\n background-size: auto 100%;\n position: absolute;\n margin-left: -2/6 * $token;\n width: 2/3 * $token;\n height: 2/3 * $token;\n left: 50%;\n top: -30px;\n opacity: 0;\n transform: perspective(400px) scale(1.5);\n transform-origin: top center;\n transition: all 200ms ease-in-out;\n pointer-events: none;\n }\n\n #townsquare.spectator & {\n pointer-events: none;\n }\n\n #townsquare:not(.spectator) &:hover:before {\n opacity: 0.5;\n top: -10px;\n transform: scale(1);\n }\n }\n\n &.dead .shroud:before {\n opacity: 1;\n top: 0;\n transform: perspective(400px) scale(1);\n }\n}\n\n/****** Life token *******/\n.player {\n z-index: 2;\n .life {\n border-radius: 50%;\n height: $token + 6px;\n width: $token + 6px;\n background: url(\"../assets/life.png\") center center;\n background-size: 100%;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n cursor: pointer;\n transition: transform 200ms ease-in-out;\n transform: perspective(400px) rotateY(180deg);\n backface-visibility: hidden;\n position: absolute;\n left: 50%;\n top: 0;\n margin-left: ($token + 6) / -2;\n }\n\n &.dead {\n &.no-vote .life:after {\n display: none;\n }\n\n .life {\n background-image: url(\"../assets/death.png\");\n\n &:after {\n content: \" \";\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n background: url(\"../assets/vote.png\") center center no-repeat;\n background-size: 50%;\n height: $token + 3px;\n pointer-events: none;\n }\n }\n }\n\n &.traveler .life {\n filter: grayscale(100%);\n }\n}\n\n#townsquare.public .player {\n .shroud {\n transform: perspective(400px) rotateX(90deg);\n pointer-events: none;\n }\n\n .life {\n transform: perspective(400px) rotateY(0deg);\n }\n\n &.traveler:not(.dead) .token {\n transform: perspective(400px) scale(0.8);\n pointer-events: none;\n transition-delay: 0s;\n }\n\n &.traveler.dead .token {\n transition-delay: 0s;\n }\n}\n\n/***** Role token ******/\n.player .token {\n position: absolute;\n left: 0;\n top: 0;\n height: $token + 6px;\n width: $token + 6px;\n transition: transform 200ms ease-in-out;\n transform: perspective(400px) rotateY(0deg);\n backface-visibility: hidden;\n}\n\n#townsquare.public .circle .token {\n transform: perspective(400px) rotateY(-180deg);\n}\n\n/****** Player choice icons *******/\n.player > svg {\n position: absolute;\n filter: drop-shadow(0 0 3px black);\n z-index: 2;\n cursor: pointer;\n &.swap,\n &.move,\n &.nominate,\n &.vote,\n &.cancel {\n top: 9%;\n left: 25%;\n width: 50%;\n height: 60%;\n opacity: 0;\n pointer-events: none;\n transition: all 250ms;\n transform: scale(0.2);\n * {\n stroke-width: 10px;\n stroke: white;\n fill: url(#default);\n }\n &:hover *,\n &.fa-skull * {\n fill: url(#demon);\n }\n &.fa-times * {\n fill: url(#townsfolk);\n }\n }\n}\n\n#townsquare.vote .player.vote-yes > svg.vote.fa-skull {\n opacity: 0.5;\n transform: scale(1);\n}\n\n#townsquare.vote .player.you.vote-yes > svg.vote.fa-skull,\n#townsquare.vote .player.vote-lock.vote-yes > svg.vote.fa-skull,\n#townsquare.vote .player.vote-lock:not(.vote-yes) > svg.vote.fa-times {\n opacity: 1;\n transform: scale(1);\n}\n\nli.from:not(.nominate) .player > svg.cancel {\n opacity: 1;\n transform: scale(1);\n pointer-events: all;\n}\n\nli.swap:not(.from) .player > svg.swap,\nli.nominate .player > svg.nominate,\nli.move:not(.from) .player > svg.move {\n opacity: 1;\n transform: scale(1);\n pointer-events: all;\n}\n\n/****** Vote icon ********/\n.player .has-vote {\n position: absolute;\n right: 2px;\n bottom: 45px;\n color: #fff;\n filter: drop-shadow(0 0 3px black);\n transition: opacity 250ms;\n\n #townsquare.public & {\n opacity: 0;\n pointer-events: none;\n }\n}\n\n@mixin glow($name, $color) {\n @keyframes #{$name}-glow {\n 0% {\n box-shadow: 0 0 rgba($color, 1);\n border-color: $color;\n }\n 50% {\n border-color: black;\n }\n 100% {\n box-shadow: 0 0 20px 16px transparent;\n border-color: $color;\n }\n }\n\n .player.you.#{$name} .token {\n animation: #{$name}-glow 2s ease-in-out infinite;\n }\n}\n\n@include glow(\"townsfolk\", $townsfolk);\n@include glow(\"outsider\", $outsider);\n@include glow(\"demon\", $demon);\n@include glow(\"minion\", $minion);\n@include glow(\"traveler\", $traveler);\n\n.player.you .token {\n animation: townsfolk-glow 2s ease-in-out infinite;\n}\n\n/****** Seat icon ********/\n.player .seat {\n position: absolute;\n left: 2px;\n bottom: 45px;\n color: #fff;\n filter: drop-shadow(0 0 3px black);\n cursor: default;\n}\n\n.player.you .seat {\n color: $townsfolk;\n}\n\n/***** Player name *****/\n.player > .name {\n font-size: 120%;\n line-height: 120%;\n cursor: pointer;\n white-space: nowrap;\n width: 100%;\n background: rgba(0, 0, 0, 0.5);\n border: 3px solid black;\n border-radius: 10px;\n top: 5px;\n box-shadow: 0 0 5px black;\n text-overflow: ellipsis;\n overflow: hidden;\n padding: 0 4px;\n\n #townsquare:not(.spectator) &:hover,\n &.active {\n color: red;\n }\n}\n\n.player.dead > .name {\n opacity: 0.5;\n}\n\n/***** Player menu *****/\n.player > .menu {\n position: absolute;\n left: 100%;\n bottom: 0;\n text-align: left;\n white-space: nowrap;\n background: rgba(0, 0, 0, 0.5);\n padding: 2px 5px;\n border-radius: 10px;\n border: 3px solid #000;\n margin-left: 15px;\n cursor: pointer;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);\n\n &:before {\n content: \" \";\n width: 0;\n height: 0;\n position: absolute;\n border: 10px solid transparent;\n border-right-color: black;\n right: 100%;\n bottom: 7px;\n margin-right: 2px;\n }\n\n li:hover {\n color: red;\n }\n svg {\n margin-right: 2px;\n }\n}\n\n/***** Ability text *****/\n#townsquare.public .ability {\n display: none;\n}\n.circle .player .shroud:hover ~ .token .ability,\n.circle .player .token:hover .ability {\n opacity: 1;\n}\n\n/**** Night reminders ****/\n.player .night {\n position: absolute;\n height: 100%;\n width: 100%;\n z-index: 2;\n cursor: pointer;\n opacity: 1;\n transition: opacity 200ms;\n display: flex;\n top: -20px;\n align-items: center;\n pointer-events: none;\n\n #townsquare.public & {\n opacity: 0;\n pointer-events: none;\n }\n\n &:hover ~ .token .ability {\n opacity: 0;\n }\n\n span {\n display: flex;\n position: absolute;\n padding: 5px 10px 5px 30px;\n width: 350px;\n z-index: 25;\n font-size: 70%;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 10px;\n border: 3px solid black;\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.5));\n text-align: left;\n align-items: center;\n opacity: 0;\n transition: opacity 200ms ease-in-out;\n\n &:before {\n transform: rotate(-90deg);\n transform-origin: center top;\n left: -98px;\n top: 50%;\n font-size: 100%;\n position: absolute;\n font-weight: bold;\n text-align: center;\n width: 200px;\n }\n\n &:after {\n content: \" \";\n border: 10px solid transparent;\n width: 0;\n height: 0;\n position: absolute;\n }\n }\n\n &.first span {\n right: 120%;\n background: linear-gradient(\n to right,\n $townsfolk 0%,\n rgba(0, 0, 0, 0.5) 20%\n );\n &:before {\n content: \"First Night\";\n }\n &:after {\n border-left-color: $townsfolk;\n margin-left: 3px;\n left: 100%;\n }\n }\n\n &.other span {\n left: 120%;\n background: linear-gradient(to right, $demon 0%, rgba(0, 0, 0, 0.5) 20%);\n &:before {\n content: \"Other Nights\";\n }\n &:after {\n right: 100%;\n margin-right: 3px;\n border-right-color: $demon;\n }\n }\n\n em {\n font-style: normal;\n position: absolute;\n width: 40px;\n height: 40px;\n text-align: center;\n line-height: 37px;\n border-radius: 50%;\n border: 3px solid black;\n filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.5));\n font-weight: bold;\n opacity: 1;\n pointer-events: all;\n transition: opacity 200ms;\n }\n\n &.first em {\n left: -15px;\n background: linear-gradient(180deg, rgba(0, 0, 0, 1) 0%, $townsfolk 100%);\n }\n\n &.other em {\n right: -15px;\n background: linear-gradient(180deg, rgba(0, 0, 0, 1) 0%, $demon 100%);\n }\n\n em:hover + span {\n opacity: 1;\n }\n\n #app.screenshot & {\n display: none;\n }\n}\n\n.player.dead .night em {\n opacity: 0;\n}\n\n/***** Reminder token *****/\n.circle .reminder {\n background: url(\"../assets/reminder.png\") center center;\n background-size: 100%;\n width: $token / 2;\n height: $token / 2;\n color: black;\n font-size: 45%;\n font-weight: bold;\n display: block;\n margin: 5px ($token / -4) 0;\n text-align: center;\n padding: ($token * 0.3 + 5px) 5px 0;\n border-radius: 50%;\n line-height: 90%;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n transition: all 200ms;\n cursor: pointer;\n\n .icon,\n &:after {\n content: \" \";\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-size: 100%;\n background-position: center 0;\n background-repeat: no-repeat;\n background-image: url(\"../assets/icons/plus.png\");\n transition: opacity 200ms;\n }\n\n &:after {\n background-image: url(\"../assets/icons/x.png\");\n opacity: 0;\n }\n\n &.add {\n opacity: 0;\n top: 30px;\n &:after {\n display: none;\n }\n }\n\n &.custom {\n padding: 5px;\n display: flex;\n align-items: center;\n align-content: center;\n justify-content: center;\n font-size: 70%;\n word-break: break-word;\n .icon {\n display: none;\n }\n }\n\n &:hover:before {\n opacity: 0;\n }\n &:hover:after {\n opacity: 1;\n }\n}\n.circle li:hover .reminder.add {\n opacity: 1;\n top: 0;\n}\n.circle li:hover .reminder.add:before {\n opacity: 1;\n}\n\n#townsquare.public .reminder {\n opacity: 0;\n pointer-events: none;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Player.vue?vue&type=template&id=7cc53ac7&\"\nimport script from \"./Player.vue?vue&type=script&lang=js&\"\nexport * from \"./Player.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Player.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.players[_vm.playerIndex])?_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.modals.reminder && _vm.availableReminders.length),expression:\"modals.reminder && availableReminders.length\"}],on:{\"close\":function($event){return _vm.toggleModal('reminder')}}},[_c('h3',[_vm._v(\"Choose a reminder token:\")]),_c('ul',{staticClass:\"reminders\"},_vm._l((_vm.availableReminders),function(reminder){return _c('li',{key:reminder.role + ' ' + reminder.name,staticClass:\"reminder\",class:[reminder.role],on:{\"click\":function($event){return _vm.addReminder(reminder)}}},[_c('span',{staticClass:\"icon\",style:({\n backgroundImage: (\"url(\" + (require('../../assets/icons/' +\n reminder.role +\n '.png')) + \")\")\n })}),_vm._v(\" \"+_vm._s(reminder.name)+\" \")])}),0)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"modal-fade\"}},[_c('div',{staticClass:\"modal-backdrop\",on:{\"click\":_vm.close}},[_c('div',{staticClass:\"modal\",attrs:{\"role\":\"dialog\",\"aria-labelledby\":\"modalTitle\",\"aria-describedby\":\"modalDescription\"},on:{\"click\":function($event){$event.stopPropagation();}}},[_c('font-awesome-icon',{staticClass:\"close\",attrs:{\"icon\":\"times-circle\"},on:{\"click\":_vm.close}}),_vm._t(\"default\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <transition name=\"modal-fade\">\n <div class=\"modal-backdrop\" @click=\"close\">\n <div\n class=\"modal\"\n role=\"dialog\"\n aria-labelledby=\"modalTitle\"\n aria-describedby=\"modalDescription\"\n @click.stop=\"\"\n >\n <font-awesome-icon @click=\"close\" class=\"close\" icon=\"times-circle\" />\n <slot></slot>\n </div>\n </div>\n </transition>\n</template>\n\n<script>\nexport default {\n methods: {\n close() {\n this.$emit(\"close\");\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.modal-backdrop {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.3);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 100;\n}\n\n.modal {\n background: rgba(0, 0, 0, 0.8);\n padding: 10px 20px;\n border-radius: 10px;\n box-shadow: 2px 2px 20px 1px #000;\n display: flex;\n flex-direction: column;\n max-width: 60%;\n\n .characters & {\n max-height: 80%;\n overflow-y: auto;\n }\n\n ul {\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n align-items: center;\n justify-content: center;\n font-size: 75%;\n line-height: 100%;\n }\n > .close {\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n z-index: 5;\n &:hover {\n color: red;\n }\n }\n}\n\n.modal-fade-enter,\n.modal-fade-leave-active {\n opacity: 0;\n}\n\n.modal-fade-enter-active,\n.modal-fade-leave-active {\n transition: opacity 0.2s ease;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Modal.vue?vue&type=template&id=35d52008&\"\nimport script from \"./Modal.vue?vue&type=script&lang=js&\"\nexport * from \"./Modal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Modal.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <Modal\n v-show=\"modals.reminder && availableReminders.length\"\n v-if=\"players[playerIndex]\"\n @close=\"toggleModal('reminder')\"\n >\n <h3>Choose a reminder token:</h3>\n <ul class=\"reminders\">\n <li\n v-for=\"reminder in availableReminders\"\n class=\"reminder\"\n :class=\"[reminder.role]\"\n :key=\"reminder.role + ' ' + reminder.name\"\n @click=\"addReminder(reminder)\"\n >\n <span\n class=\"icon\"\n :style=\"{\n backgroundImage: `url(${require('../../assets/icons/' +\n reminder.role +\n '.png')})`\n }\"\n ></span>\n {{ reminder.name }}\n </li>\n </ul>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"./Modal\";\nimport { mapMutations, mapState } from \"vuex\";\n\nexport default {\n components: { Modal },\n props: [\"playerIndex\"],\n computed: {\n availableReminders() {\n let reminders = [];\n const players = this.$store.state.players.players;\n this.$store.state.roles.forEach(role => {\n if (players.some(p => p.role.id === role.id)) {\n reminders = [\n ...reminders,\n ...role.reminders.map(name => ({ role: role.id, name }))\n ];\n }\n });\n reminders.push({ role: \"good\", name: \"Good\" });\n reminders.push({ role: \"evil\", name: \"Evil\" });\n reminders.push({ role: \"custom\", name: \"Custom note\" });\n return reminders;\n },\n ...mapState([\"modals\"]),\n ...mapState(\"players\", [\"players\"])\n },\n methods: {\n addReminder(reminder) {\n const player = this.$store.state.players.players[this.playerIndex];\n let value;\n if (reminder.role === \"custom\") {\n const name = prompt(\"Add a custom reminder note\");\n if (!name) return;\n value = [...player.reminders, { role: \"custom\", name }];\n } else {\n value = [...player.reminders, reminder];\n }\n this.$store.commit(\"players/update\", {\n player,\n property: \"reminders\",\n value\n });\n this.$store.commit(\"toggleModal\", \"reminder\");\n },\n ...mapMutations([\"toggleModal\"])\n }\n};\n</script>\n\n<style scoped lang=\"scss\">\nul.reminders .reminder {\n background: url(\"../../assets/reminder.png\") center center;\n background-size: 100%;\n width: 100px;\n height: 100px;\n color: black;\n font-size: 65%;\n font-weight: bold;\n display: block;\n margin: 5px;\n text-align: center;\n border-radius: 50%;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n cursor: pointer;\n padding: 70px 9px 0;\n line-height: 100%;\n transition: transform 500ms ease;\n\n .icon {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-size: 100%;\n background-position: center 0;\n background-repeat: no-repeat;\n }\n\n &:hover {\n transform: scale(1.2);\n }\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReminderModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReminderModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReminderModal.vue?vue&type=template&id=c8602356&scoped=true&\"\nimport script from \"./ReminderModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ReminderModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ReminderModal.vue?vue&type=style&index=0&id=c8602356&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c8602356\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.modals.role && _vm.availableRoles.length),expression:\"modals.role && availableRoles.length\"}],on:{\"close\":function($event){return _vm.toggleModal('role')}}},[_c('h3',[_vm._v(\" Choose a new character for \"+_vm._s(_vm.playerIndex >= 0 && _vm.players.length ? _vm.players[_vm.playerIndex].name : \"bluffing\")+\" \")]),_c('ul',{staticClass:\"tokens\"},_vm._l((_vm.availableRoles),function(role){return _c('li',{key:role.id,class:[role.team],on:{\"click\":function($event){return _vm.setRole(role)}}},[_c('Token',{attrs:{\"role\":role}})],1)}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <Modal\n v-show=\"modals.role && availableRoles.length\"\n @close=\"toggleModal('role')\"\n >\n <h3>\n Choose a new character for\n {{\n playerIndex >= 0 && players.length\n ? players[playerIndex].name\n : \"bluffing\"\n }}\n </h3>\n <ul class=\"tokens\">\n <li\n v-for=\"role in availableRoles\"\n v-bind:class=\"[role.team]\"\n v-bind:key=\"role.id\"\n @click=\"setRole(role)\"\n >\n <Token :role=\"role\" />\n </li>\n </ul>\n </Modal>\n</template>\n\n<script>\nimport { mapMutations, mapState } from \"vuex\";\nimport Modal from \"./Modal\";\nimport Token from \"../Token\";\n\nexport default {\n components: { Token, Modal },\n props: [\"playerIndex\"],\n computed: {\n availableRoles() {\n const availableRoles = [];\n const players = this.$store.state.players.players;\n this.$store.state.roles.forEach(role => {\n // don't show bluff roles that are already assigned to players\n if (\n this.playerIndex >= 0 ||\n (this.playerIndex < 0 &&\n !players.some(player => player.role.id === role.id))\n ) {\n availableRoles.push(role);\n }\n });\n availableRoles.push({});\n return availableRoles;\n },\n ...mapState([\"modals\", \"roles\", \"session\"]),\n ...mapState(\"players\", [\"players\"])\n },\n methods: {\n setRole(role) {\n if (this.playerIndex < 0) {\n // assign to bluff slot\n this.$store.commit(\"setBluff\", {\n index: this.playerIndex * -1 - 1,\n role\n });\n } else {\n if (this.session.isSpectator && role.team === \"traveler\") return;\n // assign to player\n const player = this.$store.state.players.players[this.playerIndex];\n this.$store.commit(\"players/update\", {\n player,\n property: \"role\",\n value: role\n });\n }\n this.$store.commit(\"toggleModal\", \"role\");\n },\n ...mapMutations([\"toggleModal\"])\n }\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../vars.scss\";\n\nul.tokens li {\n border-radius: 50%;\n width: 6vw;\n margin: 5px;\n transition: transform 500ms ease;\n\n &.townsfolk {\n box-shadow: 0 0 10px $townsfolk, 0 0 10px #004cff;\n }\n &.outsider {\n box-shadow: 0 0 10px $outsider, 0 0 10px $outsider;\n }\n &.minion {\n box-shadow: 0 0 10px $minion, 0 0 10px $minion;\n }\n &.demon {\n box-shadow: 0 0 10px $demon, 0 0 10px $demon;\n }\n &.traveler {\n box-shadow: 0 0 10px $traveler, 0 0 10px $traveler;\n }\n &:hover {\n transform: scale(1.2);\n z-index: 10;\n }\n}\n\n#townsquare.spectator ul.tokens li.traveler {\n display: none;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoleModal.vue?vue&type=template&id=06abb511&scoped=true&\"\nimport script from \"./RoleModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RoleModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RoleModal.vue?vue&type=style&index=0&id=06abb511&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"06abb511\",\n null\n \n)\n\nexport default component.exports","<template>\n <div\n id=\"townsquare\"\n class=\"square\"\n v-bind:class=\"{\n public: grimoire.isPublic,\n spectator: session.isSpectator,\n vote: session.nomination\n }\"\n v-bind:style=\"{ zoom: grimoire.zoom }\"\n >\n <ul class=\"circle\" v-bind:class=\"['size-' + players.length]\">\n <Player\n v-for=\"(player, index) in players\"\n :key=\"index\"\n :player=\"player\"\n @screenshot=\"$emit('screenshot', $event)\"\n @trigger=\"handleTrigger(index, $event)\"\n v-bind:class=\"{\n from: Math.max(swap, move, nominate) === index,\n swap: swap > -1,\n move: move > -1,\n nominate: nominate > -1\n }\"\n ></Player>\n </ul>\n\n <div class=\"bluffs\" v-if=\"players.length > 6\" ref=\"bluffs\">\n <h3>Demon bluffs</h3>\n <font-awesome-icon icon=\"camera\" @click.stop=\"takeScreenshot\" />\n <ul>\n <li\n v-for=\"index in bluffs\"\n :key=\"index\"\n @click=\"openRoleModal(index * -1)\"\n >\n <Token :role=\"grimoire.bluffs[index - 1]\"></Token>\n </li>\n </ul>\n </div>\n\n <ReminderModal :player-index=\"selectedPlayer\"></ReminderModal>\n <RoleModal :player-index=\"selectedPlayer\"></RoleModal>\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport Player from \"./Player\";\nimport Token from \"./Token\";\nimport ReminderModal from \"./modals/ReminderModal\";\nimport RoleModal from \"./modals/RoleModal\";\n\nexport default {\n components: {\n Player,\n Token,\n RoleModal,\n ReminderModal\n },\n computed: {\n ...mapState([\"grimoire\", \"roles\", \"session\"]),\n ...mapState(\"players\", [\"players\"])\n },\n data() {\n return {\n selectedPlayer: 0,\n bluffs: 3,\n swap: -1,\n move: -1,\n nominate: -1\n };\n },\n methods: {\n takeScreenshot() {\n const { width, height, x, y } = this.$refs.bluffs.getBoundingClientRect();\n this.$emit(\"screenshot\", { width, height, x, y });\n },\n handleTrigger(playerIndex, [method, params]) {\n if (typeof this[method] === \"function\") {\n this[method](playerIndex, params);\n }\n },\n claimSeat(playerIndex) {\n if (!this.session.isSpectator) return;\n if (this.session.playerId === this.players[playerIndex].id) {\n this.$store.commit(\"session/claimSeat\", -1);\n } else {\n this.$store.commit(\"session/claimSeat\", playerIndex);\n }\n },\n openReminderModal(playerIndex) {\n this.selectedPlayer = playerIndex;\n this.$store.commit(\"toggleModal\", \"reminder\");\n },\n openRoleModal(playerIndex) {\n const player = this.players[playerIndex];\n if (this.session.isSpectator && player && player.role.team === \"traveler\")\n return;\n this.selectedPlayer = playerIndex;\n this.$store.commit(\"toggleModal\", \"role\");\n },\n removePlayer(playerIndex) {\n if (this.session.isSpectator) return;\n if (\n confirm(\n `Do you really want to remove ${this.players[playerIndex].name}?`\n )\n ) {\n this.$store.commit(\"players/remove\", playerIndex);\n }\n },\n swapPlayer(from, to) {\n if (to === undefined) {\n this.cancel();\n this.swap = from;\n } else {\n this.$store.commit(\"players/swap\", [\n this.swap,\n this.players.indexOf(to)\n ]);\n this.cancel();\n }\n },\n movePlayer(from, to) {\n if (to === undefined) {\n this.cancel();\n this.move = from;\n } else {\n this.$store.commit(\"players/move\", [\n this.move,\n this.players.indexOf(to)\n ]);\n this.cancel();\n }\n },\n nominatePlayer(from, to) {\n if (to === undefined) {\n this.cancel();\n if (from !== this.nominate) {\n this.nominate = from;\n }\n } else {\n this.$store.commit(\"session/nomination\", [\n this.nominate,\n this.players.indexOf(to)\n ]);\n this.cancel();\n }\n },\n cancel() {\n this.move = -1;\n this.swap = -1;\n this.nominate = -1;\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.circle {\n padding: 0;\n width: 100%;\n height: 100%;\n list-style: none;\n margin: 0;\n\n > li {\n position: absolute;\n top: 0;\n left: 50%;\n height: 50%;\n transform-origin: 0 100%;\n text-align: center;\n\n &:hover {\n z-index: 25 !important;\n }\n\n > * {\n margin-left: -78px;\n width: 156px;\n }\n }\n}\n\n@mixin on-circle($item-count) {\n $angle: (360 / $item-count);\n $rot: 0;\n\n @for $i from 1 through $item-count {\n &:nth-child(#{$i}) {\n transform: rotate($rot * 1deg);\n @if $i - 1 <= $item-count / 2 {\n z-index: $item-count - $i + 1;\n } @else {\n z-index: $i - 1;\n .ability {\n right: 120%;\n left: auto;\n &:before {\n border-right-color: transparent;\n border-left-color: black;\n right: auto;\n left: 100%;\n }\n }\n }\n > * {\n transform: rotate($rot * -1deg);\n }\n .life,\n .token,\n .shroud,\n .night {\n transition-delay: ($i - 1) * 50ms;\n }\n\n // move reminders closer to the sides of the circle\n $q: $item-count / 4;\n $x: $i - 1;\n @if $x < $q or ($x >= $item-count / 2 and $x < $q * 3) {\n .player {\n margin-bottom: -10px + 20px * (1 - ($x % $q / $q));\n }\n } @else {\n .player {\n margin-bottom: -10px + 20px * ($x % $q / $q);\n }\n }\n }\n $rot: $rot + $angle;\n }\n}\n\n@for $i from 1 through 20 {\n .circle.size-#{$i} > li {\n @include on-circle($item-count: $i);\n }\n}\n\n#townsquare {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n padding: 20px;\n display: flex;\n align-items: center;\n align-content: center;\n justify-content: center;\n}\n\n/***** Demon bluffs *******/\n.bluffs {\n position: absolute;\n bottom: 10px;\n left: 10px;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 10px;\n border: 3px solid black;\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.5));\n transform-origin: bottom left;\n transform: scale(1);\n opacity: 1;\n transition: all 200ms ease-in-out;\n\n #townsquare.public & {\n opacity: 0;\n transform: scale(0.1);\n }\n > svg {\n position: absolute;\n top: 10px;\n right: 10px;\n cursor: pointer;\n &:hover {\n color: red;\n }\n #app.screenshot & {\n display: none;\n }\n }\n h3 {\n margin-top: 5px;\n }\n li {\n width: 120px;\n height: 120px;\n margin: 0 5px;\n display: inline-block;\n font-size: 18px;\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TownSquare.vue?vue&type=template&id=b1d3389a&\"\nimport script from \"./TownSquare.vue?vue&type=script&lang=js&\"\nexport * from \"./TownSquare.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TownSquare.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{staticClass:\"info\"},[_c('li',{staticClass:\"edition\",class:['edition-' + _vm.edition]}),(_vm.players.length - _vm.teams.traveler < 5)?_c('li',[_vm._v(\" Please add more players! \")]):_vm._e(),_c('li',[_vm._v(\" \"+_vm._s(_vm.players.length)+\" \"),_c('font-awesome-icon',{staticClass:\"players\",attrs:{\"icon\":\"users\"}}),_vm._v(\" \"+_vm._s(_vm.teams.alive)+\" \"),_c('font-awesome-icon',{staticClass:\"alive\",attrs:{\"icon\":\"heartbeat\"}}),_vm._v(\" \"+_vm._s(_vm.teams.votes)+\" \"),_c('font-awesome-icon',{staticClass:\"votes\",attrs:{\"icon\":\"vote-yea\"}})],1),(_vm.players.length - _vm.teams.traveler >= 5)?_c('li',[_vm._v(\" \"+_vm._s(_vm.teams.townsfolk)+\" \"),_c('font-awesome-icon',{staticClass:\"townsfolk\",attrs:{\"icon\":\"user-friends\"}}),_vm._v(\" \"+_vm._s(_vm.teams.outsider)+\" \"),_c('font-awesome-icon',{staticClass:\"outsider\",attrs:{\"icon\":_vm.teams.outsider > 1 ? 'user-friends' : 'user'}}),_vm._v(\" \"+_vm._s(_vm.teams.minion)+\" \"),_c('font-awesome-icon',{staticClass:\"minion\",attrs:{\"icon\":_vm.teams.minion > 1 ? 'user-friends' : 'user'}}),_vm._v(\" \"+_vm._s(_vm.teams.demon)+\" \"),_c('font-awesome-icon',{staticClass:\"demon\",attrs:{\"icon\":_vm.teams.demon > 1 ? 'user-friends' : 'user'}}),(_vm.teams.traveler)?[_vm._v(\" \"+_vm._s(_vm.teams.traveler)+\" \"),_c('font-awesome-icon',{staticClass:\"traveler\",attrs:{\"icon\":_vm.teams.traveler > 1 ? 'user-friends' : 'user'}})]:_vm._e()],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <ul class=\"info\">\n <li class=\"edition\" v-bind:class=\"['edition-' + edition]\"></li>\n <li v-if=\"players.length - teams.traveler < 5\">\n Please add more players!\n </li>\n <li>\n {{ players.length }} <font-awesome-icon class=\"players\" icon=\"users\" />\n {{ teams.alive }} <font-awesome-icon class=\"alive\" icon=\"heartbeat\" />\n {{ teams.votes }} <font-awesome-icon class=\"votes\" icon=\"vote-yea\" />\n </li>\n <li v-if=\"players.length - teams.traveler >= 5\">\n {{ teams.townsfolk }}\n <font-awesome-icon class=\"townsfolk\" icon=\"user-friends\" />\n {{ teams.outsider }}\n <font-awesome-icon\n class=\"outsider\"\n v-bind:icon=\"teams.outsider > 1 ? 'user-friends' : 'user'\"\n />\n {{ teams.minion }}\n <font-awesome-icon\n class=\"minion\"\n v-bind:icon=\"teams.minion > 1 ? 'user-friends' : 'user'\"\n />\n {{ teams.demon }}\n <font-awesome-icon\n class=\"demon\"\n v-bind:icon=\"teams.demon > 1 ? 'user-friends' : 'user'\"\n />\n <template v-if=\"teams.traveler\">\n {{ teams.traveler }}\n <font-awesome-icon\n class=\"traveler\"\n v-bind:icon=\"teams.traveler > 1 ? 'user-friends' : 'user'\"\n />\n </template>\n </li>\n </ul>\n</template>\n\n<script>\nimport gameJSON from \"./../game\";\nimport { mapState } from \"vuex\";\n\nexport default {\n computed: {\n teams: function() {\n const { players } = this.$store.state.players;\n const nonTravelers = this.$store.getters[\"players/nonTravelers\"];\n const alive = players.filter(player => player.isDead !== true).length;\n return {\n ...gameJSON[nonTravelers - 5],\n traveler: players.length - nonTravelers,\n alive,\n votes:\n alive +\n players.filter(\n player => player.isDead === true && player.isVoteless !== true\n ).length\n };\n },\n ...mapState([\"edition\"]),\n ...mapState(\"players\", [\"players\"])\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../vars.scss\";\n\n// Editions\n@each $img, $skipIcons in $editions {\n .edition-#{$img} {\n background-image: url(\"../assets/editions/#{$img}.png\");\n }\n @if $skipIcons != true {\n .edition-#{$img}.townsfolk {\n background-image: url(\"../assets/editions/#{$img}-townsfolk.png\");\n }\n .edition-#{$img}.outsider {\n background-image: url(\"../assets/editions/#{$img}-outsider.png\");\n }\n .edition-#{$img}.minion {\n background-image: url(\"../assets/editions/#{$img}-minion.png\");\n }\n .edition-#{$img}.demon {\n background-image: url(\"../assets/editions/#{$img}-demon.png\");\n }\n }\n}\n\n.info {\n position: absolute;\n display: flex;\n width: 20%;\n height: 20%;\n padding: 50px 0 0;\n align-items: center;\n align-content: center;\n justify-content: center;\n flex-wrap: wrap;\n background: url(\"../assets/demon-head.png\") center center no-repeat;\n background-size: auto 100%;\n\n li {\n display: block;\n white-space: nowrap;\n font-weight: bold;\n text-align: center;\n padding: 0 5px;\n width: 100%;\n filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.7));\n\n svg {\n margin-right: 10px;\n }\n\n .players {\n color: #00f700;\n }\n .alive {\n color: #ff4a50;\n }\n .votes {\n color: #fff;\n }\n .townsfolk {\n color: $townsfolk;\n }\n .outsider {\n color: $outsider;\n }\n .minion {\n color: $minion;\n }\n .demon {\n color: $demon;\n }\n .traveler {\n color: $traveler;\n }\n }\n\n li.edition {\n width: 220px;\n height: 200px;\n background-position: 0 center;\n background-repeat: no-repeat;\n background-size: 100% auto;\n position: absolute;\n top: -50px;\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TownInfo.vue?vue&type=template&id=2e511c0c&scoped=true&\"\nimport script from \"./TownInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./TownInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TownInfo.vue?vue&type=style&index=0&id=2e511c0c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2e511c0c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"controls\"}},[_c('Screenshot',{ref:\"screenshot\"}),(_vm.session.sessionId)?_c('span',{staticClass:\"session\",class:{ spectator: _vm.session.isSpectator },attrs:{\"title\":(\"You're currently in a live game with \" + (_vm.session.playerCount) + \" other players!\")},on:{\"click\":_vm.leaveSession}},[_c('font-awesome-icon',{attrs:{\"icon\":\"broadcast-tower\"}}),_vm._v(\" \"+_vm._s(_vm.session.playerCount)+\" \")],1):_vm._e(),_c('span',{staticClass:\"camera\"},[_c('font-awesome-icon',{class:{ success: _vm.grimoire.isScreenshotSuccess },attrs:{\"icon\":\"camera\",\"title\":\"Take a screenshot\"},on:{\"click\":function($event){return _vm.takeScreenshot()}}})],1),_c('div',{staticClass:\"menu\",class:{ open: _vm.grimoire.isMenuOpen }},[_c('font-awesome-icon',{attrs:{\"icon\":\"cog\"},on:{\"click\":_vm.toggleMenu}}),_c('ul',[_c('li',{staticClass:\"tabs\",class:_vm.tab},[_c('font-awesome-icon',{attrs:{\"icon\":\"book-open\"},on:{\"click\":function($event){_vm.tab = 'grimoire'}}}),_c('font-awesome-icon',{attrs:{\"icon\":\"broadcast-tower\"},on:{\"click\":function($event){_vm.tab = 'session'}}}),(!_vm.session.isSpectator)?_c('font-awesome-icon',{attrs:{\"icon\":\"users\"},on:{\"click\":function($event){_vm.tab = 'players'}}}):_vm._e(),_c('font-awesome-icon',{attrs:{\"icon\":\"theater-masks\"},on:{\"click\":function($event){_vm.tab = 'characters'}}}),_c('font-awesome-icon',{attrs:{\"icon\":\"question\"},on:{\"click\":function($event){_vm.tab = 'help'}}})],1),(_vm.tab === 'grimoire')?[_c('li',{staticClass:\"headline\"},[_vm._v(\"Grimoire\")]),(_vm.players.length)?_c('li',{on:{\"click\":_vm.toggleGrimoire}},[_c('em',[_vm._v(\"[G]\")]),(!_vm.grimoire.isPublic)?[_vm._v(\"Hide\")]:_vm._e(),(_vm.grimoire.isPublic)?[_vm._v(\"Show\")]:_vm._e()],2):_vm._e(),(_vm.players.length)?_c('li',{on:{\"click\":_vm.toggleNightOrder}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":[\n 'fas',\n _vm.grimoire.isNightOrder ? 'check-square' : 'square'\n ]}})],1),_vm._v(\" Night order \")]):_vm._e(),(_vm.players.length)?_c('li',[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":\"search-minus\"},on:{\"click\":function($event){return _vm.setZoom(_vm.grimoire.zoom - 0.1)}}}),_vm._v(\" \"+_vm._s(Math.round(_vm.grimoire.zoom * 100))+\"% \"),_c('font-awesome-icon',{attrs:{\"icon\":\"search-plus\"},on:{\"click\":function($event){return _vm.setZoom(_vm.grimoire.zoom + 0.1)}}})],1),_vm._v(\" Zoom \")]):_vm._e(),_c('li',{on:{\"click\":_vm.setBackground}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":\"image\"}})],1),_vm._v(\" Background image \")])]:_vm._e(),(_vm.tab === 'session')?[(_vm.session.sessionId)?_c('li',{staticClass:\"headline\"},[_vm._v(\" \"+_vm._s(_vm.session.isSpectator ? \"Playing\" : \"Hosting\")+\" \")]):_c('li',{staticClass:\"headline\"},[_vm._v(\" Live Session \")]),(!_vm.session.sessionId)?_c('li',{on:{\"click\":_vm.hostSession}},[_c('em',[_vm._v(\"[H]\")]),_vm._v(\" Host (Storyteller) \")]):_vm._e(),(!_vm.session.sessionId)?_c('li',{on:{\"click\":_vm.joinSession}},[_c('em',[_vm._v(\"[J]\")]),_vm._v(\" Join (Player) \")]):_vm._e(),(_vm.session.sessionId)?_c('li',{on:{\"click\":_vm.copySessionUrl}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":\"copy\"}})],1),_vm._v(\" Copy player link \")]):_vm._e(),(_vm.session.sessionId)?_c('li',{on:{\"click\":_vm.leaveSession}},[_c('em',[_vm._v(_vm._s(_vm.session.sessionId))]),_vm._v(\" Leave Session \")]):_vm._e()]:_vm._e(),(_vm.tab === 'players' && !_vm.session.isSpectator)?[_c('li',{staticClass:\"headline\"},[_vm._v(\"Players\")]),(_vm.players.length < 20)?_c('li',{on:{\"click\":_vm.addPlayer}},[_c('em',[_vm._v(\"[A]\")]),_vm._v(\" Add \")]):_vm._e(),(_vm.players.length > 2)?_c('li',{on:{\"click\":_vm.randomizeSeatings}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":\"dice\"}})],1),_vm._v(\" Randomize \")]):_vm._e(),(_vm.players.length)?_c('li',{on:{\"click\":_vm.clearPlayers}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":\"trash-alt\"}})],1),_vm._v(\" Remove all \")]):_vm._e()]:_vm._e(),(_vm.tab === 'characters')?[_c('li',{staticClass:\"headline\"},[_vm._v(\"Characters\")]),(!_vm.session.isSpectator)?_c('li',{on:{\"click\":function($event){return _vm.toggleModal('edition')}}},[_c('em',[_vm._v(\"[E]\")]),_vm._v(\" Select Edition \")]):_vm._e(),(!_vm.session.isSpectator && _vm.players.length > 4)?_c('li',{on:{\"click\":function($event){return _vm.toggleModal('roles')}}},[_c('em',[_vm._v(\"[C]\")]),_vm._v(\" Choose & Assign \")]):_vm._e(),(_vm.players.length)?_c('li',{on:{\"click\":_vm.clearRoles}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":\"trash-alt\"}})],1),_vm._v(\" Remove all \")]):_vm._e()]:_vm._e(),(_vm.tab === 'help')?[_c('li',{staticClass:\"headline\"},[_vm._v(\"Help\")]),_c('li',{on:{\"click\":function($event){return _vm.toggleModal('reference')}}},[_c('em',[_vm._v(\"[R]\")]),_vm._v(\" Reference Sheet \")]),_c('li',[_c('a',{attrs:{\"href\":\"https://discord.gg/tkWDny6\",\"target\":\"_blank\"}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":['fab', 'discord']}})],1),_vm._v(\" Join Discord \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/bra1n/townsquare\",\"target\":\"_blank\"}},[_c('em',[_c('font-awesome-icon',{attrs:{\"icon\":['fab', 'github']}})],1),_vm._v(\" Source code \")])])]:_vm._e()],2)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"screenshot\"}},[_c('video',{ref:\"video\",attrs:{\"autoplay\":\"\"}}),_c('canvas',{ref:\"canvas\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div id=\"screenshot\">\n <video ref=\"video\" autoplay></video>\n <canvas ref=\"canvas\"></canvas>\n </div>\n</template>\n\n<script>\nexport default {\n data: function() {\n return {\n stream: null\n };\n },\n methods: {\n async capture({ x = 0, y = 0, width = 0, height = 0 }) {\n const canvas = this.$refs.canvas;\n const video = this.$refs.video;\n const zoom = this.$store.state.grimoire.zoom;\n // start capturing\n if (!this.stream || !this.stream.active) {\n alert(\n \"Please select to stream the current browser tab to get the appropriate screenshots\"\n );\n try {\n this.stream = await navigator.mediaDevices.getDisplayMedia({\n video: {\n // frameRate: 5,\n cursor: \"never\"\n },\n audio: false\n });\n } catch (err) {\n this.$store.commit(\"updateScreenshot\", false);\n }\n }\n // get screenshot\n if (this.stream && this.stream.active) {\n video.srcObject = this.stream;\n video.play();\n setTimeout(() => {\n const context = canvas.getContext(\"2d\");\n canvas.setAttribute(\"width\", width * zoom || video.videoWidth);\n canvas.setAttribute(\"height\", height * zoom || video.videoHeight);\n context.drawImage(\n video,\n x * zoom || 0,\n y * zoom || 0,\n width * zoom || video.videoWidth,\n height * zoom || video.videoHeight,\n 0,\n 0,\n width * zoom || video.videoWidth,\n height * zoom || video.videoHeight\n );\n canvas.toBlob(blob => {\n try {\n // eslint-disable-next-line no-undef\n const item = new ClipboardItem({ \"image/png\": blob });\n navigator.clipboard.write([item]);\n this.$store.commit(\"updateScreenshot\", true);\n } catch (err) {\n this.$store.commit(\"updateScreenshot\", false);\n }\n });\n }, 100);\n }\n }\n }\n};\n</script>\n\n<style scoped>\nvideo {\n width: 100%;\n height: 100%;\n display: none;\n}\ncanvas {\n width: 100%;\n height: 100%;\n display: none;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Screenshot.vue?vue&type=template&id=e449adba&scoped=true&\"\nimport script from \"./Screenshot.vue?vue&type=script&lang=js&\"\nexport * from \"./Screenshot.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Screenshot.vue?vue&type=style&index=0&id=e449adba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e449adba\",\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"controls\">\n <Screenshot ref=\"screenshot\"></Screenshot>\n <span\n class=\"session\"\n :class=\"{ spectator: session.isSpectator }\"\n v-if=\"session.sessionId\"\n @click=\"leaveSession\"\n :title=\"\n `You're currently in a live game with ${session.playerCount} other players!`\n \"\n >\n <font-awesome-icon icon=\"broadcast-tower\" />\n {{ session.playerCount }}\n </span>\n <span class=\"camera\">\n <font-awesome-icon\n icon=\"camera\"\n @click=\"takeScreenshot()\"\n title=\"Take a screenshot\"\n :class=\"{ success: grimoire.isScreenshotSuccess }\"\n />\n </span>\n <div class=\"menu\" v-bind:class=\"{ open: grimoire.isMenuOpen }\">\n <font-awesome-icon icon=\"cog\" @click=\"toggleMenu\" />\n <ul>\n <li class=\"tabs\" :class=\"tab\">\n <font-awesome-icon icon=\"book-open\" @click=\"tab = 'grimoire'\" />\n <font-awesome-icon icon=\"broadcast-tower\" @click=\"tab = 'session'\" />\n <font-awesome-icon\n icon=\"users\"\n v-if=\"!session.isSpectator\"\n @click=\"tab = 'players'\"\n />\n <font-awesome-icon icon=\"theater-masks\" @click=\"tab = 'characters'\" />\n <font-awesome-icon icon=\"question\" @click=\"tab = 'help'\" />\n </li>\n\n <template v-if=\"tab === 'grimoire'\">\n <!-- Grimoire -->\n <li class=\"headline\">Grimoire</li>\n <li @click=\"toggleGrimoire\" v-if=\"players.length\">\n <em>[G]</em>\n <template v-if=\"!grimoire.isPublic\">Hide</template>\n <template v-if=\"grimoire.isPublic\">Show</template>\n </li>\n <li @click=\"toggleNightOrder\" v-if=\"players.length\">\n <em\n ><font-awesome-icon\n :icon=\"[\n 'fas',\n grimoire.isNightOrder ? 'check-square' : 'square'\n ]\"\n /></em>\n Night order\n </li>\n <li v-if=\"players.length\">\n <em>\n <font-awesome-icon\n @click=\"setZoom(grimoire.zoom - 0.1)\"\n icon=\"search-minus\"\n />\n {{ Math.round(grimoire.zoom * 100) }}%\n <font-awesome-icon\n @click=\"setZoom(grimoire.zoom + 0.1)\"\n icon=\"search-plus\"\n />\n </em>\n Zoom\n </li>\n <li @click=\"setBackground\">\n <em><font-awesome-icon icon=\"image\"/></em>\n Background image\n </li>\n </template>\n\n <template v-if=\"tab === 'session'\">\n <li class=\"headline\" v-if=\"session.sessionId\">\n {{ session.isSpectator ? \"Playing\" : \"Hosting\" }}\n </li>\n <li class=\"headline\" v-else>\n Live Session\n </li>\n <li @click=\"hostSession\" v-if=\"!session.sessionId\">\n <em>[H]</em> Host (Storyteller)\n </li>\n <li @click=\"joinSession\" v-if=\"!session.sessionId\">\n <em>[J]</em> Join (Player)\n </li>\n <li v-if=\"session.sessionId\" @click=\"copySessionUrl\">\n <em><font-awesome-icon icon=\"copy\"/></em>\n Copy player link\n </li>\n <li @click=\"leaveSession\" v-if=\"session.sessionId\">\n <em>{{ session.sessionId }}</em>\n Leave Session\n </li>\n </template>\n\n <template v-if=\"tab === 'players' && !session.isSpectator\">\n <!-- Users -->\n <li class=\"headline\">Players</li>\n <li @click=\"addPlayer\" v-if=\"players.length < 20\">\n <em>[A]</em> Add\n </li>\n <li @click=\"randomizeSeatings\" v-if=\"players.length > 2\">\n <em><font-awesome-icon icon=\"dice\"/></em>\n Randomize\n </li>\n <li @click=\"clearPlayers\" v-if=\"players.length\">\n <em><font-awesome-icon icon=\"trash-alt\"/></em>\n Remove all\n </li>\n </template>\n\n <template v-if=\"tab === 'characters'\">\n <!-- Characters -->\n <li class=\"headline\">Characters</li>\n <li v-if=\"!session.isSpectator\" @click=\"toggleModal('edition')\">\n <em>[E]</em>\n Select Edition\n </li>\n <li\n @click=\"toggleModal('roles')\"\n v-if=\"!session.isSpectator && players.length > 4\"\n >\n <em>[C]</em>\n Choose & Assign\n </li>\n <li @click=\"clearRoles\" v-if=\"players.length\">\n <em><font-awesome-icon icon=\"trash-alt\"/></em>\n Remove all\n </li>\n </template>\n\n <template v-if=\"tab === 'help'\">\n <!-- Help -->\n <li class=\"headline\">Help</li>\n <li @click=\"toggleModal('reference')\">\n <em>[R]</em>\n Reference Sheet\n </li>\n <li>\n <a href=\"https://discord.gg/tkWDny6\" target=\"_blank\">\n <em><font-awesome-icon :icon=\"['fab', 'discord']\"/></em>\n Join Discord\n </a>\n </li>\n <li>\n <a href=\"https://github.com/bra1n/townsquare\" target=\"_blank\">\n <em><font-awesome-icon :icon=\"['fab', 'github']\"/></em>\n Source code\n </a>\n </li>\n </template>\n </ul>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapMutations, mapState } from \"vuex\";\nimport Screenshot from \"./Screenshot\";\n\nexport default {\n components: {\n Screenshot\n },\n computed: {\n ...mapState([\"grimoire\", \"session\"]),\n ...mapState(\"players\", [\"players\"])\n },\n data() {\n return {\n tab: \"grimoire\"\n };\n },\n methods: {\n takeScreenshot(dimensions = {}) {\n this.$store.commit(\"updateScreenshot\");\n this.$refs.screenshot.capture(dimensions);\n },\n setBackground() {\n const background = prompt(\"Enter custom background URL\");\n if (background || background === \"\") {\n this.$store.commit(\"setBackground\", background);\n }\n },\n hostSession() {\n const sessionId = prompt(\n \"Enter a channel number / name for your session\",\n Math.round(Math.random() * 10000)\n );\n if (sessionId) {\n this.$store.commit(\"session/setSpectator\", false);\n this.$store.commit(\n \"session/setSessionId\",\n sessionId.replace(/[^0-9a-z]/g, \"\").substr(0, 5)\n );\n this.copySessionUrl();\n }\n },\n copySessionUrl() {\n // check for clipboard permissions\n navigator.permissions\n .query({ name: \"clipboard-write\" })\n .then(({ state }) => {\n if (state === \"granted\" || state === \"prompt\") {\n const url = window.location.href.split(\"#\")[0];\n const link = url + \"#play/\" + this.session.sessionId;\n navigator.clipboard.writeText(link);\n }\n });\n },\n joinSession() {\n const sessionId = prompt(\n \"Enter the channel number / name of the session you want to join\"\n );\n if (sessionId) {\n this.$store.commit(\"session/setSpectator\", true);\n this.$store.commit(\n \"session/setSessionId\",\n sessionId.replace(/[^0-9a-z]/g, \"\").substr(0, 5)\n );\n }\n },\n leaveSession() {\n if (confirm(\"Are you sure you want to leave the active live game?\")) {\n this.$store.commit(\"session/setSpectator\", false);\n this.$store.commit(\"session/setSessionId\", \"\");\n }\n },\n addPlayer() {\n if (this.session.isSpectator) return;\n const name = prompt(\"Player name\");\n if (name) {\n this.$store.commit(\"players/add\", name);\n }\n },\n randomizeSeatings() {\n if (this.session.isSpectator) return;\n if (confirm(\"Are you sure you want to randomize seatings?\")) {\n this.$store.dispatch(\"players/randomize\");\n }\n },\n clearPlayers() {\n if (this.session.isSpectator) return;\n if (confirm(\"Are you sure you want to remove all players?\")) {\n this.$store.commit(\"players/clear\");\n this.$store.commit(\"setBluff\");\n }\n },\n clearRoles() {\n if (confirm(\"Are you sure you want to remove all player roles?\")) {\n this.$store.dispatch(\"players/clearRoles\");\n this.$store.commit(\"setBluff\");\n }\n },\n ...mapMutations([\n \"toggleGrimoire\",\n \"toggleMenu\",\n \"toggleNightOrder\",\n \"updateScreenshot\",\n \"setZoom\",\n \"toggleModal\"\n ])\n }\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../vars.scss\";\n\n// success animation\n@keyframes greenToWhite {\n from {\n color: green;\n }\n to {\n color: white;\n }\n}\n\n// Controls\n#controls {\n position: absolute;\n right: 3px;\n top: 3px;\n text-align: right;\n padding-right: 50px;\n\n #app.screenshot & {\n display: none;\n }\n\n svg {\n filter: drop-shadow(0 0 5px rgba(0, 0, 0, 1));\n &.success {\n animation: greenToWhite 1s normal forwards;\n animation-iteration-count: 1;\n }\n }\n\n > span {\n display: inline-block;\n cursor: pointer;\n z-index: 5;\n margin-top: 7px;\n margin-left: 10px;\n }\n\n span.session {\n color: $demon;\n &.spectator {\n color: $townsfolk;\n }\n }\n}\n\n.menu {\n width: 220px;\n transform-origin: 200px 22px;\n transition: transform 500ms cubic-bezier(0.68, -0.55, 0.27, 1.55);\n transform: rotate(-90deg);\n position: absolute;\n right: 0;\n top: 0;\n\n &.open {\n transform: rotate(0deg);\n }\n\n > svg {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.5);\n border: 3px solid black;\n width: 40px;\n height: 50px;\n margin-bottom: -8px;\n border-bottom: 0;\n border-radius: 10px 10px 0 0;\n padding: 5px 5px 15px;\n }\n\n a {\n color: white;\n text-decoration: none;\n &:hover {\n color: red;\n }\n }\n\n ul {\n display: flex;\n list-style-type: none;\n padding: 0;\n margin: 0;\n flex-direction: column;\n overflow: hidden;\n box-shadow: 0 0 10px black;\n border: 3px solid black;\n border-radius: 10px 0 10px 10px;\n\n li {\n padding: 2px 5px;\n color: white;\n text-align: left;\n background: rgba(0, 0, 0, 0.7);\n\n &.tabs {\n display: flex;\n padding: 0;\n svg {\n flex-grow: 1;\n flex-shrink: 0;\n height: 35px;\n border-bottom: 3px solid black;\n border-right: 3px solid black;\n padding: 5px 0;\n cursor: pointer;\n transition: color 250ms;\n &:hover {\n color: red;\n }\n &:last-child {\n border-right: 0;\n }\n }\n &.grimoire .fa-book-open,\n &.players .fa-users,\n &.characters .fa-theater-masks,\n &.session .fa-broadcast-tower,\n &.help .fa-question {\n background: linear-gradient(\n to bottom,\n $townsfolk 0%,\n rgba(0, 0, 0, 0.5) 100%\n );\n }\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n\n &:not(.headline):not(.tabs):hover {\n cursor: pointer;\n color: red;\n }\n\n em {\n float: right;\n font-style: normal;\n margin-left: 10px;\n font-size: 80%;\n line-height: 31px;\n }\n }\n\n .headline {\n font-family: PiratesBay, sans-serif;\n letter-spacing: 1px;\n padding: 0 10px;\n text-align: center;\n background: linear-gradient(\n to right,\n $townsfolk 0%,\n rgba(0, 0, 0, 0.5) 20%,\n rgba(0, 0, 0, 0.5) 80%,\n $demon 100%\n );\n }\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Menu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Menu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Menu.vue?vue&type=template&id=109538a6&scoped=true&\"\nimport script from \"./Menu.vue?vue&type=script&lang=js&\"\nexport * from \"./Menu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Menu.vue?vue&type=style&index=0&id=109538a6&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"109538a6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.nonTravelers >= 5)?_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.modals.roles),expression:\"modals.roles\"}],staticClass:\"roles\",on:{\"close\":function($event){return _vm.toggleModal('roles')}}},[_c('h3',[_vm._v(\"Select the characters for \"+_vm._s(_vm.nonTravelers)+\" players:\")]),_vm._l((_vm.roleSelection),function(teamRoles,team){return _c('ul',{key:team,staticClass:\"tokens\"},[_c('li',{staticClass:\"count\",class:[team]},[_vm._v(\" \"+_vm._s(teamRoles.filter(function (role) { return role.selected; }).length)+\" / \"+_vm._s(_vm.game[_vm.nonTravelers - 5][team])+\" \")]),_vm._l((teamRoles),function(role){return _c('li',{key:role.id,class:[role.team, role.selected ? 'selected' : ''],on:{\"click\":function($event){role.selected = !role.selected}}},[_c('Token',{attrs:{\"role\":role}})],1)})],2)}),(_vm.hasSelectedSetupRoles)?_c('div',{staticClass:\"warning\"},[_vm._v(\" Warning: there are characters selected that modify the game setup! The randomizer does not account for these characters. \")]):_vm._e(),_c('div',{staticClass:\"button-group\"},[_c('div',{staticClass:\"button\",class:{\n disabled: _vm.selectedRoles > _vm.nonTravelers || !_vm.selectedRoles\n },on:{\"click\":_vm.assignRoles}},[_c('font-awesome-icon',{attrs:{\"icon\":\"people-arrows\"}}),_vm._v(\" Assign \"+_vm._s(_vm.selectedRoles)+\" characters randomly \")],1),_c('div',{staticClass:\"button\",on:{\"click\":_vm.selectRandomRoles}},[_c('font-awesome-icon',{attrs:{\"icon\":\"random\"}}),_vm._v(\" Shuffle characters \")],1)])],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <Modal\n class=\"roles\"\n v-show=\"modals.roles\"\n @close=\"toggleModal('roles')\"\n v-if=\"nonTravelers >= 5\"\n >\n <h3>Select the characters for {{ nonTravelers }} players:</h3>\n <ul\n class=\"tokens\"\n v-for=\"(teamRoles, team) in roleSelection\"\n v-bind:key=\"team\"\n >\n <li class=\"count\" v-bind:class=\"[team]\">\n {{ teamRoles.filter(role => role.selected).length }} /\n {{ game[nonTravelers - 5][team] }}\n </li>\n <li\n v-for=\"role in teamRoles\"\n v-bind:class=\"[role.team, role.selected ? 'selected' : '']\"\n v-bind:key=\"role.id\"\n @click=\"role.selected = !role.selected\"\n >\n <Token :role=\"role\" />\n </li>\n </ul>\n <div class=\"warning\" v-if=\"hasSelectedSetupRoles\">\n Warning: there are characters selected that modify the game setup! The\n randomizer does not account for these characters.\n </div>\n <div class=\"button-group\">\n <div\n class=\"button\"\n @click=\"assignRoles\"\n v-bind:class=\"{\n disabled: selectedRoles > nonTravelers || !selectedRoles\n }\"\n >\n <font-awesome-icon icon=\"people-arrows\" />\n Assign {{ selectedRoles }} characters randomly\n </div>\n <div class=\"button\" @click=\"selectRandomRoles\">\n <font-awesome-icon icon=\"random\" />\n Shuffle characters\n </div>\n </div>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"./Modal\";\nimport gameJSON from \"./../../game\";\nimport Token from \"./../Token\";\nimport { mapGetters, mapMutations, mapState } from \"vuex\";\n\nconst randomElement = arr => arr[Math.floor(Math.random() * arr.length)];\n\nexport default {\n components: {\n Token,\n Modal\n },\n data: function() {\n return {\n roleSelection: {},\n game: gameJSON\n };\n },\n computed: {\n selectedRoles: function() {\n return Object.values(this.roleSelection)\n .map(roles => roles.filter(role => role.selected).length)\n .reduce((a, b) => a + b, 0);\n },\n hasSelectedSetupRoles: function() {\n return Object.values(this.roleSelection).some(roles =>\n roles.some(role => role.selected && role.setup)\n );\n },\n ...mapState([\"roles\", \"modals\"]),\n ...mapState(\"players\", [\"players\"]),\n ...mapGetters({ nonTravelers: \"players/nonTravelers\" })\n },\n methods: {\n selectRandomRoles() {\n this.roleSelection = {};\n this.roles.forEach(role => {\n if (!this.roleSelection[role.team]) {\n this.$set(this.roleSelection, role.team, []);\n }\n this.roleSelection[role.team].push(role);\n this.$set(role, \"selected\", false);\n });\n delete this.roleSelection[\"traveler\"];\n const playerCount = Math.max(5, this.nonTravelers);\n const composition = this.game[playerCount - 5];\n Object.keys(composition).forEach(team => {\n for (let x = 0; x < composition[team]; x++) {\n const available = this.roleSelection[team].filter(\n role => role.selected !== true\n );\n if (available.length) {\n randomElement(available).selected = true;\n }\n }\n });\n },\n assignRoles() {\n if (this.selectedRoles <= this.nonTravelers && this.selectedRoles) {\n // generate list of selected roles and randomize it\n const roles = Object.values(this.roleSelection)\n .map(roles => roles.filter(role => role.selected))\n .reduce((a, b) => [...a, ...b], [])\n .map(a => [Math.random(), a])\n .sort((a, b) => a[0] - b[0])\n .map(a => a[1]);\n this.players.forEach(player => {\n if (player.role.team !== \"traveler\" && roles.length) {\n const value = roles.pop();\n this.$store.commit(\"players/update\", {\n player,\n property: \"role\",\n value\n });\n }\n });\n this.$store.commit(\"toggleModal\", \"roles\");\n }\n },\n ...mapMutations([\"toggleModal\"])\n },\n mounted: function() {\n if (!Object.keys(this.roleSelection).length) {\n this.selectRandomRoles();\n }\n },\n watch: {\n roles() {\n this.selectRandomRoles();\n }\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../vars.scss\";\n\nul.tokens {\n padding-left: 55px;\n li {\n border-radius: 50%;\n width: 6vw;\n margin: 5px;\n opacity: 0.5;\n transition: all 250ms;\n &.selected {\n opacity: 1;\n }\n &.townsfolk {\n box-shadow: 0 0 10px $townsfolk, 0 0 10px #004cff;\n }\n &.outsider {\n box-shadow: 0 0 10px $outsider, 0 0 10px $outsider;\n }\n &.minion {\n box-shadow: 0 0 10px $minion, 0 0 10px $minion;\n }\n &.demon {\n box-shadow: 0 0 10px $demon, 0 0 10px $demon;\n }\n &.traveler {\n box-shadow: 0 0 10px $traveler, 0 0 10px $traveler;\n }\n &:hover {\n transform: scale(1.2);\n z-index: 10;\n }\n }\n .count {\n opacity: 1;\n position: absolute;\n left: 0;\n font-weight: bold;\n line-height: 50px;\n text-align: center;\n font-size: 100%;\n width: 50px;\n height: 50px;\n &.townsfolk {\n color: $townsfolk;\n }\n &.outsider {\n color: $outsider;\n }\n &.minion {\n color: $minion;\n }\n &.demon {\n color: $demon;\n }\n }\n}\n\n.roles .modal .warning {\n color: red;\n text-align: center;\n margin: auto;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RolesModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RolesModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RolesModal.vue?vue&type=template&id=56f09202&scoped=true&\"\nimport script from \"./RolesModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RolesModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RolesModal.vue?vue&type=style&index=0&id=56f09202&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56f09202\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.modals.edition),expression:\"modals.edition\"}],staticClass:\"editions\",on:{\"close\":function($event){return _vm.toggleModal('edition')}}},[(!_vm.isCustom)?_c('div',[_c('h3',[_vm._v(\"Select an edition:\")]),_c('ul',{staticClass:\"editions\"},[_vm._l((_vm.editions),function(edition){return _c('li',{key:edition.id,staticClass:\"edition\",class:['edition-' + edition.id],on:{\"click\":function($event){return _vm.setEdition(edition.id)}}},[_vm._v(\" \"+_vm._s(edition.name)+\" \")])}),_c('li',{staticClass:\"edition edition-custom\",on:{\"click\":function($event){_vm.isCustom = true}}},[_vm._v(\" Custom Script \")])],2)]):_c('div',{staticClass:\"custom\"},[_c('h3',[_vm._v(\"Upload a custom script\")]),_vm._v(\" To play with a custom script, you need to select the characters you want to play with in the official \"),_c('a',{attrs:{\"href\":\"https://bloodontheclocktower.com/script-tool/\",\"target\":\"_blank\"}},[_vm._v(\"Script Tool\")]),_vm._v(\" and then upload the generated \\\"custom-list.json\\\" either directly here or provide a URL to such a hosted JSON file.\"),_c('br'),_c('h3',[_vm._v(\"Some custom Teensyville scripts:\")]),_c('ul',{staticClass:\"scripts\"},_vm._l((_vm.scripts),function(script,index){return _c('li',{key:index,on:{\"click\":function($event){return _vm.handleURL(script[1])}}},[_vm._v(\" \"+_vm._s(script[0])+\" \")])}),0),_c('input',{ref:\"upload\",attrs:{\"type\":\"file\",\"accept\":\"application/json\"},on:{\"change\":_vm.handleUpload}}),_c('div',{staticClass:\"button-group\"},[_c('div',{staticClass:\"button\",on:{\"click\":_vm.openUpload}},[_c('font-awesome-icon',{attrs:{\"icon\":\"file-upload\"}}),_vm._v(\" Upload JSON \")],1),_c('div',{staticClass:\"button\",on:{\"click\":_vm.promptURL}},[_c('font-awesome-icon',{attrs:{\"icon\":\"link\"}}),_vm._v(\" Enter URL \")],1),_c('div',{staticClass:\"button\",on:{\"click\":function($event){_vm.isCustom = false}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"undo\"}}),_vm._v(\" Back \")],1)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <Modal\n class=\"editions\"\n v-show=\"modals.edition\"\n @close=\"toggleModal('edition')\"\n >\n <div v-if=\"!isCustom\">\n <h3>Select an edition:</h3>\n <ul class=\"editions\">\n <li\n v-for=\"edition in editions\"\n class=\"edition\"\n v-bind:class=\"['edition-' + edition.id]\"\n v-bind:key=\"edition.id\"\n @click=\"setEdition(edition.id)\"\n >\n {{ edition.name }}\n </li>\n <li class=\"edition edition-custom\" @click=\"isCustom = true\">\n Custom Script\n </li>\n </ul>\n </div>\n <div class=\"custom\" v-else>\n <h3>Upload a custom script</h3>\n To play with a custom script, you need to select the characters you want\n to play with in the official\n <a href=\"https://bloodontheclocktower.com/script-tool/\" target=\"_blank\"\n >Script Tool</a\n >\n and then upload the generated \"custom-list.json\" either directly here or\n provide a URL to such a hosted JSON file.<br />\n <h3>Some custom Teensyville scripts:</h3>\n <ul class=\"scripts\">\n <li\n v-for=\"(script, index) in scripts\"\n v-bind:key=\"index\"\n @click=\"handleURL(script[1])\"\n >\n {{ script[0] }}\n </li>\n </ul>\n <input\n type=\"file\"\n ref=\"upload\"\n accept=\"application/json\"\n @change=\"handleUpload\"\n />\n <div class=\"button-group\">\n <div class=\"button\" @click=\"openUpload\">\n <font-awesome-icon icon=\"file-upload\" /> Upload JSON\n </div>\n <div class=\"button\" @click=\"promptURL\">\n <font-awesome-icon icon=\"link\" /> Enter URL\n </div>\n <div class=\"button\" @click=\"isCustom = false\">\n <font-awesome-icon icon=\"undo\" /> Back\n </div>\n </div>\n </div>\n </Modal>\n</template>\n\n<script>\nimport editionJSON from \"../../editions\";\nimport { mapMutations, mapState } from \"vuex\";\nimport Modal from \"./Modal\";\n\nexport default {\n components: {\n Modal\n },\n data: function() {\n return {\n editions: editionJSON,\n isCustom: false,\n scripts: [\n [\n \"On Thin Ice\",\n \"https://gist.githubusercontent.com/bra1n/8dacd9f2abc6f428331ea1213ab153f5/raw/9758aff4b59965dc7a094db549d950be5a26b571/custom-script.json\"\n ],\n [\n \"Race To The Bottom\",\n \"https://gist.githubusercontent.com/bra1n/63e1354cb3dc9d4032bcd0623dc48888/raw/5be4df8386ec61e3a98c32be77f8cac3f8414379/custom-script.json\"\n ],\n [\n \"Frankenstein's Mayor by Ted\",\n \"https://gist.githubusercontent.com/bra1n/32c52b422cc01b934a4291eeb81dbcee/raw/3ca5a043c41141ac40667dc15097deb327263268/Frankensteins_Mayor_by_Ted.json\"\n ],\n [\n \"Vigormortis High School\",\n \"https://gist.githubusercontent.com/bra1n/1f65bd4a999524719d5dabe98c3c2d27/raw/f28d3268846c182b2078888122003c6f95c6b2cf/VigormortisHighSchool.json\"\n ]\n ]\n };\n },\n computed: mapState([\"modals\"]),\n methods: {\n openUpload() {\n this.$refs.upload.click();\n },\n handleUpload() {\n const file = this.$refs.upload.files[0];\n if (file && file.size) {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => {\n this.parseScript(JSON.parse(reader.result));\n });\n reader.readAsText(file);\n }\n },\n promptURL() {\n const url = prompt(\"Enter URL to a custom-script.json file\");\n if (url) {\n this.handleURL(url);\n }\n },\n async handleURL(url) {\n const res = await fetch(url);\n if (res && res.json) {\n const script = await res.json();\n this.parseScript(script);\n }\n },\n parseScript(script) {\n if (!script || !script.length) return;\n const roles = script.map(({ id }) => id.replace(/[^a-z]/g, \"\"));\n this.$store.commit(\"setRoles\", roles);\n this.$store.commit(\"setEdition\", \"custom\");\n this.isCustom = false;\n },\n ...mapMutations([\"toggleModal\", \"setEdition\"])\n }\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import \"../../vars\";\n\n// Editions\n@each $img, $skipIcons in $editions {\n .edition-#{$img} {\n background-image: url(\"../../assets/editions/#{$img}.png\");\n }\n @if $skipIcons != true {\n .edition-#{$img}.townsfolk {\n background-image: url(\"../../assets/editions/#{$img}-townsfolk.png\");\n }\n .edition-#{$img}.outsider {\n background-image: url(\"../../assets/editions/#{$img}-outsider.png\");\n }\n .edition-#{$img}.minion {\n background-image: url(\"../../assets/editions/#{$img}-minion.png\");\n }\n .edition-#{$img}.demon {\n background-image: url(\"../../assets/editions/#{$img}-demon.png\");\n }\n }\n}\n\nul.editions .edition {\n font-family: PiratesBay, sans-serif;\n letter-spacing: 1px;\n text-align: center;\n padding-top: 100px;\n background-position: center center;\n background-size: 100% auto;\n background-repeat: no-repeat;\n width: 30%;\n margin: 5px;\n font-size: 120%;\n text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000,\n 1px 1px 0 #000, 0 0 5px rgba(0, 0, 0, 0.75);\n cursor: pointer;\n &:hover {\n color: red;\n }\n}\n\n.custom {\n text-align: center;\n input[type=\"file\"] {\n display: none;\n }\n .scripts {\n list-style-type: disc;\n font-size: 120%;\n cursor: pointer;\n display: block;\n width: 50%;\n text-align: left;\n margin: 10px auto;\n li:hover {\n color: red;\n }\n }\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditionModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditionModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditionModal.vue?vue&type=template&id=78e871b6&scoped=true&\"\nimport script from \"./EditionModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EditionModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditionModal.vue?vue&type=style&index=0&id=78e871b6&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78e871b6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"intro\"},[_c('img',{attrs:{\"src\":\"static/apple-icon.png\",\"alt\":\"\"}}),_vm._v(\" Welcome to the (unofficial) \"),_c('b',[_vm._v(\" Virtual Blood on the Clocktower Town Square\")]),_vm._v(\"!\"),_c('br'),_vm._v(\" Please add more players through the \"),_c('span',{staticClass:\"button\",on:{\"click\":_vm.toggleMenu}},[_c('font-awesome-icon',{attrs:{\"icon\":\"cog\"}}),_vm._v(\" Menu \")],1),_vm._v(\" on the top right or by pressing \"),_c('b',[_vm._v(\"[A]\")]),_vm._v(\".\"),_c('br'),_vm._v(\" This project is free and open source and can be found on \"),_c('a',{attrs:{\"href\":\"https://github.com/bra1n/townsquare\",\"target\":\"_blank\"}},[_vm._v(\"GitHub\")]),_vm._v(\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"intro\">\n <img src=\"static/apple-icon.png\" alt=\"\" />\n Welcome to the (unofficial)\n <b> Virtual Blood on the Clocktower Town Square</b>!<br />\n Please add more players through the\n <span class=\"button\" @click=\"toggleMenu\">\n <font-awesome-icon icon=\"cog\" /> Menu\n </span>\n on the top right or by pressing <b>[A]</b>.<br />\n This project is free and open source and can be found on\n <a href=\"https://github.com/bra1n/townsquare\" target=\"_blank\">GitHub</a>.\n </div>\n</template>\n\n<script>\nimport { mapMutations } from \"vuex\";\n\nexport default {\n methods: mapMutations([\"toggleMenu\"])\n};\n</script>\n\n<style scoped lang=\"scss\">\n// Intro\n.intro {\n text-align: center;\n width: 50%;\n font-size: 120%;\n position: absolute;\n padding: 10px;\n background: rgba(0, 0, 0, 0.5);\n border: 3px solid black;\n border-radius: 10px;\n z-index: 3;\n img {\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -96px;\n margin-bottom: 20px;\n border-radius: 50%;\n box-shadow: 0 0 10px black;\n border: 3px solid black;\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Intro.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Intro.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Intro.vue?vue&type=template&id=1ab9b794&scoped=true&\"\nimport script from \"./Intro.vue?vue&type=script&lang=js&\"\nexport * from \"./Intro.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Intro.vue?vue&type=style&index=0&id=1ab9b794&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ab9b794\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.roles.size)?_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.modals.reference),expression:\"modals.reference\"}],staticClass:\"characters\",on:{\"close\":function($event){return _vm.toggleModal('reference')}}},[_c('h3',[_vm._v(_vm._s(_vm.editionName)+\" Character Reference\")]),_c('ul',{staticClass:\"legend\"},[_c('li',[_c('span',{staticClass:\"name\"},[_vm._v(\"Name\")]),_c('span',{staticClass:\"icon\"},[_vm._v(\"Icon\")]),_c('span',{staticClass:\"ability\"},[_vm._v(\"Ability\")]),(Object.keys(_vm.playersByRole).length)?_c('span',{staticClass:\"player\"},[_vm._v(\" Player \")]):_vm._e()])]),_vm._l((_vm.rolesGrouped),function(teamRoles,team){return _c('div',{key:team,class:[team]},[_c('h4',[_vm._v(_vm._s(team))]),_c('ul',_vm._l((teamRoles),function(role){return _c('li',{key:role.id,class:[team]},[_c('span',{staticClass:\"name\"},[_vm._v(_vm._s(role.name))]),(role.id)?_c('span',{staticClass:\"icon\",style:({\n backgroundImage: (\"url(\" + (require('../../assets/icons/' +\n role.id +\n '.png')) + \")\")\n })}):_vm._e(),_c('span',{staticClass:\"ability\"},[_vm._v(_vm._s(role.ability))]),(Object.keys(_vm.playersByRole).length)?_c('span',{staticClass:\"player\"},[_vm._v(_vm._s(_vm.playersByRole[role.id] ? _vm.playersByRole[role.id].join(\", \") : \"\"))]):_vm._e()])}),0)])})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <Modal\n class=\"characters\"\n v-show=\"modals.reference\"\n @close=\"toggleModal('reference')\"\n v-if=\"roles.size\"\n >\n <h3>{{ editionName }} Character Reference</h3>\n <ul class=\"legend\">\n <li>\n <span class=\"name\">Name</span>\n <span class=\"icon\">Icon</span>\n <span class=\"ability\">Ability</span>\n <span class=\"player\" v-if=\"Object.keys(playersByRole).length\">\n Player\n </span>\n </li>\n </ul>\n <div v-for=\"(teamRoles, team) in rolesGrouped\" :key=\"team\" :class=\"[team]\">\n <h4>{{ team }}</h4>\n <ul>\n <li v-for=\"role in teamRoles\" :class=\"[team]\" :key=\"role.id\">\n <span class=\"name\">{{ role.name }}</span>\n <span\n class=\"icon\"\n v-if=\"role.id\"\n v-bind:style=\"{\n backgroundImage: `url(${require('../../assets/icons/' +\n role.id +\n '.png')})`\n }\"\n ></span>\n <span class=\"ability\">{{ role.ability }}</span>\n <span class=\"player\" v-if=\"Object.keys(playersByRole).length\">{{\n playersByRole[role.id] ? playersByRole[role.id].join(\", \") : \"\"\n }}</span>\n </li>\n </ul>\n </div>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"./Modal\";\nimport editionJSON from \"./../../editions.json\";\nimport { mapMutations, mapState } from \"vuex\";\n\nexport default {\n components: {\n Modal\n },\n data: function() {\n return {\n roleSelection: {}\n };\n },\n computed: {\n editionName: function() {\n const edition = editionJSON.find(({ id }) => id === this.edition);\n return edition ? edition.name : \"Custom script\";\n },\n rolesGrouped: function() {\n const rolesGrouped = {};\n this.roles.forEach(role => {\n if (!rolesGrouped[role.team]) {\n rolesGrouped[role.team] = [];\n }\n rolesGrouped[role.team].push(role);\n });\n delete rolesGrouped[\"traveler\"];\n return rolesGrouped;\n },\n playersByRole: function() {\n const players = {};\n this.players.forEach(({ name, role }) => {\n if (role && role.id && role.team !== \"traveler\") {\n if (!players[role.id]) {\n players[role.id] = [];\n }\n players[role.id].push(name);\n }\n });\n return players;\n },\n ...mapState([\"roles\", \"modals\", \"edition\"]),\n ...mapState(\"players\", [\"players\"])\n },\n methods: {\n ...mapMutations([\"toggleModal\"])\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../vars.scss\";\n\nh4 {\n text-transform: capitalize;\n display: flex;\n align-items: center;\n height: 20px;\n &:before,\n &:after {\n content: \" \";\n width: 100%;\n height: 1px;\n border-radius: 2px;\n }\n &:before {\n margin-right: 15px;\n }\n &:after {\n margin-left: 15px;\n }\n}\n\n.townsfolk {\n .name,\n .player,\n h4 {\n color: $townsfolk;\n &:before,\n &:after {\n background-color: $townsfolk;\n }\n }\n}\n.outsider {\n .name,\n .player,\n h4 {\n color: $outsider;\n &:before,\n &:after {\n background-color: $outsider;\n }\n }\n}\n.minion {\n .name,\n .player,\n h4 {\n color: $minion;\n &:before,\n &:after {\n background-color: $minion;\n }\n }\n}\n.demon {\n .name,\n .player,\n h4 {\n color: $demon;\n &:before,\n &:after {\n background-color: $demon;\n }\n }\n}\nul {\n li {\n display: flex;\n width: 100%;\n align-items: center;\n align-content: center;\n /*background: linear-gradient(0deg, #ffffff0f, transparent);*/\n border-radius: 10px;\n .icon {\n width: 60px;\n height: 40px;\n background-size: cover;\n background-position: 0 -5px;\n flex-grow: 0;\n flex-shrink: 0;\n margin: 0 10px;\n text-align: center;\n border-left: 1px solid #ffffff1f;\n border-right: 1px solid #ffffff1f;\n }\n .name {\n flex-grow: 0;\n flex-shrink: 0;\n width: 150px;\n font-weight: bold;\n text-align: right;\n font-family: \"Papyrus\", sans-serif;\n font-size: 110%;\n }\n .player {\n flex-grow: 0;\n flex-shrink: 1;\n text-align: right;\n margin: 0 10px;\n }\n .ability {\n flex-grow: 1;\n }\n }\n &.legend {\n font-weight: bold;\n height: 20px;\n margin-top: 10px;\n li span {\n background: none;\n height: auto;\n font-family: inherit;\n font-size: inherit;\n }\n }\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReferenceModal.vue?vue&type=template&id=0184478c&scoped=true&\"\nimport script from \"./ReferenceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ReferenceModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ReferenceModal.vue?vue&type=style&index=0&id=0184478c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0184478c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"vote\"}},[_c('div',{staticClass:\"arrows\"},[_c('span',{staticClass:\"nominee\",style:(_vm.nomineeStyle)}),_c('span',{staticClass:\"nominator\",style:(_vm.nominatorStyle)})]),_c('div',{staticClass:\"overlay\"},[_c('em',{staticClass:\"blue\"},[_vm._v(_vm._s(_vm.nominator.name))]),_vm._v(\" nominated \"),_c('em',[_vm._v(_vm._s(_vm.nominee.name))]),_vm._v(\"! \"),_c('br'),(_vm.nominee.role.team !== 'traveler')?[_c('em',{staticClass:\"blue\"},[_vm._v(_vm._s(Math.ceil(_vm.alive / 2))+\" votes\")]),_vm._v(\" required to \"),_c('em',[_vm._v(\"execute\")]),_vm._v(\". \")]:[_c('em',[_vm._v(_vm._s(Math.ceil(_vm.players.length / 2))+\" votes\")]),_vm._v(\" required to \"),_c('em',[_vm._v(\"exile\")]),_vm._v(\". \")],(_vm.session.lockedVote > 1)?_c('div',[_c('em',{staticClass:\"blue\"},[_vm._v(_vm._s(_vm.voters.join(\", \") || \"nobody\")+\" \")]),_vm._v(\" voted \"),_c('em',[_vm._v(\"YES\")])]):_vm._e(),(!_vm.session.isSpectator)?_c('div',{staticClass:\"button-group\"},[(!_vm.session.lockedVote)?_c('div',{staticClass:\"button\",on:{\"click\":_vm.start}},[_vm._v(\" Start Vote \")]):_c('div',{staticClass:\"button\",on:{\"click\":_vm.stop}},[_vm._v(\" Reset Vote \")]),_c('div',{staticClass:\"button\",on:{\"click\":_vm.finish}},[_vm._v(\"Finish\")])]):(_vm.canVote)?_c('div',{staticClass:\"button-group\"},[_c('div',{staticClass:\"button vote-no\",on:{\"click\":function($event){return _vm.vote(false)}}},[_vm._v(\"Vote NO\")]),_c('div',{staticClass:\"button vote-yes\",on:{\"click\":function($event){return _vm.vote(true)}}},[_vm._v(\"Vote YES\")])]):(!_vm.player)?_c('div',[_vm._v(\" Please claim a seat to vote. \")]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div id=\"vote\">\n <div class=\"arrows\">\n <span class=\"nominee\" :style=\"nomineeStyle\"></span>\n <span class=\"nominator\" :style=\"nominatorStyle\"></span>\n </div>\n <div class=\"overlay\">\n <em class=\"blue\">{{ nominator.name }}</em> nominated\n <em>{{ nominee.name }}</em\n >!\n <br />\n <template v-if=\"nominee.role.team !== 'traveler'\">\n <em class=\"blue\">{{ Math.ceil(alive / 2) }} votes</em> required to\n <em>execute</em>.\n </template>\n <template v-else>\n <em>{{ Math.ceil(players.length / 2) }} votes</em> required to\n <em>exile</em>.\n </template>\n\n <div v-if=\"session.lockedVote > 1\">\n <em class=\"blue\">{{ voters.join(\", \") || \"nobody\" }} </em>\n voted <em>YES</em>\n </div>\n\n <div class=\"button-group\" v-if=\"!session.isSpectator\">\n <div class=\"button\" v-if=\"!session.lockedVote\" @click=\"start\">\n Start Vote\n </div>\n <div class=\"button\" v-else @click=\"stop\">\n Reset Vote\n </div>\n <div class=\"button\" @click=\"finish\">Finish</div>\n </div>\n <div class=\"button-group\" v-else-if=\"canVote\">\n <div class=\"button vote-no\" @click=\"vote(false)\">Vote NO</div>\n <div class=\"button vote-yes\" @click=\"vote(true)\">Vote YES</div>\n </div>\n <div v-else-if=\"!player\">\n Please claim a seat to vote.\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n computed: {\n ...mapState(\"players\", [\"players\"]),\n ...mapState([\"session\"]),\n ...mapGetters({ alive: \"players/alive\" }),\n nominator: function() {\n return this.players[this.session.nomination[0]];\n },\n nominatorStyle: function() {\n const players = this.players.length;\n const nomination = this.session.nomination[0];\n return {\n transform: `rotate(${Math.round((nomination / players) * 360)}deg)`\n };\n },\n nominee: function() {\n return this.players[this.session.nomination[1]];\n },\n nomineeStyle: function() {\n const players = this.players.length;\n const nomination = this.session.nomination[1];\n const lock = this.session.lockedVote;\n const rotation = (360 * (nomination + Math.min(lock, players))) / players;\n return {\n transform: `rotate(${Math.round(rotation)}deg)`\n };\n },\n player: function() {\n return this.players.find(p => p.id === this.session.playerId);\n },\n canVote: function() {\n if (!this.player) return false;\n if (this.player.isVoteless && this.nominee.role.team !== \"traveler\")\n return false;\n const session = this.session;\n const players = this.players.length;\n const index = this.players.indexOf(this.player);\n const indexAdjusted =\n (index - 1 + players - session.nomination[1]) % players;\n return indexAdjusted >= session.lockedVote - 1;\n },\n voters: function() {\n const nomination = this.session.nomination[1];\n const voters = this.session.votes.map((vote, index) =>\n vote ? this.players[index].name : \"\"\n );\n const reorder = [\n ...voters.slice(nomination + 1, this.players.length),\n ...voters.slice(0, nomination + 1)\n ];\n return reorder.slice(0, this.session.lockedVote - 1).filter(n => !!n);\n }\n },\n methods: {\n start() {\n this.$store.commit(\"session/lockVote\");\n clearInterval(this.voteTimer);\n this.voteTimer = setInterval(() => {\n this.$store.commit(\"session/lockVote\");\n if (this.session.lockedVote > this.players.length) {\n clearInterval(this.voteTimer);\n }\n }, 3000);\n },\n stop() {\n clearInterval(this.voteTimer);\n this.$store.commit(\"session/lockVote\", 0);\n },\n finish() {\n clearInterval(this.voteTimer);\n this.$store.commit(\"session/nomination\", false);\n },\n vote(vote) {\n if (!this.canVote) return false;\n const index = this.players.findIndex(p => p.id === this.session.playerId);\n if (index >= 0 && !!this.session.votes[index] !== vote) {\n this.$store.commit(\"session/vote\", [index, vote]);\n }\n }\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../vars.scss\";\n\n#vote {\n position: absolute;\n width: 20%;\n z-index: 20;\n display: flex;\n align-items: center;\n align-content: center;\n justify-content: center;\n background: url(\"../assets/demon-head.png\") center center no-repeat;\n background-size: auto 75%;\n text-align: center;\n text-shadow: 0 1px 2px #000000, 0 -1px 2px #000000, 1px 0 2px #000000,\n -1px 0 2px #000000;\n\n &:after {\n content: \" \";\n padding-bottom: 100%;\n display: block;\n }\n\n em {\n color: $demon;\n font-style: normal;\n font-weight: bold;\n &.blue {\n color: $townsfolk;\n }\n }\n}\n\n@keyframes arrow-cw {\n 0% {\n opacity: 0;\n transform: rotate(-180deg);\n }\n 100% {\n opacity: 1;\n transform: rotate(0deg);\n }\n}\n\n@keyframes arrow-ccw {\n 0% {\n opacity: 0;\n transform: rotate(180deg);\n }\n 100% {\n opacity: 1;\n transform: rotate(0deg);\n }\n}\n\n.arrows {\n position: absolute;\n display: flex;\n height: 150%;\n width: 25%;\n pointer-events: none;\n span {\n position: absolute;\n width: 100%;\n height: 100%;\n transition: transform 2.9s ease-in-out;\n }\n span:before {\n content: \" \";\n width: 100%;\n height: 100%;\n display: block;\n background-size: auto 100%;\n background-repeat: no-repeat;\n background-position: center center;\n position: absolute;\n filter: drop-shadow(0px 0px 3px #000);\n }\n .nominator:before {\n background-image: url(\"../assets/clock-small.png\");\n animation: arrow-ccw 1s ease-out;\n }\n .nominee:before {\n background-image: url(\"../assets/clock-big.png\");\n animation: arrow-cw 1s ease-out;\n }\n}\n\n.button.vote-no {\n background: radial-gradient(\n at 0 -15%,\n rgba(255, 255, 255, 0.07) 70%,\n rgba(255, 255, 255, 0) 71%\n )\n 0 0/80% 90% no-repeat content-box,\n linear-gradient(#0031ad, rgba(5, 0, 0, 0.22)) content-box,\n linear-gradient(#292929, #001142) border-box;\n box-shadow: inset 0 1px 1px #002c9c, 0 0 10px #000;\n &:hover {\n color: #008cf7;\n }\n}\n.button.vote-yes {\n background: radial-gradient(\n at 0 -15%,\n rgba(255, 255, 255, 0.07) 70%,\n rgba(255, 255, 255, 0) 71%\n )\n 0 0/80% 90% no-repeat content-box,\n linear-gradient(#ad0000, rgba(5, 0, 0, 0.22)) content-box,\n linear-gradient(#292929, #420000) border-box;\n box-shadow: inset 0 1px 1px #9c0000, 0 0 10px #000;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Vote.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Vote.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Vote.vue?vue&type=template&id=52de8031&scoped=true&\"\nimport script from \"./Vote.vue?vue&type=script&lang=js&\"\nexport * from \"./Vote.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Vote.vue?vue&type=style&index=0&id=52de8031&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"52de8031\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"gradients\"}},_vm._l((_vm.gradients),function(gradient,index){return _c('svg',{key:index,attrs:{\"width\":\"0\",\"height\":\"0\"}},[_c('linearGradient',{attrs:{\"id\":gradient[0],\"x1\":\"50%\",\"y1\":\"100%\",\"x2\":\"50%\",\"y2\":\"0%\"}},[_c('stop',{style:({ 'stop-color': gradient[2], 'stop-opacity': 1 }),attrs:{\"offset\":\"0%\"}}),_c('stop',{style:({ 'stop-color': gradient[1], 'stop-opacity': 1 }),attrs:{\"offset\":\"100%\"}})],1)],1)}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <!-- SVG Gradients -->\n <div id=\"gradients\">\n <svg\n width=\"0\"\n height=\"0\"\n v-for=\"(gradient, index) in gradients\"\n :key=\"index\"\n >\n <linearGradient :id=\"gradient[0]\" x1=\"50%\" y1=\"100%\" x2=\"50%\" y2=\"0%\">\n <stop\n offset=\"0%\"\n :style=\"{ 'stop-color': gradient[2], 'stop-opacity': 1 }\"\n ></stop>\n <stop\n offset=\"100%\"\n :style=\"{ 'stop-color': gradient[1], 'stop-opacity': 1 }\"\n ></stop>\n </linearGradient>\n </svg>\n </div>\n</template>\n\n<script>\nexport default {\n data() {\n return {\n gradients: [\n [\"demon\", \"#ce0100\", \"#000\"],\n [\"townsfolk\", \"#1f65ff\", \"#000\"],\n [\"default\", \"#4E4E4E\", \"#000\"]\n ]\n };\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\nsvg {\n position: absolute;\n z-index: -1;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Gradients.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Gradients.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Gradients.vue?vue&type=template&id=1e202a64&scoped=true&\"\nimport script from \"./Gradients.vue?vue&type=script&lang=js&\"\nexport * from \"./Gradients.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Gradients.vue?vue&type=style&index=0&id=1e202a64&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e202a64\",\n null\n \n)\n\nexport default component.exports","<template>\n <div\n id=\"app\"\n @keyup=\"keyup\"\n tabindex=\"-1\"\n v-bind:class=\"{ screenshot: grimoire.isScreenshot }\"\n v-bind:style=\"{\n backgroundImage: grimoire.background\n ? `url('${grimoire.background}')`\n : ''\n }\"\n >\n <transition name=\"zoom\">\n <Intro v-if=\"!players.length\"></Intro>\n <TownInfo v-if=\"players.length && !session.nomination\"></TownInfo>\n <Vote v-if=\"session.nomination\"></Vote>\n </transition>\n <TownSquare @screenshot=\"takeScreenshot\"></TownSquare>\n <Menu ref=\"menu\"></Menu>\n <EditionModal />\n <RolesModal />\n <ReferenceModal />\n <Gradients />\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport TownSquare from \"./components/TownSquare\";\nimport TownInfo from \"./components/TownInfo\";\nimport Menu from \"./components/Menu\";\nimport RolesModal from \"./components/modals/RolesModal\";\nimport EditionModal from \"./components/modals/EditionModal\";\nimport Intro from \"./components/Intro\";\nimport ReferenceModal from \"./components/modals/ReferenceModal\";\nimport Vote from \"./components/Vote\";\nimport Gradients from \"./components/Gradients\";\n\nexport default {\n components: {\n Vote,\n ReferenceModal,\n Intro,\n TownInfo,\n TownSquare,\n Menu,\n EditionModal,\n RolesModal,\n Gradients\n },\n computed: {\n ...mapState([\"grimoire\", \"session\"]),\n ...mapState(\"players\", [\"players\"])\n },\n methods: {\n takeScreenshot(dimensions) {\n this.$refs.menu.takeScreenshot(dimensions);\n },\n keyup({ key }) {\n switch (key.toLocaleLowerCase()) {\n case \"g\":\n this.$store.commit(\"toggleGrimoire\");\n break;\n case \"a\":\n this.$refs.menu.addPlayer();\n break;\n case \"h\":\n this.$refs.menu.hostSession();\n break;\n case \"j\":\n this.$refs.menu.joinSession();\n break;\n case \"r\":\n this.$store.commit(\"toggleModal\", \"reference\");\n break;\n case \"e\":\n if (this.session.isSpectator) return;\n this.$store.commit(\"toggleModal\", \"edition\");\n break;\n case \"c\":\n if (this.session.isSpectator) return;\n this.$store.commit(\"toggleModal\", \"roles\");\n break;\n case \"escape\":\n this.$store.commit(\"toggleModal\");\n }\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n@import \"vars\";\n\n@font-face {\n font-family: \"Papyrus\";\n src: url(\"assets/fonts/papyrus.eot\"); /* IE9*/\n src: url(\"assets/fonts/papyrus.eot?#iefix\") format(\"embedded-opentype\"),\n /* IE6-IE8 */ url(\"assets/fonts/papyrus.woff2\") format(\"woff2\"),\n /* chrome firefox */ url(\"assets/fonts/papyrus.woff\") format(\"woff\"),\n /* chrome firefox */ url(\"assets/fonts/papyrus.ttf\") format(\"truetype\"),\n /* chrome firefox opera Safari, Android, iOS 4.2+*/\n url(\"assets/fonts/papyrus.svg#PapyrusW01\") format(\"svg\"); /* iOS 4.1- */\n}\n\n@font-face {\n font-family: PiratesBay;\n src: url(\"assets/fonts/piratesbay.ttf\");\n font-display: swap;\n}\n\nhtml,\nbody {\n font-size: 1.2em;\n line-height: 1.4;\n background: url(\"assets/background.jpg\") center center;\n background-size: cover;\n color: white;\n height: 100%;\n font-family: \"Roboto Condensed\", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n padding: 0;\n margin: 0;\n overflow: hidden;\n}\n\n* {\n box-sizing: border-box;\n position: relative;\n}\n\na {\n color: $townsfolk;\n &:hover {\n color: $demon;\n }\n}\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n margin: 0;\n text-align: center;\n font-family: PiratesBay, sans-serif;\n letter-spacing: 1px;\n font-weight: normal;\n}\n\nul {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n#app {\n height: 100%;\n background-position: center center;\n background-size: cover;\n display: flex;\n align-items: center;\n align-content: center;\n justify-content: center;\n}\n\n.zoom-enter-active,\n.zoom-leave-active {\n transition: all 250ms;\n filter: blur(0);\n}\n.zoom-enter,\n.zoom-leave-to {\n opacity: 0;\n filter: blur(20px);\n}\n\n// Buttons\n.button-group {\n display: flex;\n align-items: center;\n justify-content: center;\n align-content: center;\n .button {\n margin: 5px 0;\n border-radius: 0;\n &:first-child {\n border-top-left-radius: 15px;\n border-bottom-left-radius: 15px;\n }\n &:last-child {\n border-top-right-radius: 15px;\n border-bottom-right-radius: 15px;\n }\n }\n}\n.button {\n padding: 0;\n border: solid 0.125em transparent;\n border-radius: 15px;\n box-shadow: inset 0 1px 1px #9c9c9c, 0 0 10px #000;\n background: radial-gradient(\n at 0 -15%,\n rgba(#fff, 0.07) 70%,\n rgba(#fff, 0) 71%\n )\n 0 0/ 80% 90% no-repeat content-box,\n linear-gradient(#4e4e4e, #040404) content-box,\n linear-gradient(#292929, #010101) border-box;\n color: white;\n font-weight: bold;\n text-shadow: 1px 1px rgba(0, 0, 0, 0.5);\n line-height: 40px;\n margin: 5px auto;\n font-size: 1em;\n cursor: pointer;\n transition: all 200ms;\n &:hover {\n color: red;\n }\n &.disabled {\n color: gray;\n cursor: default;\n }\n &:before,\n &:after {\n content: \" \";\n display: inline-block;\n width: 10px;\n height: 10px;\n }\n}\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=9d5151d6&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","const NEWPLAYER = {\n name: \"\",\n id: \"\",\n role: {},\n reminders: [],\n isVoteless: false,\n isDead: false\n};\n\nconst state = () => ({\n players: []\n});\n\nconst getters = {\n alive({ players }) {\n return players.filter(player => !player.isDead).length;\n },\n nonTravelers({ players }) {\n const nonTravelers = players.filter(\n player => player.role.team !== \"traveler\"\n );\n return Math.min(nonTravelers.length, 15);\n },\n // calculate a Map of player => night order\n nightOrder({ players }) {\n const firstNight = [0];\n const otherNight = [0];\n players.forEach(({ role }) => {\n if (role.firstNight && !firstNight.includes(role.firstNight)) {\n firstNight.push(role.firstNight);\n }\n if (role.otherNight && !otherNight.includes(role.otherNight)) {\n otherNight.push(role.otherNight);\n }\n });\n firstNight.sort((a, b) => a - b);\n otherNight.sort((a, b) => a - b);\n const nightOrder = new Map();\n players.forEach(player => {\n const first = Math.max(firstNight.indexOf(player.role.firstNight), 0);\n const other = Math.max(otherNight.indexOf(player.role.otherNight), 0);\n nightOrder.set(player, { first, other });\n });\n return nightOrder;\n }\n};\n\nconst actions = {\n randomize({ state, commit }) {\n const players = state.players\n .map(a => [Math.random(), a])\n .sort((a, b) => a[0] - b[0])\n .map(a => a[1]);\n commit(\"set\", players);\n },\n clearRoles({ state, commit, rootState }) {\n let players;\n if (rootState.session.isSpectator) {\n players = state.players.map(player => {\n if (player.role.team !== \"traveler\") {\n player.role = {};\n }\n player.reminders = [];\n return player;\n });\n } else {\n players = state.players.map(({ name, id }) => ({\n ...NEWPLAYER,\n name,\n id\n }));\n }\n commit(\"set\", players);\n }\n};\n\nconst mutations = {\n clear(state) {\n state.players = [];\n },\n set(state, players = []) {\n state.players = players;\n },\n update(state, { player, property, value }) {\n const index = state.players.indexOf(player);\n if (index >= 0) {\n state.players[index][property] = value;\n }\n },\n add(state, name) {\n state.players.push({\n ...NEWPLAYER,\n name\n });\n },\n remove(state, index) {\n state.players.splice(index, 1);\n },\n swap(state, [from, to]) {\n [state.players[from], state.players[to]] = [\n state.players[to],\n state.players[from]\n ];\n },\n move(state, [from, to]) {\n state.players.splice(to, 0, state.players.splice(from, 1)[0]);\n }\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations\n};\n","const state = () => ({\n sessionId: \"\",\n isSpectator: false,\n playerCount: 0,\n playerId: \"\",\n claimedSeat: -1,\n nomination: false,\n votes: [],\n lockedVote: 0\n});\n\nconst getters = {};\n\nconst actions = {};\n\nconst mutations = {\n setSessionId(state, sessionId) {\n state.sessionId = sessionId;\n },\n setPlayerId(state, playerId) {\n state.playerId = playerId;\n },\n setSpectator(state, spectator) {\n state.isSpectator = spectator;\n },\n setPlayerCount(state, playerCount) {\n state.playerCount = playerCount;\n },\n claimSeat(state, claimedSeat) {\n state.claimedSeat = claimedSeat;\n },\n nomination(state, nomination) {\n state.nomination = nomination;\n state.votes = [];\n state.lockedVote = 0;\n },\n vote(state, [index, vote]) {\n if (!state.nomination) return;\n state.votes = [...state.votes];\n state.votes[index] = vote === undefined ? !state.votes[index] : vote;\n },\n lockVote(state, lock) {\n state.lockedVote = lock !== undefined ? lock : state.lockedVote + 1;\n }\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations\n};\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport persistence from \"./persistence\";\nimport socket from \"./socket\";\nimport players from \"./modules/players\";\nimport session from \"./modules/session\";\nimport editionJSON from \"../editions.json\";\nimport rolesJSON from \"../roles.json\";\n\nVue.use(Vuex);\n\nconst getRolesByEdition = (edition = \"tb\") => {\n const selectedEdition =\n editionJSON.find(({ id }) => id === edition) || editionJSON[0];\n return new Map(\n rolesJSON\n .filter(\n r => r.edition === edition || selectedEdition.roles.includes(r.id)\n )\n .sort((a, b) => b.team.localeCompare(a.team))\n .map(role => [role.id, role])\n );\n};\n\nexport default new Vuex.Store({\n modules: {\n players,\n session\n },\n state: {\n grimoire: {\n isNightOrder: true,\n isPublic: true,\n isMenuOpen: false,\n isScreenshot: false,\n isScreenshotSuccess: false,\n zoom: 1,\n background: \"\",\n bluffs: []\n },\n modals: {\n reference: false,\n edition: false,\n roles: false,\n role: false,\n reminder: false\n },\n edition: \"tb\",\n roles: getRolesByEdition()\n },\n mutations: {\n toggleMenu({ grimoire }) {\n grimoire.isMenuOpen = !grimoire.isMenuOpen;\n },\n toggleGrimoire({ grimoire }, isPublic) {\n if (isPublic === true || isPublic === false) {\n grimoire.isPublic = isPublic;\n } else {\n grimoire.isPublic = !grimoire.isPublic;\n }\n document.title = `Blood on the Clocktower ${\n grimoire.isPublic ? \"Town Square\" : \"Grimoire\"\n }`;\n },\n toggleNightOrder({ grimoire }) {\n grimoire.isNightOrder = !grimoire.isNightOrder;\n },\n setZoom({ grimoire }, zoom) {\n grimoire.zoom = zoom;\n },\n setBackground({ grimoire }, background) {\n grimoire.background = background;\n },\n setBluff({ grimoire }, { index, role } = {}) {\n if (index !== undefined) {\n grimoire.bluffs.splice(index, 1, role);\n } else {\n grimoire.bluffs = [];\n }\n },\n toggleModal({ modals }, name) {\n if (name) {\n modals[name] = !modals[name];\n }\n for (let modal in modals) {\n if (modal === name) continue;\n modals[modal] = false;\n }\n },\n updateScreenshot({ grimoire }, status) {\n if (status !== true && status !== false) {\n grimoire.isScreenshotSuccess = false;\n grimoire.isScreenshot = true;\n } else {\n grimoire.isScreenshotSuccess = status;\n grimoire.isScreenshot = false;\n }\n },\n setRoles(state, roles) {\n state.roles = new Map(\n rolesJSON\n .filter(r => roles.includes(r.id))\n .sort((a, b) => b.team.localeCompare(a.team))\n .map(role => [role.id, role])\n );\n },\n setEdition(state, edition) {\n state.edition = edition;\n state.modals.edition = false;\n if (edition !== \"custom\") {\n state.roles = getRolesByEdition(edition);\n }\n }\n },\n plugins: [persistence, socket]\n});\n","import Vue from \"vue\";\nimport App from \"./App\";\nimport store from \"./store\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/vue-fontawesome\";\n\nconst faIcons = [\n \"BookOpen\",\n \"BroadcastTower\",\n \"Camera\",\n \"Chair\",\n \"CheckSquare\",\n \"Cog\",\n \"Copy\",\n \"Dice\",\n \"ExchangeAlt\",\n \"FileUpload\",\n \"HandPointRight\",\n \"Heartbeat\",\n \"Image\",\n \"Link\",\n \"PeopleArrows\",\n \"Question\",\n \"Random\",\n \"RedoAlt\",\n \"SearchMinus\",\n \"SearchPlus\",\n \"Skull\",\n \"Square\",\n \"TheaterMasks\",\n \"Times\",\n \"TimesCircle\",\n \"TrashAlt\",\n \"Undo\",\n \"User\",\n \"UserEdit\",\n \"UserFriends\",\n \"Users\",\n \"VoteYea\"\n];\nconst fabIcons = [\"Github\", \"Discord\"];\nlibrary.add(\n ...faIcons.map(i => fas[\"fa\" + i]),\n ...fabIcons.map(i => fab[\"fa\" + i])\n);\nVue.component(\"font-awesome-icon\", FontAwesomeIcon);\nVue.config.productionTip = false;\n\nnew Vue({\n render: h => h(App),\n store\n}).$mount(\"#app\");\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Vote.vue?vue&type=style&index=0&id=52de8031&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Vote.vue?vue&type=style&index=0&id=52de8031&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/cannibal.e2bfb541.png\";","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/goblin.7ebbd9ad.png\";","module.exports = __webpack_public_path__ + \"img/x.fbca4d75.png\";","var map = {\n\t\"./amnesiac.png\": \"043b\",\n\t\"./apprentice.png\": \"4bea\",\n\t\"./artist.png\": \"2cd0\",\n\t\"./assassin.png\": \"9187\",\n\t\"./balloonist.png\": \"65db\",\n\t\"./barber.png\": \"fcc6\",\n\t\"./barista.png\": \"027a\",\n\t\"./baron.png\": \"24d3\",\n\t\"./beggar.png\": \"cfcc\",\n\t\"./bishop.png\": \"8030\",\n\t\"./bonecollector.png\": \"23b1\",\n\t\"./bureaucrat.png\": \"25f6\",\n\t\"./butcher.png\": \"37dd\",\n\t\"./butler.png\": \"64fe\",\n\t\"./cannibal.png\": \"5bd9\",\n\t\"./cerenovus.png\": \"0436\",\n\t\"./chambermaid.png\": \"125e\",\n\t\"./chef.png\": \"1e83\",\n\t\"./clockmaker.png\": \"f93f\",\n\t\"./courtier.png\": \"ee02\",\n\t\"./custom.png\": \"fd83\",\n\t\"./deviant.png\": \"3b65\",\n\t\"./devilsadvocate.png\": \"cd8b\",\n\t\"./dreamer.png\": \"71b8\",\n\t\"./drunk.png\": \"d97d\",\n\t\"./empath.png\": \"bb7a\",\n\t\"./evil.png\": \"c24f\",\n\t\"./eviltwin.png\": \"e014\",\n\t\"./exorcist.png\": \"5072\",\n\t\"./fanggu.png\": \"6ac0\",\n\t\"./fisherman.png\": \"c5db\",\n\t\"./flowergirl.png\": \"66ae\",\n\t\"./fool.png\": \"4720\",\n\t\"./fortuneteller.png\": \"43e8\",\n\t\"./gambler.png\": \"dce6\",\n\t\"./goblin.png\": \"5c8e\",\n\t\"./godfather.png\": \"99d0\",\n\t\"./good.png\": \"667e\",\n\t\"./goon.png\": \"55aa\",\n\t\"./gossip.png\": \"cadc\",\n\t\"./grandmother.png\": \"c9f5\",\n\t\"./gunslinger.png\": \"ee92\",\n\t\"./harlot.png\": \"559e\",\n\t\"./imp.png\": \"3e70\",\n\t\"./innkeeper.png\": \"663c\",\n\t\"./investigator.png\": \"b570\",\n\t\"./judge.png\": \"f09b\",\n\t\"./juggler.png\": \"65ab\",\n\t\"./klutz.png\": \"adfc\",\n\t\"./leviathan.png\": \"2b04\",\n\t\"./librarian.png\": \"4d73\",\n\t\"./lunatic.png\": \"0b61\",\n\t\"./mastermind.png\": \"f834\",\n\t\"./mathematician.png\": \"8888\",\n\t\"./matron.png\": \"b1cb\",\n\t\"./mayor.png\": \"b223\",\n\t\"./minstrel.png\": \"4efd\",\n\t\"./monk.png\": \"6741\",\n\t\"./moonchild.png\": \"3f65\",\n\t\"./mutant.png\": \"17ad\",\n\t\"./nodashii.png\": \"68a4\",\n\t\"./oracle.png\": \"0c12\",\n\t\"./pacifist.png\": \"fff1\",\n\t\"./philosopher.png\": \"3603\",\n\t\"./pithag.png\": \"7f07\",\n\t\"./plus.png\": \"160b\",\n\t\"./po.png\": \"c73a\",\n\t\"./poisoner.png\": \"f282\",\n\t\"./professor.png\": \"b30c\",\n\t\"./pukka.png\": \"a6a2\",\n\t\"./ravenkeeper.png\": \"0c59\",\n\t\"./recluse.png\": \"177d\",\n\t\"./sage.png\": \"30b6\",\n\t\"./sailor.png\": \"223c\",\n\t\"./saint.png\": \"6936\",\n\t\"./savant.png\": \"d715\",\n\t\"./scapegoat.png\": \"327a\",\n\t\"./scarletwoman.png\": \"f322\",\n\t\"./seamstress.png\": \"ac7c\",\n\t\"./shabaloth.png\": \"0b29\",\n\t\"./slayer.png\": \"d62b\",\n\t\"./snakecharmer.png\": \"4021\",\n\t\"./soldier.png\": \"4e76\",\n\t\"./spy.png\": \"ec1e\",\n\t\"./sweetheart.png\": \"f1e5\",\n\t\"./tealady.png\": \"ba9b\",\n\t\"./thief.png\": \"9ce3\",\n\t\"./tinker.png\": \"9f7e\",\n\t\"./towncrier.png\": \"38a5\",\n\t\"./undertaker.png\": \"0e20\",\n\t\"./vigormortis.png\": \"f4bd\",\n\t\"./virgin.png\": \"eff4\",\n\t\"./vortox.png\": \"3a43\",\n\t\"./voudon.png\": \"a710\",\n\t\"./washerwoman.png\": \"013f\",\n\t\"./widow.png\": \"22c9\",\n\t\"./witch.png\": \"f558\",\n\t\"./x.png\": \"5cf2\",\n\t\"./zombuul.png\": \"20ca\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"61b0\";","module.exports = __webpack_public_path__ + \"img/butler.3763fa3d.png\";","module.exports = __webpack_public_path__ + \"img/juggler.7cc6d089.png\";","module.exports = __webpack_public_path__ + \"img/balloonist.3d6e31f8.png\";","module.exports = __webpack_public_path__ + \"img/innkeeper.8b0b87f1.png\";","module.exports = __webpack_public_path__ + \"img/good.9b3436c8.png\";","module.exports = __webpack_public_path__ + \"img/flowergirl.4ee69cb5.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=style&index=0&id=2e511c0c&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=style&index=0&id=2e511c0c&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/monk.a6f2667a.png\";","module.exports = __webpack_public_path__ + \"img/nodashii.5c943357.png\";","module.exports = __webpack_public_path__ + \"img/saint.f81db252.png\";","module.exports = __webpack_public_path__ + \"img/fanggu.cb4e346c.png\";","module.exports = __webpack_public_path__ + \"img/dreamer.ab7f2328.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=style&index=0&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/pithag.adc1ce12.png\";","module.exports = __webpack_public_path__ + \"img/bishop.dec14fdc.png\";","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/mathematician.31142ad1.png\";","module.exports = __webpack_public_path__ + \"img/assassin.db54a5ff.png\";","module.exports = __webpack_public_path__ + \"img/godfather.2febcd81.png\";","module.exports = __webpack_public_path__ + \"img/thief.60ce8845.png\";","module.exports = __webpack_public_path__ + \"img/tinker.669b5612.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Intro.vue?vue&type=style&index=0&id=1ab9b794&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Intro.vue?vue&type=style&index=0&id=1ab9b794&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/pukka.cbbc2d26.png\";","module.exports = __webpack_public_path__ + \"img/voudon.2b1f0492.png\";","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReminderModal.vue?vue&type=style&index=0&id=c8602356&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReminderModal.vue?vue&type=style&index=0&id=c8602356&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/seamstress.05f0eb74.png\";","module.exports = __webpack_public_path__ + \"img/klutz.c7e784cd.png\";","module.exports = __webpack_public_path__ + \"img/matron.ffb17746.png\";","module.exports = __webpack_public_path__ + \"img/mayor.98dda8d8.png\";","module.exports = __webpack_public_path__ + \"img/professor.8a5ccf04.png\";","module.exports = __webpack_public_path__ + \"img/investigator.13194f19.png\";","module.exports = __webpack_public_path__ + \"img/tealady.2d47353e.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Menu.vue?vue&type=style&index=0&id=109538a6&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Menu.vue?vue&type=style&index=0&id=109538a6&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/empath.d7a89ed7.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=style&index=0&id=77841dfe&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Token.vue?vue&type=style&index=0&id=77841dfe&scoped=true&lang=scss&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RolesModal.vue?vue&type=style&index=0&id=56f09202&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RolesModal.vue?vue&type=style&index=0&id=56f09202&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/evil.908a2622.png\";","module.exports = __webpack_public_path__ + \"img/fisherman.9077de7e.png\";","module.exports = __webpack_public_path__ + \"img/po.4c484011.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=style&index=0&id=e449adba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Screenshot.vue?vue&type=style&index=0&id=e449adba&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/grandmother.16001541.png\";","module.exports = __webpack_public_path__ + \"img/gossip.dd8d7312.png\";","module.exports = __webpack_public_path__ + \"img/devilsadvocate.e455fea0.png\";","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditionModal.vue?vue&type=style&index=0&id=78e871b6&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditionModal.vue?vue&type=style&index=0&id=78e871b6&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/beggar.b7a4fbda.png\";","module.exports = __webpack_public_path__ + \"img/slayer.0859544b.png\";","module.exports = __webpack_public_path__ + \"img/savant.16bfbc30.png\";","module.exports = __webpack_public_path__ + \"img/drunk.4883c5a1.png\";","module.exports = __webpack_public_path__ + \"img/gambler.000b4b9b.png\";","module.exports = store => {\n // initialize data\n if (localStorage.getItem(\"background\")) {\n store.commit(\"setBackground\", localStorage.background);\n }\n if (localStorage.getItem(\"zoom\")) {\n store.commit(\"setZoom\", parseFloat(localStorage.getItem(\"zoom\")));\n }\n if (localStorage.isPublic !== undefined) {\n store.commit(\"toggleGrimoire\", JSON.parse(localStorage.isPublic));\n }\n if (localStorage.edition !== undefined) {\n // this will initialize state.roles!\n store.commit(\"setEdition\", localStorage.edition);\n }\n if (localStorage.roles !== undefined) {\n store.commit(\"setRoles\", JSON.parse(localStorage.roles));\n }\n if (localStorage.bluffs !== undefined) {\n JSON.parse(localStorage.bluffs).forEach((role, index) => {\n store.commit(\"setBluff\", {\n index,\n role: store.state.roles.get(role) || {}\n });\n });\n }\n if (localStorage.players) {\n store.commit(\n \"players/set\",\n JSON.parse(localStorage.players).map(player => ({\n ...player,\n role: store.state.roles.get(player.role) || {}\n }))\n );\n }\n /**** Session related data *****/\n if (localStorage.getItem(\"playerId\")) {\n store.commit(\"session/setPlayerId\", localStorage.getItem(\"playerId\"));\n }\n if (localStorage.getItem(\"session\")) {\n const [spectator, sessionId] = JSON.parse(localStorage.getItem(\"session\"));\n store.commit(\"session/setSpectator\", spectator);\n store.commit(\"session/setSessionId\", sessionId);\n }\n\n // listen to mutations\n store.subscribe(({ type, payload }, state) => {\n switch (type) {\n case \"toggleGrimoire\":\n localStorage.setItem(\n \"isPublic\",\n JSON.stringify(state.grimoire.isPublic)\n );\n break;\n case \"setBackground\":\n if (payload) {\n localStorage.setItem(\"background\", payload);\n } else {\n localStorage.removeItem(\"background\");\n }\n break;\n case \"setZoom\":\n if (payload !== 1) {\n localStorage.setItem(\"zoom\", payload);\n } else {\n localStorage.removeItem(\"zoom\");\n }\n break;\n case \"setEdition\":\n if (payload === \"custom\") {\n localStorage.removeItem(\"edition\");\n } else {\n localStorage.setItem(\"edition\", payload);\n localStorage.removeItem(\"roles\");\n }\n break;\n case \"setRoles\":\n if (!payload.length) {\n localStorage.removeItem(\"roles\");\n } else {\n localStorage.setItem(\"roles\", JSON.stringify(payload));\n }\n break;\n case \"setBluff\":\n localStorage.setItem(\n \"bluffs\",\n JSON.stringify(state.grimoire.bluffs.map(({ id }) => id))\n );\n break;\n case \"players/add\":\n case \"players/update\":\n case \"players/remove\":\n case \"players/clear\":\n case \"players/set\":\n case \"players/swap\":\n case \"players/move\":\n if (state.players.players.length) {\n localStorage.setItem(\n \"players\",\n JSON.stringify(\n state.players.players.map(player => ({\n ...player,\n // simplify the stored data\n role: player.role.id || {}\n }))\n )\n );\n } else {\n localStorage.removeItem(\"players\");\n }\n break;\n case \"session/setSessionId\":\n if (payload) {\n localStorage.setItem(\n \"session\",\n JSON.stringify([state.session.isSpectator, payload])\n );\n } else {\n localStorage.removeItem(\"session\");\n }\n break;\n case \"session/setPlayerId\":\n if (payload) {\n localStorage.setItem(\"playerId\", payload);\n } else {\n localStorage.removeItem(\"playerId\");\n }\n break;\n }\n });\n};\n","module.exports = __webpack_public_path__ + \"img/eviltwin.06a5a8b8.png\";","module.exports = __webpack_public_path__ + \"img/spy.b739966f.png\";","module.exports = __webpack_public_path__ + \"img/courtier.345180fb.png\";","module.exports = __webpack_public_path__ + \"img/gunslinger.9f84c9f2.png\";","module.exports = __webpack_public_path__ + \"img/virgin.eaf181e8.png\";","module.exports = __webpack_public_path__ + \"img/judge.79ec3877.png\";","module.exports = __webpack_public_path__ + \"img/sweetheart.ec1cef03.png\";","module.exports = __webpack_public_path__ + \"img/poisoner.44c80b94.png\";","module.exports = __webpack_public_path__ + \"img/scarletwoman.d2cdaffd.png\";","module.exports = __webpack_public_path__ + \"img/vigormortis.7716a80d.png\";","module.exports = __webpack_public_path__ + \"img/witch.2f895245.png\";","module.exports = __webpack_public_path__ + \"img/mastermind.c3ba5fbb.png\";","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceModal.vue?vue&type=style&index=0&id=0184478c&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceModal.vue?vue&type=style&index=0&id=0184478c&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/clockmaker.41906ffc.png\";","module.exports = __webpack_public_path__ + \"img/barber.a354ad9e.png\";","module.exports = __webpack_public_path__ + \"img/custom.8ff972bc.png\";","module.exports = __webpack_public_path__ + \"img/pacifist.ad2d0310.png\";"],"sourceRoot":""}