{"version":3,"sources":["components/games/GameItem.module.css","pages/Details.module.css","pages/Home.module.css","components/layout/Header.module.css","components/layout/BottomBar.module.css","pages/Popular.module.css","components/layout/Footer.module.css","pages/Favorites.module.css","pages/NotFound.module.css","components/games/GameList.module.css","components/ui/Spinner.module.css","components/layout/Layout.module.css","hooks/useFetch.js","context/FavoritesContext.js","components/games/GameItem.js","components/games/GameList.js","components/ui/Spinner.js","pages/Home.js","hooks/useDebounce.js","pages/Popular.js","pages/Favorites.js","pages/Details.js","pages/NotFound.js","components/layout/Header.js","components/layout/Footer.js","components/layout/BottomBar.js","components/layout/Layout.js","App.js","index.js"],"names":["module","exports","useFetch","url","useState","data","setData","isPending","setIsPending","error","setError","useEffect","controller","AbortController","signal","fetchData","a","fetch","headers","response","ok","Error","json","result","name","console","log","message","abort","FavoritesContext","createContext","favorites","totalFavorites","addToFavorite","game","gameIsFavorite","gameId","favoriteReducer","action","type","payload","filter","favoriteGame","id","FavoritesContextProvider","children","useReducer","JSON","parse","localStorage","getItem","dispatch","some","setItem","stringify","Provider","value","length","GameItem","item","useContext","className","styles","card","to","card_header","thumbnail","src","thumbnailUrl","alt","card_body","title","description","substr","card_footer","badge","category","onClick","btn","heart_icon","style","color","GameList","items","grid","map","Spinner","spinner","Home","filteredGames","setFilteredGames","searchTerm","setSearchTerm","process","allGames","debouncedSearchTerm","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","useDebounce","currentYear","Date","getFullYear","toLowerCase","includes","form","search_icon","onChange","e","target","placeholder","input","games_content","Popular","selectedCategory","setSelectedCategory","currentMonth","Intl","DateTimeFormat","month","format","popular","lead","htmlFor","defaultValue","disabled","slice","Favorites","favorite","feedback","Details","useParams","game_details","article","embedContainer","width","height","scrolling","split","paragraph","idx","margin","fontSize","info_list","author","creation","btn_favorite","NotFound","not_found","link","Header","activeStyle","header","container","logo","navigation","isActive","undefined","Footer","footer","created","heart","BottomBar","icon","Layout","main_content","App","path","element","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"oHACAA,EAAOC,QAAU,CAAC,KAAO,uBAAuB,YAAc,8BAA8B,UAAY,4BAA4B,UAAY,4BAA4B,MAAQ,wBAAwB,YAAc,8BAA8B,YAAc,8BAA8B,MAAQ,wBAAwB,cAAgB,gCAAgC,IAAM,sBAAsB,WAAa,+B,gBCA7ZD,EAAOC,QAAU,CAAC,aAAe,8BAA8B,QAAU,yBAAyB,UAAY,2BAA2B,MAAQ,uBAAuB,UAAY,2BAA2B,SAAW,0BAA0B,cAAgB,+BAA+B,gBAAkB,iCAAiC,aAAe,8BAA8B,WAAa,4BAA4B,eAAiB,kC,oBCA7bD,EAAOC,QAAU,CAAC,KAAO,mBAAmB,MAAQ,oBAAoB,YAAc,0BAA0B,cAAgB,8B,gBCAhID,EAAOC,QAAU,CAAC,OAAS,uBAAuB,UAAY,0BAA0B,KAAO,qBAAqB,WAAa,6B,gBCAjID,EAAOC,QAAU,CAAC,WAAa,8BAA8B,OAAS,0BAA0B,KAAO,0B,gBCAvGD,EAAOC,QAAU,CAAC,KAAO,sBAAsB,OAAS,0B,gBCAxDD,EAAOC,QAAU,CAAC,OAAS,uBAAuB,QAAU,wBAAwB,MAAQ,wB,kBCA5FD,EAAOC,QAAU,CAAC,SAAW,8B,gBCA7BD,EAAOC,QAAU,CAAC,UAAY,4BAA4B,KAAO,yB,kBCAjED,EAAOC,QAAU,CAAC,KAAO,yB,gBCAzBD,EAAOC,QAAU,CAAC,QAAU,yBAAyB,KAAO,wB,iBCA5DD,EAAOC,QAAU,CAAC,aAAe,+B,iKCCpBC,EAAW,SAACC,GACvB,MAAwBC,mBAAS,MAAjC,mBAAOC,EAAP,KAAaC,EAAb,KACA,EAAkCF,oBAAS,GAA3C,mBAAOG,EAAP,KAAkBC,EAAlB,KACA,EAA0BJ,mBAAS,MAAnC,mBAAOK,EAAP,KAAcC,EAAd,KA0CA,OAxCAC,qBAAU,WACR,IAAMC,EAAa,IAAIC,gBACfC,EAAWF,EAAXE,OAERR,EAAQ,MACRE,GAAa,GACbE,EAAS,MAET,IAAMK,EAAS,uCAAG,8BAAAC,EAAA,+EAESC,MAAMd,EAAK,CAChCW,SACAI,QAAS,KAJG,WAERC,EAFQ,QAQAC,GARA,sBASN,IAAIC,MAAM,6BATJ,uBAYOF,EAASG,OAZhB,OAYRC,EAZQ,OAadjB,EAAQiB,EAAOlB,MACfG,GAAa,GACbE,EAAS,MAfK,kDAiBdF,GAAa,GACM,eAAf,KAAMgB,MACRC,QAAQC,IAAI,KAAMC,SAClBjB,EAAS,KAAMiB,UAEfjB,EAAS,KAAMiB,SAtBH,0DAAH,qDA6Bf,OAFAZ,IAEO,kBAAMH,EAAWgB,WACvB,CAACzB,IAEG,CAAEE,OAAME,YAAWE,U,yEC7CfoB,EAAmBC,wBAAc,CAC5CC,UAAW,GACXC,eAAgB,EAChBC,cAAe,SAACC,KAChBC,eAAgB,SAACC,OAGbC,EAAkB,SAACN,EAAWO,GAClC,OAAQA,EAAOC,MACb,IAAK,eACH,MAAM,CAAED,EAAOE,SAAf,mBAA2BT,IAC7B,IAAK,kBACH,OAAOA,EAAUU,QACf,SAACC,GAAD,OAAkBA,EAAaC,KAAOL,EAAOE,WAEjD,QACE,OAAOT,IAIE,SAASa,EAAT,GAAiD,IAAbC,EAAY,EAAZA,SACjD,EAA8BC,qBAAWT,EAAiB,IAAI,WAAO,IAAD,EAClE,iBAAOU,KAAKC,MAAMC,aAAaC,QAAQ,yBAAvC,QAA4D,MAD9D,mBAAOnB,EAAP,KAAkBoB,EAAlB,KAIMhB,EAAiB,SAACC,GACtB,OAAOL,EAAUqB,MAAK,SAACV,GAAD,OAAkBA,EAAaC,KAAOP,MAe9D,OAJAzB,qBAAU,WACRsC,aAAaI,QAAQ,gBAAiBN,KAAKO,UAAUvB,MACpD,CAACA,IAGF,cAACF,EAAiB0B,SAAlB,CACEC,MAAO,CACLzB,YACAC,eAAgBD,EAAU0B,OAC1BxB,cAjBgB,SAACC,GACjBC,EAAeD,EAAKS,IACtBQ,EAAS,CAAEZ,KAAM,kBAAmBC,QAASN,EAAKS,KAElDQ,EAAS,CAAEZ,KAAM,eAAgBC,QAASN,KAcxCC,kBALJ,SAQGU,IC3CP,IAuCea,EAvCE,SAAC,GAAoB,IAAZxB,EAAW,EAAjByB,KAClB,EAA0CC,qBAAW/B,GAA7CI,EAAR,EAAQA,cAAeE,EAAvB,EAAuBA,eAEvB,OACE,sBAAK0B,UAAWC,IAAOC,KAAvB,UACE,cAAC,IAAD,CAAMC,GAAE,iBAAY9B,EAAKS,IAAMkB,UAAWC,IAAOG,YAAjD,SACE,qBAAKJ,UAAWC,IAAOI,UAAWC,IAAKjC,EAAKkC,aAAcC,IAAI,WAEhE,sBAAKR,UAAWC,IAAOQ,UAAvB,UACE,cAAC,IAAD,CAAMN,GAAE,iBAAY9B,EAAKS,IAAMkB,UAAWC,IAAOS,MAAjD,SACGrC,EAAKqC,QAER,oBAAGV,UAAS,UAAKC,IAAOU,YAAZ,eAAZ,UACGtC,EAAKsC,YAAYC,OAAO,EAAG,IAD9B,SAGA,sBAAKZ,UAAWC,IAAOY,YAAvB,UACE,8BACE,sBAAMb,UAAWC,IAAOa,MAAxB,SAAgCzC,EAAK0C,aAEvC,wBACEC,QAAS,kBAAM5C,EAAcC,IAC7B2B,UAAWC,IAAOgB,IAClBP,MACEpC,EAAeD,EAAKS,IAChB,wBACA,mBANR,SASE,cAAC,IAAD,CACEkB,UAAWC,IAAOiB,WAClBC,MAAO,CAAEC,MAAO9C,EAAeD,EAAKS,IAAM,MAAQ,yBCzBjDuC,EAVE,SAAC,GAAe,IAAbC,EAAY,EAAZA,MAClB,OACE,qBAAKtB,UAAWC,IAAOsB,KAAvB,SACGD,EAAME,KAAI,SAACnD,GAAD,OACT,cAAC,EAAD,CAAwByB,KAAMzB,GAAfA,EAAKS,U,iBCDb2C,EAJC,WACd,OAAO,qBAAKzB,UAAWC,IAAOyB,WCqEjBC,EA9DF,WACX,MAA0CpF,mBAAS,IAAnD,mBAAOqF,EAAP,KAAsBC,EAAtB,KACA,EAAoCtF,mBAAS,IAA7C,mBAAOuF,EAAP,KAAmBC,EAAnB,KAEA,EAII1F,EAAS,GAAD,OAAI2F,4BAAJ,qBAHJC,EADR,EACEzF,KACAE,EAFF,EAEEA,UACAE,EAHF,EAGEA,MAGIsF,ECnBmB,SAACvC,EAAOwC,GACjC,MAA4C5F,mBAASoD,GAArD,mBAAOyC,EAAP,KAAuBC,EAAvB,KAYA,OAVAvF,qBAAU,WACR,IAAMwF,EAAUC,YAAW,WACzBF,EAAkB1C,KACjBwC,GAEH,OAAO,WACLK,aAAaF,MAEd,CAAC3C,EAAOwC,IAEJC,EDMqBK,CAAYX,EAAY,KAE9CY,GAAc,IAAIC,MAAOC,cAY/B,OAVA9F,qBAAU,WACJoF,GAAuBD,GACzBJ,EACEI,EAASrD,QAAO,SAACP,GAAD,OACdA,EAAKqC,MAAMmC,cAAcC,SAASZ,EAAoBW,qBAI3D,CAACX,EAAqBD,IAGvB,qCACE,oCACE,sBAAKjC,UAAU,cAAf,UACE,qBAAIA,UAAU,QAAd,iDACuC0C,EADvC,OAGA,oBAAG1C,UAAU,sBAAb,UACGiC,GAAYA,EAASrC,OADxB,+CAIF,sBAAMI,UAAWC,IAAO8C,KAAxB,SACE,kCACE,cAAC,IAAD,CAAU/C,UAAWC,IAAO+C,cAC5B,uBACEC,SAAU,SAACC,GAAD,OAAOnB,EAAcmB,EAAEC,OAAOxD,QACxCjB,KAAK,SACL0E,YAAY,mBACZpD,UAAWC,IAAOoD,aAIvBnB,GAAgD,IAAzBN,EAAchC,QACpC,mBAAGI,UAAU,cAAb,yCAIJ,0BAASA,UAAWC,IAAOqD,cAA3B,UACG5G,GAAa,cAAC,EAAD,IACbE,GAAS,4BAAIA,IACbqF,GACC,cAAC,EAAD,CAAUX,MAAOY,EAAsBN,EAAgBK,W,iBEGlDsB,EA5DC,WACd,MAAgDhH,mBAAS,MAAzD,mBAAOiH,EAAP,KAAyBC,EAAzB,KACInH,EAAG,UAAM0F,4BAAN,4BAEHwB,IACFlH,EAAG,UAAM0F,4BAAN,6CAAwEwB,IAG7E,MAAmCnH,EAASC,GAApCE,EAAR,EAAQA,KAAME,EAAd,EAAcA,UAAWE,EAAzB,EAAyBA,MACnB8F,GAAc,IAAIC,MAAOC,cACzBc,EAAeC,KAAKC,eAAe,QAAS,CAAEC,MAAO,SAAUC,OACnE,IAAInB,MAgBN,OACE,0BAAS3C,UAAWC,IAAO8D,QAA3B,UACE,qBAAI/D,UAAU,QAAd,wBACc,IACZ,sBAAMA,UAAWC,IAAO+D,KAAxB,SACGR,GAAsC,YACjC,IAJV,+BAK+BE,EAL/B,IAK8ChB,KAG9C,sBAAK1C,UAAWC,IAAOrB,OAAvB,UACE,uBAAOqF,QAAQ,WAAf,4BACA,yBACEC,aAAa,kBACbpF,GAAG,WACHmE,SAAU,SAACC,GAAD,OAAOO,EAAoBP,EAAEC,OAAOxD,QAHhD,UAKE,wBAAQwE,UAAQ,EAAhB,6BA9BW,CACjB,MACA,SACA,UACA,WACA,OACA,aACA,SACA,SACA,SACA,YAqBkB3C,KAAI,SAACT,GAAD,OACd,yBAAuBpB,MAAOoB,EAA9B,iBACOA,IADMA,YAOlBrE,GAAa,cAAC,EAAD,IACbE,GAAS,4BAAIA,IACbJ,GAAQ,cAAC,EAAD,CAAU8E,MAAO9E,EAAK4H,MAAM,EAAG,U,iBC1C/BC,EAfG,WAChB,MAAsCtE,qBAAW/B,GAAzCE,EAAR,EAAQA,UAAWC,EAAnB,EAAmBA,eAEnB,OACE,0BAAS6B,UAAWC,IAAOqE,SAA3B,UACE,oBAAItE,UAAU,QAAd,iCACoB,IAAnB7B,EACC,mBAAG6B,UAAWC,IAAOsE,SAArB,oCAEA,cAAC,EAAD,CAAUjD,MAAOpD,Q,gBCkEVsG,EAtEC,WACd,IAAQ1F,EAAO2F,cAAP3F,GACR,EAIIzC,EAAS,GAAD,OAAI2F,4BAAJ,+BAAwDlD,IAH5DT,EADR,EACE7B,KACAE,EAFF,EAEEA,UACAE,EAHF,EAGEA,MAKF,EAA0CmD,qBAAW/B,GAA7CM,EAAR,EAAQA,eAAgBF,EAAxB,EAAwBA,cAExB,OACE,0BAAS4B,UAAWC,IAAOyE,aAA3B,UACGhI,GAAa,cAAC,EAAD,IACbE,GAAS,4BAAIA,IACbyB,GACC,0BAAS2B,UAAWC,IAAO0E,QAA3B,UACE,wBAAQ3E,UAAWC,IAAO2E,eAAgBtE,IAAKjC,EAAK/B,IAAKuI,MAAM,MAAMC,OAAO,MAAMC,UAAU,OAC5F,qBACE/E,UAAWC,IAAOI,UAClBC,IAAKjC,EAAKkC,aACVC,IAAKnC,EAAKqC,QAEZ,qBAAIV,UAAWC,IAAOS,MAAtB,mBAAoCrC,EAAKqC,SACxCrC,EAAKsC,YAAYqE,MAAM,kBAAkBxD,KAAI,SAACyD,EAAWC,GAAZ,OAC5C,mBAAa/D,MAAO,CAAEgE,OAAQ,SAAUC,SAAU,QAAlD,SACGH,GADKC,MAKV,wDACA,qBAAIlF,UAAWC,IAAOoF,UAAtB,UACE,+BACE,sBAAMrF,UAAU,aAAhB,mBACA,4BAAI3B,EAAKqC,WAEX,+BACE,sBAAMV,UAAU,aAAhB,uBACA,4BAAI3B,EAAKiH,YAEX,+BACE,sBAAMtF,UAAU,aAAhB,0BACA,4BAAI3B,EAAKkH,cAEX,+BACE,sBAAMvF,UAAU,aAAhB,sBACA,4BAAI3B,EAAK0C,iBAGb,wBACEC,QAAS,kBAAM5C,EAAcC,IAC7B2B,UAAS,cAASC,IAAOuF,cACzB9E,MACEpC,EAAeD,EAAKS,IAChB,wBACA,mBANR,SASE,cAAC,IAAD,CACEkB,UAAWC,IAAOiB,WAClBE,MAAO9C,EAAeD,EAAKS,IAAM,UAAY,kB,iBC1D5C2G,EAXE,WACf,OACE,0BAASzF,UAAWC,IAAOyF,UAA3B,UACE,oBAAI1F,UAAU,QAAd,kCACA,cAAC,IAAD,CAAMG,GAAG,IAAIH,UAAWC,IAAO0F,KAA/B,kC,yBCyCSC,EA5CA,WACb,IAAMC,EAAc,CAClBzE,MAAO,QAGT,OACE,wBAAQpB,UAAWC,IAAO6F,OAA1B,SACE,sBAAK9F,UAAS,UAAKC,IAAO8F,UAAZ,cAAd,UACE,cAAC,IAAD,CAAS5F,GAAG,IAAZ,SACE,cAAC,IAAD,CAAkBH,UAAWC,IAAO+F,SAEtC,qBAAKhG,UAAWC,IAAOgG,WAAvB,SACE,+BACE,6BACE,cAAC,IAAD,CACE9F,GAAG,IACHgB,MAAO,qBAAG+E,SAA2BL,OAAcM,GAFrD,oBAOF,6BACE,cAAC,IAAD,CACEhG,GAAG,UACHgB,MAAO,qBAAG+E,SAA2BL,OAAcM,GAFrD,uBAOF,6BACE,cAAC,IAAD,CACEhG,GAAG,YACHgB,MAAO,qBAAG+E,SAA2BL,OAAcM,GAFrD,oC,iBCVCC,EArBA,WACb,IAAM1D,GAAc,IAAIC,MAAOC,cAE/B,OACE,wBAAQ5C,UAAWC,IAAOoG,OAA1B,SACE,sBAAKrG,UAAU,YAAf,UACE,oBAAGA,UAAU,aAAb,kBACK0C,EADL,sCAGA,oBAAG1C,UAAWC,IAAOqG,QAArB,yBACe,IACb,+BACE,cAAC,IAAD,CAAatG,UAAWC,IAAOsG,UACzB,IAJV,oB,iBCiCOC,GAxCG,WAChB,IAAMX,EAAc,CAClBzE,MAAO,QAGT,OACE,qBAAKpB,UAAWC,IAAOgG,WAAvB,SACE,+BACE,6BACE,eAAC,IAAD,CACE9F,GAAG,IACHgB,MAAO,qBAAG+E,SAA2BL,OAAcM,GAFrD,UAIE,cAAC,IAAD,CAAkBnG,UAAWC,IAAOwG,OACpC,6CAGJ,6BACE,eAAC,IAAD,CACEtG,GAAG,WACHgB,MAAO,qBAAG+E,SAA2BL,OAAcM,GAFrD,UAIE,cAAC,IAAD,CAAcnG,UAAWC,IAAOwG,OAChC,gDAGJ,6BACE,eAAC,IAAD,CACEtG,GAAG,aACHgB,MAAO,qBAAG+E,SAA2BL,OAAcM,GAFrD,UAIE,cAAC,IAAD,CAASnG,UAAWC,IAAOwG,OAC3B,wD,oBCpBGC,GAXA,SAAC,GAAkB,IAAhB1H,EAAe,EAAfA,SAChB,OACE,qCACE,cAAC,EAAD,IACA,cAAC,GAAD,IACA,sBAAMgB,UAAS,UAAKC,KAAO0G,aAAZ,cAAf,SAAsD3H,IACtD,cAAC,EAAD,QCWS4H,OAdf,WACE,OACE,cAAC,GAAD,UACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOC,KAAK,IAAIC,QAAS,cAAC,EAAD,MACzB,cAAC,IAAD,CAAOD,KAAK,UAAUC,QAAS,cAAC,EAAD,MAC/B,cAAC,IAAD,CAAOD,KAAK,YAAYC,QAAS,cAAC,EAAD,MACjC,cAAC,IAAD,CAAOD,KAAK,YAAYC,QAAS,cAAC,EAAD,MACjC,cAAC,IAAD,CAAOD,KAAK,IAAIC,QAAS,cAAC,EAAD,YCXjCC,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,IAAD,UACE,cAAClI,EAAD,UACE,cAAC,GAAD,UAINmI,SAASC,eAAe,W","file":"static/js/main.6b440dcc.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"GameItem_card__1V50_\",\"card_header\":\"GameItem_card_header__33Cj5\",\"thumbnail\":\"GameItem_thumbnail__2VhdS\",\"card_body\":\"GameItem_card_body__xPvFa\",\"title\":\"GameItem_title__34iNk\",\"description\":\"GameItem_description__SRz4P\",\"card_footer\":\"GameItem_card_footer__6IQmr\",\"badge\":\"GameItem_badge__2lUcS\",\"platform_icon\":\"GameItem_platform_icon__3U9bk\",\"btn\":\"GameItem_btn__1j3Rk\",\"heart_icon\":\"GameItem_heart_icon__1bUN-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"game_details\":\"Details_game_details__1hKIN\",\"article\":\"Details_article__ymSBd\",\"thumbnail\":\"Details_thumbnail__csSp3\",\"title\":\"Details_title__OugfD\",\"info_list\":\"Details_info_list__UvUG_\",\"platform\":\"Details_platform__1pqsn\",\"platform_icon\":\"Details_platform_icon__2zB_q\",\"screenshot_grid\":\"Details_screenshot_grid__2bTca\",\"btn_favorite\":\"Details_btn_favorite__2Chs3\",\"heart_icon\":\"Details_heart_icon__1gsbK\",\"embedContainer\":\"Details_embedContainer__1c0GK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"form\":\"Home_form__3mkrt\",\"input\":\"Home_input__3derM\",\"search_icon\":\"Home_search_icon__1dfOs\",\"games_content\":\"Home_games_content__ZvEdR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"Header_header__2otSh\",\"container\":\"Header_container__3UMvB\",\"logo\":\"Header_logo__2yYRj\",\"navigation\":\"Header_navigation__36OsL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"navigation\":\"BottomBar_navigation__3r595\",\"active\":\"BottomBar_active__2RQAT\",\"icon\":\"BottomBar_icon__1fN0J\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"lead\":\"Popular_lead__2ZlIt\",\"filter\":\"Popular_filter__3KLPS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Footer_footer__28pE7\",\"created\":\"Footer_created__3g-n7\",\"heart\":\"Footer_heart__21Rh7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"favorite\":\"Favorites_favorite__3dWRT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"not_found\":\"NotFound_not_found__AxFLK\",\"link\":\"NotFound_link__SPICF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"grid\":\"GameList_grid__17XYg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"spinner\":\"Spinner_spinner__2k4-R\",\"spin\":\"Spinner_spin__39K9K\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"main_content\":\"Layout_main_content__EnlhF\"};","import { useEffect, useState } from \"react\";\n\nexport const useFetch = (url) => {\n const [data, setData] = useState(null);\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n const controller = new AbortController();\n const { signal } = controller;\n\n setData(null);\n setIsPending(true);\n setError(null);\n\n const fetchData = async () => {\n try {\n const response = await fetch(url, {\n signal,\n headers: {\n },\n });\n\n if (!response.ok) {\n throw new Error(\"Could not fetch the data.\");\n }\n\n const result = await response.json();\n setData(result.data);\n setIsPending(false);\n setError(null);\n } catch (error) {\n setIsPending(false);\n if (error.name === \"AbortError\") {\n console.log(error.message);\n setError(error.message);\n } else {\n setError(error.message);\n }\n }\n };\n\n fetchData();\n\n return () => controller.abort();\n }, [url]);\n\n return { data, isPending, error };\n};\n","import { createContext, useEffect, useReducer } from \"react\";\n\nexport const FavoritesContext = createContext({\n favorites: [],\n totalFavorites: 0,\n addToFavorite: (game) => {},\n gameIsFavorite: (gameId) => {},\n});\n\nconst favoriteReducer = (favorites, action) => {\n switch (action.type) {\n case \"ADD_FAVORITE\":\n return [action.payload, ...favorites];\n case \"REMOVE_FAVORITE\":\n return favorites.filter(\n (favoriteGame) => favoriteGame.id !== action.payload\n );\n default:\n return favorites;\n }\n};\n\nexport default function FavoritesContextProvider({ children }) {\n const [favorites, dispatch] = useReducer(favoriteReducer, [], () => {\n return JSON.parse(localStorage.getItem(\"favoriteGames\")) ?? [];\n });\n\n const gameIsFavorite = (gameId) => {\n return favorites.some((favoriteGame) => favoriteGame.id === gameId);\n };\n\n const addToFavorite = (game) => {\n if (gameIsFavorite(game.id)) {\n dispatch({ type: \"REMOVE_FAVORITE\", payload: game.id });\n } else {\n dispatch({ type: \"ADD_FAVORITE\", payload: game });\n }\n };\n\n useEffect(() => {\n localStorage.setItem(\"favoriteGames\", JSON.stringify(favorites));\n }, [favorites]);\n\n return (\n \n {children}\n \n );\n}\n","import { useContext } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { AiFillWindows, AiFillHeart } from \"react-icons/ai\";\nimport { GoBrowser } from \"react-icons/go\";\n// styles\nimport styles from \"./GameItem.module.css\";\n\nimport { FavoritesContext } from \"../../context/FavoritesContext\";\n\nconst GameItem = ({ item: game }) => {\n const { addToFavorite, gameIsFavorite } = useContext(FavoritesContext);\n\n return (\n
\n \n \"test\"\n \n
\n \n {game.title}\n \n

\n {game.description.substr(0, 70)}...\n

\n
\n
\n {game.category}\n
\n addToFavorite(game)}\n className={styles.btn}\n title={\n gameIsFavorite(game.id)\n ? \"Remove from favorites\"\n : \"Add to favorites\"\n }\n >\n \n \n
\n
\n
\n );\n};\n\nexport default GameItem;\n","// styles\nimport styles from \"./GameList.module.css\";\nimport GameItem from \"./GameItem\";\n\nconst GameList = ({ items }) => {\n return (\n
\n {items.map((game) => (\n \n ))}\n
\n );\n};\n\nexport default GameList;\n","// styles\nimport styles from \"./Spinner.module.css\";\n\nconst Spinner = () => {\n return
;\n};\n\nexport default Spinner;\n","import { useState, useEffect } from \"react\";\nimport { BiSearch } from \"react-icons/bi\";\nimport { useFetch } from \"../hooks/useFetch\";\nimport { useDebounce } from \"../hooks/useDebounce\";\n\n// styles\nimport styles from \"./Home.module.css\";\n\nimport GameList from \"../components/games/GameList\";\nimport Spinner from \"../components/ui/Spinner\";\n\nconst Home = () => {\n const [filteredGames, setFilteredGames] = useState([]);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const {\n data: allGames,\n isPending,\n error,\n } = useFetch(`${process.env.REACT_APP_API_URL}/games?sid=76N9I`);\n\n const debouncedSearchTerm = useDebounce(searchTerm, 500);\n\n const currentYear = new Date().getFullYear();\n\n useEffect(() => {\n if (debouncedSearchTerm && allGames) {\n setFilteredGames(\n allGames.filter((game) =>\n game.title.toLowerCase().includes(debouncedSearchTerm.toLowerCase())\n )\n );\n }\n }, [debouncedSearchTerm, allGames]);\n\n return (\n <>\n
\n
\n

