{"version":3,"sources":["logo192.png","types.js","utils.js","champions/ChampionCard.js","Builder/ChampionPicker.js","SearchInput.js","champions/ChampionFilter.js","champions/ChampionList.js","champions/Champions.js","deckCode.js","Builder/builder.js","Cards/CardFilter.js","Cards/CardCard.js","Cards/CardList.js","Cards/Cards.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","SearchDataType","PropTypes","shape","i18n","string","en","fr","CardType","number","color","type","movement","range","min","max","direct","bool","aoe","strength","defense","name","text","arrayOf","metadata","control","attack","deckManagement","withoutMove","reaction","textDamages","buff","textMovement","selfHeal","heal","antiDefense","search","ChampionMetadataType","damage","id","hp","levelUp","total","red","blue","yellow","searchData","reactionColor","cards","getTranslatedTextFromObject","obj","lang","ChampionCard","props","handleCardClick","bind","handleClearClick","this","onChampionClick","champion","event","preventDefault","stopPropagation","onChampionClearClick","tableColor","className","active","onClick","aria-label","aria-hidden","title","language","shortVersion","t","Component","withTranslation","EmptySlot","size","Slot","handlePickSlot","handleClearSlot","cardRect","target","closest","getBoundingClientRect","left","padding","slot","updateSlide","right","window","innerWidth","document","documentElement","clientWidth","onPickSlot","team","onClearSlot","ChampionPicker","state","Array","keys","slide","setState","champions","style","transform","map","activeTeam","activeSlot","key","nextProps","SearchInput","useTranslation","placeholder","value","onChange","onInputChange","onClearSearchInput","ChampionFilter","filter","Trans","checked","htmlFor","zeroDef","oneDef","twoDef","english","french","ChampionList","Champions","handleInputChange","handleSearchInputClear","includes","defWanted","push","langWanted","str","searches","normalize","replace","toLowerCase","trim","split","Object","values","data","filteredChapionId","base32","require","idToString","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","stringToId","entries","reduce","acc","entry","parseTeam","arr","member","console","error","convertTeamFromArray","teams","slice","buildDeckCode","draftMode","stringify","result","parseInt","concat","sort","convertTeamToInt","pad","DEFAULT_STATE","teamSize","deckCode","copyAlert","timeout","resizeArray","defaultValue","length","Builder","assign","match","params","parsedData","code","decodedDeckCode","parse","out","loose","parseDeckCode","formatParsedData","handleDraftModeChange","handleChampionClick","mapTeamsToChampionIds","resizeTeams","buildNewDeckCodeAndUpdateHistory","onCopyToClipboard","onCloseCopyAlert","findNextAvailableSlot","apply","results","formattedTeams","history","clearTimeout","setTimeout","slotPerTeam","teamIndexes","slotIndexes","slotIdx","teamIdx","onCopy","location","href","role","CardFilter","skill","onSelectAllChampions","onDeselectAllChampions","CardCard","card","cardColor","championName","idx","CardList","CARDS","CHAMPIONS","normalizeString","Cards","selectAllChampionsFilters","deselectAllChampionsFilters","newState","App","changeLanguage","to","src","logo","width","height","alt","data-toggle","data-target","aria-controls","aria-expanded","activeClassName","exact","path","component","Boolean","hostname","languageDetector","i18nLanguageDetector","addDetector","cacheUserLanguage","lookup","use","initReactI18next","init","resources","translation","English","French","fallbackLng","supportedLngs","interpolation","escapeValue","detection","order","lookupLocalStorage","caches","excludeCacheFor","htmlTag","ReactDOM","render","StrictMode","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","message"],"mappings":"0k1LAAAA,EAAOC,QAAU,IAA0B,qC,wnGCE9BC,EAAiBC,IAAUC,MAAM,CAC5CC,KAAMF,IAAUG,OAChBC,GAAIJ,IAAUG,OACdE,GAAIL,IAAUG,SAGHG,EAAWN,IAAUC,MAAM,CACtCM,OAAQP,IAAUG,OAClBK,MAAOR,IAAUG,OACjBM,KAAMT,IAAUG,OAChBO,SAAUV,IAAUO,OACpBI,MAAOX,IAAUC,MAAM,CACrBW,IAAKZ,IAAUO,OACfM,IAAKb,IAAUO,OACfO,OAAQd,IAAUe,OAEpBC,IAAKhB,IAAUO,OACfU,SAAUjB,IAAUO,OACpBW,QAASlB,IAAUO,OACnBY,KAAMnB,IAAUC,MAAM,CACpBG,GAAIJ,IAAUG,OACdE,GAAIL,IAAUG,SAEhBiB,KAAMpB,IAAUC,MAAM,CACpBG,GAAIJ,IAAUqB,QAAQrB,IAAUG,QAChCE,GAAIL,IAAUqB,QAAQrB,IAAUG,UAElCmB,SAAUtB,IAAUC,MAAM,CACxBsB,QAASvB,IAAUe,KACnBS,OAAQxB,IAAUe,KAClBU,eAAgBzB,IAAUe,KAC1BW,YAAa1B,IAAUe,KACvBY,SAAU3B,IAAUe,KACpBa,YAAa5B,IAAUe,KACvBc,KAAM7B,IAAUe,KAChBG,QAASlB,IAAUe,KACnBe,aAAc9B,IAAUe,KACxBgB,SAAU/B,IAAUe,KACpBiB,KAAMhC,IAAUe,KAChBkB,YAAajC,IAAUe,KACvBmB,OAAQnC,MAINoC,EAAuBnC,IAAUC,MAAM,CAC3CsB,QAASvB,IAAUO,OACnBiB,OAAQxB,IAAUO,OAClBkB,eAAgBzB,IAAUO,OAC1BmB,YAAa1B,IAAUO,OACvBqB,YAAa5B,IAAUO,OACvBsB,KAAM7B,IAAUO,OAChBuB,aAAc9B,IAAUO,OACxB0B,YAAajC,IAAUO,OACvBwB,SAAU/B,IAAUO,OACpByB,KAAMhC,IAAUO,OAChBoB,SAAU3B,IAAUC,MAAM,CACxBS,SAAUV,IAAUO,OACpB6B,OAAQpC,IAAUO,OAClBgB,QAASvB,IAAUO,OACnBW,QAASlB,IAAUO,OACnByB,KAAMhC,IAAUO,W,GAIQP,IAAUC,MAAM,CAC1CoC,GAAIrC,IAAUG,OACdmC,GAAItC,IAAUO,OACdW,QAASlB,IAAUO,OACnBY,KAAMnB,IAAUC,MAAM,CACpBG,GAAIJ,IAAUG,OACdE,GAAIL,IAAUG,SAEhBoC,QAASvC,IAAUC,MAAM,CACvBqC,GAAItC,IAAUO,OACdW,QAASlB,IAAUO,OACnBH,GAAIJ,IAAUG,OACdE,GAAIL,IAAUG,SAEhBmB,SAAUtB,IAAUC,MAAM,CACxBuC,MAAOL,EACPM,IAAKN,EACLO,KAAMP,EACNQ,OAAQR,EACRS,WAAY7C,EACZ8C,cAAe7C,IAAUG,SAE3B2C,MAAO9C,IAAUqB,QAAQf,K,uGCxFpB,SAASyC,EAA4BC,EAAKC,GAC/C,OAAKA,GAASD,EAAIC,GAIXD,EAAIC,GAHFD,EAAI3C,G,ICOT6C,E,kDACJ,WAAYC,GAAQ,IAAD,8BACjB,cAAMA,IAEDC,gBAAkB,EAAKA,gBAAgBC,KAArB,gBACvB,EAAKC,iBAAmB,EAAKA,iBAAiBD,KAAtB,gBAJP,E,8DAQbE,KAAKJ,MAAMK,iBACbD,KAAKJ,MAAMK,gBAAgBD,KAAKJ,MAAMM,Y,uCAIzBC,GACfA,EAAMC,iBACND,EAAME,kBACFL,KAAKJ,MAAMU,sBACbN,KAAKJ,MAAMU,qBAAqBN,KAAKJ,MAAMM,Y,+BAK7C,IAAMA,EAAWF,KAAKJ,MAAMM,SAExBK,EAAU,gBAAYL,EAASnC,SAASuB,eAY5C,MAVwC,QAApCY,EAASnC,SAASuB,cACpBiB,EAAa,eAE8B,WAApCL,EAASnC,SAASuB,cACzBiB,EAAa,gBAE8B,SAApCL,EAASnC,SAASuB,gBACzBiB,EAAa,iBAIb,yBAAKC,UAAS,qBAAiBR,KAAKJ,MAAMa,QAAU,yBAA4BC,QAAUV,KAAKH,iBAC7F,yBAAKW,UAAU,aACZR,KAAKJ,MAAMU,sBACV,4BAAQpD,KAAK,SAASsD,UAAU,QAAQG,aAAW,aAAaD,QAAUV,KAAKD,kBAC7E,0BAAMa,cAAY,QAAlB,SAGJ,wBACEJ,UAAU,uCACVK,MAAQrB,EAA4BU,EAAStC,KAAMoC,KAAKJ,MAAMjD,KAAKmE,WACjEtB,EAA4BU,EAAStC,KAAMoC,KAAKJ,MAAMjD,KAAKmE,WAE/D,yBAAKN,UAAU,gCACb,kBAAC,IAAD,MADF,IACcN,EAASnB,GADvB,IAC4B,kBAAC,IAAD,MAD5B,IACyCmB,EAASvC,QAChD,kBAAC,IAAD,CAAa6C,UAAU,SACvB,kBAAC,IAAD,MAHF,IAGcN,EAASlB,QAAQD,GAH/B,IAGoC,kBAAC,IAAD,MAHpC,IAGiDmB,EAASlB,QAAQrB,UAEhEqC,KAAKJ,MAAMmB,cACX,uBACEP,UAAU,4BACVK,MAAQrB,EAA4BU,EAASlB,QAASgB,KAAKJ,MAAMjD,KAAKmE,WAEpEtB,EAA4BU,EAASlB,QAASgB,KAAKJ,MAAMjD,KAAKmE,WAGpE,2BAAON,UAAS,UAAKD,EAAL,gCACd,+BACA,4BACE,wBACEC,UAAU,YACVK,MAAQb,KAAKJ,MAAMoB,EAAE,sBAErB,kBAAC,IAAD,OAEF,wBACER,UAAU,YACVK,MAAQb,KAAKJ,MAAMoB,EAAE,oCAErB,kBAAC,IAAD,OAEF,wBACER,UAAU,YACVK,MAAQb,KAAKJ,MAAMoB,EAAE,wDAErB,kBAAC,IAAD,OAEF,wBACER,UAAU,YACVK,MAAQb,KAAKJ,MAAMoB,EAAE,oCAErB,kBAAC,IAAD,OACF,wBACER,UAAU,YACVK,MAAQb,KAAKJ,MAAMoB,EAAE,6BAErB,kBAAC,IAAD,OAEF,wBACER,UAAU,YACVK,MAAQb,KAAKJ,MAAMoB,EAAE,6BAErB,kBAAC,IAAD,OACF,wBACER,UAAU,YACVK,MAAQb,KAAKJ,MAAMoB,EAAE,iCAErB,kBAAC,IAAD,QAGJ,4BACE,wBAAIR,UAAU,aAAcN,EAASnC,SAASkB,MAAMhB,QACpD,wBAAIuC,UAAU,aAAcN,EAASnC,SAASkB,MAAMjB,SACpD,wBAAIwC,UAAU,aAAcN,EAASnC,SAASkB,MAAMf,gBACpD,wBAAIsC,UAAU,aAAcN,EAASnC,SAASkB,MAAMd,aACpD,wBAAIqC,UAAU,aAAcN,EAASnC,SAASkB,MAAMR,KAAOyB,EAASnC,SAASkB,MAAMT,UACnF,wBAAIgC,UAAU,aAAcN,EAASnC,SAASkB,MAAMX,MACpD,wBAAIkC,UAAU,aAAcN,EAASnC,SAASkB,MAAMP,sB,GAlHvCuC,aAoIZC,gBAAkBvB,GCpI3BwB,E,uKAEF,OACE,yBAAKX,UAAS,2BAAuBR,KAAKJ,MAAMa,QAAU,0BACxD,yBAAKD,UAAU,gFACb,kBAAC,IAAD,CAAYY,KAAK,KAAKnE,MAAQ+C,KAAKJ,MAAMa,OAAS,UAAY,oB,GALhDQ,aAYlBI,E,kDACJ,WAAYzB,GAAQ,IAAD,8BACjB,cAAMA,IAED0B,eAAiB,EAAKA,eAAexB,KAApB,gBACtB,EAAKyB,gBAAkB,EAAKA,gBAAgBzB,KAArB,gBAJN,E,2DAOJK,GACb,IAAMqB,EAAWrB,EAAMsB,OAAOC,QAAQ,SAASC,wBAC/C,GAAIH,EAASI,KAAO,EAAG,CACrB,IAAMC,EAAU7B,KAAKJ,MAAMkC,KAAO,EAAI,GAAK,GAC3C9B,KAAKJ,MAAMmC,aAAaP,EAASI,KAAOC,QAErC,GAAIL,EAASQ,OAASC,OAAOC,YAAcC,SAASC,gBAAgBC,aAAc,CACrF,IAAMR,EAAU7B,KAAKJ,MAAMkC,KAAO9B,KAAKJ,MAAMwB,KAAO,EAAI,GAAK,GAC7DpB,KAAKJ,MAAMmC,aAAaE,OAAOC,YAAcC,SAASC,gBAAgBC,aAAeb,EAASQ,MAAQH,QAE/F7B,KAAKJ,MAAMkC,KAAO,GAAKN,EAASI,KAAO,GAC9C5B,KAAKJ,MAAMmC,YAAYP,EAASI,KAAO,IAGvC5B,KAAKJ,MAAMkC,KAAO9B,KAAKJ,MAAMwB,KAAO,IACnCa,OAAOC,YAAcC,SAASC,gBAAgBC,aAAeb,EAASQ,MAAQ,IAE/EhC,KAAKJ,MAAMmC,aAAaE,OAAOC,YAAcC,SAASC,gBAAgBC,aAAeb,EAASQ,MAAQ,IAGxGhC,KAAKJ,MAAM0C,WAAWtC,KAAKJ,MAAM2C,KAAMvC,KAAKJ,MAAMkC,Q,wCAIlD9B,KAAKJ,MAAM4C,YAAYxC,KAAKJ,MAAM2C,KAAMvC,KAAKJ,MAAMkC,Q,+BAInD,OACE,yBAAKtB,UAAU,gCACb,yBAAKA,UAAU,cAAcE,QAAUV,KAAKsB,gBACxCtB,KAAKJ,MAAMM,SAEX,kBAAC,EAAD,CACEA,SAAWF,KAAKJ,MAAMM,SACtBO,OAAST,KAAKJ,MAAMa,OACpBM,cAAe,EACfT,qBAAuBN,KAAKuB,kBAL9B,kBAAC,EAAD,CAAWd,OAAST,KAAKJ,MAAMa,e,GAxCxBQ,aAsDEwB,E,kDACnB,WAAY7C,GAAQ,IAAD,8BACjB,cAAMA,IAED8C,MAAQ,CACXtF,MAAM,YAAKuF,MAAM,EAAK/C,MAAMwB,MAAMwB,QAClCC,MAAO,EACPzB,KAAMxB,EAAMwB,MAGd,EAAKW,YAAc,EAAKA,YAAYjC,KAAjB,gBATF,E,wDAwBP+C,GACV7C,KAAK8C,SAAS,CAAED,MAAOA,EAAQ7C,KAAK0C,MAAMG,U,+BAGlC,IAAD,OACDE,EAAY/C,KAAKJ,MAAMmD,UAE7B,OACE,yBAAKvC,UAAU,uBACb,yBACEA,UAAU,2EACVwC,MAAQ,CAAEC,UAAU,cAAD,OAAgBjD,KAAK0C,MAAMG,MAA3B,SAElB7C,KAAK0C,MAAMtF,MAAM8F,KAAI,SAACpB,GAAD,OACpB,kBAAC,EAAD,CACES,KAAO,EAAK3C,MAAM2C,KAClBT,KAAOA,EACPV,KAAO,EAAKxB,MAAMwB,KAClBX,OAAS,EAAKb,MAAM2C,OAAS,EAAK3C,MAAMuD,YAAc,EAAKvD,MAAMwD,aAAetB,EAChF5B,SAAW6C,EAAYA,EAAUjB,GAAQ,KACzCQ,WAAa,EAAK1C,MAAM0C,WACxBE,YAAc,EAAK5C,MAAM4C,YACzBT,YAAc,EAAKA,YACnBsB,IAAMvB,Y,gDAnCcwB,EAAWZ,GACzC,OAAIY,EAAUlC,OAASsB,EAAMtB,KACpB,CACLhE,MAAM,YAAKuF,MAAMW,EAAUlC,MAAMwB,QACjCC,MAAO,EACPzB,KAAMkC,EAAUlC,MAIb,S,GAtBiCH,a,gCCjC7BsC,MAnCf,SAAqB3D,GAAQ,IACnBoB,EAAMwC,cAANxC,EAER,OACE,yBAAKR,UAAU,OACb,yBAAKA,UAAU,UACb,yBAAKA,UAAU,oBACb,2BACEtD,KAAK,OACLsD,UAAU,eACViD,YAAW,UAAMzC,EAAE,WAAR,OACXpD,KAAK,SACL8F,MAAQ9D,EAAMjB,OACdgF,SAAW/D,EAAMgE,gBAEnB,yBAAKpD,UAAU,wCACb,4BAAQtD,KAAK,SAASsD,UAAU,QAAQG,aAAW,QAAQD,QAAUd,EAAMiE,oBACzE,0BAAMjD,cAAY,QAAlB,UAGJ,yBAAKJ,UAAU,sBACb,0BAAMA,UAAU,oBAAmB,kBAAC,IAAD,YCrB1BsD,E,uKAEjB,OACE,6BACE,kBAAC,EAAD,CACEnF,OAASqB,KAAKJ,MAAMmE,OAAOpF,OAC3BiF,cAAgB5D,KAAKJ,MAAMgE,cAC3BC,mBAAqB7D,KAAKJ,MAAMiE,qBAGlC,yBAAKrD,UAAU,mBACb,yBAAKA,UAAU,SACb,+BAAO,2BAAG,kBAACwD,EAAA,EAAD,sBACV,yBAAKxD,UAAU,uFACb,yBAAKA,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,MACHlB,KAAK,MACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO7E,IAC5ByE,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,OAAM,kBAACF,EAAA,EAAD,gBAEpD,yBAAKxD,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,SACHlB,KAAK,SACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO3E,OAC5BuE,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,UAAS,kBAACF,EAAA,EAAD,gBAEvD,yBAAKxD,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,OACHlB,KAAK,OACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO5E,KAC5BwE,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,QAAO,kBAACF,EAAA,EAAD,kBAIzD,yBAAKxD,UAAU,SACb,+BAAO,2BAAG,kBAACwD,EAAA,EAAD,qBACV,yBAAKxD,UAAU,uFACb,yBAAKA,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,UACHlB,KAAK,UACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOI,QAC5BR,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,WAA5C,MAEF,yBAAK1D,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,SACHlB,KAAK,SACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOK,OAC5BT,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,UAA5C,MAEF,yBAAK1D,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,SACHlB,KAAK,SACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOM,OAC5BV,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,UAA5C,QAIN,yBAAK1D,UAAU,SACb,+BAAO,2BAAG,kBAACwD,EAAA,EAAD,kBACV,yBAAKxD,UAAU,uFACb,yBAAKA,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,UACHlB,KAAK,UACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOO,QAC5BX,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,WAA5C,YAEF,yBAAK1D,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,SACHlB,KAAK,SACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOQ,OAC5BZ,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,UAA5C,wB,GA9G4BjD,aCAvBuD,E,uKACT,IAAD,OACP,OACE,yBAAKhE,UAAU,OACZR,KAAKJ,MAAMmD,UAAUG,KAAI,SAAChD,GAAD,OACxB,yBAAKM,UAAU,oEAAoE6C,IAAMnD,EAASpB,IAChG,kBAAC,EAAD,CAAcoB,SAAWA,EAAWD,gBAAkB,EAAKL,MAAMK,2B,GANnCgB,a,ICWpCwD,E,kDACJ,WAAY7E,GAAQ,IAAD,8BACjB,cAAMA,IAED8C,MAAQ,CACXxD,KAAK,EACLE,QAAQ,EACRD,MAAM,EACNgF,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,SAAS,EACTC,QAAQ,EACR5F,OAAQ,IAGV,EAAK+F,kBAAoB,EAAKA,kBAAkB5E,KAAvB,gBACzB,EAAK6E,uBAAyB,EAAKA,uBAAuB7E,KAA5B,gBAhBb,E,8DAmBDK,GAChB,IAAMsB,EAAStB,EAAMsB,OACfiC,EAAQ,CACZ,MAAO,OAAQ,SAAU,UAAW,SAAU,SAAU,UAAW,UACnEkB,SAASnD,EAAO7D,MAAQ6D,EAAOwC,QAAUxC,EAAOiC,MAC5C9F,EAAO6D,EAAO7D,KAEpBoC,KAAK8C,SAAL,eACGlF,EAAO8F,M,+CAKV1D,KAAK8C,SAAS,CAAEnE,OAAQ,O,+BAGhB,IAAD,OACDkG,EAAY,GACd7E,KAAK0C,MAAMyB,SACbU,EAAUC,KAAK,GAEb9E,KAAK0C,MAAM0B,QACbS,EAAUC,KAAK,GAEb9E,KAAK0C,MAAM2B,QACbQ,EAAUC,KAAK,GAGjB,IAAIC,EAAa,OACb/E,KAAK0C,MAAM4B,UAAYtE,KAAK0C,MAAM6B,OACpCQ,EAAa,MAEL/E,KAAK0C,MAAM4B,SAAWtE,KAAK0C,MAAM6B,SACzCQ,EAAa,MAGf,IAlEqBC,EAkEfC,GAlEeD,EAkEYhF,KAAK0C,MAAM/D,OAjEvCqG,EACJE,UAAU,OACVC,QAAQ,mBAAoB,IAC5BA,QAAQ,8BAA+B,KACvCA,QAAQ,UAAW,KACnBC,cACAC,QA2DmDC,MAAM,KAEpDvC,EAAYwC,OAAOC,OAAOC,GAAM1B,QAAO,SAAC7D,GAAc,IAAD,gBACpC+E,GADoC,IACzD,2BAA+B,CAAC,IAArBtG,EAAoB,QAC7B,IAAKuB,EAASnC,SAASsB,WAAW0F,GAAYH,SAASjG,GACrD,OAAO,EAGT,KACG,EAAK+D,MAAMxD,KAAOgB,EAASnC,SAASuB,cAAcsF,SAAS,QAC3D,EAAKlC,MAAMvD,MAAQe,EAASnC,SAASuB,cAAcsF,SAAS,SAC5D,EAAKlC,MAAMtD,QAAUc,EAASnC,SAASuB,cAAcsF,SAAS,WAE/D,OAAO,EAGT,IAAKC,EAAUD,SAAS1E,EAASvC,SAC/B,OAAO,EAGT,GAAI,EAAKiC,MAAM8F,mBAAqB,EAAK9F,MAAM8F,kBAAkBd,SAAS1E,EAASpB,IACjF,OAAO,GAnB8C,8BAuBzD,OAAO,KAGT,OACE,yBAAK0B,UAAU,kBACb,yBAAKA,UAAU,iCACb,yBAAKA,UAAU,aACb,yBAAKA,UAAU,OACb,yBAAKA,UAAU,UACb,kBAAC,IAAD,MADF,OAEE,0BAAMA,UAAU,WAAYR,KAAKJ,MAAMoB,EAAE,uBAE3C,yBAAKR,UAAU,UACb,kBAAC,IAAD,MADF,OAEE,0BAAMA,UAAU,WAAYR,KAAKJ,MAAMoB,EAAE,qCAE3C,yBAAKR,UAAU,UACb,kBAAC,IAAD,MADF,OAEE,0BAAMA,UAAU,WAAYR,KAAKJ,MAAMoB,EAAE,yDAE3C,yBAAKR,UAAU,UACb,kBAAC,IAAD,MADF,OAEE,0BAAMA,UAAU,WAAYR,KAAKJ,MAAMoB,EAAE,qCAE3C,yBAAKR,UAAU,UACb,kBAAC,IAAD,MADF,OAEE,0BAAMA,UAAU,WAAYR,KAAKJ,MAAMoB,EAAE,8BAE3C,yBAAKR,UAAU,UACb,kBAAC,IAAD,MADF,OAEE,0BAAMA,UAAU,WAAYR,KAAKJ,MAAMoB,EAAE,8BAE3C,yBAAKR,UAAU,UACb,kBAAC,IAAD,MADF,OAEE,0BAAMA,UAAU,WAAYR,KAAKJ,MAAMoB,EAAE,qCAKjD,kBAAC,EAAD,CACE+C,OAAS/D,KAAK0C,MACdkB,cAAgB5D,KAAK0E,kBACrBb,mBAAqB7D,KAAK2E,yBAE5B,kBAAC,EAAD,CAAc5B,UAAYA,EAAY9C,gBAAkBD,KAAKJ,MAAMK,uB,GA7HnDgB,aAmITC,gBAAkBuD,G,SCrJzBkB,GAAWC,EAAQ,IAAnBD,OASFE,GAAa,CACjBC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,EAAG,MACHC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,OAGAC,GAAa/B,OAAOgC,QAAQ1B,IAAY2B,QAAO,SAACC,EAAKC,GAAW,IAAD,eAC9CA,EAD8C,GAC5DrE,EAD4D,KAGnE,OADAoE,EAFmE,MAEtDpE,EACNoE,IACN,IA4BH,SAASE,GAAUC,GACjB,IADsB,EAChBrF,EAAO,GADS,cAGLqF,GAHK,IAGtB,2BAAsB,CAAC,IAAZ9I,EAAW,QACd+I,EAAShC,GAAW/G,GAErB+I,EAKLtF,EAAKuC,KAAK+C,GAJRC,QAAQC,MAAR,iBAAwBjJ,EAAxB,gBAPkB,8BActB,OAAOyD,EAUT,SAASyF,GAAqBJ,GAC5B,IAAMK,EAAQ,GAYd,OARkB,IAFAL,EAAI,IAGpBK,EAAMnD,KAAK6C,GAAUC,EAAIM,MAAM,EAAG,KAClCD,EAAMnD,KAAK6C,GAAUC,EAAIM,MAAM,MAG/BD,EAAMnD,KAAK6C,GAAUC,EAAIM,MAAM,KAG1BD,EAYF,SAASE,GAAcC,EAAWH,GACvC,OAAOtC,GAAO0C,UAnEhB,SAA0BD,EAAWH,GACnC,IAD0C,EACtCK,EAAS,CAAC,EAAGC,SAASH,IADgB,cAGvBH,GAHuB,IAG1C,2BAA0B,CAAC,IAAhB1F,EAAe,QACxB+F,EAASA,EAAOE,OAAOjG,EAAKW,KAAI,SAAC2E,GAAD,OAAYP,GAAWO,MAASY,SAJxB,8BAO1C,OAAOH,EA4DiBI,CAAiBN,EAAWH,GAAQ,CAAEU,KAAK,IC7GrE,IAAMC,GAAgB,CACpBR,UAAW,IACXS,SAAU,EACV1F,WAAY,EACZC,WAAY,EACZ6E,MAAO,CAAC,CAAC,KAAM,KAAM,OACrBa,SAAU,KACVC,WAAW,EACXC,QAAS,MAGX,SAASC,GAAYrB,EAAKxG,EAAM8H,GAC9B,KAAM9H,EAAOwG,EAAIuB,QACfvB,EAAI9C,KAAKoE,GAEXtB,EAAIuB,OAAS/H,E,OAkBMgI,G,kDACnB,WAAYxJ,GAAQ,IAAD,sBACjB,cAAMA,GAEN,IAAI8C,EAAQ6C,OAAO8D,OAAO,GAAIT,IAE9B,GAAIhJ,EAAM0J,MAAMC,OAAOT,SAAU,CAC/B,IAAMU,ED+EL,SAAuBC,GAC5B,IAAMC,EAAkB/D,GAAOgE,MAAMF,EAAM,CAAEG,IAAKjH,MAAOkH,OAAO,IAChE,MAAO,CACLzB,UAAWsB,EAAgB,GAC3BzB,MAAOD,GAAqB0B,ICnFPI,CAAclK,EAAM0J,MAAMC,OAAOT,UACpDpG,EAAQ6C,OAAO8D,OACb3G,EAxBR,SAA0B8G,GACxB,MAAO,CACLpB,UAAU,GAAD,OAAKoB,EAAWpB,WACzBH,MAAOuB,EAAWvB,MAAM/E,KAAI,SAACX,GAAD,OAAUA,EAAKW,KAAI,SAAC2E,GAC9C,IAAM3H,EAAWuF,EAAKoC,GAEtB,OAAK3H,GACI,YAkBP6J,CAAiBP,GACjB,CACEV,SAAUlJ,EAAM0J,MAAMC,OAAOT,SAC7BD,SAAmC,IAAzBW,EAAWpB,UAAkB,EAAI,IAZhC,OAgBjB,EAAK1F,MAAQA,EACb,EAAKsH,sBAAwB,EAAKA,sBAAsBlK,KAA3B,gBAC7B,EAAKmK,oBAAsB,EAAKA,oBAAoBnK,KAAzB,gBAC3B,EAAKyB,gBAAkB,EAAKA,gBAAgBzB,KAArB,gBACvB,EAAKwB,eAAiB,EAAKA,eAAexB,KAApB,gBACtB,EAAKoK,sBAAwB,EAAKA,sBAAsBpK,KAA3B,gBAC7B,EAAKqK,YAAc,EAAKA,YAAYrK,KAAjB,gBACnB,EAAKsK,iCAAmC,EAAKA,iCAAiCtK,KAAtC,gBACxC,EAAKuK,kBAAoB,EAAKA,kBAAkBvK,KAAvB,gBACzB,EAAKwK,iBAAmB,EAAKA,iBAAiBxK,KAAtB,gBACxB,EAAKyK,sBAAwB,EAAKA,sBAAsBzK,KAA3B,gBA1BZ,E,oEAgCjB,MAFoB,GAAG0I,OAAOgC,MAAM,GAAIxK,KAAK0C,MAAMuF,OAGhDlE,QAAO,SAAC7D,GAAD,OAA2B,OAAbA,KACrBgD,KAAI,SAAChD,GAAD,OAAcA,EAASpB,Q,kCAGpBmJ,EAAOG,GACjB,IAAMqC,EAAUxC,EAAM/E,KAAI,SAACX,GAAD,mBAAcA,MAClCsG,EAAyB,MAAdT,EAAoB,EAAI,EAEzCa,GAAYwB,EAAuB,MAAdrC,EAAoB,EAAI,EAAG,CAAC,KAAM,KAAM,KAAM,KAAM,OAJ7C,oBAMTqC,GANS,IAM5B,2BAA4B,CAC1BxB,GAD0B,QACRJ,EAAU,OAPF,8BAU5B,OAAO4B,I,uDAGwBrC,EAAWH,GAC1C,IAAMyC,EAAiBzC,EAAM/E,KAAI,SAACX,GAAD,OAAUA,EAAKW,KAAI,SAAC2E,GAAD,OAAYA,EAASA,EAAO/I,GAAK,WAE/EgK,EAC4D,IAF7C,GAAGN,OAAOgC,MAAM,GAAIE,GAE1B3G,QAAO,SAAC7D,GAAD,OAA2B,OAAbA,KAAmBiJ,OACnDhB,GAAcI,SAASH,GAAYsC,GACnC,KASJ,OAPI5B,GAAYA,IAAa9I,KAAK0C,MAAMoG,SACtC9I,KAAKJ,MAAM+K,QAAQ7F,KAAnB,mBAAoCgE,KAE5BA,GAAY9I,KAAK0C,MAAMoG,UAC/B9I,KAAKJ,MAAM+K,QAAQ7F,KAAnB,YAGKgE,I,0CAGY,IAAD,OACd9I,KAAK0C,MAAMsG,SACb/G,OAAO2I,aAAa5K,KAAK0C,MAAMsG,SAGjC,IAAMA,EAAU6B,YAAW,WACzB,EAAK/H,SAAS,CAAEiG,WAAW,EAAOC,QAAS,SAC1C,KAEHhJ,KAAK8C,SAAS,CAAEiG,WAAW,EAAMC,c,yCAI7BhJ,KAAK0C,MAAMsG,SACb/G,OAAO2I,aAAa5K,KAAK0C,MAAMsG,SAGjChJ,KAAK8C,SAAS,CAAEiG,WAAW,EAAOC,QAAS,S,4CAGvB7I,GACpB,IAAMiI,EAAYjI,EAAMsB,OAAOiC,MACzBmF,EAAyB,MAAdT,EAAoB,EAAI,EACnCH,EAAQjI,KAAKmK,YAAYnK,KAAK0C,MAAMuF,MAAOG,GAEjDpI,KAAK8C,SAAS,CACZsF,YACAS,WACAZ,QACAa,SAAU9I,KAAKoK,iCAAiChC,EAAWH,O,4CAIzCA,GACpB,IAD2B,EACrB6C,EAAW,YAAOnI,MAAM3C,KAAK0C,MAAMmG,UAAUjG,QAE7CmI,EAAW,YAAOpI,MAAMsF,EAAMkB,QAAQvG,QACtCoI,EAAW,sBACZF,EAAY5C,MAAMlI,KAAK0C,MAAMU,WAAa,IAD9B,YAEZ0H,EAAY5C,MAAM,EAAGlI,KAAK0C,MAAMU,cANV,cASL4H,GATK,IAS3B,2BAAmC,CAAC,IAAzBC,EAAwB,QACjC,IAAKhD,EAAMjI,KAAK0C,MAAMS,YAAY8H,GAChC,MAAO,CACL9H,WAAYnD,KAAK0C,MAAMS,WACvBC,WAAY6H,IAbS,kDAkBLF,GAlBK,IAkB3B,2BAAmC,CAAC,IAAD,EAAxBG,EAAwB,sBACXJ,GADW,IACjC,2BAAmC,CAAC,IAAzBG,EAAwB,QACjC,IAAKhD,EAAMiD,GAASD,GAClB,MAAO,CACL9H,WAAY+H,EACZ9H,WAAY6H,IALe,gCAlBR,8BA8B3B,MAAO,CACL9H,WAAYnD,KAAK0C,MAAMS,WACvBC,WAAYpD,KAAK0C,MAAMU,c,0CAIPlD,GAClB,IAAMuK,EAAUzK,KAAK0C,MAAMuF,MAAM/E,KAAI,SAACX,GAAD,mBAAcA,MACnDkI,EAAQzK,KAAK0C,MAAMS,YAAYnD,KAAK0C,MAAMU,YAAclD,EAExDF,KAAK8C,SAAL,aACEmF,MAAOwC,EACP3B,SAAU9I,KAAKoK,iCAAiCpK,KAAK0C,MAAM0F,UAAWqC,IACnEzK,KAAKuK,sBAAsBE,O,qCAInBlI,EAAMT,GACnB9B,KAAK8C,SAAS,CAAEK,WAAYZ,EAAMa,WAAYtB,M,sCAGhCS,EAAMT,GACpB,IAAM2I,EAAUzK,KAAK0C,MAAMuF,MAAM/E,KAAI,SAACX,GAAD,mBAAcA,MACnDkI,EAAQlI,GAAMT,GAAQ,KAEtB9B,KAAK8C,SAAL,aACEmF,MAAOwC,EACP3B,SAAU9I,KAAKoK,iCAAiCpK,KAAK0C,MAAM0F,UAAWqC,IAClEA,EAAQzK,KAAK0C,MAAMS,YAAYnD,KAAK0C,MAAMU,YAAc,CAAED,WAAYZ,EAAMa,WAAYtB,GAAS,O,+BAKvG,OACE,yBAAKtB,UAAU,wBACb,yBAAKA,UAAU,mBACb,yBAAKA,UAAU,UACb,+BAAO,6CACP,yBAAKA,UAAU,uFACb,yBAAKA,UAAU,gCACb,+BACE,2BACEtD,KAAK,QACLU,KAAK,YACL8F,MAAM,IACNO,QAAmC,MAAzBjE,KAAK0C,MAAM0F,UACrB5H,UAAU,mBACVmD,SAAW3D,KAAKgK,wBAElB,kBAAChG,EAAA,EAAD,kBAGJ,yBAAKxD,UAAU,gCACb,+BACE,2BACEtD,KAAK,QACLU,KAAK,YACL8F,MAAM,IACNO,QAAmC,MAAzBjE,KAAK0C,MAAM0F,UACrB5H,UAAU,mBACVmD,SAAW3D,KAAKgK,wBAElB,kBAAChG,EAAA,EAAD,+BAGJ,yBAAKxD,UAAU,gCACb,+BACE,2BACEtD,KAAK,QACLU,KAAK,YACL8F,MAAM,IACNO,QAAmC,MAAzBjE,KAAK0C,MAAM0F,UACrB5H,UAAU,mBACVmD,SAAW3D,KAAKgK,wBAElB,kBAAChG,EAAA,EAAD,yCAOV,yBAAKxD,UAAU,oBACb,kBAACwD,EAAA,EAAD,oBACEhE,KAAK0C,MAAMoG,SACT,gCAAYtI,UAAU,cACpB,2BAAKR,KAAK0C,MAAMoG,UAChB,kBAAC,kBAAD,CAAiBjL,KAAOmC,KAAK0C,MAAMoG,SAAWqC,OAASnL,KAAKqK,mBAC1D,4BAAQ7J,UAAU,6BAA4B,kBAACwD,EAAA,EAAD,yBAE/C,IACD,kBAAC,kBAAD,CAAiBnG,KAAOoE,OAAOmJ,SAASC,KAAOF,OAASnL,KAAKqK,mBAC3D,4BAAQ7J,UAAU,6BAA4B,kBAACwD,EAAA,EAAD,uBAE/ChE,KAAK0C,MAAMqG,WACV,yBAAKvI,UAAU,wCAAwC8K,KAAK,SAC1D,kBAACtH,EAAA,EAAD,yBACA,4BAAQ9G,KAAK,SAASsD,UAAU,QAAQG,aAAW,QAAQD,QAAUV,KAAKsK,kBACxE,0BAAM1J,cAAY,QAAlB,WAKN,6BAAK,2BAAG,kBAACoD,EAAA,EAAD,gEAGhB,6BAC4B,MAAzBhE,KAAK0C,MAAM0F,WAAqB,wBAAI5H,UAAU,eAAc,kBAACwD,EAAA,EAAD,qBAC7D,kBAAC,EAAD,CACEzB,KAAO,EACPnB,KAAOpB,KAAK0C,MAAMmG,SAClB9F,UAAY/C,KAAK0C,MAAMuF,MAAM,GAC7B9E,WAAanD,KAAK0C,MAAMS,WACxBC,WAAapD,KAAK0C,MAAMU,WACxBd,WAAatC,KAAKsB,eAClBkB,YAAcxC,KAAKuB,kBAEK,MAAzBvB,KAAK0C,MAAM0F,WAAqB,CAC/B,wBAAI5H,UAAU,cAAc6C,IAAI,aAAY,kBAACW,EAAA,EAAD,qBAC5C,kBAAC,EAAD,CACEzB,KAAO,EACPnB,KAAOpB,KAAK0C,MAAMmG,SAClB9F,UAAY/C,KAAK0C,MAAMuF,MAAM,GAC7B9E,WAAanD,KAAK0C,MAAMS,WACxBC,WAAapD,KAAK0C,MAAMU,WACxBd,WAAatC,KAAKsB,eAClBkB,YAAcxC,KAAKuB,gBACnB8B,IAAI,iBAKV,yBAAK7C,UAAU,QACb,kBAAC,EAAD,CACEP,gBAAkBD,KAAKiK,oBACvBvE,kBAAoB1F,KAAKkK,gC,GA3QAjJ,aCjC/BsK,G,uKACM,IAAD,OACP,OACE,6BACE,kBAAC,EAAD,CACE5M,OAASqB,KAAKJ,MAAMmE,OAAOpF,OAC3BiF,cAAgB5D,KAAKJ,MAAMgE,cAC3BC,mBAAqB7D,KAAKJ,MAAMiE,qBAGlC,yBAAKrD,UAAU,mBACb,yBAAKA,UAAU,SACb,+BAAO,2BAAG,kBAACwD,EAAA,EAAD,kBACV,yBAAKxD,UAAU,uFACb,yBAAKA,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,MACHlB,KAAK,MACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO7E,IAC5ByE,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,OAAM,kBAACF,EAAA,EAAD,gBAEpD,yBAAKxD,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,SACHlB,KAAK,SACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO3E,OAC5BuE,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,UAAS,kBAACF,EAAA,EAAD,gBAEvD,yBAAKxD,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,OACHlB,KAAK,OACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO5E,KAC5BwE,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,QAAO,kBAACF,EAAA,EAAD,kBAIzD,yBAAKxD,UAAU,SACb,+BAAO,2BAAG,kBAACwD,EAAA,EAAD,wBACV,yBAAKxD,UAAU,uFACb,yBAAKA,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,SACHlB,KAAK,SACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO9F,OAC5B0F,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,UAAS,kBAACF,EAAA,EAAD,kBAEvD,yBAAKxD,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,QACHlB,KAAK,QACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOyH,MAC5B7H,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,SAAQ,kBAACF,EAAA,EAAD,wBAEtD,yBAAKxD,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,WACHlB,KAAK,WACLqG,QAAUjE,KAAKJ,MAAMmE,OAAO3F,SAC5BuF,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,YAAW,kBAACF,EAAA,EAAD,wBAI7D,yBAAKxD,UAAU,SACb,+BAAO,2BAAG,kBAACwD,EAAA,EAAD,kBACV,yBAAKxD,UAAU,uFACb,yBAAKA,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,UACHlB,KAAK,UACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOO,QAC5BX,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,WAA5C,YAEF,yBAAK1D,UAAU,gCACb,2BACEA,UAAU,mBACVtD,KAAK,WACL4B,GAAG,SACHlB,KAAK,SACLqG,QAAUjE,KAAKJ,MAAMmE,OAAOQ,OAC5BZ,SAAW3D,KAAKJ,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAQ,UAA5C,mBAMR,yBAAK1D,UAAU,mBACb,yBAAKA,UAAU,UACb,+BAAO,2BAAG,kBAACwD,EAAA,EAAD,oBACV,yBAAKxD,UAAU,yEACXR,KAAKJ,MAAMmD,UAAUG,KAAI,SAAChD,GAC1B,OACE,yBAAKM,UAAU,+BAA+B6C,IAAMnD,EAASpB,IAC3D,2BACE0B,UAAU,mBACVtD,KAAK,WACL4B,GAAKoB,EAASpB,GACdlB,KAAOsC,EAASpB,GAChBmF,QAAU,EAAKrE,MAAMmE,OAAO7D,EAASpB,IACrC6E,SAAW,EAAK/D,MAAMgE,gBAExB,2BAAOpD,UAAU,mBAAmB0D,QAAUhE,EAASpB,IAAOU,EAA4BU,EAAStC,KAAM,EAAKgC,MAAMjD,KAAKmE,kBAQrI,yBAAKN,UAAU,oBACb,4BAAQtD,KAAK,SAASsD,UAAU,iCAAiCE,QAAUV,KAAKJ,MAAM6L,sBACpF,kBAACzH,EAAA,EAAD,4CAEF,4BAAQ9G,KAAK,SAASsD,UAAU,iCAAiCE,QAAUV,KAAKJ,MAAM8L,wBACpF,kBAAC1H,EAAA,EAAD,uD,GAhJa/C,aA2KVC,iBAAkBqK,IC5K3BI,I,6KAEF,IAAMC,EAAO5L,KAAKJ,MAAMgM,KAEpBC,EAAY,UAShB,MAPmB,QAAfD,EAAK3O,MACP4O,EAAY,SAEU,WAAfD,EAAK3O,QACZ4O,EAAY,WAIZ,yBAAKrL,UAAS,sBAAkBqL,EAAlB,gBACZ,yBAAKrL,UAAS,4CAAwCoL,EAAK3O,MAA7C,+CACZ,wBAAIuD,UAAU,OAAQhB,EAA4BoM,EAAKhO,KAAMoC,KAAKJ,MAAMjD,KAAKmE,WAC7E,yBAAKN,UAAU,sBAAuBhB,EAA4BoM,EAAK7N,SAAS+N,aAAc9L,KAAKJ,MAAMjD,KAAKmE,UAA9G,SAA8Hd,KAAKJ,MAAMoB,EAAE4K,EAAK1O,QAElJ,yBAAKsD,UAAU,aACb,wBAAIA,UAAU,oBACO,IAAlBoL,EAAKzO,UAAkB,CACtB,wBAAIqD,UAAU,QAAQ6C,IAAI,YAAW,kBAACW,EAAA,EAAD,mBACrC,wBAAIxD,UAAU,QAAQ6C,IAAI,gBAAiBuI,EAAKzO,WAGlC,OAAfyO,EAAKxO,OAAmB,CACvB,wBAAIoD,UAAU,QAAQ6C,IAAI,SAAQ,kBAACW,EAAA,EAAD,mBAClC,wBAAIxD,UAAU,QAAQ6C,IAAI,aACtBuI,EAAKxO,MAAMC,IADf,MACyBuO,EAAKxO,MAAME,MAItB,OAAfsO,EAAKxO,OAAmB,CACvB,wBAAIoD,UAAU,QAAQ6C,IAAI,aAAY,kBAACW,EAAA,EAAD,qBACtC,wBAAIxD,UAAU,QAAQ6C,IAAI,iBACtBuI,EAAKxO,MAAMG,OAAS,SAAW,aAIrB,OAAfqO,EAAKxO,OAA+B,OAAbwO,EAAKnO,KAAiB,CAC5C,wBAAI+C,UAAU,QAAQ6C,IAAI,OAAM,kBAACW,EAAA,EAAD,sBAChC,wBAAIxD,UAAU,QAAQ6C,IAAI,WAAYuI,EAAKnO,IAA3C,IAAiD,kBAACuG,EAAA,EAAD,aAAiC,IAAb4H,EAAKnO,KAAa,MAGtE,OAAlBmO,EAAKlO,UAAsB,CAC1B,wBAAI8C,UAAU,QAAQ6C,IAAI,YAAW,kBAACW,EAAA,EAAD,eACrC,wBAAIxD,UAAU,QAAQ6C,IAAI,gBAAiBuI,EAAKlO,WAGhC,OAAjBkO,EAAKjO,SAAqB,CACzB,wBAAI6C,UAAU,QAAQ6C,IAAI,WAAU,kBAACW,EAAA,EAAD,oBACpC,wBAAIxD,UAAU,QAAQ6C,IAAI,eAAgBuI,EAAKjO,WAGnD,yBAAK6C,UAAU,cAEXhB,EAA4BoM,EAAK/N,KAAMmC,KAAKJ,MAAMjD,KAAKmE,UAAUoC,KAC/D,SAACrF,EAAMkO,GAAP,OAAgB,uBAAG1I,IAAM0I,GAAQlO,a,GA1D1BoD,cAwERC,iBAAkByK,ICzEZK,G,uKAEjB,OACE,yBAAKxL,UAAU,OACZR,KAAKJ,MAAML,MAAM2D,KAAI,SAAC0I,GAAD,OACpB,yBAAKpL,UAAU,+DAA+D6C,IAAMuI,EAAK5O,QACvF,kBAAC,GAAD,CAAU4O,KAAOA,a,GANS3K,aCDhCgL,GAAQ,GAAGzD,OAAOgC,MAAM,GAAIjF,OAAOC,OAAOC,GAAMvC,KAAI,SAAChD,GAAD,OAAcA,EAASX,UAC3E2M,GAAY3G,OAAOC,OAAOC,GAAMvC,KAAI,SAAChD,GAAD,MAAe,CAAEpB,GAAIoB,EAASpB,GAAGsG,cAAexH,KAAMsC,EAAStC,SAEnGgL,GAAgB,CACpB1J,KAAK,EACLE,QAAQ,EACRD,MAAM,EACNlB,QAAQ,EACRuN,OAAO,EACPpN,UAAU,EACVkG,SAAS,EACTC,QAAQ,EAER5F,OAAQ,I,eAGWuN,I,IAArB,8BAAgC,CAAC,IAApBpN,GAAmB,SAAnBA,GACX8J,GAAc9J,KAAM,G,kCAGtB,SAASqN,GAAgBnH,GACvB,OAAOA,EACJE,UAAU,OACVC,QAAQ,mBAAoB,IAC5BA,QAAQ,8BAA+B,KACvCA,QAAQ,UAAW,KACnBC,cACAC,O,IAGgB+G,G,kDACnB,WAAYxM,GAAQ,IAAD,8BACjB,cAAMA,IAED8C,MAAQkG,GAEb,EAAKlE,kBAAoB,EAAKA,kBAAkB5E,KAAvB,gBACzB,EAAK6E,uBAAyB,EAAKA,uBAAuB7E,KAA5B,gBAC9B,EAAKuM,0BAA4B,EAAKA,0BAA0BvM,KAA/B,gBACjC,EAAKwM,4BAA8B,EAAKA,4BAA4BxM,KAAjC,gBARlB,E,8DAWDK,GAChB,IAAMsB,EAAStB,EAAMsB,OACfiC,EAAQ,CACZ,MAAO,OAAQ,SAAU,SAAU,QAAS,WAAY,UAAW,UADvD,mBACoEwI,GAAUhJ,KAAI,SAAChD,GAAD,OAAcA,EAASpB,QACrH8F,SAASnD,EAAO7D,MAAQ6D,EAAOwC,QAAUxC,EAAOiC,MAC5C9F,EAAO6D,EAAO7D,KAEpBoC,KAAK8C,SAAL,eACGlF,EAAO8F,M,+CAKV1D,KAAK8C,SAAS,CAAEnE,OAAQ,O,kDAIxB,IAD0B,EACpB4N,EAAW,GADS,cAGLL,IAHK,IAG1B,2BAAgC,CAC9BK,EAD8B,QAAnBzN,KACI,GAJS,gCAO1BkB,KAAK8C,SAASyJ,K,oDAId,IAD4B,EACtBA,EAAW,GADW,cAGPL,IAHO,IAG5B,2BAAgC,CAC9BK,EAD8B,QAAnBzN,KACI,GAJW,gCAO5BkB,KAAK8C,SAASyJ,K,+BAGN,IAAD,OACHxH,EAAa,OACb/E,KAAK0C,MAAM4B,UAAYtE,KAAK0C,MAAM6B,OACpCQ,EAAa,MAEL/E,KAAK0C,MAAM4B,SAAWtE,KAAK0C,MAAM6B,SACzCQ,EAAa,MAGf,IAAME,EAAWkH,GAAgBnM,KAAK0C,MAAM/D,QAAQ2G,MAAM,KAEpD/F,EAAQ0M,GAAMlI,QAAO,SAAC6H,GAAU,IAAD,gBACd3G,GADc,IACnC,2BAA+B,CAAC,IAArBtG,EAAoB,QAC7B,IAAKiN,EAAK7N,SAASsB,WAAW0F,GAAYH,SAASjG,GACjD,OAAO,EAGT,IAAK,EAAK+D,MAAMkJ,EAAK3O,OACnB,OAAO,EAGT,IAAK,EAAKyF,MAAMkJ,EAAK1O,MACnB,OAAO,EAGT,IAAK,EAAKwF,MAAMyJ,GAAgBP,EAAK5O,OAAOkL,MAAM,EAAG,KACnD,OAAO,GAfwB,gCAmBnC,OAAO,KAGT,OACE,yBAAK1H,UAAU,kBACb,kBAAC,GAAD,CACEuC,UAAYmJ,GACZnI,OAAS/D,KAAK0C,MACdkB,cAAgB5D,KAAK0E,kBACrBb,mBAAqB7D,KAAK2E,uBAC1B8G,qBAAuBzL,KAAKqM,0BAC5BX,uBAAyB1L,KAAKsM,8BAEhC,kBAAC,GAAD,CAAU/M,MAAQA,S,GA3FS0B,a,oBC1BpB,SAASuL,KAAO,IACrB7P,EAAS6G,cAAT7G,KAEF8P,EAAiB,SAAC/M,GACtB/C,EAAK8P,eAAe/M,IAWtB,OACE,kBAAC,IAAD,KACE,yBAAKc,UAAU,+CACb,kBAAC,IAAD,CAAMA,UAAU,eAAekM,GAAG,KAChC,yBAAKC,IAAMC,KACTC,MAAM,KACNC,OAAO,KACPtM,UAAU,gCACVuM,IAAI,aALR,gBASA,4BAAQvM,UAAU,iBAChBtD,KAAK,SACL8P,cAAY,WACZC,cAAY,eACZC,gBAAc,cACdC,gBAAc,QACdxM,aAAW,qBACX,0BAAMH,UAAU,yBAElB,yBAAKA,UAAU,2BAA2B1B,GAAG,eAC3C,yBAAK0B,UAAU,sBACb,kBAAC,IAAD,CAASA,UAAU,oBAAoB4M,gBAAgB,SAASC,OAAK,EAACX,GAAG,KACvE,kBAAC1I,EAAA,EAAD,uBAIF,kBAAC,IAAD,CAASxD,UAAU,oBAAoB4M,gBAAgB,SAASV,GAAG,UACjE,kBAAC1I,EAAA,EAAD,oBAIF,kBAAC,IAAD,CAASxD,UAAU,oBAAoB4M,gBAAgB,SAASV,GAAG,YACjE,kBAAC1I,EAAA,EAAD,uBAMJ,0BAAMxD,UAAU,cAAcE,QAhDnB,WACjB+L,EAAe,QAgDP,yBAAKE,IAAI,gEACLE,MAAM,KACNC,OAAO,KACPtM,UAAS,eAA6B,OAAlB7D,EAAKmE,UAAqB,mBAC9CiM,IAAI,6BAGV,0BAAMvM,UAAU,cAAcE,QApDpB,WAChB+L,EAAe,QAoDP,yBAAKE,IAAI,gEACLE,MAAM,KACNC,OAAO,KACPtM,UAAS,eAA6B,OAAlB7D,EAAKmE,UAAqB,mBAC9CiM,IAAI,gDAMd,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAOO,KAAK,qBAAqBC,UAAYnE,KAC7C,kBAAC,IAAD,CAAOkE,KAAK,WAAWC,UAAYnE,KACnC,kBAAC,IAAD,CAAOkE,KAAK,SAASC,UAAYnB,KACjC,kBAAC,IAAD,CAAOkB,KAAK,IAAIC,UAAY9I,MC5EhB+I,QACW,cAA7BvL,OAAOmJ,SAASqC,UAEe,UAA7BxL,OAAOmJ,SAASqC,UAEhBxL,OAAOmJ,SAASqC,SAASnE,MACvB,2D,sBCPAoE,GAAmB,IAAIC,IAC7BD,GAAiBE,YAAY,CAC3BhQ,KAAM,mBACNiQ,kBAF2B,aAI3BC,OAJ2B,WAKzB,MAAO,QAIXnR,IACGoR,IAAIC,KACJD,IAAIL,IACJO,KAAK,CACJC,UAAW,CACTrR,GAAI,CACFsR,YAAY,aACV3C,MAAO,QACPvN,OAAQ,SACRG,SAAU,YACPgQ,KAGPtR,GAAI,CACFqR,YAAY,aACV3C,MAAO,gBACPvN,OAAQ,UACRG,SAAU,eACPiQ,MAITC,YAAa,KACbC,cAAe,CAAC,KAAM,MAEtBC,cAAe,CACbC,aAAa,GAGfC,UAAW,CACTC,MAAO,CAAC,eAAgB,YAAa,UAAW,oBAEhDC,mBAAoB,aAEpBC,OAAQ,CAAC,gBACTC,gBAAiB,CAAC,UAElBC,QAAS5M,SAASC,mBAIxB4M,IAASC,OACP,kBAAC,IAAMC,WAAP,KACE,kBAAC,GAAD,OAEF/M,SAASgN,eAAe,SDiEpB,kBAAmBC,WACrBA,UAAUC,cAAcC,MACrBC,MAAK,SAAAC,GACJA,EAAaC,gBAEdC,OAAM,SAAA3H,GACLD,QAAQC,MAAMA,EAAM4H,c","file":"static/js/main.1865028e.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo192.47a340f4.png\";","import PropTypes from 'prop-types'\n\nexport const SearchDataType = PropTypes.shape({\n i18n: PropTypes.string,\n en: PropTypes.string,\n fr: PropTypes.string\n})\n\nexport const CardType = PropTypes.shape({\n number: PropTypes.string,\n color: PropTypes.string,\n type: PropTypes.string,\n movement: PropTypes.number,\n range: PropTypes.shape({\n min: PropTypes.number,\n max: PropTypes.number,\n direct: PropTypes.bool\n }),\n aoe: PropTypes.number,\n strength: PropTypes.number,\n defense: PropTypes.number,\n name: PropTypes.shape({\n en: PropTypes.string,\n fr: PropTypes.string\n }),\n text: PropTypes.shape({\n en: PropTypes.arrayOf(PropTypes.string),\n fr: PropTypes.arrayOf(PropTypes.string)\n }),\n metadata: PropTypes.shape({\n control: PropTypes.bool,\n attack: PropTypes.bool,\n deckManagement: PropTypes.bool,\n withoutMove: PropTypes.bool,\n reaction: PropTypes.bool,\n textDamages: PropTypes.bool,\n buff: PropTypes.bool,\n defense: PropTypes.bool,\n textMovement: PropTypes.bool,\n selfHeal: PropTypes.bool,\n heal: PropTypes.bool,\n antiDefense: PropTypes.bool,\n search: SearchDataType\n })\n})\n\nconst ChampionMetadataType = PropTypes.shape({\n control: PropTypes.number,\n attack: PropTypes.number,\n deckManagement: PropTypes.number,\n withoutMove: PropTypes.number,\n textDamages: PropTypes.number,\n buff: PropTypes.number,\n textMovement: PropTypes.number,\n antiDefense: PropTypes.number,\n selfHeal: PropTypes.number,\n heal: PropTypes.number,\n reaction: PropTypes.shape({\n movement: PropTypes.number,\n damage: PropTypes.number,\n control: PropTypes.number,\n defense: PropTypes.number,\n heal: PropTypes.number\n })\n})\n\nexport const ChampionType = PropTypes.shape({\n id: PropTypes.string,\n hp: PropTypes.number,\n defense: PropTypes.number,\n name: PropTypes.shape({\n en: PropTypes.string,\n fr: PropTypes.string\n }),\n levelUp: PropTypes.shape({\n hp: PropTypes.number,\n defense: PropTypes.number,\n en: PropTypes.string,\n fr: PropTypes.string\n }),\n metadata: PropTypes.shape({\n total: ChampionMetadataType,\n red: ChampionMetadataType,\n blue: ChampionMetadataType,\n yellow: ChampionMetadataType,\n searchData: SearchDataType,\n reactionColor: PropTypes.string\n }),\n cards: PropTypes.arrayOf(CardType)\n})\n","export function getTranslatedTextFromObject(obj, lang) {\n if (!lang || !obj[lang]) {\n return obj.fr\n }\n\n return obj[lang]\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { DropletFill, OctagonFill, HeartFill, Heart, Shield, ShieldSlashFill, LayersFill, DashCircleFill, FileArrowUpFill, ForwardFill } from 'react-bootstrap-icons'\n\nimport \"./ChampionCard.css\"\nimport { ChampionType } from '../types'\nimport { withTranslation } from 'react-i18next'\nimport { getTranslatedTextFromObject } from '../utils'\n\nclass ChampionCard extends Component {\n constructor(props) {\n super(props)\n\n this.handleCardClick = this.handleCardClick.bind(this)\n this.handleClearClick = this.handleClearClick.bind(this)\n }\n\n handleCardClick() {\n if (this.props.onChampionClick) {\n this.props.onChampionClick(this.props.champion)\n }\n }\n\n handleClearClick(event) {\n event.preventDefault()\n event.stopPropagation()\n if (this.props.onChampionClearClick) {\n this.props.onChampionClearClick(this.props.champion)\n }\n }\n\n render() {\n const champion = this.props.champion\n\n let tableColor = `table-${champion.metadata.reactionColor}`\n\n if (champion.metadata.reactionColor === \"red\") {\n tableColor = \"table-danger\"\n }\n else if (champion.metadata.reactionColor === \"yellow\") {\n tableColor = \"table-warning\"\n }\n else if (champion.metadata.reactionColor === \"blue\") {\n tableColor = \"table-primary\"\n }\n\n return (\n
\n
\n {this.props.onChampionClearClick && (\n \n )}\n \n { getTranslatedTextFromObject(champion.name, this.props.i18n.language) }\n \n
\n { champion.hp } { champion.defense }\n \n { champion.levelUp.hp } { champion.levelUp.defense }\n
\n {!this.props.shortVersion && (\n \n { getTranslatedTextFromObject(champion.levelUp, this.props.i18n.language) }\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
{ champion.metadata.total.attack }{ champion.metadata.total.control }{ champion.metadata.total.deckManagement }{ champion.metadata.total.withoutMove }{ champion.metadata.total.heal + champion.metadata.total.selfHeal }{ champion.metadata.total.buff }{ champion.metadata.total.antiDefense }
\n
\n
\n )\n }\n}\n\nChampionCard.propTypes = {\n champion: ChampionType,\n shortVersion: PropTypes.bool,\n active: PropTypes.bool,\n onChampionClick: PropTypes.func,\n onChampionClearClick: PropTypes.func\n}\n\nexport default withTranslation()(ChampionCard)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport \"./ChampionPicker.css\"\nimport { ChampionType } from '../types'\nimport { PlusCircle } from 'react-bootstrap-icons'\nimport ChampionCard from '../champions/ChampionCard'\n\n\nclass EmptySlot extends Component {\n render() {\n return (\n
\n
\n \n
\n
\n )\n }\n}\n\nclass Slot extends Component {\n constructor(props) {\n super(props)\n\n this.handlePickSlot = this.handlePickSlot.bind(this);\n this.handleClearSlot = this.handleClearSlot.bind(this);\n }\n\n handlePickSlot(event) {\n const cardRect = event.target.closest(\".card\").getBoundingClientRect()\n if (cardRect.left < 0) {\n const padding = this.props.slot > 0 ? 75 : 10\n this.props.updateSlide(-cardRect.left + padding)\n }\n else if (cardRect.right > (window.innerWidth || document.documentElement.clientWidth)) {\n const padding = this.props.slot < this.props.size - 1 ? 75 : 15\n this.props.updateSlide((window.innerWidth || document.documentElement.clientWidth) - cardRect.right - padding)\n }\n else if (this.props.slot > 0 && cardRect.left < 75) {\n this.props.updateSlide(cardRect.left + 75)\n }\n else if (\n this.props.slot < this.props.size - 1 &&\n (window.innerWidth || document.documentElement.clientWidth) - cardRect.right < 75\n ) {\n this.props.updateSlide((window.innerWidth || document.documentElement.clientWidth) - cardRect.right - 75)\n }\n\n this.props.onPickSlot(this.props.team, this.props.slot)\n }\n\n handleClearSlot() {\n this.props.onClearSlot(this.props.team, this.props.slot)\n }\n\n render() {\n return (\n
\n
\n {!this.props.champion ?\n :\n \n }\n
\n
\n )\n }\n}\n\nexport default class ChampionPicker extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n range: [...Array(this.props.size).keys()],\n slide: 0,\n size: props.size\n }\n\n this.updateSlide = this.updateSlide.bind(this);\n }\n\n static getDerivedStateFromProps(nextProps, state) {\n if (nextProps.size !== state.size) {\n return {\n range: [...Array(nextProps.size).keys()],\n slide: 0,\n size: nextProps.size\n }\n }\n\n return null\n }\n\n updateSlide(slide) {\n this.setState({ slide: slide + this.state.slide })\n }\n\n render() {\n const champions = this.props.champions\n\n return (\n
\n \n {this.state.range.map((slot) => (\n \n ))}\n
\n \n )\n }\n}\n\nChampionPicker.propTypes = {\n team: PropTypes.number.isRequired,\n size: PropTypes.number.isRequired,\n activeTeam: PropTypes.number,\n activeSlot: PropTypes.number,\n champions: PropTypes.arrayOf(ChampionType),\n onPickSlot: PropTypes.func.isRequired,\n onClearSlot: PropTypes.func.isRequired\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Search } from 'react-bootstrap-icons'\nimport { useTranslation } from 'react-i18next'\n\n\nfunction SearchInput(props) {\n const { t } = useTranslation();\n\n return (\n
\n
\n
\n \n
\n \n
\n
\n \n
\n
\n
\n
\n )\n}\n\nSearchInput.propTypes = {\n search: PropTypes.string,\n onInputChange: PropTypes.func,\n onClearSearchInput: PropTypes.func\n}\n\nexport default SearchInput\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Trans } from 'react-i18next'\nimport SearchInput from '../SearchInput'\n\n\nexport default class ChampionFilter extends Component {\n render() {\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
\n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n )\n }\n}\n\nChampionFilter.propTypes = {\n filter: PropTypes.shape({\n red: PropTypes.bool,\n yellow: PropTypes.bool,\n blue: PropTypes.bool,\n zeroDef: PropTypes.bool,\n oneDef: PropTypes.bool,\n twoDef: PropTypes.bool,\n english: PropTypes.bool,\n french: PropTypes.bool,\n search: PropTypes.string\n }),\n onInputChange: PropTypes.func,\n onClearSearchInput: PropTypes.func\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport ChampionCard from './ChampionCard'\nimport { ChampionType } from '../types'\n\n\nexport default class ChampionList extends Component {\n render() {\n return (\n
\n {this.props.champions.map((champion) => (\n
\n \n
\n ))}\n
\n )\n }\n}\n\nChampionList.propTypes = {\n champions: PropTypes.arrayOf(ChampionType),\n onChampionClick: PropTypes.func\n}\n","import React, { Component } from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { DropletFill, OctagonFill, HeartFill, ShieldSlashFill, LayersFill, DashCircleFill, FileArrowUpFill } from 'react-bootstrap-icons'\nimport data from '../data.json'\nimport ChampionFilter from './ChampionFilter'\nimport ChampionList from './ChampionList'\n\n\nfunction normalizeString(str) {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[.,/#!$%^&*;:{}=\\-_'\"`~()]/g, \" \")\n .replace(/\\s{2,}/g, \" \")\n .toLowerCase()\n .trim()\n}\n\nclass Champions extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n red: true,\n yellow: true,\n blue: true,\n zeroDef: true,\n oneDef: true,\n twoDef: true,\n english: true,\n french: true,\n search: \"\"\n }\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleSearchInputClear = this.handleSearchInputClear.bind(this);\n }\n\n handleInputChange(event) {\n const target = event.target\n const value = [\n 'red', 'blue', 'yellow', 'zeroDef', 'oneDef', 'twoDef', 'english', 'french'\n ].includes(target.name) ? target.checked : target.value\n const name = target.name\n\n this.setState({\n [name]: value\n })\n }\n\n handleSearchInputClear() {\n this.setState({ search: \"\" })\n }\n\n render() {\n const defWanted = []\n if (this.state.zeroDef) {\n defWanted.push(0)\n }\n if (this.state.oneDef) {\n defWanted.push(1)\n }\n if (this.state.twoDef) {\n defWanted.push(2)\n }\n\n let langWanted = 'i18n'\n if (this.state.english && !this.state.french) {\n langWanted = 'en'\n }\n else if (!this.state.english && this.state.french) {\n langWanted = 'fr'\n }\n\n const searches = normalizeString(this.state.search).split(' ')\n\n const champions = Object.values(data).filter((champion) => {\n for (const search of searches) {\n if (!champion.metadata.searchData[langWanted].includes(search)) {\n return false\n }\n\n if (!(\n (this.state.red && champion.metadata.reactionColor.includes(\"red\")) ||\n (this.state.blue && champion.metadata.reactionColor.includes(\"blue\")) ||\n (this.state.yellow && champion.metadata.reactionColor.includes(\"yellow\"))\n )) {\n return false\n }\n\n if (!defWanted.includes(champion.defense)) {\n return false\n }\n\n if (this.props.filteredChapionId && this.props.filteredChapionId.includes(champion.id)) {\n return false\n }\n }\n\n return true\n })\n\n return (\n
\n
\n
\n
\n
\n  \n { this.props.t(\"Nombre d'attaques\") }\n
\n
\n  \n { this.props.t(\"Nombre de cartes de contrôle\") }\n
\n
\n  \n { this.props.t(\"Nombre de cartes permettant de piocher ou planifier\") }\n
\n
\n  \n { this.props.t(\"Nombre de cartes sans mouvement\") }\n
\n
\n  \n { this.props.t(\"Nombre de cartes de soin\") }\n
\n
\n  \n { this.props.t(\"Nombre de cartes de buff\") }\n
\n
\n  \n { this.props.t(\"Nombre de cartes anti-armure\") }\n
\n
\n
\n
\n \n \n
\n )\n }\n}\n\nexport default withTranslation()(Champions)\n","const { base32 } = require('rfc4648')\n\n/**\n * @typedef {Object} ConstructedTean\n * @property {number} draftMode - One of the draft mode available (0 = Casual, 1 = Competitive, 2 = Double Competitive)\n * @property {Array} teams - Array of teams. Each team is an array of champion IDs (DUG, GOL, GWA, etc.)\n */\n\n// const data = require(\"./data.json\")\nconst idToString = {\n 0: \"DUG\",\n 1: \"GOL\",\n 2: \"GWA\",\n 3: \"KIL\",\n 4: \"TZU\",\n 5: \"DER\",\n 6: \"RAT\",\n 7: \"MAR\",\n 8: \"KOR\",\n 9: \"LOR\",\n 10: \"NEV\",\n 11: \"TAZ\",\n 12: \"KOL\",\n 13: \"SUL\",\n 14: \"AKH\",\n 15: \"IZA\",\n 16: \"ALK\",\n 17: \"XIN\",\n 18: \"JAQ\",\n 19: \"LIL\",\n 20: \"NIK\",\n 21: \"TEN\",\n 22: \"KHA\",\n 23: \"ALI\"\n};\n\nconst stringToId = Object.entries(idToString).reduce((acc, entry) => {\n const [key, value] = entry;\n acc[value] = key;\n return acc;\n}, {});\n\n/**\n * Convert the team data to integer for the base64 conversion, and put everything into one organized array.\n * @param {number} draftMode\n * One of the draft mode available (0 = Casual, 1 = Competitive, 2 = Double Competitive)\n * @param {array} teams\n * Array of teams. Each team is an array of champion IDs (DUG, GOL, GWA, etc.)\n * @return {array}\n * The data converted into a single array, for example : [1, 2, 0, 1, 2, 3, 4] for [[DUG, GOL, GWA, KIL, TZU]]\n */\nfunction convertTeamToInt(draftMode, teams) {\n let result = [1, parseInt(draftMode)]\n\n for (const team of teams) {\n result = result.concat(team.map((member) => stringToId[member]).sort())\n }\n\n return result\n}\n\n/**\n * Convert an array of integer id into string ID, ignoring those that do not match anything\n * @param {array} arr\n * An array of integer\n * @return {array}\n * The data converted into string, for example : [DUG, GOL, GWA, KIL, TZU] for [0, 1, 2, 3, 4]\n */\nfunction parseTeam(arr) {\n const team = []\n\n for (const id of arr) {\n const member = idToString[id]\n\n if (!member) {\n console.error(`Member ${id} not found`)\n continue\n }\n\n team.push(member)\n }\n\n return team\n}\n\n/**\n * Convert the organized array into an array of teams.\n * @param {array} arr\n * The data concatenated into a single array, as parsed from the base64 deck code\n * @return {array}\n * The data converted into teams, for example : [[DUG, GOL, GWA, KIL, TZU]] for [1, 2, 0, 1, 2, 3, 4]\n */\nfunction convertTeamFromArray(arr) {\n const teams = []\n // const version = arr[0]\n const draftMode = arr[1]\n\n if (draftMode === 2) {\n teams.push(parseTeam(arr.slice(2, 7)))\n teams.push(parseTeam(arr.slice(7)))\n }\n else {\n teams.push(parseTeam(arr.slice(2)))\n }\n\n return teams\n}\n\n/**\n * Compute the deck code for the teams given.\n * @param {number} draftMode\n * One of the draft mode available (0 = Casual, 1 = Competitive, 2 = Double Competitive)\n * @param {array} teams\n * Array of teams. Each team is an array of champion IDs (DUG, GOL, GWA, etc.)\n * @return {string}\n * The deck code computed for the teams, for example : AEAQAAICAMCA for [[DUG, GOL, GWA, KIL, TZU]]\n */\nexport function buildDeckCode(draftMode, teams) {\n return base32.stringify(convertTeamToInt(draftMode, teams), { pad: false })\n}\n\n/**\n * Parse the deck code and convert it to a Constructed Team object.\n * @param {string} code\n * String generated by this algorithm, for example : AEAQAAICAMCA (Dugrun, Gold'arr, Gwaien, Kilgore, Tzu Xiao)\n * @return {ConstructedTeam}\n * The Constructed Team object parsed.\n */\nexport function parseDeckCode(code) {\n const decodedDeckCode = base32.parse(code, { out: Array, loose: true })\n return {\n draftMode: decodedDeckCode[1],\n teams: convertTeamFromArray(decodedDeckCode)\n }\n}\n","import React, { Component } from 'react'\nimport ChampionPicker from './ChampionPicker'\nimport {CopyToClipboard} from 'react-copy-to-clipboard'\nimport { Trans } from 'react-i18next';\n\nimport Champions from '../champions/Champions'\nimport { buildDeckCode, parseDeckCode } from '../deckCode';\nimport data from '../data.json';\n\nconst DEFAULT_STATE = {\n draftMode: \"0\",\n teamSize: 3,\n activeTeam: 0,\n activeSlot: 0,\n teams: [[null, null, null]],\n deckCode: null,\n copyAlert: false,\n timeout: null\n}\n\nfunction resizeArray(arr, size, defaultValue) {\n while(size > arr.length) {\n arr.push(defaultValue);\n }\n arr.length = size;\n}\n\nfunction formatParsedData(parsedData) {\n return {\n draftMode: `${parsedData.draftMode}`,\n teams: parsedData.teams.map((team) => team.map((member) => {\n const champion = data[member];\n\n if (!champion) {\n return null;\n }\n\n return champion;\n }))\n };\n}\n\nexport default class Builder extends Component {\n constructor(props) {\n super(props)\n\n let state = Object.assign({}, DEFAULT_STATE)\n\n if (props.match.params.deckCode) {\n const parsedData = parseDeckCode(props.match.params.deckCode)\n state = Object.assign(\n state,\n formatParsedData(parsedData),\n {\n deckCode: props.match.params.deckCode,\n teamSize: parsedData.draftMode === 0 ? 3 : 5\n }\n )\n }\n this.state = state\n this.handleDraftModeChange = this.handleDraftModeChange.bind(this)\n this.handleChampionClick = this.handleChampionClick.bind(this)\n this.handleClearSlot = this.handleClearSlot.bind(this)\n this.handlePickSlot = this.handlePickSlot.bind(this)\n this.mapTeamsToChampionIds = this.mapTeamsToChampionIds.bind(this)\n this.resizeTeams = this.resizeTeams.bind(this)\n this.buildNewDeckCodeAndUpdateHistory = this.buildNewDeckCodeAndUpdateHistory.bind(this)\n this.onCopyToClipboard = this.onCopyToClipboard.bind(this)\n this.onCloseCopyAlert = this.onCloseCopyAlert.bind(this)\n this.findNextAvailableSlot = this.findNextAvailableSlot.bind(this)\n }\n\n mapTeamsToChampionIds() {\n const flattenList = [].concat.apply([], this.state.teams)\n\n return flattenList\n .filter((champion) => champion !== null)\n .map((champion) => champion.id)\n }\n\n resizeTeams(teams, draftMode) {\n const results = teams.map((team) => [...team]) // deepcopy\n const teamSize = draftMode === \"0\" ? 3 : 5\n\n resizeArray(results, draftMode === \"2\" ? 2 : 1, [null, null, null, null, null])\n\n for (const team of results) {\n resizeArray(team, teamSize, null)\n }\n\n return results\n }\n\n buildNewDeckCodeAndUpdateHistory(draftMode, teams) {\n const formattedTeams = teams.map((team) => team.map((member) => member ? member.id : null))\n const flattenTeams = [].concat.apply([], formattedTeams)\n const deckCode =\n flattenTeams.filter((champion) => champion === null).length === 0 ?\n buildDeckCode(parseInt(draftMode), formattedTeams) :\n null\n\n if (deckCode && deckCode !== this.state.deckCode) {\n this.props.history.push(`/builder/${deckCode}`)\n }\n else if (!deckCode && this.state.deckCode) {\n this.props.history.push(`/builder`)\n }\n\n return deckCode\n }\n\n onCopyToClipboard() {\n if (this.state.timeout) {\n window.clearTimeout(this.state.timeout)\n }\n\n const timeout = setTimeout(() => {\n this.setState({ copyAlert: false, timeout: null })\n }, 5000)\n\n this.setState({ copyAlert: true, timeout })\n }\n\n onCloseCopyAlert() {\n if (this.state.timeout) {\n window.clearTimeout(this.state.timeout)\n }\n\n this.setState({ copyAlert: false, timeout: null })\n }\n\n handleDraftModeChange(event) {\n const draftMode = event.target.value\n const teamSize = draftMode === \"0\" ? 3 : 5\n const teams = this.resizeTeams(this.state.teams, draftMode)\n\n this.setState({\n draftMode,\n teamSize,\n teams,\n deckCode: this.buildNewDeckCodeAndUpdateHistory(draftMode, teams)\n })\n }\n\n findNextAvailableSlot(teams) {\n const slotPerTeam = [...Array(this.state.teamSize).keys()]\n\n const teamIndexes = [...Array(teams.length).keys()]\n const slotIndexes = [\n ...slotPerTeam.slice(this.state.activeSlot + 1),\n ...slotPerTeam.slice(0, this.state.activeSlot)\n ]\n\n for (const slotIdx of slotIndexes) {\n if (!teams[this.state.activeTeam][slotIdx]) {\n return {\n activeTeam: this.state.activeTeam,\n activeSlot: slotIdx\n }\n }\n }\n\n for (const teamIdx of teamIndexes) {\n for (const slotIdx of slotPerTeam) {\n if (!teams[teamIdx][slotIdx]) {\n return {\n activeTeam: teamIdx,\n activeSlot: slotIdx\n }\n }\n }\n }\n\n // default value, don't change picked slot\n return {\n activeTeam: this.state.activeTeam,\n activeSlot: this.state.activeSlot\n }\n }\n\n handleChampionClick(champion) {\n const results = this.state.teams.map((team) => [...team]) // deepcopy\n results[this.state.activeTeam][this.state.activeSlot] = champion\n\n this.setState({\n teams: results,\n deckCode: this.buildNewDeckCodeAndUpdateHistory(this.state.draftMode, results),\n ...this.findNextAvailableSlot(results)\n })\n }\n\n handlePickSlot(team, slot) {\n this.setState({ activeTeam: team, activeSlot: slot })\n }\n\n handleClearSlot(team, slot) {\n const results = this.state.teams.map((team) => [...team]) // deepcopy\n results[team][slot] = null\n\n this.setState({\n teams: results,\n deckCode: this.buildNewDeckCodeAndUpdateHistory(this.state.draftMode, results),\n ...(results[this.state.activeTeam][this.state.activeSlot] ? { activeTeam: team, activeSlot: slot } : {})\n })\n }\n\n render() {\n return (\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n\n
\n Deck code :\n { this.state.deckCode ? (\n
\n

{ this.state.deckCode }

\n \n \n \n {\" \"}\n \n \n \n {this.state.copyAlert && (\n
\n C'est copié !\n \n
\n )}\n
\n ) :
Le code sera généré une fois la compo finie
}\n
\n\n
\n {this.state.draftMode === \"2\" &&

Équipe 1

}\n \n {this.state.draftMode === \"2\" && [\n

Équipe 2

,\n \n ]}\n
\n\n
\n \n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Trans, withTranslation } from 'react-i18next'\nimport SearchInput from '../SearchInput'\nimport { ChampionType } from '../types'\nimport { getTranslatedTextFromObject } from '../utils'\n\n\nclass CardFilter extends Component {\n render() {\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
\n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n\n
\n
\n \n
\n { this.props.champions.map((champion) => {\n return (\n
\n \n \n
\n );\n })}\n
\n
\n
\n\n
\n \n \n
\n
\n )\n }\n}\n\nCardFilter.propTypes = {\n champions: PropTypes.arrayOf(ChampionType),\n filter: PropTypes.shape({\n red: PropTypes.bool,\n yellow: PropTypes.bool,\n blue: PropTypes.bool,\n attack: PropTypes.bool,\n skill: PropTypes.bool,\n reaction: PropTypes.bool,\n english: PropTypes.bool,\n french: PropTypes.bool,\n search: PropTypes.string\n }),\n onInputChange: PropTypes.func,\n onClearSearchInput: PropTypes.func,\n onSelectAllChampions: PropTypes.func,\n onDeselectAllChampions: PropTypes.func\n}\n\nexport default withTranslation()(CardFilter);\n","import React, { Component } from 'react'\n\nimport \"./CardCard.css\"\nimport { CardType } from '../types'\nimport { Trans, withTranslation } from 'react-i18next'\nimport { getTranslatedTextFromObject } from '../utils'\n\n\nclass CardCard extends Component {\n render() {\n const card = this.props.card\n\n let cardColor = \"primary\"\n\n if (card.color === \"red\") {\n cardColor = \"danger\"\n }\n else if (card.color === \"yellow\") {\n cardColor = \"warning\"\n }\n\n return (\n
\n
\n
{ getTranslatedTextFromObject(card.name, this.props.i18n.language) }
\n
{ getTranslatedTextFromObject(card.metadata.championName, this.props.i18n.language) } · { this.props.t(card.type) }
\n
\n
\n
\n {card.movement !== 0 && [\n
Mouvement
,\n
{ card.movement }
\n ]}\n\n {card.range !== null && ([\n
Portée
,\n
\n { card.range.min } - { card.range.max }\n
\n ])}\n\n {card.range !== null && ([\n
Type de tir
,\n
\n { card.range.direct ? \"direct\" : \"indirect\" }\n
\n ])}\n\n {card.range === null && card.aoe !== null && ([\n
Zone d'effet
,\n
{ card.aoe } case{card.aoe !== 1 && \"s\"}
\n ])}\n\n {card.strength !== null && ([\n
Force
,\n
{ card.strength }
\n ])}\n\n {card.defense !== null && ([\n
Défense
,\n
{ card.defense }
\n ])}\n
\n
\n {\n getTranslatedTextFromObject(card.text, this.props.i18n.language).map(\n (text, idx) => (

{ text }

)\n )\n }\n
\n
\n
\n )\n }\n}\n\nCardCard.propTypes = {\n card: CardType\n}\n\nexport default withTranslation()(CardCard)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport CardCard from './CardCard'\nimport { CardType } from '../types'\n\n\nexport default class CardList extends Component {\n render() {\n return (\n
\n {this.props.cards.map((card) => (\n
\n \n
\n ))}\n
\n )\n }\n}\n\nCardList.propTypes = {\n cards: PropTypes.arrayOf(CardType)\n}\n","import React, { Component } from 'react'\nimport data from '../data.json'\nimport CardFilter from './CardFilter'\nimport CardList from './CardList'\n\n\nconst CARDS = [].concat.apply([], Object.values(data).map((champion) => champion.cards))\nconst CHAMPIONS = Object.values(data).map((champion) => ({ id: champion.id.toLowerCase(), name: champion.name }))\n\nconst DEFAULT_STATE = {\n red: true,\n yellow: true,\n blue: true,\n attack: true,\n skill: true,\n reaction: true,\n english: true,\n french: true,\n\n search: \"\"\n}\n\nfor (const { id } of CHAMPIONS) {\n DEFAULT_STATE[id] = true;\n}\n\nfunction normalizeString(str) {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[.,/#!$%^&*;:{}=\\-_'\"`~()]/g, \" \")\n .replace(/\\s{2,}/g, \" \")\n .toLowerCase()\n .trim()\n}\n\nexport default class Cards extends Component {\n constructor(props) {\n super(props)\n\n this.state = DEFAULT_STATE\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleSearchInputClear = this.handleSearchInputClear.bind(this);\n this.selectAllChampionsFilters = this.selectAllChampionsFilters.bind(this);\n this.deselectAllChampionsFilters = this.deselectAllChampionsFilters.bind(this);\n }\n\n handleInputChange(event) {\n const target = event.target\n const value = [\n 'red', 'blue', 'yellow', 'attack', 'skill', 'reaction', 'english', 'french', ...CHAMPIONS.map((champion) => champion.id)\n ].includes(target.name) ? target.checked : target.value\n const name = target.name\n\n this.setState({\n [name]: value\n })\n }\n\n handleSearchInputClear() {\n this.setState({ search: \"\" })\n }\n\n selectAllChampionsFilters() {\n const newState = {}\n\n for (const { id } of CHAMPIONS) {\n newState[id] = true;\n }\n\n this.setState(newState)\n }\n\n deselectAllChampionsFilters() {\n const newState = {}\n\n for (const { id } of CHAMPIONS) {\n newState[id] = false;\n }\n\n this.setState(newState)\n }\n\n render() {\n let langWanted = 'i18n'\n if (this.state.english && !this.state.french) {\n langWanted = 'en'\n }\n else if (!this.state.english && this.state.french) {\n langWanted = 'fr'\n }\n\n const searches = normalizeString(this.state.search).split(' ')\n\n const cards = CARDS.filter((card) => {\n for (const search of searches) {\n if (!card.metadata.searchData[langWanted].includes(search)) {\n return false\n }\n\n if (!this.state[card.color]) {\n return false\n }\n\n if (!this.state[card.type]) {\n return false\n }\n\n if (!this.state[normalizeString(card.number.slice(0, 3))]) {\n return false\n }\n }\n\n return true\n })\n\n return (\n
\n \n \n
\n )\n }\n}\n","import React from 'react'\nimport './App.css'\nimport { BrowserRouter as Router, Switch, Route, Link, NavLink } from 'react-router-dom'\nimport { useTranslation, Trans } from 'react-i18next'\n\nimport Builder from './Builder/builder'\nimport Cards from './Cards/Cards'\nimport Champions from './champions/Champions'\nimport logo from './logo192.png'\n\nexport default function App() {\n const { i18n } = useTranslation();\n\n const changeLanguage = (lang) => {\n i18n.changeLanguage(lang);\n };\n\n const setEnglish = () => {\n changeLanguage('en')\n }\n\n const setFrench = () => {\n changeLanguage('fr')\n }\n\n return (\n \n \n\n \n \n \n \n \n \n \n )\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport i18n from \"i18next\";\nimport i18nLanguageDetector from 'i18next-browser-languagedetector'\nimport { initReactI18next } from \"react-i18next\";\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport English from './locales/en.json'\nimport French from './locales/fr.json'\n\nconst languageDetector = new i18nLanguageDetector();\nlanguageDetector.addDetector({\n name: 'defaultToEnglish',\n cacheUserLanguage() {},\n\n lookup() {\n return 'en';\n }\n});\n\ni18n\n .use(initReactI18next)\n .use(languageDetector)\n .init({\n resources: {\n en: {\n translation: {\n skill: 'Skill',\n attack: 'Attack',\n reaction: 'Reaction',\n ...English\n }\n },\n fr: {\n translation: {\n skill: 'Compétence',\n attack: 'Attaque',\n reaction: 'Réaction',\n ...French\n }\n },\n },\n fallbackLng: \"en\",\n supportedLngs: [\"en\", \"fr\"],\n\n interpolation: {\n escapeValue: false\n },\n\n detection: {\n order: ['localStorage', 'navigator', 'htmlTag', 'defaultToEnglish'],\n\n lookupLocalStorage: 'i18nextLng',\n\n caches: ['localStorage'],\n excludeCacheFor: ['cimode'],\n\n htmlTag: document.documentElement\n }\n });\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}