mirror of https://github.com/bra1n/townsquare.git
1 line
161 KiB
Plaintext
1 line
161 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/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/components/modals/EditionModal.vue?9a31","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/assets/icons/snakecharmer.png","webpack:///./src/assets/icons/fortuneteller.png","webpack:///./src/assets/icons/fool.png","webpack:///./src/assets/icons/apprentice.png","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?320a","webpack:///./src/components/TownSquare.vue?a1dd","webpack:///./src/components/Player.vue?283a","webpack:///./src/components/Token.vue?b481","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?fd10","webpack:///./src/components/modals/Modal.vue?52c3","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?1175","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?754f","webpack:///src/components/TownInfo.vue","webpack:///./src/components/TownInfo.vue?6260","webpack:///./src/components/TownInfo.vue","webpack:///./src/components/Menu.vue?c09c","webpack:///./src/components/Screenshot.vue?ed03","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?55cb","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?cbbd","webpack:///src/components/modals/EditionModal.vue","webpack:///./src/components/modals/EditionModal.vue?d6f4","webpack:///./src/components/modals/EditionModal.vue","webpack:///./src/components/Intro.vue?7446","webpack:///src/components/Intro.vue","webpack:///./src/components/Intro.vue?a380","webpack:///./src/components/Intro.vue","webpack:///src/App.vue","webpack:///./src/App.vue?b65f","webpack:///./src/App.vue","webpack:///./src/store/modules/players.js","webpack:///./src/store/index.js","webpack:///./src/main.js","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/assets/icons/monk.png","webpack:///./src/assets/icons/nodashii.png","webpack:///./src/assets/icons/saint.png","webpack:///./src/components/modals/RolesModal.vue?c481","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/components/TownInfo.vue?ca37","webpack:///./src/components/Intro.vue?d506","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/assets/icons/pukka.png","webpack:///./src/assets/icons/voudon.png","webpack:///./src/assets/icons/seamstress.png","webpack:///./src/components/modals/RoleModal.vue?95da","webpack:///./src/assets/icons/klutz.png","webpack:///./src/components/Menu.vue?6624","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/assets/icons/empath.png","webpack:///./src/components/Token.vue?0f0c","webpack:///./src/components/modals/ReminderModal.vue?3635","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/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/assets/icons/clockmaker.png","webpack:///./src/assets/icons/barber.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","render","_vm","this","_h","$createElement","_c","_self","class","screenshot","grimoire","isScreenshot","style","backgroundImage","background","attrs","on","keyup","players","_e","takeScreenshot","ref","staticRenderFns","staticClass","public","isPublic","zoom","_l","player","index","$event","openReminderModal","openRoleModal","removePlayer","$emit","_v","stopPropagation","bluffs","selectedPlayer","dead","hasDied","hasVoted","traveler","role","team","toggleStatus","nightOrder","first","isNightOrder","_s","_f","firstNightReminder","other","otherNightReminder","updatePlayer","changeName","reminder","removeReminder","id","setRole","reminders","ability","props","type","default","filters","nameToFontSize","methods","component","components","Token","required","computed","handleEmojis","text","replace","width","height","x","y","$refs","getBoundingClientRect","prompt","indexOf","$store","commit","playerIndex","directives","rawName","modals","availableReminders","expression","toggleModal","addReminder","close","_t","Modal","state","roles","forEach","some","map","availableRoles","Player","RoleModal","ReminderModal","confirm","edition","teams","alive","votes","townsfolk","outsider","minion","demon","nonTravelers","getters","filter","game","success","isScreenshotSuccess","open","isMenuOpen","toggleMenu","toggleGrimoire","toggleNightOrder","updateZoom","Math","round","setBackground","addPlayer","randomizeSeatings","clearPlayers","clearRoles","stream","canvas","video","active","alert","navigator","mediaDevices","getDisplayMedia","cursor","audio","err","srcObject","play","setTimeout","context","getContext","setAttribute","videoWidth","videoHeight","drawImage","toBlob","blob","item","ClipboardItem","clipboard","write","Screenshot","dimensions","capture","dispatch","teamRoles","selected","disabled","selectedRoles","assignRoles","selectRandomRoles","randomElement","arr","floor","random","roleSelection","values","reduce","a","b","hasSelectedSetupRoles","setup","$set","playerCount","max","composition","keys","available","sort","pop","mounted","watch","setEdition","editions","Intro","TownInfo","TownSquare","Menu","EditionModal","RolesModal","menu","NEWPLAYER","min","firstNight","otherNight","includes","Map","set","actions","mutations","namespaced","use","getRolesByEdition","selectedEdition","find","localeCompare","Store","document","title","by","status","plugins","add","config","productionTip","h","App","store","$mount","webpackContext","req","webpackContextResolve","e","Error","code","resolve","undefined","localStorage","JSON","parse","subscribe","payload","setItem","stringify","removeItem"],"mappings":"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","file":"js/app.03f13d3c.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\";","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&\"","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=155bdb2d&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=155bdb2d&scoped=true&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\";","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\";","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}},[(!_vm.players.length)?_c('Intro'):_vm._e(),(_vm.players.length)?_c('TownInfo'):_vm._e(),_c('TownSquare',{on:{\"screenshot\":_vm.takeScreenshot}}),_c('Menu',{ref:\"menu\"}),_c('EditionModal'),_c('RolesModal')],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:{ public: _vm.grimoire.isPublic },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,attrs:{\"player\":player},on:{\"add-reminder\":function($event){return _vm.openReminderModal(index)},\"set-role\":function($event){return _vm.openRoleModal(index)},\"remove-player\":function($event){return _vm.removePlayer(index)},\"screenshot\":function($event){return _vm.$emit('screenshot', $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 dead: _vm.player.hasDied,\n 'no-vote': _vm.player.hasVoted,\n traveler: _vm.player.role && _vm.player.role.team === 'traveler'\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('set-role')}}}),(_vm.player.hasDied && !_vm.player.hasVoted)?_c('font-awesome-icon',{staticClass:\"vote\",attrs:{\"icon\":\"vote-yea\",\"title\":\"Ghost vote\"},on:{\"click\":function($event){return _vm.updatePlayer('hasVoted', true)}}}):_vm._e(),_c('div',{staticClass:\"name\",on:{\"click\":_vm.changeName}},[_c('span',{staticClass:\"screenshot\",on:{\"click\":function($event){$event.stopPropagation();return _vm.takeScreenshot($event)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"camera\"}})],1),_c('span',{staticClass:\"name\"},[_vm._v(\" \"+_vm._s(_vm.player.name)+\" \")]),_c('span',{staticClass:\"remove\",on:{\"click\":function($event){$event.stopPropagation();return _vm.$emit('remove-player')}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"times-circle\"}})],1)])],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('add-reminder')}}},[_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 dead: player.hasDied,\n 'no-vote': player.hasVoted,\n traveler: player.role && player.role.team === 'traveler'\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 :role=\"player.role\" @set-role=\"$emit('set-role')\" />\n\n <font-awesome-icon\n icon=\"vote-yea\"\n class=\"vote\"\n v-if=\"player.hasDied && !player.hasVoted\"\n @click=\"updatePlayer('hasVoted', true)\"\n title=\"Ghost vote\"\n />\n\n <div class=\"name\" @click=\"changeName\">\n <span class=\"screenshot\" @click.stop=\"takeScreenshot\">\n <font-awesome-icon icon=\"camera\" />\n </span>\n <span class=\"name\">\n {{ player.name }}\n </span>\n <span class=\"remove\" @click.stop=\"$emit('remove-player')\">\n <font-awesome-icon icon=\"times-circle\" />\n </span>\n </div>\n </div>\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('add-reminder')\">\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([\"grimoire\"]),\n ...mapGetters({ nightOrder: \"players/nightOrder\" })\n },\n data() {\n return {};\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 },\n toggleStatus() {\n if (this.grimoire.isPublic) {\n if (!this.player.hasDied) {\n this.updatePlayer(\"hasDied\", true);\n } else if (this.player.hasVoted) {\n this.updatePlayer(\"hasVoted\", false);\n this.updatePlayer(\"hasDied\", false);\n } else {\n this.updatePlayer(\"hasVoted\", true);\n }\n } else {\n this.updatePlayer(\"hasDied\", !this.player.hasDied);\n this.updatePlayer(\"hasVoted\", false);\n }\n },\n changeName() {\n const name = prompt(\"Player name\", this.player.name) || this.player.name;\n this.updatePlayer(\"name\", name);\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 this.$store.commit(\"players/update\", {\n player: this.player,\n property,\n value\n });\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n@import \"../vars.scss\";\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 &: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/****** Vote icon ********/\n.player .vote {\n position: absolute;\n right: 2px;\n bottom: 45px;\n color: #fff;\n filter: drop-shadow(0 0 3px black);\n cursor: pointer;\n transition: opacity 250ms;\n\n #townsquare.public & {\n opacity: 0;\n pointer-events: none;\n }\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 display: flex;\n justify-content: center;\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\n span.screenshot,\n span.remove {\n display: none;\n position: absolute;\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.5));\n #app.screenshot & {\n display: none;\n }\n }\n span.screenshot {\n right: 100%;\n }\n span.remove {\n left: 100%;\n }\n\n span.name {\n flex-shrink: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n &:hover {\n color: red;\n span {\n display: block;\n color: white;\n &:hover {\n color: red;\n }\n }\n }\n}\n\n.player.dead > .name {\n opacity: 0.5;\n}\n\n/***** Ability text *****/\n#townsquare.public .ability {\n display: none;\n}\n.circle .player: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: -16px;\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 + 2px) 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 &: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=6f451ba4&\"\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 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=e5ed0adc&\"\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 v-bind:class=\"[reminder.role]\"\n v-bind:key=\"reminder.role + ' ' + reminder.name\"\n @click=\"addReminder(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 </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 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 const value = [...player.reminders, reminder];\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: 65px 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=1e8ee28e&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=1e8ee28e&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 \"1e8ee28e\",\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: \"+_vm._s(_vm.playerIndex))]),_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>Choose a new character: {{ playerIndex }}</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\"]),\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 // 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 height: 120px;\n width: 120px;\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</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=99037570&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=99037570&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 \"99037570\",\n null\n \n)\n\nexport default component.exports","<template>\n <div\n id=\"townsquare\"\n class=\"square\"\n v-bind:class=\"{ public: grimoire.isPublic }\"\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 @add-reminder=\"openReminderModal(index)\"\n @set-role=\"openRoleModal(index)\"\n @remove-player=\"removePlayer(index)\"\n @screenshot=\"$emit('screenshot', $event)\"\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\"]),\n ...mapState(\"players\", [\"players\"])\n },\n data() {\n return {\n selectedPlayer: 0,\n bluffs: 3\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 openReminderModal(playerIndex) {\n this.selectedPlayer = playerIndex;\n this.$store.commit(\"toggleModal\", \"reminder\");\n },\n openRoleModal(playerIndex) {\n this.selectedPlayer = playerIndex;\n this.$store.commit(\"toggleModal\", \"role\");\n },\n removePlayer(playerIndex) {\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 }\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}\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=9b0b0c92&\"\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.hasDied !== 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.hasDied === true && player.hasVoted !== true\n ).length\n };\n },\n ...mapState({\n edition: state => state.edition,\n players: state => state.players.players\n })\n }\n};\n</script>\n\n<style lang=\"scss\">\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 left: 50%;\n top: 50%;\n width: 20%;\n height: 20%;\n margin-left: -10%;\n margin-top: -5%;\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=28d81ad6&\"\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&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('div',{attrs:{\"id\":\"controls\"}},[_c('Screenshot',{ref:\"screenshot\"}),_c('font-awesome-icon',{class:{ success: _vm.grimoire.isScreenshotSuccess },attrs:{\"icon\":\"camera\"},on:{\"click\":function($event){return _vm.takeScreenshot()}}}),_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:\"headline\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"book-open\"}}),_vm._v(\" Grimoire \")],1),(_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\":['fas', _vm.grimoire.isNightOrder ? 'check-square' : 'square']}})],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.updateZoom(-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.updateZoom(0.1)}}})],1),_vm._v(\" Zoom \")]):_vm._e(),_c('li',{on:{\"click\":_vm.setBackground}},[_vm._v(\" Background image \")]),_c('li',{staticClass:\"headline\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"users\"}}),_vm._v(\" Players \")],1),(_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',[_vm._v(\"[R]\")]),_vm._v(\" Randomize \")]):_vm._e(),(_vm.players.length)?_c('li',{on:{\"click\":_vm.clearPlayers}},[_vm._v(\" Remove all \")]):_vm._e(),_c('li',{staticClass:\"headline\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"theater-masks\"}}),_vm._v(\" Characters \")],1),_c('li',{on:{\"click\":function($event){return _vm.toggleModal('edition')}}},[_c('em',[_vm._v(\"[E]\")]),_vm._v(\" Select Edition \")]),(_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}},[_vm._v(\" Remove all \")]):_vm._e()])],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 <font-awesome-icon\n icon=\"camera\"\n @click=\"takeScreenshot()\"\n v-bind:class=\"{ success: grimoire.isScreenshotSuccess }\"\n />\n <div class=\"menu\" v-bind:class=\"{ open: grimoire.isMenuOpen }\">\n <font-awesome-icon icon=\"cog\" @click=\"toggleMenu\" />\n <ul>\n <!-- Grimoire -->\n <li class=\"headline\">\n <font-awesome-icon icon=\"book-open\" />\n Grimoire\n </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=\"['fas', grimoire.isNightOrder ? 'check-square' : 'square']\"\n /></em>\n Night order\n </li>\n <li v-if=\"players.length\">\n <em>\n <font-awesome-icon @click=\"updateZoom(-0.1)\" icon=\"search-minus\" />\n {{ Math.round(grimoire.zoom * 100) }}%\n <font-awesome-icon @click=\"updateZoom(0.1)\" icon=\"search-plus\" />\n </em>\n Zoom\n </li>\n <li @click=\"setBackground\">\n Background image\n </li>\n\n <!-- Users -->\n <li class=\"headline\">\n <font-awesome-icon icon=\"users\" />\n Players\n </li>\n <li @click=\"addPlayer\" v-if=\"players.length < 20\"><em>[A]</em> Add</li>\n <li @click=\"randomizeSeatings\" v-if=\"players.length > 2\">\n <em>[R]</em> Randomize\n </li>\n <li @click=\"clearPlayers\" v-if=\"players.length\">\n Remove all\n </li>\n\n <!-- Characters -->\n <li class=\"headline\">\n <font-awesome-icon icon=\"theater-masks\" />\n Characters\n </li>\n <li @click=\"toggleModal('edition')\">\n <em>[E]</em>\n Select Edition\n </li>\n <li @click=\"toggleModal('roles')\" v-if=\"players.length > 4\">\n <em>[C]</em>\n Choose & Assign\n </li>\n <li @click=\"clearRoles\" v-if=\"players.length\">\n Remove all\n </li>\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: mapState({\n grimoire: state => state.grimoire,\n players: state => state.players.players\n }),\n methods: {\n takeScreenshot(dimensions = {}) {\n this.$store.commit(\"updateScreenshot\");\n this.$refs.screenshot.capture(dimensions);\n },\n setBackground() {\n this.$store.commit(\n \"setBackground\",\n prompt(\"Enter custom background URL\")\n );\n },\n addPlayer() {\n const name = prompt(\"Player name\");\n if (name) {\n this.$store.commit(\"players/add\", name);\n }\n },\n randomizeSeatings() {\n if (confirm(\"Are you sure you want to randomize seatings?\")) {\n this.$store.dispatch(\"players/randomize\");\n }\n },\n clearPlayers() {\n if (confirm(\"Are you sure you want to remove all players?\")) {\n this.$store.commit(\"players/clear\");\n }\n },\n clearRoles() {\n this.$store.commit(\"showGrimoire\");\n if (confirm(\"Are you sure you want to remove all player roles?\")) {\n this.$store.dispatch(\"players/clearRoles\");\n }\n },\n ...mapMutations([\n \"toggleGrimoire\",\n \"toggleMenu\",\n \"toggleNightOrder\",\n \"updateScreenshot\",\n \"updateZoom\",\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\n #app.screenshot & {\n display: none;\n }\n\n svg {\n cursor: pointer;\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 .fa-camera {\n position: absolute;\n right: 50px;\n top: 10px;\n z-index: 5;\n }\n}\n\n.menu {\n width: 210px;\n transform-origin: 190px 22px;\n transition: transform 500ms cubic-bezier(0.68, -0.55, 0.27, 1.55);\n transform: rotate(-90deg);\n\n &.open {\n transform: rotate(0deg);\n }\n\n > svg {\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 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 10px;\n color: white;\n text-align: left;\n background: rgba(0, 0, 0, 0.7);\n\n &:last-child {\n margin-bottom: 0;\n }\n\n &:not(.headline):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 padding: 5px 10px;\n text-align: center;\n font-weight: bold;\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=5315fb6e&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=5315fb6e&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 \"5315fb6e\",\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 height: 120px;\n width: 120px;\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 top: 40px;\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=4399b52f&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=4399b52f&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 \"4399b52f\",\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')}}},[_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)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <Modal\n class=\"editions\"\n v-show=\"modals.edition\"\n @close=\"toggleModal('edition')\"\n >\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 </ul>\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 };\n },\n computed: mapState([\"modals\"]),\n methods: mapMutations([\"toggleModal\", \"setEdition\"])\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 text-align: center;\n padding-top: 100px;\n background-position: center center;\n background-size: 100% auto;\n background-repeat: no-repeat;\n width: 200px;\n margin: 5px;\n font-size: 120%;\n font-weight: bold;\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</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=155bdb2d&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=155bdb2d&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 \"155bdb2d\",\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\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"cog\"},on:{\"click\":_vm.toggleMenu}}),_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\">\n <font-awesome-icon icon=\"cog\" @click=\"toggleMenu\" /> 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=7f9306d0&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=7f9306d0&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 \"7f9306d0\",\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 <Intro v-if=\"!players.length\"></Intro>\n <TownInfo v-if=\"players.length\"></TownInfo>\n <TownSquare @screenshot=\"takeScreenshot\"></TownSquare>\n <Menu ref=\"menu\"></Menu>\n <EditionModal></EditionModal>\n <RolesModal></RolesModal>\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\";\n\nexport default {\n components: {\n Intro,\n TownInfo,\n TownSquare,\n Menu,\n EditionModal,\n RolesModal\n },\n computed: mapState({\n grimoire: state => state.grimoire,\n players: state => state.players.players\n }),\n methods: {\n takeScreenshot(dimensions) {\n this.$refs.menu.takeScreenshot(dimensions);\n },\n keyup({ key }) {\n switch (key) {\n case \"g\":\n this.$store.commit(\"toggleGrimoire\");\n break;\n case \"a\":\n this.$refs.menu.addPlayer();\n break;\n case \"r\":\n this.$refs.menu.randomizeSeatings();\n break;\n case \"e\":\n this.$store.commit(\"toggleModal\", \"edition\");\n break;\n case \"c\":\n this.$store.commit(\"toggleModal\", \"roles\");\n break;\n case \"Escape\":\n this.$store.commit(\"toggleMenu\");\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\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}\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// 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=43f0bd1b&\"\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 role: {},\n reminders: [],\n hasVoted: false,\n hasDied: false\n};\n\nconst state = () => ({\n players: []\n});\n\nconst getters = {\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 }) {\n const players = state.players.map(({ name }) => ({\n name,\n ...NEWPLAYER\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 name,\n ...NEWPLAYER\n });\n },\n remove(state, index) {\n state.players.splice(index, 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 players from \"./modules/players\";\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 },\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 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 updateZoom({ grimoire }, by = 0) {\n grimoire.zoom += by;\n },\n setBackground({ grimoire }, background) {\n grimoire.background = background;\n },\n setBluff({ grimoire }, { index, role }) {\n grimoire.bluffs.splice(index, 1, role);\n },\n toggleModal({ modals }, name) {\n modals[name] = !modals[name];\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 setEdition(state, edition) {\n state.edition = edition;\n state.modals.edition = false;\n state.roles = getRolesByEdition(edition);\n }\n },\n plugins: [persistence]\n});\n","import Vue from \"vue\";\nimport App from \"./App\";\nimport store from \"./store\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faBookOpen,\n faCamera,\n faCog,\n faHeartbeat,\n faSearchMinus,\n faSearchPlus,\n faTheaterMasks,\n faTimesCircle,\n faUser,\n faUserFriends,\n faUsers,\n faVoteYea,\n faCheckSquare,\n faSquare,\n faRandom,\n faPeopleArrows\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/vue-fontawesome\";\n\nlibrary.add(\n faBookOpen,\n faCamera,\n faCog,\n faHeartbeat,\n faSearchMinus,\n faSearchPlus,\n faTheaterMasks,\n faTimesCircle,\n faUser,\n faUserFriends,\n faUsers,\n faVoteYea,\n faCheckSquare,\n faSquare,\n faRandom,\n faPeopleArrows\n);\n\nVue.component(\"font-awesome-icon\", FontAwesomeIcon);\n\nVue.config.productionTip = false;\n\nnew Vue({\n render: h => h(App),\n store\n}).$mount(\"#app\");\n","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\"./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\";","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\";","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=4399b52f&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=4399b52f&lang=scss&scoped=true&\"","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\";","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&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!./TownInfo.vue?vue&type=style&index=0&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!./Intro.vue?vue&type=style&index=0&id=7f9306d0&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=7f9306d0&scoped=true&lang=scss&\"","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\";","module.exports = __webpack_public_path__ + \"img/pukka.cbbc2d26.png\";","module.exports = __webpack_public_path__ + \"img/voudon.2b1f0492.png\";","module.exports = __webpack_public_path__ + \"img/seamstress.05f0eb74.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=99037570&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=99037570&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/klutz.c7e784cd.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=5315fb6e&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=5315fb6e&scoped=true&lang=scss&\"","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\";","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!./ReminderModal.vue?vue&type=style&index=0&id=1e8ee28e&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=1e8ee28e&scoped=true&lang=scss&\"","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\";","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.background !== undefined) {\n store.commit(\"setBackground\", localStorage.background);\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.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\n // listen to mutations\n store.subscribe(({ type, payload }, state) => {\n switch (type) {\n case \"toggleGrimoire\":\n case \"showGrimoire\":\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 \"setEdition\":\n localStorage.setItem(\"edition\", payload);\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 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 }\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\";","module.exports = __webpack_public_path__ + \"img/clockmaker.41906ffc.png\";","module.exports = __webpack_public_path__ + \"img/barber.a354ad9e.png\";","module.exports = __webpack_public_path__ + \"img/pacifist.ad2d0310.png\";"],"sourceRoot":""} |