\n Best Free to Play Browser Games for {currentYear}!\n

\n

\n {allGames && allGames.length} free-to-play games found in our list!\n

\n
\n
\n \n
\n {debouncedSearchTerm && filteredGames.length === 0 && (\n

Sorry, no games found :(

\n )}\n
\n\n
\n {isPending && }\n {error &&

{error}

}\n {allGames && (\n \n )}\n
\n \n );\n};\n\nexport default Home;\n","import { useEffect, useState } from \"react\";\n\nexport const useDebounce = (value, delay) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n","import { useState } from \"react\";\nimport { useFetch } from \"../hooks/useFetch\";\n\n// styles\nimport styles from \"./Popular.module.css\";\n\nimport GameList from \"../components/games/GameList\";\nimport Spinner from \"../components/ui/Spinner\";\n\nconst Popular = () => {\n const [selectedCategory, setSelectedCategory] = useState(null);\n let url = `${process.env.REACT_APP_API_URL}/games?sid=76N9I&order=q`;\n\n if (selectedCategory) {\n url = `${process.env.REACT_APP_API_URL}/games?sid=76N9I&order=q&category=${selectedCategory}`;\n }\n\n const { data, isPending, error } = useFetch(url);\n const currentYear = new Date().getFullYear();\n const currentMonth = Intl.DateTimeFormat(\"en-US\", { month: \"long\" }).format(\n new Date()\n );\n\n const categories = [\n \"MMO\",\n \"MMORPG\",\n \"Shooter\",\n \"Strategy\",\n \"Moba\",\n \"Card Games\",\n \"Racing\",\n \"Sports\",\n \"Social\",\n \"Fighting\",\n ];\n\n return (\n
\n

