{"version":3,"sources":["components/Card/Card.module.scss","components/player/Box/Box.module.scss","types.ts","utils/index.ts","constants/index.ts","hooks/useStore.ts","utils/i18n.ts","components/Card/index.tsx","components/player/Info/index.tsx","components/player/Box/DropZone/DropZone.tsx","graphql.ts","components/player/Box/DropZone/index.tsx","components/player/Box/Box.tsx","hooks/useThrottle.ts","components/player/Box/index.tsx","Board/Players.tsx","hooks/useHoldingMetaKey.ts","hooks/useHoldingKey.ts","components/Card/Popup.tsx","components/Card/Held.tsx","components/Modal/index.tsx","hooks/useButtonConfirm.ts","components/Tooltip/index.tsx","components/Button/index.tsx","Modals/TutorialModal/index.tsx","components/Cursor/HandIcon.tsx","components/Cursor/HandGrabbingIcon.tsx","components/Cursor/index.tsx","utils/cursor.ts","hooks/useCursors.ts","Board/Board.tsx","Board/index.tsx","components/player/Customization/Language/index.tsx","components/player/Customization/ColorPicker/index.tsx","components/player/Customization/Nickname/index.tsx","components/player/Customization/Customization.tsx","components/player/Customization/index.tsx","Modals/RoomModal/RoomModal.tsx","Modals/RoomModal/index.tsx","components/Drawer/index.tsx","Modals/LobbyModal/PlayerStatus/ActionButton.tsx","Modals/LobbyModal/PlayerStatus/PlayerStatus.tsx","Modals/LobbyModal/PlayerStatus/index.tsx","Modals/LobbyModal/Players.tsx","Modals/LobbyModal/LobbyModal.tsx","Modals/LobbyModal/index.tsx","Modals/index.tsx","components/FixedButtons/index.tsx","components/Toast/index.tsx","App.tsx","index.tsx","Board/Board.module.scss","Modals/LobbyModal/PlayerStatus/PlayerStatus.module.scss","Modals/LobbyModal/LobbyModal.module.scss","components/player/Info/Info.module.scss","components/Modal/Modal.module.scss","components/Button/Button.module.scss","components/player/Customization/Language/Language.module.scss","components/player/Customization/ColorPicker/ColorPicker.module.scss","components/FixedButtons/FixedButtons.module.scss","components/Tooltip/Tooltip.module.scss","components/player/Customization/Nickname/Nickname.module.scss","Modals/RoomModal/RoomModal.module.scss","components/Drawer/Drawer.module.scss","components/Toast/Toast.module.scss","components/Cursor/Cursor.module.scss","Modals/TutorialModal/TutorialModal.module.scss","components/player/Customization/Customization.module.scss"],"names":["module","exports","CardTypeEnum","CardSlotEnum","TurnTypeEnum","getRandomArrayItem","array","Math","floor","random","length","gaEvent","event","params","window","gtag","nicknames","colors","languages","LS_UUID_KEY","getFromLocalStorage","key","admittedValues","value","localStorage","includes","persistentProps","saveToLocalStorage","newState","Object","entries","forEach","prefixedKey","create","set","nanoid","state","setState","nickname","color","lang","keys","navigator","language","startsWith","roomId","boardSize","width","height","cardPopup","holdingCard","cardBeingPlaced","cardReleasedAt","x","y","toastMessage","perksPlaced","parseInt","flagsPlaced","skipTutorial","JSON","parse","skipZoomTip","skipCustomizationTooltip","undefined","useStore","store","currentLang","getState","subscribe","translate","text","console","warn","translations","_defaultLanguage","translation","Card","id","type","placed","rotated","holding","held","highlighted","index","prevHolding","usePrevious","parsedText","useMemo","split","cardRef","useRef","flipped","useEffect","cardEl","current","parentEl","parentElement","getBoundingClientRect","cardTop","top","cardLeft","left","cursorTop","cursorLeft","topOffset","leftOffset","style","transform","transition","requestAnimationFrame","className","classnames","styles","card","onMouseDown","onMouseEnter","onMouseLeave","inner","front","ref","map","line","back","PlayerInfo","accepted","connected","itsTurn","isMaster","me","container","pending","disconnected","backgroundColor","t","role","aria-label","disconnectedIcon","DropZone","disabled","upper","handleDrop","slot","onMouseUp","active","signaling","flag","Flag","ON_ROOM_STATE_CHANGE","gql","JOIN_ROOM","LEAVE_ROOM","CREATE_ROOM","ACCEPT_PLAYER","REJECT_PLAYER","KICK_PLAYER","PROMOTE_PLAYER","CHANGE_NICKNAME","CHANGE_COLOR","START_GAME","STOP_GAME","PLAY_CARD","PICK_WINNER","DropZoneContainer","targetId","myTurn","prevHeldCard","useMutation","playCard","useState","setCardBeingPlaced","holdingTheRightCard","Perk","useCallback","variables","handClasses","length4","four","length5","five","length6","six","length7","seven","PlayerBox","uuid","cards","cursor","placedPerk1","placedPerk2","placedFlag","turn","boardFlipped","pickAsWinner","lastWinner","prevWinner","boxRef","myUuid","handClass","player","imTarget","target","pickable","Pick","showConfetti","innerWidth","confetti","origin","ticks","startVelocity","spread","angle","shouldCardBeHighlighted","turnType","cardType","Flags","Perks","shouldSlotBeEnabled","slotType","Perk1","Perk2","renderDropZone","box","master","onClick","dropZone","Fragment","hand","collapsed","beingPlaced","playerInfo","useThrottle","cb","delay","cbRef","throttle","args","leading","trailing","PlayerBoxContainer","props","pickWinner","loading","handlePickAsWinner","playerId","Box","Group","players","cursors","playersGroup","Players","cutAt","playersContainer","slice","tip","keyMap","Alt","Control","Command","Shift","useHoldingMetaKey","setHolding","keyProp","handler","useEventListener","useHoldingKey","useBoolean","setFalse","setTrue","keyCode","Popup","data","holdingAlt","holdingSpace","useMouse","shown","popup","flags","clientY","clientX","Held","cardHeld","Modal","children","onBackButton","onCloseButton","header","withHeader","dimmer","backButton","headerContent","closeButton","useButtonConfirm","confirming","startConfirming","stopConfirming","dismissConfirmAfterDelay","useDebounceFn","run","handleOnClick","Tooltip","title","persistent","block","useHover","hovered","tooltip","Button","small","narrow","secondary","confirm","disabledText","onBlur","handleOnClickConfirm","button","wide","TutorialModal","steps","step","number","image","bottom","HandIcon","viewBox","xmlns","fill","d","Cursor","grabbing","Icon","HandGrabbingIcon","pointer","cardContainer","invert","ignore","useCursors","playerIsUpTop","roomCursors","setCursors","io","connect","process","query","on","serverToClient","disconnect","sendCursorPosition","emit","clientToServer","which","innerHeight","Board","boardRef","playerIndex","findIndex","isPlayerUpTop","wrapper","board","values","BoardContainer","useSize","acceptedPlayers","filter","Language","isOpen","setIsOpen","toggle","bubble","backdrop","label","inList","pick","from","to","newLang","ColorPicker","changeColor","dot","Nickname","changeNickname","inputRef","ghostRef","setWidth","setValue","useLayoutEffect","max","offsetWidth","onChange","input","trimmed","trim","onKeyDown","blur","maxLength","placeholder","ghost","PlayerCustomization","PlayerCustomizationContainer","Customization","RoomModal","join","code","setCode","useToggle","joining","toggleJoining","handleJoinClick","centeredText","autoFocus","toUpperCase","RoomModalContainer","update","_","createRoom","createMutation","joinRoom","joinMutation","handleJoin","a","roomIsFull","message","handleCreate","ActionButton","tooltipConfirm","PlayerStatus","isOwner","imOwner","score","promote","kick","accept","reject","crown","actions","PlayerStatusContainer","game_ongoing","started","wasOwner","playerList","loader","LobbyModal","startGame","stopGame","leaveRoom","hideTooltip","tooltipIsHidden","reduce","accum","needPlayers","playersNeeded","drawerMode","content","codeContainer","full","copy","str","el","document","createElement","body","appendChild","select","execCommand","removeChild","copyToClipboard","customizationWrapper","Container","Drawer","LobbyModalContainer","rounds","skipTooltip","owner","Modals","game","round","FixedButtons","playing","email","tutorial","href","Toast","hideToastAfterDelay","App","useSubscription","skip","error","roomStateChanged","httpLink","HttpLink","uri","authLink","setContext","headers","wsLink","WebSocketLink","options","reconnect","connectionParams","link","definition","getMainDefinition","kind","operation","concat","client","ApolloClient","ApolloLink","onError","graphQLErrors","networkError","locations","path","stringify","cache","InMemoryCache","__APOLLO_CLIENT__","ReactDOM","render","getElementById"],"mappings":"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EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cACnG,0BAAML,OAAO,IAAID,MAAM,IAAIO,EAAE,YAAYD,EAAE,cAAa,0BAAML,OAAO,IAAID,MAAM,IAAIO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","file":"static/js/main.797669b4.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"Card_card__35wN0\",\"placed\":\"Card_placed__1V8G2\",\"highlighted\":\"Card_highlighted__2cfcZ\",\"front\":\"Card_front__7CH74\",\"back\":\"Card_back__1-JZn\",\"signaling\":\"Card_signaling__3uo0T\",\"flipped\":\"Card_flipped__1NTRX\",\"held\":\"Card_held__1hEwH\",\"inner\":\"Card_inner__2DFLd\",\"rotated\":\"Card_rotated__2V4NT\",\"holding\":\"Card_holding__2vcVK\",\"flags\":\"Card_flags__3tdvs\",\"perks\":\"Card_perks__2XHDz\",\"popup\":\"Card_popup__1hRxJ\",\"shown\":\"Card_shown__2zFow\",\"cardHeld\":\"Card_cardHeld__tiFBj\",\"line\":\"Card_line__19NP4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"box\":\"Box_box__2_Vbi\",\"itsTurn\":\"Box_itsTurn__157zb\",\"pickable\":\"Box_pickable__1iJMi\",\"me\":\"Box_me__NtbeD\",\"box-signaling\":\"Box_box-signaling__RuLxg\",\"hand\":\"Box_hand__3IavF\",\"collapsed\":\"Box_collapsed__ew4NO\",\"dropZone\":\"Box_dropZone__32J_7\",\"card\":\"Box_card__FDcKB\",\"flag\":\"Box_flag__2_0TN\",\"active\":\"Box_active__31KwU\",\"signaling\":\"Box_signaling__2J3Ts\",\"slot-signaling\":\"Box_slot-signaling__SSRfI\",\"four\":\"Box_four__2a0qp\",\"five\":\"Box_five__2EJda\",\"six\":\"Box_six__fJ328\",\"seven\":\"Box_seven__41b7Y\",\"playerInfo\":\"Box_playerInfo__3Lzx6\",\"flipped\":\"Box_flipped__3QDN0\",\"emoteContainer\":\"Box_emoteContainer__3KRWd\",\"emote\":\"Box_emote__YSzU5\",\"confetti\":\"Box_confetti__2_pWs\"};","import {languages} from \"./constants\"\n\nexport enum CardTypeEnum {\n Perk = 'perks',\n Flag = 'flags'\n}\n\nexport enum CardSlotEnum {\n Perk1 = 'placedPerk1',\n Perk2 = 'placedPerk2',\n Flag = 'placedFlag'\n}\n\nexport enum TurnTypeEnum {\n Perks = 'perks',\n Flags = 'flags',\n Pick = 'pick'\n}\n\nexport type CardType = {\n id: number\n type: CardTypeEnum\n text: string\n}\n\nexport type PlayerType = {\n uuid: string\n connected: boolean\n nickname: string\n color: string\n accepted: boolean\n isOwner: boolean\n isMaster: boolean\n cards: CardType[]\n score: number\n placedPerk1?: CardType\n placedPerk2?: CardType\n placedFlag?: CardType\n me?: boolean\n}\n\nexport type TurnType = {\n number: number\n player: string\n target: string\n type: TurnTypeEnum\n round: number\n}\n\nexport type GameType = {\n ended: boolean\n turn: TurnType\n flags: number[]\n perks: number[]\n lastWinner: string\n}\n\nexport type RoomType = {\n id: string\n code: string\n me: PlayerType\n players: PlayerType[]\n game: GameType\n}\n\nexport type HoldingCard = {\n index: number\n type: CardTypeEnum\n text: string\n id: number\n} | null\n\nexport type CursorType = {\n uuid: string\n nickname: string\n color: string\n grabbing: boolean\n holdingCard: HoldingCard\n x: number\n y: number\n}\n\nexport type CursorsType = {\n [uuid: string]: CursorType\n}\n\nexport type LanguagesKeys = keyof typeof languages","import {PlayerType, TurnTypeEnum, CardSlotEnum, CardTypeEnum} from \"../types\";\n\nexport function copyToClipboard(str: string) {\n const el = document.createElement('textarea');\n el.value = str;\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n};\n\nexport function isPlayerUpTop(players: PlayerType[]) {\n const playerIndex = players.findIndex(player => player.me)\n if (!playerIndex || players.length <= 1) return false\n return playerIndex >= Math.floor(players.length / 2)\n}\n\nexport function getRandomArrayItem(array: T[]): T {\n return array[Math.floor(Math.random() * array.length)]\n}\n\nexport function turnAndSlotTypeMatches(turnType: TurnTypeEnum, slotType: CardSlotEnum) {\n return (\n turnType === TurnTypeEnum.Flags && slotType === CardSlotEnum.Flag\n ) || (\n turnType === TurnTypeEnum.Perks && (slotType === CardSlotEnum.Perk1 || slotType === CardSlotEnum.Perk2)\n )\n}\n\nexport function turnAndCardTypeMatches(turnType: TurnTypeEnum, cardType: CardTypeEnum) {\n return (\n turnType === TurnTypeEnum.Flags && cardType === CardTypeEnum.Flag\n ) || (\n turnType === TurnTypeEnum.Perks && cardType === CardTypeEnum.Perk\n )\n}\n\nexport function getLangFromBrowser() {\n if (navigator.language.startsWith('en')) {\n return 'en-us'\n }\n if (navigator.language.startsWith('es')) {\n return 'es-ar'\n }\n return ''\n}\n\nexport function gaEvent(event: string, params?: Gtag.CustomParams) {\n if (!window.gtag) return\n window.gtag('event', event, params)\n}\n","export const nicknames = [\n 'Marilyn Monroe',\n 'Abraham Lincoln',\n 'Mother Teresa',\n 'John F. Kennedy',\n 'Martin Luther King',\n 'Nelson Mandela',\n 'Winston Churchill',\n 'Bill Gates',\n 'Muhammad Ali',\n 'Mahatma Gandhi',\n 'Margaret Thatcher',\n 'Charles de Gaulle',\n 'Christopher Columbus',\n 'George Orwell',\n 'Charles Darwin',\n 'Elvis Presley',\n 'Albert Einstein',\n 'Paul McCartney',\n 'Plato',\n 'Queen Elizabeth II',\n 'Queen Victoria',\n 'John M Keynes',\n 'Mikhail Gorbachev',\n 'Jawaharlal Nehru',\n 'Leonardo da Vinci',\n 'Louis Pasteur',\n 'Leo Tolstoy',\n 'Pablo Picasso',\n 'Vincent Van Gogh',\n 'Franklin D. Roosevelt',\n 'Pope John Paul II',\n 'Thomas Edison',\n 'Rosa Parks',\n 'Aung San Suu Kyi',\n 'Lyndon Johnson',\n 'Ludwig Beethoven',\n 'Oprah Winfrey',\n 'Indira Gandhi',\n 'Eva Peron',\n 'Benazir Bhutto',\n 'Desmond Tutu',\n 'Dalai Lama',\n 'Walt Disney',\n 'Neil Armstrong',\n 'Peter Sellers',\n 'Barack Obama',\n 'Malcolm X',\n 'J.K.Rowling',\n 'Richard Branson',\n 'Pele',\n 'Angelina Jolie',\n 'Jesse Owens',\n 'Ernest Hemingway',\n 'John Lennon',\n 'Henry Ford',\n 'Haile Selassie',\n 'Joseph Stalin',\n 'Lord Baden Powell',\n 'Michael Jordon',\n 'George Bush jnr',\n 'V.Lenin',\n 'Ingrid Bergman',\n 'Fidel Castro',\n 'Oscar Wilde',\n 'Coco Chanel',\n 'Pope Francis',\n 'Amelia Earhart',\n 'Adolf Hitler',\n 'Sting',\n 'Mary Magdalene',\n 'Alfred Hitchcock',\n 'Michael Jackson',\n 'Madonna',\n 'Mata Hari',\n 'Cleopatra',\n 'Grace Kelly',\n 'Steve Jobs',\n 'Ronald Reagan',\n 'Lionel Messi',\n 'Babe Ruth',\n 'Bob Geldof',\n 'Leon Trotsky',\n 'Roger Federer',\n 'Sigmund Freud',\n 'Woodrow Wilson',\n 'Mao Zedong',\n 'Katherine Hepburn',\n 'Audrey Hepburn',\n 'David Beckham',\n 'Tiger Woods',\n 'Usain Bolt',\n 'Carl Lewis',\n 'Prince Charles',\n 'Jacqueline Kennedy Onassis',\n 'C.S. Lewis',\n 'Billie Holiday',\n 'J.R.R. Tolkien',\n 'Tom Cruise',\n 'Billie Jean King',\n 'Anne Frank',\n 'Simon Bolivar',\n 'Marie Antoinette',\n 'Christiano Ronaldo',\n 'Emmeline Pankhurst ',\n 'Emile Zatopek',\n 'Lech Walesa',\n 'Julie Andrews',\n 'Florence Nightingale',\n 'Marie Curie',\n 'Stephen Hawking',\n 'Tim Berners Lee',\n 'Lance Armstrong',\n 'Shakira',\n 'Jon Stewart',\n 'Wright Brothers',\n 'Roman Abramovich',\n 'Rupert Murdoch',\n 'Al Gore',\n 'Sacha Baron Cohen',\n 'George Clooney',\n 'Paul Krugman',\n 'Jimmy Wales',\n 'Brad Pitt',\n 'Kylie Minogue',\n 'Malala Yousafzai',\n 'Stephen King'\n]\n\nexport const colors = [\n '#ff7b7b',\n '#ffa77c',\n '#ffe088',\n '#d3ff8d',\n '#75cf8d',\n '#99d4ff',\n '#ac98ff',\n '#e5b1ff',\n '#ffa3ef',\n]\n\nexport const languages = {\n 'en-us': 'English',\n 'es-ar': 'EspaΓ±ol (Arg)'\n}","import create from 'zustand'\nimport {nanoid} from 'nanoid'\nimport {getRandomArrayItem, getLangFromBrowser} from '../utils'\nimport {nicknames, colors, languages} from '../constants'\nimport {CardType, HoldingCard, LanguagesKeys} from '../types'\n\nconst LS_PREFIX = 'red-flags'\nconst LS_UUID_KEY = `${LS_PREFIX}_uuid`\n\nexport function getFromLocalStorage(key: string, admittedValues?: string[]) {\n const value = localStorage[`${LS_PREFIX}_${key}`]\n if (admittedValues && !admittedValues.includes(value)) {\n return null\n }\n return value\n}\n\nexport type AppState = {\n setState: (newState: Partial) => void\n nickname: string\n color: string\n roomId: string\n lang: LanguagesKeys\n boardSize: {\n width: number\n height: number\n },\n holdingCard: HoldingCard\n cardBeingPlaced: HoldingCard\n cardReleasedAt: {\n x: number\n y: number\n }\n cardPopup: CardType | null\n toastMessage: string\n perksPlaced: number\n flagsPlaced: number\n skipTutorial: boolean\n skipZoomTip: boolean\n skipCustomizationTooltip: boolean\n}\n\nconst persistentProps = ['nickname', 'color', 'lang', 'roomId', 'perksPlaced', 'flagsPlaced', 'skipTutorial', 'skipZoomTip', 'skipCustomizationTooltip']\n\nfunction saveToLocalStorage(newState: Partial) {\n Object.entries(newState).forEach(([key, value]) => {\n const prefixedKey = `${LS_PREFIX}_${key}`\n if (!persistentProps.includes(key) || value === localStorage[prefixedKey]) return\n localStorage[prefixedKey] = value\n })\n}\n\nexport const [useStore, store] = create(set => {\n if (!localStorage[LS_UUID_KEY]) {\n localStorage[LS_UUID_KEY] = nanoid()\n }\n\n const state = {\n setState: (newState: Partial) => set(state => {\n saveToLocalStorage(newState)\n return {...state, ...newState}\n }),\n nickname: getFromLocalStorage('nickname') || getRandomArrayItem(nicknames),\n color: getFromLocalStorage('color') || getRandomArrayItem(colors),\n lang: getFromLocalStorage('lang', Object.keys(languages)) || getLangFromBrowser() || 'en-us',\n roomId: getFromLocalStorage('roomId') || '',\n boardSize: {width: 0, height: 0},\n cardPopup: null,\n holdingCard: null,\n cardBeingPlaced: null,\n cardReleasedAt: {x: 0, y: 0},\n toastMessage: '',\n perksPlaced: parseInt(getFromLocalStorage('perksPlaced')) || 0,\n flagsPlaced: parseInt(getFromLocalStorage('flagsPlaced')) || 0,\n skipTutorial: JSON.parse(getFromLocalStorage('skipTutorial') || false),\n skipZoomTip: JSON.parse(getFromLocalStorage('skipZoomTip') || false),\n skipCustomizationTooltip: JSON.parse(getFromLocalStorage('skipCustomizationTooltip') || false)\n }\n saveToLocalStorage(state)\n\n persistentProps.forEach(key => {\n const value = localStorage[key]\n if (value === undefined) return\n // @ts-ignore\n state[key] = value\n })\n\n return state\n})\n\nexport default useStore ","import {store} from '../hooks/useStore'\nimport translations from '../translations.json'\nimport {LanguagesKeys} from '../types'\n\ntype TranslationsMap = {\n [text: string]: {\n [lang: string]: string\n }\n}\n\nlet currentLang: LanguagesKeys = store.getState().lang\n\nstore.subscribe((lang: LanguagesKeys | null) => {\n if (!lang) return\n currentLang = lang\n}, state => state.lang)\n\nexport function translate(text: any) {\n if (!text) {\n return ''\n }\n\n if (typeof text !== 'string') {\n console.warn('Translation attempted on non-string content, it will be ignored')\n return text\n }\n\n if (currentLang === translations._defaultLanguage) {\n return text\n }\n\n const translation = (translations as unknown as TranslationsMap)[text]?.[currentLang]\n if (!translation) {\n console.warn(`Missing translation for \"${text}\"`)\n return text\n }\n\n return translation\n}\n\nexport default translate","import React, {useRef, useEffect, useMemo} from 'react'\nimport classnames from 'classnames'\nimport useStore from '../../hooks/useStore'\nimport type {CardType} from '../../types'\nimport styles from './Card.module.scss'\nimport {usePrevious} from '@umijs/hooks'\n\ntype Props = CardType & {\n index?: number\n holding?: boolean\n placed?: boolean\n rotated?: boolean\n held?: boolean\n highlighted?: boolean\n}\n\nfunction Card({id, type, text, placed, rotated, holding, held, highlighted, index}: Props) {\n const setState = useStore(state => state.setState)\n const prevHolding = usePrevious(holding)\n const cardBeingPlaced = useStore(state => state.cardBeingPlaced)\n const cardReleasedAt = useStore(state => state.cardReleasedAt)\n const parsedText = useMemo(() => text.split('\\\\n'), [text])\n const cardRef = useRef(null)\n\n const flipped = text === 'HIDDEN_CARD'\n \n function setCardPopup() {\n if (flipped) return\n setState({cardPopup: {id, type, text}})\n }\n \n function removeCardPopup() {\n setState({cardPopup: null})\n }\n \n function holdCard() {\n if (id === -1 || index === undefined) return\n setState({holdingCard: {index, text, type, id}})\n }\n \n useEffect(function cardReturnAnimation() {\n const cardEl = cardRef.current\n const parentEl = cardEl?.parentElement?.parentElement\n if (cardBeingPlaced || holding || holding === prevHolding || !cardReleasedAt.x || !cardEl || !parentEl) return\n \n const {top: cardTop, left: cardLeft, width, height} = cardEl.getBoundingClientRect()\n const {y: cursorTop, x: cursorLeft} = cardReleasedAt\n\n let topOffset = (cardTop > cursorTop ? 0 - (cardTop - cursorTop) : cursorTop - cardTop) - height / 2\n let leftOffset = (cardLeft > cursorLeft ? 0 - (cardLeft - cursorLeft) : cursorLeft - cardLeft) - width / 2\n \n parentEl.style.transform = 'translate(0) rotate(0)'\n parentEl.style.transition = 'none'\n cardEl.style.transition = ''\n cardEl.style.transform = `translate(${leftOffset}px, ${topOffset}px)`\n requestAnimationFrame(function() {\n if (!cardRef || !cardRef.current) return\n parentEl.style.transform = ''\n parentEl.style.transition = ''\n cardRef.current.style.transition = 'transform .15s ease-out'\n cardRef.current.style.transform = 'translate(0,0)'\n })\n }, [holding, cardReleasedAt, prevHolding, cardBeingPlaced])\n \n return (\n \n \n
\n {parsedText.map((line, index) => {line})}\n
\n
\n
\n \n )\n}\n\nexport default Card","import React from 'react'\nimport classnames from 'classnames'\nimport t from '../../../utils/i18n'\nimport styles from './Info.module.scss'\nimport type {PlayerType} from '../../../types'\n\nfunction PlayerInfo({\n color,\n accepted,\n connected,\n nickname,\n itsTurn,\n isMaster,\n me,\n}: Partial & {itsTurn?: boolean}) {\n return (\n
\n \n

{nickname}

\n {me && {t('(you)')}}\n {isMaster && πŸ™ˆ}\n {itsTurn && 🀚}\n {!connected && }\n
\n )\n}\n\nexport default PlayerInfo","import React from 'react'\nimport classnames from 'classnames'\nimport Card from '../../../Card'\nimport styles from '../Box.module.scss'\nimport {CardType, CardSlotEnum} from '../../../../types'\n\ntype Props = {\n disabled?: boolean\n card?: CardType | null\n holdingCard: boolean\n handleDrop: () => void\n upper?: boolean\n slot: CardSlotEnum\n}\n\nfunction DropZone ({disabled, card, upper, handleDrop, holdingCard, slot}: Props) {\n if (card) {\n return (\n \n )\n }\n\n return (\n \n )\n}\n\nexport default DropZone","import gql from 'graphql-tag';\n\nexport const ON_ROOM_STATE_CHANGE = gql`\n subscription roomStateChanged($id: ID!, $lang: String!){\n roomStateChanged(id: $id, lang: $lang){\n id\n code\n me {\n accepted\n isOwner\n }\n players {\n uuid\n nickname\n color\n accepted\n connected\n isOwner\n isMaster\n score\n cards {\n id\n type\n text\n }\n placedPerk1 {\n text\n type\n }\n placedPerk2 {\n text\n type\n }\n placedFlag {\n text\n type\n }\n me\n }\n game {\n turn {\n player\n target\n type\n round\n }\n lastWinner\n }\n }\n }\n`\n\nexport const JOIN_ROOM = gql`\n mutation joinRoom($code: String!, $nickname: String!, $color: String!) {\n joinRoom(code: $code, nickname: $nickname, color: $color) {\n id\n }\n }\n`\n\nexport const LEAVE_ROOM = gql`\n mutation leaveRoom($roomId: ID!) {\n leaveRoom(roomId: $roomId) {\n id\n }\n }\n`\n\nexport const CREATE_ROOM = gql`\n mutation createRoom($nickname: String!, $color: String!) {\n createRoom(nickname: $nickname, color: $color) {\n id\n code\n }\n }\n`\n\nexport const ACCEPT_PLAYER = gql`\n mutation acceptPlayer($roomId: ID!, $playerId: String!) {\n acceptPlayer(roomId: $roomId, playerId: $playerId) {\n id\n }\n }\n`\n\nexport const REJECT_PLAYER = gql`\n mutation rejectPlayer($roomId: ID!, $playerId: String!) {\n rejectPlayer(roomId: $roomId, playerId: $playerId) {\n id\n }\n }\n`\n\nexport const KICK_PLAYER = gql`\n mutation kickPlayer($roomId: ID!, $playerId: String!) {\n kickPlayer(roomId: $roomId, playerId: $playerId) {\n id\n }\n }\n`\n\nexport const PROMOTE_PLAYER = gql`\n mutation promotePlayer($roomId: ID!, $playerId: String!) {\n promotePlayer(roomId: $roomId, playerId: $playerId) {\n id\n }\n }\n`\n\nexport const CHANGE_NICKNAME = gql`\n mutation changePlayerNickname($roomId: String!, $nickname: String!) {\n changePlayerNickname(roomId: $roomId, nickname: $nickname) {\n id\n }\n }\n`\n\nexport const CHANGE_COLOR = gql`\n mutation changePlayerColor($roomId: String!, $color: String!) {\n changePlayerColor(roomId: $roomId, color: $color) {\n id\n }\n }\n`\n\nexport const START_GAME = gql`\n mutation startGame($roomId: ID!) {\n startGame(roomId: $roomId) {\n id\n }\n }\n`\n\nexport const STOP_GAME = gql`\n mutation stopGame($roomId: ID!) {\n stopGame(roomId: $roomId) {\n id\n }\n }\n`\n\nexport const PLAY_CARD = gql`\n mutation playCard($roomId: ID!, $targetId: String!, $slot: CardSlot!, $card: Int!) {\n playCard(roomId: $roomId, targetId: $targetId, slot: $slot, card: $card) {\n id\n }\n }\n`\n\nexport const PICK_WINNER = gql`\n mutation pickWinner($roomId: ID!, $playerId: String!) {\n pickWinner(roomId: $roomId, playerId: $playerId) {\n id\n }\n }\n`","import React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport DropZone from './DropZone'\nimport {useMutation} from '@apollo/react-hooks';\nimport {usePrevious} from '@umijs/hooks'\nimport useStore from '../../../../hooks/useStore';\nimport {CardType, CardSlotEnum, CardTypeEnum, HoldingCard} from '../../../../types';\nimport {PLAY_CARD} from '../../../../graphql'\n\ntype Props = {\n slot: CardSlotEnum\n disabled?: boolean\n card?: CardType\n targetId: string\n upper?: boolean\n myTurn?: boolean\n}\n\nfunction DropZoneContainer({slot, disabled, card, targetId, upper, myTurn}: Props) {\n const roomId = useStore(state => state.roomId)\n const holdingCard = useStore(state => state.holdingCard)\n const prevHeldCard = usePrevious(holdingCard)\n const setState = useStore(state => state.setState)\n const perksPlaced = useStore(state => state.perksPlaced)\n const flagsPlaced = useStore(state => state.flagsPlaced)\n const [playCard] = useMutation(PLAY_CARD)\n const [cardBeingPlaced, setCardBeingPlaced] = useState()\n \n const holdingTheRightCard = useMemo(() => {\n if (!holdingCard) return false\n if (holdingCard.type === CardTypeEnum.Perk && slot !== CardSlotEnum.Flag) return true\n if (holdingCard.type === CardTypeEnum.Flag && slot === CardSlotEnum.Flag) return true\n return false\n }, [holdingCard, slot])\n \n useEffect(function cleanCardsBeingPlaced() {\n setCardBeingPlaced(null)\n setState({cardBeingPlaced: null})\n }, [myTurn, setState])\n\n const handleDrop = useCallback(() => {\n if (!myTurn || !prevHeldCard) return\n if (prevHeldCard.type === CardTypeEnum.Perk && slot === CardSlotEnum.Flag) {\n return setState({toastMessage: 'You need to place a red card here'})\n }\n if (prevHeldCard.type === CardTypeEnum.Flag && slot !== CardSlotEnum.Flag) {\n return setState({toastMessage: 'You need to place a white card here'})\n }\n if (disabled) return\n setCardBeingPlaced(prevHeldCard)\n setState({\n cardBeingPlaced: prevHeldCard,\n ...(prevHeldCard.type === CardTypeEnum.Perk ? {perksPlaced: perksPlaced + 1} : {flagsPlaced: flagsPlaced + 1})\n })\n playCard({variables: {roomId, targetId, slot, card: prevHeldCard.id}})\n }, [slot, prevHeldCard, playCard, roomId, setState, targetId, disabled, flagsPlaced, perksPlaced, myTurn])\n \n return (\n \n )\n}\n\nexport default DropZoneContainer","import React, {useCallback, useEffect, useRef} from 'react'\nimport classnames from 'classnames'\nimport confetti from 'canvas-confetti'\nimport Card from '../../Card'\nimport PlayerInfo from '../../player/Info'\nimport DropZone from './DropZone'\nimport useStore, {getFromLocalStorage} from '../../../hooks/useStore'\nimport {turnAndCardTypeMatches, turnAndSlotTypeMatches} from '../../../utils'\nimport styles from './Box.module.scss'\nimport {\n PlayerType,\n CardSlotEnum,\n TurnType,\n CardType,\n TurnTypeEnum,\n CursorType,\n HoldingCard,\n CardTypeEnum\n} from '../../../types'\nimport {usePrevious} from '@umijs/hooks'\n\nconst handClasses = {\n length4: styles.four,\n length5: styles.five,\n length6: styles.six,\n length7: styles.seven\n}\n\ntype Props = PlayerType & {\n turn: TurnType,\n upper?: boolean,\n boardFlipped: boolean,\n pickAsWinner: () => void,\n cursor?: CursorType\n holdingCard: HoldingCard\n lastWinner?: string\n}\n\nfunction PlayerBox({\n uuid,\n nickname,\n color,\n accepted,\n connected,\n cards,\n cursor,\n holdingCard,\n me,\n isMaster,\n placedPerk1,\n placedPerk2,\n placedFlag,\n turn,\n upper,\n boardFlipped,\n pickAsWinner,\n lastWinner\n}: Props) {\n const perksPlaced = useStore(state => state.perksPlaced)\n const flagsPlaced = useStore(state => state.flagsPlaced)\n const cardBeingPlaced = useStore(state => state.cardBeingPlaced)\n const prevWinner = usePrevious(lastWinner)\n const boxRef = useRef(null)\n const myUuid = getFromLocalStorage('uuid')\n // @ts-ignore\n const handClass = handClasses[`length${cards.length}`]\n const myTurn = myUuid === turn.player\n const imTarget = uuid === turn.target\n const itsTurn = uuid === turn.player\n const pickable = turn.type === TurnTypeEnum.Pick && !isMaster && myTurn && cards.length\n const flipped = (upper && !boardFlipped) || (!upper && boardFlipped)\n \n const showConfetti = useCallback(() => {\n if (!boxRef.current) return\n const {left, width} = boxRef.current.getBoundingClientRect()\n const x = (left + width * 0.5) / window.innerWidth\n\n if (!flipped) {\n return confetti({\n origin: {x, y: 1.2},\n ticks: 100\n })\n }\n \n confetti({\n origin: {x, y: -0.2},\n startVelocity: 30,\n spread: 70,\n angle: -90,\n ticks: 100\n })\n }, [boxRef, flipped])\n \n useEffect(function winAnimation() {\n if (prevWinner === undefined || prevWinner === lastWinner || lastWinner !== uuid) return\n showConfetti()\n }, [prevWinner, lastWinner, showConfetti, uuid])\n \n const shouldCardBeHighlighted = useCallback((card: CardType) => {\n if (!me || !itsTurn || holdingCard || cursor?.holdingCard) return false\n if ((card.type === CardTypeEnum.Flag && flagsPlaced > 0) || (card.type === CardTypeEnum.Perk && perksPlaced > 1)) return false\n const rightType = turnAndCardTypeMatches(turn.type, card.type)\n if (!rightType) return false\n return true\n }, [itsTurn, holdingCard, cursor, flagsPlaced, perksPlaced, turn.type, me])\n \n const shouldSlotBeEnabled = useCallback((slot: CardSlotEnum) => {\n if (!myTurn) return false\n const rightSlotType = turnAndSlotTypeMatches(turn.type, slot)\n if (!rightSlotType) return false\n if (turn.type === TurnTypeEnum.Perks && !itsTurn) return false\n if (turn.type === TurnTypeEnum.Flags && !imTarget) return false\n return true\n }, [turn.type, itsTurn, imTarget, myTurn])\n \n const renderDropZone = useCallback((slot: CardSlotEnum, card?: CardType) => {\n return (\n \n )\n }, [flipped, uuid, shouldSlotBeEnabled, myTurn])\n \n return (\n \n
\n {!isMaster && (\n \n {renderDropZone(CardSlotEnum.Perk1, placedPerk1)}\n {renderDropZone(CardSlotEnum.Perk2, placedPerk2)}\n {renderDropZone(CardSlotEnum.Flag, placedFlag)}\n \n )}\n
\n {!!cards.length && (\n
\n {cards.map((card, index) => {\n const holding = (me ? holdingCard?.index : cursor?.holdingCard?.index) === index\n const beingPlaced = !!cardBeingPlaced && cardBeingPlaced.id === card.id\n return (\n \n )\n })}\n
\n )}\n {
\n \n
}\n \n )\n}\n\nexport default PlayerBox","import {useRef, useEffect, useCallback} from 'react'\nimport throttle from 'lodash.throttle'\n\ntype Callback = (...args: any[]) => any\n\nexport default function useThrottle(cb: Callback, delay: number) {\n const options = {leading: true, trailing: false}\n const cbRef = useRef(cb)\n \n useEffect(() => {cbRef.current = cb})\n\n return useCallback(\n throttle((...args) => cbRef.current(...args), delay, options),\n [delay]\n )\n}","import React from 'react'\nimport Box from './Box'\nimport {useMutation} from '@apollo/react-hooks'\nimport useStore from '../../../hooks/useStore'\nimport useThrottle from '../../../hooks/useThrottle'\nimport type {PlayerType, TurnType, CursorType} from '../../../types'\nimport {PICK_WINNER} from '../../../graphql'\nimport {gaEvent} from '../../../utils'\n\ntype Props = PlayerType & {\n turn: TurnType,\n boardFlipped: boolean\n upper?: boolean\n cursor?: CursorType\n lastWinner?: string\n}\n\nfunction PlayerBoxContainer(props: Props) {\n const roomId = useStore(state => state.roomId)\n const holdingCard = useStore(state => state.holdingCard)\n const [pickWinner, {loading}] = useMutation(PICK_WINNER)\n\n const handlePickAsWinner = useThrottle(() => {\n if (loading) return\n pickWinner({variables: {roomId, playerId: props.uuid}})\n gaEvent('game_pick_winner')\n }, 5000)\n\n return (\n \n )\n}\n\nexport default PlayerBoxContainer","import React from 'react'\nimport classnames from 'classnames'\nimport t from '../utils/i18n'\nimport PlayerBox from '../components/player/Box'\nimport type {PlayerType, TurnType, CursorsType} from '../types'\nimport styles from './Board.module.scss'\n\ntype Props = {\n players: PlayerType[]\n cursors: CursorsType\n turn: TurnType\n upper?: boolean\n boardFlipped: boolean\n lastWinner?: string\n skipZoomTip?: boolean\n}\n\nfunction Group({players, turn, upper, boardFlipped, cursors, lastWinner}: Props) {\n return (\n
\n {players.map(player => (\n \n ))}\n
\n )\n}\n\nfunction Players({players, skipZoomTip, ...props}: Props) {\n const cutAt = Math.floor(players.length / 2) || 1\n \n return (\n
\n \n {!skipZoomTip && (\n
\n {t('TIP')}{t(': Hold ')}{t('Control')}{t(' or ')}{t('Space')}{t(' to zoom in on a card')}\n
\n )}\n \n
\n )\n}\n\nexport default Players","import {useState, KeyboardEvent} from 'react'\nimport {useEventListener} from '@umijs/hooks'\n\ntype Key = 'Alt' | 'Control' | 'Command' | 'Shift'\ntype KeyProp = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst keyMap: {[key in Key]: KeyProp} = {\n Alt: 'altKey',\n Control: 'ctrlKey',\n Command: 'metaKey',\n Shift: 'shiftKey'\n}\n\nfunction useHoldingMetaKey(key: Key): boolean {\n const [holding, setHolding] = useState(false)\n const keyProp = keyMap[key]\n \n function handler(event: KeyboardEvent) {\n if (event.key !== key) return\n if (event[keyProp] === holding) return\n setHolding(event[keyProp])\n }\n \n useEventListener('keydown', handler)\n useEventListener('keyup', handler)\n\n return holding\n}\n\nexport default useHoldingMetaKey","import {KeyboardEvent} from 'react'\nimport {useEventListener, useBoolean} from '@umijs/hooks'\n\nfunction useHoldingKey(key: number): boolean {\n const {state, setFalse, setTrue} = useBoolean()\n\n function keyDownHandler(event: KeyboardEvent) {\n if (state || event.keyCode !== key) return\n setTrue()\n }\n\n function keyUpHandler(event: KeyboardEvent) {\n if (!state || event.keyCode !== key) return\n setFalse()\n }\n \n useEventListener('keydown', keyDownHandler)\n useEventListener('keyup', keyUpHandler)\n\n return state\n}\n\nexport default useHoldingKey","import React from 'react'\nimport classnames from 'classnames'\nimport useStore from '../../hooks/useStore'\nimport styles from './Card.module.scss'\nimport {useMouse} from '@umijs/hooks'\nimport useHoldingMetaKey from '../../hooks/useHoldingMetaKey'\nimport useHoldingKey from '../../hooks/useHoldingKey'\nimport {CardTypeEnum} from '../../types'\n\nfunction Popup() {\n const data = useStore(state => state.cardPopup)\n const setState = useStore(state => state.setState)\n const holdingAlt = useHoldingMetaKey('Control')\n const holdingSpace = useHoldingKey(32)\n const cursor = useMouse()\n const shown = data && (holdingAlt || holdingSpace)\n\n if (shown) {\n setState({skipZoomTip: true})\n }\n\n return (\n \n {data?.text.split('\\\\n').map((line, index) => {line})}\n \n )\n}\n\nexport default Popup","import React from 'react'\nimport useStore from '../../hooks/useStore'\nimport styles from './Card.module.scss'\nimport {useMouse} from '@umijs/hooks'\nimport Card from '.'\n\nfunction Held() {\n const data = useStore(state => state.holdingCard)\n const cursor = useMouse()\n \n if (data === null) return null\n const {text, type, id} = data\n\n return (\n \n \n \n )\n}\n\nexport default Held","import React, { ReactNode } from 'react'\nimport classnames from 'classnames'\n\nimport styles from './Modal.module.scss'\n\ntype Props = {\n children: ReactNode\n header?: ReactNode\n onBackButton?: () => void\n onCloseButton?: () => void\n}\n\nfunction Modal({children, onBackButton, onCloseButton, header}: Props) {\n const withHeader = onBackButton || onCloseButton || header\n return (\n
\n
\n {!!withHeader &&\n
\n {onBackButton &&
\n }\n {children}\n
\n
\n )\n}\n\nexport default Modal","import {useEffect, useCallback} from 'react'\nimport {useDebounceFn, useBoolean} from '@umijs/hooks'\n\nfunction useButtonConfirm(onClick?: React.MouseEventHandler): [boolean, React.MouseEventHandler] {\n const {state: confirming, setTrue: startConfirming, setFalse: stopConfirming} = useBoolean(false)\n const {run: dismissConfirmAfterDelay} = useDebounceFn(stopConfirming, 1800);\n useEffect(dismissConfirmAfterDelay, [confirming])\n\n const handleOnClick = useCallback(event => {\n if (!onClick) return\n if (!confirming) return startConfirming()\n onClick(event)\n }, [onClick, confirming, startConfirming])\n \n return [confirming, handleOnClick]\n}\n\nexport default useButtonConfirm\n","import React, {ReactElement} from 'react'\nimport classnames from 'classnames'\nimport {useHover} from '@umijs/hooks'\nimport t from '../../utils/i18n'\nimport styles from './Tooltip.module.scss'\n\ntype Props = {\n title: string\n className?: string\n children: ReactElement\n disabled?: boolean\n persistent?: boolean\n block?: boolean\n}\n\nfunction Tooltip({title, className, children, disabled, persistent, block}: Props) {\n const [hovered, ref] = useHover()\n \n return (\n
\n {!disabled && (persistent || hovered) &&
{t(title)}
}\n {children}\n
\n )\n}\n\nexport default Tooltip","import React from 'react'\nimport classnames from 'classnames'\nimport useButtonConfirm from '../../hooks/useButtonConfirm'\n\nimport styles from './Button.module.scss'\nimport Tooltip from '../Tooltip'\nimport t from '../../utils/i18n'\n\ntype Props = React.HTMLProps & {\n type?: \"button\" | \"submit\" | \"reset\" | undefined\n small?: boolean\n narrow?: boolean\n secondary?: boolean\n loading?: boolean\n confirm?: boolean\n disabled?: boolean\n disabledText?: string\n}\n\nfunction Button({\n children,\n className,\n loading,\n small,\n narrow,\n secondary,\n confirm,\n disabled,\n disabledText = '',\n onClick,\n onBlur,\n ...props\n}: Props) {\n const [confirming, handleOnClickConfirm] = useButtonConfirm(onClick)\n\n return (\n \n \n {t(confirming ? 'Sure?' : children)}\n \n \n )\n}\n\nexport default Button","import React from 'react'\nimport Modal from '../../components/Modal'\nimport Button from '../../components/Button'\nimport t from '../../utils/i18n'\nimport styles from './TutorialModal.module.scss'\nimport useStore from '../../hooks/useStore'\n\nfunction TutorialModal() {\n const setState = useStore(state => state.setState)\n const skipTutorial = useStore(state => state.skipTutorial)\n \n function closeTutorial() {\n setState({skipTutorial: true})\n }\n \n if (skipTutorial) return null\n \n return (\n {t('How to play')}}>\n
\n
    \n
  • \n 1\n
    \n

    \n {t('We are all introducing one lucky friend to what we believe is their perfect match! ')}\n πŸ˜‡\n

    \n
  • \n
  • \n 2\n
    \n

    \n {t(\"When it's your turn, choose 2 perks you believe they would like in a person they date \")}\n 😌\n

    \n
  • \n
  • \n 3\n
    \n

    \n {t(\"But it doesn't end there, after all perks are placed, you will have the chance to \")}\n πŸ”₯\n {t(' your opponents adding a red flag to their applicant')}\n

    \n
  • \n
  • \n 4\n
    \n

    \n {t('Then your friend has to pick the best (or least worst ')}\n 😬\n {t(') applicant, if yours gets picked, you get a point!')}\n

    \n
  • \n
\n
\n

{t(\"And that's it! have fun and play as many rounds as you want!\")}

\n \n
\n
\n
\n )\n}\n\nexport default TutorialModal","import React from 'react'\n\ntype Props = {\n color: string\n}\n\nfunction HandIcon({color}: Props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default HandIcon","import React from 'react'\n\ntype Props = {\n color: string\n}\n\nfunction HandIcon({color}: Props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default HandIcon","import React from 'react'\nimport styles from './Cursor.module.scss'\nimport HandIcon from './HandIcon'\nimport HandGrabbingIcon from './HandGrabbingIcon'\nimport {CursorType} from '../../types'\nimport Card from '../Card'\n\nfunction Cursor({color, x, y, grabbing, holdingCard}: CursorType) {\n const Icon = grabbing ? HandGrabbingIcon : HandIcon\n return (\n \n \n {holdingCard !== null && (\n
\n \n
\n )}\n \n )\n}\n\nexport default Cursor","import {getFromLocalStorage} from '../hooks/useStore'\nimport {CursorType, CursorsType} from '../types'\n\nexport function serverToClient(\n cursors: CursorsType,\n boardSize: {width: number, height: number}\n): CursorsType {\n for (const key in cursors) {\n const cursor = cursors[key]\n if (cursor.uuid === getFromLocalStorage('uuid')) {\n delete cursors[key]\n continue\n }\n cursors[key].x = boardSize.width * cursor.x / 100\n cursors[key].y = boardSize.height * cursor.y / 100\n }\n return cursors\n}\n\nfunction invert(value: number, ignore: boolean) {\n return ignore ? value : 100 - value\n}\n\nexport function clientToServer(\n cursor: CursorType,\n boardSize: {width: number, height: number},\n playerIsUpTop: boolean\n): CursorType {\n return {\n ...cursor,\n x: invert(cursor.x * 100 / boardSize.width, !playerIsUpTop),\n y: invert(cursor.y * 100 / boardSize.height, !playerIsUpTop)\n }\n}","import {useState, useEffect, useRef} from 'react'\nimport io from 'socket.io-client'\nimport {useEventListener} from '@umijs/hooks'\nimport useStore, {getFromLocalStorage} from '../hooks/useStore'\nimport useThrottle from './useThrottle'\nimport {serverToClient, clientToServer} from '../utils/cursor'\nimport type {CursorsType} from '../types'\n\nfunction useCursors(accepted: boolean, playerIsUpTop: boolean) {\n const nickname = useStore(state => state.nickname)\n const color = useStore(state => state.color)\n const roomId = useStore(state => state.roomId)\n const boardSize = useStore(state => state.boardSize)\n const holdingCard = useStore(state => state.holdingCard)\n const roomCursors = useRef()\n const [cursors, setCursors] = useState({})\n\n useEffect(function subscribeToRoomCursors() {\n if (!roomId || !accepted) return\n \n roomCursors.current = io.connect(process.env.REACT_APP_SOCKETIO_ENDPOINT || 'http://localhost:8080', {\n query: `room=${roomId}`\n })\n \n roomCursors.current.on('move', (cursors: CursorsType) => {\n setCursors(serverToClient(cursors, boardSize))\n })\n \n return () => {\n if (!roomCursors.current) return\n roomCursors.current.disconnect()\n }\n }, [roomId, accepted, boardSize])\n \n const sendCursorPosition = useThrottle(event => {\n if (!roomCursors.current) return\n roomCursors.current.emit('moved', clientToServer({\n uuid: getFromLocalStorage('uuid'),\n nickname,\n color,\n grabbing: event.which === 1,\n holdingCard: holdingCard ? {\n index: holdingCard.index,\n type: holdingCard.type,\n text: \"HIDDEN_CARD\",\n id: -1\n } : null,\n x: event.clientX - ((window.innerWidth - boardSize.width) / 2),\n y: event.clientY - ((window.innerHeight - boardSize.height) / 2)\n }, boardSize, playerIsUpTop))\n }, 50)\n\n useEventListener('mousemove', sendCursorPosition)\n \n return cursors\n}\n\nexport default useCursors","import React, {useMemo} from 'react'\nimport classnames from 'classnames'\nimport Players from './Players'\nimport CardPopup from '../components/Card/Popup'\nimport CardHeld from '../components/Card/Held'\nimport TutorialModal from '../Modals/TutorialModal'\nimport Cursor from '../components/Cursor'\nimport useCursors from '../hooks/useCursors'\nimport {isPlayerUpTop} from '../utils'\nimport styles from './Board.module.scss'\nimport type {PlayerType, TurnType} from '../types'\nimport useStore from '../hooks/useStore'\n\ntype Props = {\n players: PlayerType[]\n me: PlayerType\n turn: TurnType\n boardRef: React.RefObject\n lastWinner?: string\n}\n\nfunction Board({players, me, turn, boardRef, lastWinner}: Props) {\n const skipZoomTip = useStore(state => state.skipZoomTip)\n const playerIsUpTop = useMemo(() => isPlayerUpTop(players), [players])\n const cursors = useCursors(!!me && me.accepted, playerIsUpTop)\n\n return (\n
\n \n \n {Object.values(cursors).map(cursor => )}\n
\n \n \n {me.accepted && }\n \n )\n}\n\nexport default Board","import React, {useEffect, useMemo} from 'react'\nimport Board from './Board'\nimport {useEventListener, useSize} from '@umijs/hooks'\nimport useStore from '../hooks/useStore'\nimport {PlayerType, TurnType} from '../types'\n\ntype Props = {\n me?: PlayerType\n players?: PlayerType[]\n turn?: TurnType\n lastWinner?: string\n}\n\nfunction BoardContainer({me, players = [], turn, lastWinner}: Props) {\n const setState = useStore(state => state.setState)\n const holdingCard = useStore(state => state.holdingCard)\n const [{width = 0, height = 0}, boardRef] = useSize()\n const acceptedPlayers = useMemo(() => players.filter(player => player.accepted), [players])\n useEventListener('mouseup', releaseCard)\n \n function releaseCard({x, y}: MouseEvent) {\n if (holdingCard === null) return\n setState({\n holdingCard: null,\n cardReleasedAt: {x, y}\n })\n }\n\n useEffect(function saveBoardSize() {\n setState({boardSize: {width, height}})\n }, [width, height, setState])\n\n if (!me || !turn) return null\n\n return (\n \n )\n}\n\nexport default BoardContainer","import React, {useState} from 'react'\nimport classnames from 'classnames'\nimport {languages} from '../../../../constants'\nimport {LanguagesKeys} from '../../../../types'\nimport useStore from '../../../../hooks/useStore'\nimport styles from './Language.module.scss'\nimport {gaEvent} from '../../../../utils'\n\nfunction Language() {\n const lang = useStore(state => state.lang)\n const setState = useStore(state => state.setState)\n const [isOpen, setIsOpen] = useState(false)\n \n function toggle() {\n setIsOpen(!isOpen)\n }\n \n function pick(newLang: LanguagesKeys) {\n gaEvent('player_change_language', {from: lang, to: newLang})\n setState({lang: newLang})\n toggle()\n }\n\n return (\n
\n \n {languages[lang]}\n
\n {isOpen && (\n \n
\n
\n {Object.entries(languages).map(([value, label]) => (\n pick(value as LanguagesKeys)}>\n {label}\n
\n ))}\n
\n
\n )}\n \n )\n}\n\nexport default Language","import React, {useState} from 'react'\nimport classnames from 'classnames'\nimport {colors} from '../../../../constants'\nimport useStore from '../../../../hooks/useStore'\nimport styles from './ColorPicker.module.scss'\n\ntype Props = {\n changeColor: (color: string) => void\n}\n\nfunction ColorPicker({changeColor}: Props) {\n const color = useStore(state => state.color)\n const [isOpen, setIsOpen] = useState(false)\n \n function toggle() {\n setIsOpen(!isOpen)\n }\n\n function pick(color: string) {\n changeColor(color)\n toggle()\n }\n\n return (\n
\n \n {isOpen && (\n \n
\n
\n {colors.map(color => (\n pick(color)}/>\n ))}\n
\n \n )}\n
\n )\n}\n\nexport default ColorPicker","import React, {useRef, useState, useLayoutEffect} from 'react'\nimport classnames from 'classnames'\nimport useStore from '../../../../hooks/useStore'\nimport t from '../../../../utils/i18n'\nimport styles from './Nickname.module.scss'\n\ntype Props = {\n changeNickname: (nickname: string) => void\n}\n\nfunction Nickname({changeNickname}: Props) {\n const inputRef = useRef(null)\n const ghostRef = useRef(null)\n const [width, setWidth] = useState(200)\n const nickname = useStore(state => state.nickname)\n const [value, setValue] = useState(nickname)\n \n function handleSave() {\n if (!value) return setValue(nickname)\n const trimmed = value.trim()\n if (trimmed === nickname) return\n changeNickname(trimmed)\n }\n \n useLayoutEffect(() => {\n if (!ghostRef.current) return\n setWidth(Math.max(ghostRef.current.offsetWidth, 30))\n }, [value])\n \n function handleKeyDown(event: React.KeyboardEvent) {\n if (!inputRef.current || !ghostRef.current) return\n switch (event.key) {\n case 'Enter':\n case 'Escape':\n inputRef.current.blur()\n }\n }\n\n return (\n \n setValue(event.target.value)}\n className={styles.input}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n maxLength={20}\n style={{width: value ? width : 200}}\n placeholder={t('Choose a nickname!')}/>\n \n {value}\n
\n \n )\n}\n\nexport default Nickname","import React from 'react'\nimport Language from './Language'\nimport ColorPicker from './ColorPicker'\nimport Nickname from './Nickname'\nimport styles from './Customization.module.scss'\n\ntype Props = {\n changeNickname: (nickname: string) => void\n changeColor: (color: string) => void\n}\n\nfunction PlayerCustomization({changeNickname, changeColor}: Props) {\n return (\n
\n \n \n \n
\n )\n}\n\nexport default PlayerCustomization","import React from 'react'\nimport Customization from './Customization'\nimport {useMutation} from '@apollo/react-hooks'\nimport useStore from '../../../hooks/useStore'\nimport {CHANGE_NICKNAME, CHANGE_COLOR} from '../../../graphql'\nimport {gaEvent} from '../../../utils'\n\nfunction PlayerCustomizationContainer() {\n const setState = useStore(state => state.setState)\n const roomId = useStore(state => state.roomId)\n const [changeNickname] = useMutation(CHANGE_NICKNAME)\n const [changeColor] = useMutation(CHANGE_COLOR)\n\n function handleChangeNickname(nickname: string) {\n setState({nickname})\n if (!roomId) return\n changeNickname({variables: {roomId, nickname}})\n gaEvent('player_change_nickname')\n }\n \n function handleChangeColor(color: string) {\n setState({color})\n if (!roomId) return\n changeColor({variables: {roomId, color}})\n gaEvent('player_change_color')\n }\n\n return (\n \n )\n}\n\nexport default PlayerCustomizationContainer","import React, {useState, useEffect, useCallback} from 'react'\n\nimport Modal from '../../components/Modal'\nimport PlayerCustomization from '../../components/player/Customization'\nimport Button from '../../components/Button'\nimport t from '../../utils/i18n'\nimport styles from './RoomModal.module.scss'\nimport {useToggle} from '@umijs/hooks'\n\ntype Props = {\n join: (code: string) => void\n create: () => void\n loading: boolean\n}\n\nfunction RoomModal({join, create, loading}: Props) {\n const [code, setCode] = useState('')\n const {state: joining, toggle: toggleJoining} = useToggle()\n\n const handleJoinClick = useCallback(() => {\n if (code.length !== 5) return\n join(code)\n }, [code, join])\n\n useEffect(function sendWhenComplete() {\n handleJoinClick()\n }, [code, handleJoinClick])\n \n function handleCodeChange(event: React.ChangeEvent) {\n setCode(event.target.value.trim().toUpperCase())\n }\n \n if (joining) {\n return (\n toggleJoining()} header={}>\n \n

{t('Ask for the room code and paste it here:')}

\n
\n \n
\n \n
\n
\n )\n }\n \n return (\n }>\n
\n
\n

{t('Create a new room, so your friends can join')}

\n \n
\n
\n

{t('Join a room one of your friends just created')}

\n \n
\n
\n
\n )\n}\n\nexport default RoomModal","import React, {useCallback} from 'react'\nimport {useMutation} from '@apollo/react-hooks'\n\nimport RoomModal from './RoomModal'\nimport useStore from '../../hooks/useStore'\n\nimport {JOIN_ROOM, CREATE_ROOM} from '../../graphql'\nimport {gaEvent} from '../../utils'\n\nfunction RoomModalContainer() {\n const {nickname, color, setState} = useStore()\n\n const [create, createMutation] = useMutation(CREATE_ROOM, {\n update(_, {data: {createRoom: {id}}}) {\n setState({roomId: id})\n }\n })\n\n const [join, joinMutation] = useMutation(JOIN_ROOM, {\n update(_, {data: {joinRoom: {id}}}) {\n setState({roomId: id})\n }\n })\n\n const handleJoin = useCallback(async (code: string) => {\n try {\n await join({variables: {code, nickname, color}})\n gaEvent('room_join_request')\n } catch (err) {\n const roomIsFull = err.message.includes('full')\n setState({toastMessage: roomIsFull ? \"Room is full!\" : \"That room doesn't exist!\"})\n gaEvent(roomIsFull ? 'room_join_full' : 'room_join_inexistent')\n }\n }, [setState, join, nickname, color])\n\n const handleCreate = useCallback(() => {\n create({variables: {nickname, color}})\n gaEvent('room_create')\n }, [create, nickname, color])\n\n return (\n \n )\n}\n\nexport default RoomModalContainer","import React, { ReactNode } from 'react'\nimport classnames from 'classnames'\n\nimport styles from './Drawer.module.scss'\n\ntype Props = {\n children: ReactNode\n header?: ReactNode\n}\n\nfunction Modal({children, header}: Props) {\n return (\n
\n {!!header &&\n
\n {header}\n
\n }\n {children}\n
\n )\n}\n\nexport default Modal","import React from 'react'\nimport Tooltip from '../../../components/Tooltip'\nimport useButtonConfirm from '../../../hooks/useButtonConfirm'\nimport t from '../../../utils/i18n'\nimport styles from './PlayerStatus.module.scss'\n\ntype Props = React.HTMLProps & {\n type?: \"button\" | \"submit\" | \"reset\" | undefined\n children: string\n confirm?: boolean\n}\n\nfunction ActionButton({children, confirm, onClick, ...props}: Props) {\n const [confirming, handleOnClickConfirm] = useButtonConfirm(onClick)\n\n return (\n \n \n )}\n {me.isOwner && started && (\n \n )}\n \n \n )\n \n const header = (\n \n
\n \n
\n \n )\n \n const Container = drawerMode ? Drawer : Modal\n\n return {content}\n}\n\nexport default LobbyModal","import React from 'react'\nimport {useMutation} from '@apollo/react-hooks'\n\nimport LobbyModal from './LobbyModal'\nimport useStore from '../../hooks/useStore'\n\nimport {START_GAME, STOP_GAME, LEAVE_ROOM} from '../../graphql'\nimport type {PlayerType} from '../../types'\nimport {gaEvent} from '../../utils'\n\ntype Props = {\n me?: PlayerType,\n players?: PlayerType[],\n code?: string\n started: boolean\n rounds: number\n}\n\nfunction LobbyModalContainer({players, me, code, started, rounds}: Props) {\n const roomId = useStore(state => state.roomId)\n const skipTooltip = useStore(state => state.skipCustomizationTooltip)\n const setState = useStore(state => state.setState)\n\n const [startGame] = useMutation(START_GAME)\n const [stopGame] = useMutation(STOP_GAME)\n const [leaveRoom] = useMutation(LEAVE_ROOM)\n\n function handleStartGame() {\n startGame({variables: {roomId}})\n gaEvent('game_start')\n }\n \n function handleStopGame() {\n stopGame({variables: {roomId}})\n gaEvent('game_stop', {rounds})\n }\n\n function handleLeaveRoom() {\n gaEvent('room_leave', {owner: !!me?.isOwner})\n if (started && players && players.length >= 3) gaEvent('game_stop', {rounds})\n if (players?.length === 1) gaEvent('room_delete')\n leaveRoom({variables: {roomId}})\n }\n \n function handleHideTooltip() {\n if (skipTooltip) return\n setState({skipCustomizationTooltip: true})\n }\n \n if (!code || !me || !players) {\n return null\n }\n \n return (\n \n )\n}\n\nexport default LobbyModalContainer","import React from 'react'\n\nimport RoomModal from './RoomModal'\nimport useStore from '../hooks/useStore'\nimport LobbyModal from './LobbyModal'\nimport {GameType, PlayerType} from '../types'\n\ntype Props = {\n me?: PlayerType,\n players?: PlayerType[],\n code?: string\n game?: GameType\n}\n\nfunction Modals({me, players, code, game}: Props) {\n const roomId = useStore(state => state.roomId)\n \n if (!roomId) {\n return \n }\n \n return (\n \n )\n}\n\nexport default Modals\n","import React from 'react'\nimport classnames from 'classnames'\nimport useStore from '../../hooks/useStore'\nimport t from '../../utils/i18n'\nimport {gaEvent} from '../../utils'\n\nimport styles from './FixedButtons.module.scss'\n\ntype Props = {\n playing: boolean\n}\n\nfunction FixedButtons({ playing }: Props) {\n const setState = useStore(state => state.setState)\n const skipTutorial = useStore(state => state.skipTutorial)\n\n const email = t('hello@redflags.fun')\n \n function handleOpenTutorial() {\n setState({skipTutorial: false})\n gaEvent('tutorial_open')\n }\n\n return (\n
\n {playing && skipTutorial && (\n \n {t('Show tutorial')}\n \n )}\n gaEvent('mailing_intent')}\n className={classnames(styles.button, styles.email)}>\n {email}\n \n
\n )\n}\n\nexport default FixedButtons\n","import React, {useEffect} from 'react'\nimport classnames from 'classnames'\nimport useStore from '../../hooks/useStore'\nimport {useDebounceFn} from '@umijs/hooks'\nimport t from '../../utils/i18n'\nimport styles from './Toast.module.scss'\n\nfunction Toast() {\n const message = useStore(state => state.toastMessage)\n const setState = useStore(state => state.setState)\n\n const {run: hideToastAfterDelay} = useDebounceFn(() => {\n setState({toastMessage: ''})\n }, 3000);\n \n useEffect(hideToastAfterDelay, [message])\n \n return (\n
\n

{t(message)}

\n
\n )\n}\n\nexport default Toast\n","import React from 'react'\nimport {useSubscription} from '@apollo/react-hooks'\n\nimport Board from './Board'\nimport Modals from './Modals'\nimport FixedButtons from './components/FixedButtons'\nimport Toast from './components/Toast'\nimport useStore from './hooks/useStore'\n\nimport {ON_ROOM_STATE_CHANGE} from './graphql'\nimport {RoomType} from './types'\n\nfunction App() {\n const roomId = useStore(state => state.roomId)\n const lang = useStore(state => state.lang)\n const setState = useStore(state => state.setState)\n\n const {data, error} = useSubscription<{roomStateChanged?: RoomType}>(\n ON_ROOM_STATE_CHANGE,\n {skip: !roomId, variables: {id: roomId, lang}}\n )\n\n if (error) {\n if (error.message.includes('Player not in room')) {\n setState({\n roomId: '',\n toastMessage: 'You left/got kicked of the room'\n })\n }\n if (error.message.includes('Room not found')) {\n setState({\n roomId: '',\n toastMessage: 'The room does no longer exist'\n })\n }\n return null\n }\n\n return (\n \n \n \n \n \n \n )\n}\n\nexport default App","\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport {ApolloProvider} from '@apollo/react-hooks'\nimport {ApolloClient} from 'apollo-client';\nimport {InMemoryCache} from 'apollo-cache-inmemory';\nimport {HttpLink} from 'apollo-link-http';\nimport {onError} from 'apollo-link-error';\nimport {ApolloLink, split} from 'apollo-link';\nimport {WebSocketLink} from 'apollo-link-ws';\nimport {getMainDefinition} from 'apollo-utilities';\nimport {setContext} from 'apollo-link-context';\nimport {getFromLocalStorage} from './hooks/useStore'\n\nimport App from './App';\n\nconst uuid = getFromLocalStorage('uuid')\n\nconst httpLink = new HttpLink({\n uri: process.env.REACT_APP_GRAPHQL_HTTP_ENDPOINT || 'http://localhost:4000'\n});\n\nconst authLink = setContext((_, {headers}: {headers: any}) => {\n return {headers: {...headers, uuid: uuid}}\n});\n\nconst wsLink = new WebSocketLink({\n uri: process.env.REACT_APP_GRAPHQL_WS_ENDPOINT || 'ws://localhost:4000',\n options: {\n reconnect: true,\n connectionParams: {uuid: uuid}\n }\n});\n\nconst link = split(\n ({query}) => {\n const definition = getMainDefinition(query);\n return (\n definition.kind === 'OperationDefinition' &&\n definition.operation === 'subscription'\n );\n },\n wsLink,\n authLink.concat(httpLink),\n);\n\nconst client = new ApolloClient({\n link: ApolloLink.from([\n onError(({graphQLErrors, networkError}) => {\n if (graphQLErrors)\n graphQLErrors.forEach(({ message, locations, path }) =>\n console.error(\n `[GraphQL error]: Message: ${JSON.stringify(message)}, Location: ${locations}, Path: ${path}`,\n ),\n );\n if (networkError) console.error(`[Network error]: ${JSON.stringify(networkError)}`);\n }),\n link\n ]),\n cache: new InMemoryCache()\n});\n\n// @ts-ignore\nwindow.__APOLLO_CLIENT__ = client\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root'),\n)\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"Board_wrapper__P95qj\",\"board\":\"Board_board__3Kbuq\",\"flipped\":\"Board_flipped__1ufcx\",\"playersContainer\":\"Board_playersContainer__4prrw\",\"tip\":\"Board_tip__340FV\",\"key\":\"Board_key__2JEv2\",\"playersGroup\":\"Board_playersGroup__1d7Yz\",\"upper\":\"Board_upper___1HUA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"PlayerStatus_container__3erbz\",\"crown\":\"PlayerStatus_crown__1afa0\",\"active\":\"PlayerStatus_active__2Bdos\",\"actions\":\"PlayerStatus_actions__2yYTp\",\"kick\":\"PlayerStatus_kick__2OD6G\",\"accept\":\"PlayerStatus_accept__ZaLSa\",\"reject\":\"PlayerStatus_reject__2pEd7\",\"score\":\"PlayerStatus_score__1mK0M\",\"tooltipConfirm\":\"PlayerStatus_tooltipConfirm__2SM7U\",\"confirmBar\":\"PlayerStatus_confirmBar__3tn-h\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"LobbyModal_title__2lD6_\",\"customizationWrapper\":\"LobbyModal_customizationWrapper__1l5CS\",\"codeContainer\":\"LobbyModal_codeContainer__3q5wR\",\"full\":\"LobbyModal_full__zZBlJ\",\"code\":\"LobbyModal_code__p0wco\",\"copy\":\"LobbyModal_copy__BI1ql\",\"playerList\":\"LobbyModal_playerList__3DiOR\",\"loader\":\"LobbyModal_loader__3rOEo\",\"message\":\"LobbyModal_message__1W2-A\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Info_container__1xuGC\",\"color\":\"Info_color__J-f0s\",\"disconnected\":\"Info_disconnected__2kgfd\",\"pending\":\"Info_pending__to3GX\",\"nickname\":\"Info_nickname__mCjie\",\"me\":\"Info_me__1OxEi\",\"itsTurn\":\"Info_itsTurn__2_GzN\",\"isMaster\":\"Info_isMaster__1bw34\",\"disconnectedIcon\":\"Info_disconnectedIcon__1RP2r\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dimmer\":\"Modal_dimmer__2JLj9\",\"container\":\"Modal_container__3Wm3u\",\"withHeader\":\"Modal_withHeader__3VIyz\",\"header\":\"Modal_header__3jdKb\",\"headerContent\":\"Modal_headerContent__1tQpp\",\"backButton\":\"Modal_backButton__2097B\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"Button_button__2Lf63\",\"loading\":\"Button_loading__2nORI\",\"confirming\":\"Button_confirming__1HlcH\",\"confirmBar\":\"Button_confirmBar__rXyrN\",\"small\":\"Button_small__1WqE1\",\"wide\":\"Button_wide__1IPLq\",\"secondary\":\"Button_secondary__1gv5E\",\"disabled\":\"Button_disabled__1f6YP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Language_container__1nU11\",\"popup\":\"Language_popup__3uB7x\",\"bubble\":\"Language_bubble__2VWIw\",\"inList\":\"Language_inList__2dGDl\",\"backdrop\":\"Language_backdrop__2rkdj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ColorPicker_container__1PEWr\",\"popup\":\"ColorPicker_popup__261Op\",\"backdrop\":\"ColorPicker_backdrop__3MlrG\",\"dot\":\"ColorPicker_dot__PouXx\",\"active\":\"ColorPicker_active__1Bdsh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"FixedButtons_container__OK8MN\",\"button\":\"FixedButtons_button__2w0f2\",\"email\":\"FixedButtons_email__1Ba3I\",\"tutorial\":\"FixedButtons_tutorial__3g2nv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Tooltip_container__1eUxx\",\"block\":\"Tooltip_block__3mkJd\",\"tooltip\":\"Tooltip_tooltip__1K7qB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"input\":\"Nickname_input__rrv_l\",\"ghost\":\"Nickname_ghost__KCVvX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"RoomModal_container__273ut\",\"centeredText\":\"RoomModal_centeredText__2hvAs\",\"code\":\"RoomModal_code__3Z3lm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Drawer_container__M_Bqz\",\"header\":\"Drawer_header__25sVf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Toast_container__3lgAt\",\"message\":\"Toast_message__2y57w\",\"shown\":\"Toast_shown__2tuKK\",\"showToast\":\"Toast_showToast__1zZej\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pointer\":\"Cursor_pointer__3Atqh\",\"cardContainer\":\"Cursor_cardContainer__20Rik\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"TutorialModal_title__20DcB\",\"container\":\"TutorialModal_container__3sUPI\",\"steps\":\"TutorialModal_steps__207qu\",\"step\":\"TutorialModal_step__Bizk0\",\"image\":\"TutorialModal_image__2IIQi\",\"number\":\"TutorialModal_number__1m2Gt\",\"bottom\":\"TutorialModal_bottom__10drY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Customization_container__2TvWa\"};"],"sourceRoot":""}