\n Top 10 Free{\" \"}\n \n {selectedCategory ? selectedCategory : \"To Play\"}\n {\" \"}\n Games for PC and Browser in {currentMonth} {currentYear}\n

\n\n
\n \n setSelectedCategory(e.target.value)}\n >\n \n {categories.map((category) => (\n \n ))}\n \n
\n\n {isPending && }\n {error &&

{error}

}\n {data && }\n
\n );\n};\n\nexport default Popular;\n","import { useContext } from \"react\";\nimport { FavoritesContext } from \"../context/FavoritesContext\";\nimport GameList from \"../components/games/GameList\";\n\n// styles\nimport styles from \"./Favorites.module.css\";\n\nconst Favorites = () => {\n const { favorites, totalFavorites } = useContext(FavoritesContext);\n\n return (\n
\n

Your Favorite Games

\n {totalFavorites === 0 ? (\n

No favorite games yet!

\n ) : (\n \n )}\n
\n );\n};\n\nexport default Favorites;\n","import { useContext } from \"react\";\nimport { useParams } from \"react-router\";\nimport { AiFillHeart, AiFillWindows } from \"react-icons/ai\";\nimport { GoBrowser } from \"react-icons/go\";\nimport { useFetch } from \"../hooks/useFetch\";\nimport { FavoritesContext } from \"../context/FavoritesContext\";\n\n// styles\nimport styles from \"./Details.module.css\";\n\nimport Spinner from \"../components/ui/Spinner\";\n\nconst Details = () => {\n const { id } = useParams();\n const {\n data: game,\n isPending,\n error,\n } = useFetch(`${process.env.REACT_APP_API_URL}/game?sid=76N9I&gid=${id}`, {\n id,\n });\n\n const { gameIsFavorite, addToFavorite } = useContext(FavoritesContext);\n\n return (\n
\n {isPending && }\n {error &&

{error}

}\n {game && (\n
\n \n \n

About {game.title}

\n {game.description.split(/(\\r\\n|\\r|\\n)/gi).map((paragraph, idx) => (\n

\n {paragraph}\n

\n ))}\n\n

Additional Information

\n
    \n
  • \n Title\n

    {game.title}

    \n
  • \n
  • \n Developer\n

    {game.author}

    \n
  • \n
  • \n Release Date\n

    {game.creation}

    \n
  • \n
  • \n Category\n

    {game.category}

    \n
  • \n
\n addToFavorite(game)}\n className={`btn ${styles.btn_favorite}`}\n title={\n gameIsFavorite(game.id)\n ? \"Remove from favorites\"\n : \"Add to favorites\"\n }\n >\n \n \n
\n )}\n
\n );\n};\n\nexport default Details;\n","import { Link } from \"react-router-dom\";\n\nimport styles from \"./NotFound.module.css\";\n\nconst NotFound = () => {\n return (\n
\n

404 - Page Not Found

\n \n Back to Homepage\n \n
\n );\n};\n\nexport default NotFound;\n","import { NavLink } from \"react-router-dom\";\nimport { IoGameController } from \"react-icons/io5\";\n// styles\nimport styles from \"./Header.module.css\";\n\nconst Header = () => {\n const activeStyle = {\n color: \"#fff\",\n };\n\n return (\n
\n
\n \n \n \n \n
\n
\n );\n};\n\nexport default Header;\n","import { AiFillHeart } from \"react-icons/ai\";\n// styles\nimport styles from \"./Footer.module.css\";\n\nconst Footer = () => {\n const currentYear = new Date().getFullYear();\n\n return (\n \n );\n};\n\nexport default Footer;\n","import { NavLink } from \"react-router-dom\";\nimport { IoGameController, IoTrendingUp, IoHeart } from \"react-icons/io5\";\n\n// styles\nimport styles from \"./BottomBar.module.css\";\n\nconst BottomBar = () => {\n const activeStyle = {\n color: \"#fff\",\n };\n\n return (\n \n );\n};\n\nexport default BottomBar;\n","import Header from \"./Header\";\nimport Footer from \"./Footer\";\nimport BottomBar from \"./BottomBar\";\n\n// styles\nimport styles from \"./Layout.module.css\";\n\nconst Layout = ({ children }) => {\n return (\n <>\n
\n \n
{children}
\n