{"version":3,"sources":["types.ts","ui/misc.ts","api/index.ts","ui/styles/rootContainerStyles.ts","ui/styles/textStyles.ts","ui/styles/headingWithPaginationStyles.ts","ui/styles/svgStyles.ts","ui/styles/buttonStyles.ts","store/user/actions.ts","ui/components/MediaListMenu/styles.ts","ui/components/MediaListMenu/index.tsx","ui/components/WatchPartyRoom/item/styles.ts","ui/components/WatchPartyRoom/item/index.tsx","ui/components/WatchPartyRoom/grid/styles.ts","ui/components/WatchPartyRoom/grid/index.tsx","ui/components/UserList/item/styles.ts","ui/components/UserList/item/index.tsx","ui/components/UserList/grid/styles.ts","ui/components/UserList/grid/index.tsx","ui/components/UserList/styles.ts","ui/components/UserList/index.tsx","ui/components/EmoteSelect/styles.ts","ui/components/EmoteSelect/index.tsx","ui/components/Chat/item/index.tsx","ui/components/Chat/styles.ts","ui/components/Chat/index.tsx","store/home/home.actions.ts","store/user/reducer.ts","store/schedule/schedule.reducer.ts","store/explore/explore.reducer.ts","store/index.ts","ui/components/Anime/item/styles.ts","store/watchParty/watchParty.action.ts","ui/components/Navbar/styles.ts","assets/images/kuru.png","ui/components/Navbar/index.tsx","assets/images/kurumi.png","store/search/search.actions.ts","store/home/home.reducer.ts","store/watchParty/watchParty.reducer.ts","ui/styles/mob/rootContainerStyles.ts","store/app/reducer.ts","store/schedule/schedule.actions.ts","store/explore/explore.actions.ts","ui/store.ts","ui/styles/mob/textStyles.ts","store/animeDetails/animeDetails.actions.ts","ui/components/PaginationTabs/index.tsx","ui/components/Player/index.tsx","ui/components/SearchSortGroup/index.tsx","ui/components/Tooltips/SortTooltips.tsx","ui/components/Tooltips/PaginationTooltips.tsx","ui/components/Anime/item/index.tsx","ui/components/Anime/grid/styles.ts","ui/components/Anime/grid/index.tsx","ui/components/Button/styles.ts","ui/components/Button/index.tsx","ui/components/Episode/grid/styles.ts","ui/components/Episode/grid/index.tsx","ui/components/EpisodePlayer/styles.ts","ui/components/Genre/styles.ts","ui/components/Genre/index.tsx","ui/components/Input/styles.ts","ui/components/Input/index.tsx","ui/components/Loading/styles.ts","ui/components/Loading/index.tsx","utils/toastMessage.ts","utils/genres.ts","store/search/search.reducer.ts","utils/millisToReadable.ts","utils/useOutsideClickHook.ts","store/animeDetails/animeDetails.reducer.ts","ui/containers/Login/styles.ts","ui/containers/Login/index.tsx","ui/containers/Login/mob/index.tsx","pages/login/hooks.ts","pages/login/index.tsx","ui/PrivateRoute/PrivateRouteStyles.ts","assets/images/footer.png","ui/PrivateRoute/index.tsx","ui/components/FloatingActionButton/styles.ts","ui/components/FloatingActionButton/index.tsx","ui/components/Toast/index.tsx","App.tsx","index.tsx"],"names":["SORT_BY","SORT_ORDER","STATUS","MediaListStatus","kurumiApi","Axios","create","baseURL","headers","Accept","getAnimeEpisodeUrl","animeId","epNo","a","cookies","Cookies","get","Authorization","data","putMarkEpAsComplete","epId","put","addToList","status","post","anilist_token","markEpAsWatched","RootContainerStyle","styled","div","LeftPaddingStyle","RightPaddingStyle","MainContainer","HeadingStyle","p","SubHeadingStyle","showPointer","HeadingWithPaginationTabsStyle","PaginationTabsStyle","SvgStyle","svg","ButtonStyle","span","bg","hoverBg","activeBg","ButtonIconStyle","color","ButtonTextStyle","userAuth","createAsyncThunk","discord_access_token","now","Date","setDate","getDate","set","result","access_token","path","expires","userAuthWithInviteKey","inviteKey","userAuthCheck","FAB","Container","visible","StatusContainer","StatusIcon","StatusText","StatusMenu","MediaListMenu","currentStatus","handleStatusChange","useState","isOpen","setOpen","wrapperRef","useRef","useOutsideClickHook","handleClick","mediaListToSvg","NULL","xmlns","className","fill","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","CURRENT","PLANNING","COMPLETED","DROPPED","PAUSED","REPEATING","REMOVE","ref","style","width","onClick","Overlay","Link","Poster","img","Placeholder","TextContainer","TextTitle","TextYear","TextDescription","WatchPartyRoomElement","_id","creatorName","creator","epNumber","members","viewing","episode","title","textDecoration","to","src","thumbnail","alt","fontSize","margin","english","description","dangerouslySetInnerHTML","__html","WatchPartyRoomGrid","WatchPartyRoomsGrid","rooms","map","room","key","memo","oldProps","newProps","UserContainer","UserPfp","roleColor","UserListItem","user","avatar","role","UserGrid","UserListGrid","users","userId","UserList","length","EmoteButtonContainer","EmoteButton","EmoteContainer","Emote","EmoteSelector","handleSelectEmote","fillRule","clipRule","url","id","e","ChatItem","chat","continuous","padding","borderRadius","backgroundColor","username","whiteSpace","wordBreak","message","ChatContainer","ChatMessages","ChatInput","textarea","Chat","messages","handleSendMessage","text","setText","messagesEndRef","useEffect","current","addEventListener","event","target","currentTarget","scroll","top","scrollHeight","behavior","msg","i","display","flexGrow","rows","placeholder","value","startsWith","onKeyDown","shiftKey","trim","roomId","time","toISOString","onChange","EmoteSelect","getWatchingEpisodes","animeTitle","getLatestAnime","getNewAnime","initialState","roleName","isAuth","isAnilistAuth","loading","IDLE","userStateReducer","createSlice","name","reducers","setAuthLoadingStatus","state","payload","extraReducers","builder","addCase","pending","LOADING","rejected","FAILED","fulfilled","window","location","replace","SUCCESS","scheduleStateReducer","getScheduleResults","animeList","exploreStateReducer","getAnimeByGenre","rootReducer","combineReducers","app","appStateReducer","animeState","searchStateReducer","homeState","homeStateReducer","scheduleState","animeDetailsState","animeDetailsStateReducer","exploreState","watchPartyState","watchPartyStateReducer","store","configureStore","reducer","middleware","getDefaultMiddleware","useAppDispatch","useDispatch","createWatchPartyRoom","isPrivate","getWatchPartyRooms","getWatchPartyRoom","Nav","nav","BannerImg","NavLink","active","undefined","NavMenu","Navbar","useLocation","pathname","kuru","toString","getSearchResults","searchParam","setHomeLoadingStatus","watchingEpList","latestList","newList","actions","watchPartyRooms","currentRoom","MobRootContainerStyle","appState","isMobile","matchMedia","matches","setMedia","res","forEach","date","releaseTime","anime","year","toLocaleTimeString","hour12","hour","minute","getDay","push","sort","b","bD","aD","getHours","getMinutes","genre","MobHeadingStyle","theme","colors","red_500","MobSubHeadingStyle","getAnimeData","getAnimeEpisodes","pageNo","PaginationTabs","hasPrevious","hasNext","handleFirst","handlePrevious","handleNext","handleLast","data-tip","data-for","rafAsync","Promise","resolve","requestAnimationFrame","checkElement","selector","element","triggerOnRemoval","check","$","document","querySelector","then","addPlayerButtons","console","log","remove","replaceWith","parent","prepend","isPrevEp","attributes","isNextEp","append","err","onclick","click","Player","props","emit","handleMarkAsWatched","stream","isMaster","emitPlayerEvents","isRoom","watchingList","useSelector","plyrRef","streamUrl","atob","dispatch","useImperativeHandle","onPause","currentTime","pause","onPlay","play","onSeeked","playing","onGetTime","runningInterval","startFrom","find","options","i18n","mute","unmute","enterFullscreen","exitFullscreen","autoplay","tooltips","controls","seek","seekTime","keyboard","focused","global","fullscreen","iosNative","speed","selected","listeners","restart","rewind","includes","Plyr","source","sources","type","size","attachProgressListener","clearInterval","destroy","Hls","isSupported","hls","enableWorker","loadSource","on","Events","MANIFEST_PARSED","qualityLevels","levels","level","height","reverse","quality","default","forced","t","n","currentLevel","attachMedia","interval","cb","setInterval","duration","once","showStatusToast","muted","autoPlay","playsInline","aspectRatio","PlayerFwdRef","forwardRef","SearchSortGroup","sortBy","sortOrder","setSortBy","setSortOrder","handleSortOrder","localStorage","setItem","handleSortBy","ASC","DESC","TITLE","YEAR","RATING","POPULARITY","SortTooltips","aria-haspopup","effect","PaginationTooltips","AnimeElement","coverImage","bannerImage","onHover","isLink","flipId","onMouseEnter","onMouseLeave","extraLarge","large","romaji","AnimeGridElement","AnimeGrid","flipKey","spring","staggerConfig","ButtonPrimary","button","Button","label","handleSubmit","EpisodeGridElement","EpisodeElement","lazy","EpisodeGrid","episodeList","progress","mediaListStatus","handleOnClick","fallback","iframe","GenreItem","Genres","genres","toLowerCase","InputField","isActive","InputBox","input","Input","isPassword","handleOnChange","handleOnSubmit","setActive","autoFocus","multiple","onFocus","onBlur","code","LoadingAnimation","Loading","frontColor","toast","dark","showIncorrectInviteToast","action","slug","poster","adventure","comedy","drama","ecchi","fantasy","horror","mecha","music","mystery","psychological","romance","sports","supernatural","searchList","setSearchParam","setSearchLoading","millisToReadable","millis","h","m","Math","floor","handleClickOutside","contains","removeEventListener","setInitialState","setPageNo","episodeData","episodesData","animeDetail","showingResults","totalEpisodes","episodes","KurumiBg","LoginContainer","position","right","bottom","href","MobLoginContainer","useLoginPage","query","URLSearchParams","search","history","useHistory","discordAccessToken","hash","LoginPage","Login","Footer","footer","PrivateRoute","Component","component","rest","render","cookie","rel","HamburgerContainer","Menu","MenuItem","DumbMenuItem","FloatingActionButton","Toast","autoClose","hideProgressBar","newestOnTop","closeOnClick","rtl","pauseOnFocusLoss","draggable","pauseOnHover","HomePage","AnimePage","EpisodePage","SearchPage","SchedulePage","WatchPartyPage","WatchPartyRoomPage","ProfilePage","ExplorePage","ExploreGenrePage","InvitePage","App","mql","listener","zIndex","exact","ReactDOM","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.e6ceee36.chunk.js","sourcesContent":["import { WatchPartyRoomAttr } from \"./ui/misc\";\n\nexport enum SORT_BY {\n TITLE,\n YEAR,\n RATING,\n POPULARITY,\n NONE,\n}\n\nexport enum SORT_ORDER {\n DESC,\n ASC,\n}\n\nexport enum STATUS {\n IDLE,\n LOADING,\n FAILED,\n SUCCESS,\n}\n\nexport enum MediaListStatus {\n CURRENT = \"CURRENT\",\n PLANNING = \"PLANNING\",\n COMPLETED = \"COMPLETED\",\n DROPPED = \"DROPPED\",\n PAUSED = \"PAUSED\",\n REPEATING = \"REPEATING\",\n REMOVE = \"REMOVE\",\n}\n\nexport type EpisodeStream = {\n episode: {\n description: string;\n epId: string;\n epNumber: number;\n streams: string;\n title: string;\n thumbnail: string;\n };\n title: {\n romaji: string;\n english: string;\n native: string;\n };\n firstEpNumber: number;\n lastEpNumber: number;\n nextEpNumber: number;\n previousEpNumber: number;\n};\n\nexport type ChatMessageAttrs = {\n message: string;\n roomId: string;\n time: string;\n userId: string;\n username: string;\n clientId: string;\n};\n\nexport type JoinMessageAttrs = {\n roomId: string;\n} & WatchPartyRoomAttr[\"members\"][0];\n\nexport type PlayerMessageAttrs = {\n roomId?: string;\n time: number;\n playing: boolean;\n};\n","export * from \"../types\";\nexport * from \"../store/animeDetails/animeDetails.types\";\nexport * from \"../utils/millisToReadable\";\nexport * from \"../utils/useOutsideClickHook\";\nexport * from \"../utils/genres\";\nexport * from \"../store/watchParty/watchParty.types\";\n","import Axios from \"axios\";\nimport Cookies from \"universal-cookie\";\nimport { MediaListStatus } from \"../types\";\n\nexport const kurumiApi = Axios.create({\n baseURL:\n process.env.NODE_ENV === \"development\"\n ? \"http://localhost:3002/api/\"\n : \"https://kurumi-tokisaki-api.herokuapp.com/api/\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n});\n\nexport const getAnimeEpisodeUrl = async (\n animeId: number,\n epNo: number\n): Promise => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/anime/${animeId}/episodes/${epNo}`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n return data;\n};\n\nexport const putMarkEpAsComplete = async (epId: string): Promise => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.put(\n `v2/home/watchingEpisodes`,\n { epId },\n {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n }\n );\n\n return data;\n};\n\nexport const addToList = async (\n animeId: number,\n status: MediaListStatus\n): Promise => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.post(\n `v2/anilist/add_to_list`,\n { animeId, status },\n {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n anilist_token: `Bearer ${cookies.get(\"anilist_token\")}`,\n },\n }\n );\n\n return data;\n};\n\nexport const markEpAsWatched = async (\n animeId: number,\n epNo: number\n): Promise => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.post(\n `v2/anilist/mark_ep_as_watched`,\n { animeId, epNo },\n {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n anilist_token: `Bearer ${cookies.get(\"anilist_token\")}`,\n },\n }\n );\n\n return data;\n};\n","import styled from \"styled-components\";\n\nexport const RootContainerStyle = styled.div`\n display: grid;\n grid-template-columns: 0.15fr 1fr 0.15fr;\n grid-template-rows: minmax(100vh, auto);\n grid-template-areas: \"left-padding main right-padding\";\n`;\n\nexport const LeftPaddingStyle = styled.div`\n grid-area: left-padding;\n`;\n\nexport const RightPaddingStyle = styled.div`\n grid-area: right-padding;\n`;\n\nexport const MainContainer = styled.div`\n grid-area: main;\n`;\n","import styled from \"styled-components\";\n\nexport const HeadingStyle = styled.p`\n display: -webkit-box;\n color: #ef4444;\n font-size: 2rem;\n margin-top: 0;\n margin-bottom: 0.6rem;\n overflow: hidden;\n word-wrap: break-word;\n text-overflow: ellipsis;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n\n @media screen and (max-width: 1550px) {\n font-size: 1.8rem;\n }\n`;\n\nexport const SubHeadingStyle = styled.p<{ showPointer?: boolean }>`\n color: #fca5a5;\n font-size: 1.2rem;\n margin-top: 0;\n margin-bottom: 1rem;\n text-shadow: 0 3px 6px rgb(0 0 0 / 16%), 0 6px 16px rgb(0 0 0 / 12%),\n 0 9px 28px rgb(0 0 0 / 7%);\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: ${({ showPointer }) => (showPointer ? \"pointer\" : \"normal\")};\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n`;\n","import styled from \"styled-components\";\n\nexport const HeadingWithPaginationTabsStyle = styled.div`\n margin-top: 1.6rem;\n display: flex;\n justify-content: space-between;\n`;\n\nexport const PaginationTabsStyle = styled.div`\n align-self: center;\n`;\n","import styled from \"styled-components\";\n\n// export const SvgStyle = styled.svg<{ hoverColor: string }>`\n// margin-left: 4px;\n// padding: 4px;\n// border-radius: 4px;\n// cursor: pointer;\n// transition: fill 0.3s ease-in;\n// transition: background-color 0.2s ease-in;\n\n// &:hover {\n// transition: fill 0.3s ease-out;\n// background-color: #fff3;\n// fill: ${({ hoverColor }) => hoverColor};\n// }\n// `;\n\nexport const SvgStyle = styled.svg`\n margin-left: 4px;\n padding: 4px;\n border-radius: 4px;\n cursor: pointer;\n transition: fill 0.3s ease-in;\n transition: background-color 0.2s ease-in;\n\n &:hover {\n transition: fill 0.3s ease-out;\n background-color: #fff3;\n }\n\n &:focus {\n outline: none;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const ButtonStyle = styled.span<{\n bg: string;\n hoverBg: string;\n activeBg: string;\n}>`\n margin: 0 1rem 0 0;\n min-width: 9rem;\n display: inline-block;\n background-color: ${({ bg }) => bg};\n border-radius: 0.2rem;\n padding: 0.5rem;\n transition: background-color 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n background-color: ${({ hoverBg }) => hoverBg};\n }\n\n &:active {\n background-color: ${({ activeBg }) => activeBg};\n }\n\n span {\n display: inline-block;\n vertical-align: middle;\n transition: color 0.2s ease-in-out;\n }\n`;\n\nexport const ButtonIconStyle = styled.span<{ color: string }>`\n margin: auto;\n margin-right: 4px;\n width: 1rem;\n height: 1rem;\n margin-right: 0.6rem;\n\n svg {\n fill: ${({ color }) => color};\n }\n`;\n\nexport const ButtonTextStyle = styled.span<{ color: string }>`\n color: ${({ color }) => color};\n font-weight: 600;\n`;\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport Cookies from \"universal-cookie\";\n\nimport { kurumiApi } from \"../../api\";\n\nexport const userAuth = createAsyncThunk(\"user/userAuth\", async () => {\n const cookies = new Cookies();\n const { data } = await kurumiApi.get(\"v2/user\", {\n headers: {\n discord_access_token: cookies.get(\"discord_access_token\"),\n },\n });\n\n const now = new Date();\n now.setDate(now.getDate() + 7);\n\n cookies.set(\"access_token\", data.result.access_token, {\n path: \"/\",\n expires: now,\n });\n\n cookies.set(\"anilist_token\", data.result.anilist_token, {\n path: \"/\",\n expires: now,\n });\n});\n\nexport const userAuthWithInviteKey = createAsyncThunk(\n \"user/userAuthWithInviteKey\",\n async (inviteKey: string) => {\n const cookies = new Cookies();\n const { data } = await kurumiApi.post(\n \"v2/user/useInviteKey\",\n { inviteKey },\n {\n headers: {\n discord_access_token: cookies.get(\"discord_access_token\"),\n },\n }\n );\n\n const now = new Date();\n now.setDate(now.getDate() + 7);\n\n cookies.set(\"access_token\", data.result.access_token, {\n path: \"/\",\n expires: now,\n });\n }\n);\n\nexport const userAuthCheck = createAsyncThunk(\n \"user/userAuthCheck\",\n async () => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(\"v2/user/@me\", {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n if (data.result?.anilist_token) {\n cookies.set(\"anilist_token\", data.result.anilist_token, {\n path: \"/\",\n expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),\n });\n }\n\n return data.result;\n }\n);\n","import styled from \"styled-components\";\n\nexport const FAB = styled.div`\n z-index: 20;\n`;\n\nexport const Container = styled.div<{ visible: boolean }>`\n background-color: #1f1f1f;\n border: 1px solid #2a2a2a;\n border-radius: 0.4rem;\n width: fit-content;\n height: fit-content;\n position: absolute;\n z-index: 20;\n padding: 0.5rem;\n opacity: ${({ visible }) => (visible ? 1 : 0)};\n visibility: ${({ visible }) => (visible ? \"\" : \"hidden\")};\n box-shadow: 0 3px 6px -4px rgb(0 0 0 / 48%), 0 6px 16px 0 rgb(0 0 0 / 40%),\n 0 9px 28px 8px rgb(0 0 0 / 32%);\n transform: ${({ visible }) => (visible ? \"scale(1)\" : \"scale(0.9)\")};\n transition: all 0.2s ease-in-out;\n`;\n\nexport const StatusContainer = styled.span`\n display: inline-block;\n border-radius: 0.375rem;\n padding: 0.5rem 0.5rem 0.5rem 0;\n transition: background-color 0.2s ease-in-out;\n cursor: pointer;\n\n span {\n display: inline-block;\n vertical-align: middle;\n transition: color 0.2s ease-in-out;\n }\n`;\n\nexport const StatusIcon = styled.span`\n width: 1.5rem;\n height: 1.5rem;\n margin: auto;\n margin-right: 4px;\n margin-right: 0.6rem;\n`;\n\nexport const StatusText = styled.span`\n color: #f5f5f4;\n font-weight: 600;\n font-size: 0.8rem;\n`;\n\nexport const StatusMenu = styled.div`\n margin-left: 0.5rem;\n display: grid;\n grid-template-rows: repeat(auto-fill, minmax(0.5rem, 1fr));\n`;\n","import { useRef, useState } from \"react\";\n\nimport { MediaListStatus, useOutsideClickHook } from \"../../misc\";\n\nimport {\n FAB,\n Container,\n StatusMenu,\n StatusContainer,\n StatusIcon,\n StatusText,\n} from \"./styles\";\n\nconst MediaListMenu = ({\n currentStatus,\n handleStatusChange,\n}: {\n currentStatus: MediaListStatus | null;\n handleStatusChange: (status: MediaListStatus) => any;\n}) => {\n const [isOpen, setOpen] = useState(false);\n const wrapperRef = useRef(null);\n useOutsideClickHook(wrapperRef, () => setOpen(false));\n\n const handleClick = (status: MediaListStatus) => {\n handleStatusChange(status);\n setOpen(false);\n };\n\n const mediaListToSvg = {\n NULL: (\n <>\n \n \n \n \n \n Add to List\n \n ),\n\n CURRENT: (\n <>\n \n \n \n \n \n \n Current\n \n ),\n\n PLANNING: (\n <>\n \n \n \n \n \n Planning\n \n ),\n\n COMPLETED: (\n <>\n \n \n \n \n \n Completed\n \n ),\n\n DROPPED: (\n <>\n \n \n \n \n \n Dropped\n \n ),\n\n PAUSED: (\n <>\n \n \n \n \n \n Paused\n \n ),\n\n REPEATING: (\n <>\n \n \n \n \n \n Repeating\n \n ),\n\n REMOVE: <>,\n };\n\n return (\n
\n setOpen(!isOpen)}>\n setOpen(false)}>\n {currentStatus === null\n ? mediaListToSvg[\"NULL\"]\n : mediaListToSvg[currentStatus]}\n \n \n \n \n handleClick(MediaListStatus.COMPLETED)}\n >\n {mediaListToSvg.COMPLETED}\n \n handleClick(MediaListStatus.CURRENT)}>\n {mediaListToSvg.CURRENT}\n \n handleClick(MediaListStatus.DROPPED)}>\n {mediaListToSvg.DROPPED}\n \n handleClick(MediaListStatus.PAUSED)}>\n {mediaListToSvg.PAUSED}\n \n handleClick(MediaListStatus.PLANNING)}\n >\n {mediaListToSvg.PLANNING}\n \n handleClick(MediaListStatus.REPEATING)}\n >\n {mediaListToSvg.REPEATING}\n \n \n \n
\n );\n};\n\nexport default MediaListMenu;\n","import { NavLink as Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nexport const SvgElement = styled.span`\n margin: auto;\n vertical-align: middle;\n display: inline-block;\n width: 2rem;\n height: 2rem;\n`;\n\nexport const Overlay = styled.div`\n display: grid;\n position: absolute;\n margin: 0;\n left: 0;\n top: 0;\n padding: 0.8rem;\n opacity: 0;\n`;\n\nexport const Container = styled(Link)`\n position: relative;\n text-decoration: none;\n border: 1px solid #2a2a2a;\n background-color: #1f1f1f;\n overflow: hidden;\n width: 100%;\n height: 100%;\n margin: auto;\n border-radius: 0.375rem;\n cursor: pointer;\n\n &:hover .poster {\n filter: blur(5px) brightness(40%);\n }\n\n &:hover .overlay {\n opacity: 1;\n transition: opacity 0.8s ease;\n }\n`;\n\nexport const Poster = styled.img`\n display: block;\n width: 100%;\n aspect-ratio: 16 / 9;\n object-fit: cover;\n overflow: hidden;\n transition: filter 0.3s ease-out, transform 0.5s ease-out;\n`;\n\nexport const Placeholder = styled.div`\n display: grid;\n place-items: center;\n background-color: #181818;\n width: 100%;\n aspect-ratio: 16 / 9;\n text-decoration: none;\n object-fit: cover;\n overflow: hidden;\n transition: filter 0.3s ease-out, transform 0.5s ease-out;\n`;\n\nexport const TextContainer = styled.div`\n margin: 0;\n width: 100%;\n height: 2.8rem;\n padding: 0.5rem;\n box-sizing: border-box;\n`;\n\nexport const TextTitle = styled.div`\n color: #ffffff;\n text-overflow: ellipsis;\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n\n @media screen and (max-width: 1550px) and (max-width: 1750px) {\n font-size: 1rem;\n }\n\n @media screen and (min-width: 1430px) and (max-width: 1550px) {\n font-size: 1rem;\n }\n\n @media screen and (max-width: 1430px) {\n font-size: 1rem;\n }\n\n @media screen and (max-device-width: 480px) {\n font-size: 1.6rem;\n }\n`;\n\nexport const TextYear = styled.div`\n font-size: medium;\n font-weight: bold;\n font-size: 0.8rem;\n color: #666666;\n\n @media screen and (max-device-width: 480px) {\n font-size: 1.4rem;\n }\n`;\n\nexport const TextDescription = styled.p`\n color: #ffffff;\n margin: 0;\n font-size: 0.9rem;\n text-overflow: ellipsis;\n display: -webkit-box;\n overflow: hidden;\n text-shadow: 0 3px 6px rgb(0 0 0 / 16%), 0 6px 16px rgb(0 0 0 / 12%),\n 0 9px 28px rgb(0 0 0 / 7%);\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 16;\n`;\n","import {\n Container,\n Overlay,\n Poster,\n Placeholder,\n TextContainer,\n TextDescription,\n TextTitle,\n TextYear,\n} from \"./styles\";\nimport { WatchPartyRoomAttr } from \"../../../misc\";\n\nconst WatchPartyRoomElement = ({\n _id,\n creator,\n creatorName,\n members,\n animeId,\n epNumber,\n epId,\n viewing,\n episode,\n title,\n}: WatchPartyRoomAttr) => (\n \n {episode ? (\n \n ) : (\n \n \n Idling\n

\n
\n )}\n \n {creatorName}'s room\n \n {viewing > 1 ? `${viewing} viewers` : `${viewing} viewer`}\n \n \n \n {title?.english && epNumber && episode?.description && (\n Now Playing: ${title?.english}

\n

Episode: ${epNumber}

\n

${episode?.description}

\n `,\n }}\n />\n )}\n \n \n);\n\nexport default WatchPartyRoomElement;\n","import styled from \"styled-components\";\n\nexport const WatchPartyRoomGrid = styled.div`\n margin-bottom: 1.6rem;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));\n grid-gap: 1rem;\n\n @media screen and (min-width: 1720px) and (max-width: 1820px) {\n grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));\n }\n\n @media screen and (min-width: 1520px) and (max-width: 1720px) {\n grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));\n }\n\n @media screen and (min-width: 1360px) and (max-width: 1520px) {\n grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));\n }\n\n @media screen and (min-width: 1170px) and (max-width: 1360px) {\n grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));\n }\n\n @media screen and (min-width: 0px) and (max-width: 1170px) {\n grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));\n }\n`;\n","import React, { memo } from \"react\";\nimport { WatchPartyRoomAttr } from \"../../../../store/watchParty/watchParty.types\";\nimport WatchPartyRoomElement from \"../item\";\nimport { WatchPartyRoomGrid } from \"./styles\";\n\nconst WatchPartyRoomsGrid = ({ rooms }: { rooms: WatchPartyRoomAttr[] }) => (\n \n {rooms.map((room) => (\n \n ))}\n \n);\n\nexport default memo(\n WatchPartyRoomsGrid,\n (oldProps, newProps) => oldProps.rooms[0]?._id === newProps.rooms[0]?._id\n);\n","import styled from \"styled-components\";\n\nexport const UserContainer = styled.div`\n width: 3.5rem;\n height: 3.5rem;\n`;\n\nexport const UserPfp = styled.img<{ roleColor?: string }>`\n width: 3rem;\n height: 3rem;\n border-radius: 50%;\n border: 0.125rem solid ${({ roleColor }) => roleColor ?? \"white\"};\n padding: 0.125rem;\n`;\n","import { UserContainer, UserPfp } from \"./styles\";\n\nconst UserListItem = ({ user }: { user: any }) => {\n return (\n \n \n \n );\n};\n\nexport default UserListItem;\n","import styled from \"styled-components\";\n\nexport const UserGrid = styled.div`\n width: 20.5rem;\n max-height: 8rem;\n \n overflow-y: scroll;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(3.5rem, 1fr));\n grid-gap: 0.75rem;\n\n ::-webkit-scrollbar {\n display: none;\n }\n`;\n","import { WatchPartyRoomAttr } from \"../../../../store/watchParty/watchParty.types\";\nimport UserListItem from \"../item\";\nimport { UserGrid } from \"./styles\";\n\nconst UserListGrid = ({ users }: { users: WatchPartyRoomAttr[\"members\"] }) => {\n return (\n \n {users.map((user) => (\n \n ))}\n \n );\n};\n\nexport default UserListGrid;\n","import styled from \"styled-components\";\n\nexport const UserContainer = styled.div`\n border: 1px solid #292929;\n border-radius: 0.375rem;\n background-color: #151515bb;\n padding: 0.5rem;\n\n p {\n margin: 0.5rem 0 0 0;\n }\n`;\n","import UserListGrid from \"./grid\";\nimport { UserContainer } from \"./styles\";\n\nconst UserList = ({ users }: { users: any[] }) => {\n return (\n \n \n

\n {users.length} {users.length === 1 ? \"viewer\" : \"viewers\"}\n

\n \n );\n};\n\nexport default UserList;\n","import styled from \"styled-components\";\n\nexport const EmoteButtonContainer = styled.div`\n background-color: #1f1f1f;\n border: 1px solid #2a2a2a;\n border-radius: 0.375rem;\n box-sizing: border-box;\n width: 3rem;\n height: 3rem;\n z-index: 20;\n box-shadow: 0 3px 6px -4px rgb(0 0 0 / 40%), 0 6px 16px 0 rgb(0 0 0 / 32%),\n 0 9px 28px 8px rgb(0 0 0 / 24%);\n`;\n\nexport const Container = styled.div<{ visible: boolean }>`\n background-color: #1f1f1f;\n border: 1px solid #2a2a2a;\n border-radius: 0.325rem;\n width: 21.5rem;\n height: 13rem;\n position: absolute;\n right: 1rem;\n z-index: 20;\n opacity: ${({ visible }) => (visible ? 1 : 0)};\n visibility: ${({ visible }) => (visible ? \"\" : \"hidden\")};\n box-shadow: 0 3px 6px -4px rgb(0 0 0 / 48%), 0 6px 16px 0 rgb(0 0 0 / 40%),\n 0 9px 28px 8px rgb(0 0 0 / 32%);\n transform: ${({ visible }) => (visible ? \"scale(1)\" : \"scale(0.9)\")};\n transition: all 0.2s ease-in-out;\n overflow-y: auto;\n`;\n\nexport const EmoteButton = styled.div`\n width: 100%;\n height: 100%;\n text-align: center;\n\n svg {\n fill: #ffffff;\n width: 1.4rem;\n height: 100%;\n }\n`;\n\nexport const EmoteContainer = styled.div`\n margin: 1rem;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(3rem, 1fr));\n grid-gap: 0.75rem;\n`;\n\nexport const Emote = styled.img`\n width: 3rem;\n height: 3rem;\n text-align: center;\n text-decoration: none;\n object-fit: contain;\n svg {\n margin: auto;\n stroke: #ffffff;\n width: 1.4rem;\n height: 1.4rem;\n vertical-align: -webkit-baseline-middle;\n }\n`;\n\nexport const DumbMenuItem = styled.div`\n width: 3rem;\n height: 3rem;\n text-align: center;\n\n svg {\n margin: auto;\n stroke: #ffffff;\n width: 1.4rem;\n height: 1.4rem;\n vertical-align: -webkit-baseline-middle;\n }\n`;\n","import { useState } from \"react\";\n\nimport {\n EmoteButtonContainer,\n Container,\n EmoteContainer,\n Emote,\n EmoteButton,\n} from \"./styles\";\n\nconst EmoteSelector = ({\n handleSelectEmote,\n}: {\n handleSelectEmote: (id: string) => void;\n}) => {\n const [isOpen, setOpen] = useState(false);\n\n const emotes = [\n {\n url: \"https://cdn.discordapp.com/emojis/841176042051600424.png\",\n id: \"841176042051600424\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841176289750417438.gif\",\n id: \"841176289750417438\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841180094411309067.png\",\n id: \"841180094411309067\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841184768476315689.png\",\n id: \"841184768476315689\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841184768599130142.png\",\n id: \"841184768599130142\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841184768615514142.png\",\n id: \"841184768615514142\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841366061583695953.png\",\n id: \"841366061583695953\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841366132546863175.png\",\n id: \"841366132546863175\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841366162725666836.png\",\n id: \"841366162725666836\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841484704300793897.png\",\n id: \"841484704300793897\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841484704557039636.png\",\n id: \"841484704557039636\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841485046157410304.png\",\n id: \"841485046157410304\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841492956371353610.png\",\n id: \"841492956371353610\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841516486736478218.png\",\n id: \"841516486736478218\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841627515600109618.png\",\n id: \"841627515600109618\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841627564233195541.png\",\n id: \"841627564233195541\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841627602892488704.png\",\n id: \"841627602892488704\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841668721914413077.gif\",\n id: \"841668721914413077\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841726283532730418.png\",\n id: \"841726283532730418\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841731267354951700.gif\",\n id: \"841731267354951700\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/841731491444162601.gif\",\n id: \"841731491444162601\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/842124362109943828.png\",\n id: \"842124362109943828\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/842176399833432084.png\",\n id: \"842176399833432084\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/842176973370294314.png\",\n id: \"842176973370294314\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/842180616950775810.png\",\n id: \"842180616950775810\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/842180634599751710.png\",\n id: \"842180634599751710\",\n },\n {\n url: \"https://cdn.discordapp.com/emojis/843117923442753567.png\",\n id: \"843117923442753567\",\n },\n ];\n\n return (\n <>\n setOpen(!isOpen)}>\n \n \n \n \n \n \n \n \n {emotes.map((e) => (\n {\n setOpen(false);\n handleSelectEmote(e.id);\n }}\n src={e.url}\n alt=\"\"\n >\n ))}\n \n \n \n );\n};\n\nexport default EmoteSelector;\n","const ChatItem = ({ chat, continuous }: { chat: any; continuous: boolean }) => {\n return (\n \n {!continuous && (\n \n {chat.username}\n

\n )}\n \n {chat.message}\n

\n \n );\n};\n\nexport default ChatItem;\n","import styled from \"styled-components\";\n\nexport const ChatContainer = styled.div`\n display: flex;\n flex-flow: column;\n border: 1px solid #292929;\n background-color: #151515bb;\n border-radius: 0.375rem;\n padding: 0.375rem;\n height: 70vh;\n`;\n\nexport const ChatMessages = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 4px;\n overflow-y: auto;\n flex-grow: 1;\n`;\n\nexport const ChatInput = styled.textarea`\n box-sizing: border-box;\n width: 100%;\n height: 3rem;\n padding: 0.375rem;\n background-color: #1a1a1a;\n caret-color: #ef4444;\n resize: none;\n color: white;\n border: 1px solid #292929;\n border-radius: 0.375rem;\n outline: none;\n flex-grow: 1;\n`;\n","import { useEffect, useRef, useState } from \"react\";\n\nimport { User } from \"../../../store/user/types\";\nimport { WatchPartyRoomAttr } from \"../../misc\";\nimport EmoteSelector from \"../EmoteSelect\";\nimport ChatItem from \"./item\";\nimport { ChatContainer, ChatInput, ChatMessages } from \"./styles\";\n\nconst Chat = ({\n chat: messages,\n user,\n handleSendMessage,\n room,\n}: {\n chat: any[];\n user: User;\n handleSendMessage: any;\n room: WatchPartyRoomAttr;\n}) => {\n const [text, setText] = useState(\"\");\n const messagesEndRef = useRef(null);\n\n useEffect(() => {\n if (messagesEndRef) {\n messagesEndRef.current?.addEventListener(\"DOMNodeInserted\", (event) => {\n const { currentTarget: target } = event;\n (target as any).scroll({\n top: (target as any).scrollHeight,\n behavior: \"smooth\",\n });\n });\n }\n }, []);\n\n return (\n <>\n \n \n {messages.map((msg, i) => (\n 0 && messages[i - 1].userId === messages[i].userId\n }\n />\n ))}\n \n
\n
\n {\n if (e.shiftKey && e.key === \"Enter\") {\n } else if (e.key === \"Enter\") {\n if (text.trim() !== \"\") {\n handleSendMessage({\n userId: user._id,\n username: user.username,\n roomId: room._id,\n message: text,\n time: new Date().toISOString(),\n roleColor: user.role.color,\n });\n }\n setText(\"\");\n }\n }}\n onChange={(e) => {\n setText(e.target.value);\n }}\n />\n
\n
\n {\n setText(` :${id}:`);\n }}\n />\n
\n
\n
\n \n );\n};\n\nexport default Chat;\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport Cookies from \"universal-cookie\";\n\nimport { kurumiApi } from \"../../api\";\n\nexport const getWatchingEpisodes = createAsyncThunk(\n \"homeState/getWatchingEpisodes\",\n async () => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/home/watchingEpisodes`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n const { result } = data;\n\n return result.map((d: any) => ({\n ...d,\n episode: { ...d.episode, animeTitle: d.title },\n }));\n }\n);\n\nexport const getLatestAnime = createAsyncThunk(\n \"homeState/getLatestAnime\",\n async () => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/home/latest?per_page=12`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n return data.result;\n }\n);\n\nexport const getNewAnime = createAsyncThunk(\n \"homeState/getNewAnime\",\n async () => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/home/new?per_page=12`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n return data.result;\n }\n);\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { STATUS } from \"../../types\";\nimport { userAuth, userAuthCheck, userAuthWithInviteKey } from \"./actions\";\nimport { UserState } from \"./types\";\n\nconst initialState: UserState = {\n user: {\n _id: \"\",\n username: \"\",\n avatar: \"\",\n role: { roleName: \"\", color: \"\" },\n },\n isAuth: true,\n isAnilistAuth: false,\n loading: STATUS.IDLE,\n};\n\nconst userStateReducer = createSlice({\n name: \"user\",\n initialState,\n reducers: {\n setAuthLoadingStatus: (state, { payload }) => {\n return { ...state, loading: payload };\n },\n },\n extraReducers: (builder) => {\n builder.addCase(userAuthWithInviteKey.pending, (state) => {\n state.loading = STATUS.LOADING;\n });\n builder.addCase(userAuthWithInviteKey.rejected, (state) => {\n state.loading = STATUS.FAILED;\n });\n builder.addCase(userAuthWithInviteKey.fulfilled, (state) => {\n window.location.replace(\"/\");\n });\n\n builder.addCase(userAuth.pending, (state) => {\n state.loading = STATUS.LOADING;\n });\n builder.addCase(userAuth.fulfilled, (state) => {\n state.loading = STATUS.SUCCESS;\n });\n\n builder.addCase(userAuthCheck.pending, (state) => {\n state.loading = STATUS.LOADING;\n });\n builder.addCase(userAuthCheck.rejected, () => {\n window.location.replace(\"/login\");\n });\n builder.addCase(userAuthCheck.fulfilled, (state, { payload }) => {\n state.loading = STATUS.SUCCESS;\n\n state.user = payload.user;\n state.isAuth = true;\n if (payload?.anilist_token) {\n state.isAnilistAuth = true;\n } else {\n state.isAnilistAuth = false;\n }\n });\n },\n});\n\nexport default userStateReducer.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { STATUS } from \"../../types\";\n\nimport { getScheduleResults } from \"./schedule.actions\";\nimport { ScheduleState } from \"./schedule.types\";\n\nconst initialState = {} as ScheduleState;\nconst scheduleStateReducer = createSlice({\n name: \"scheduleState\",\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder.addCase(getScheduleResults.pending, (state) => {\n state.loading = STATUS.LOADING;\n });\n builder.addCase(getScheduleResults.rejected, (state) => {\n state.loading = STATUS.FAILED;\n window.location.replace(\"/login\");\n });\n builder.addCase(getScheduleResults.fulfilled, (state, { payload }) => {\n state.animeList = payload;\n state.loading = STATUS.SUCCESS;\n });\n },\n});\n\nexport default scheduleStateReducer.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { STATUS } from \"../../types\";\n\nimport { getAnimeByGenre } from \"./explore.actions\";\nimport { ExploreState } from \"./explore.types\";\n\nconst initialState = {} as ExploreState;\nconst exploreStateReducer = createSlice({\n name: \"exploreState\",\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder.addCase(getAnimeByGenre.pending, (state) => {\n state.loading = STATUS.LOADING;\n });\n builder.addCase(getAnimeByGenre.rejected, (state) => {\n state.loading = STATUS.FAILED;\n window.location.replace(\"/login\");\n });\n builder.addCase(getAnimeByGenre.fulfilled, (state, { payload }) => {\n state.animeList = payload;\n state.loading = STATUS.SUCCESS;\n });\n },\n});\n\nexport default exploreStateReducer.reducer;\n","import {\n combineReducers,\n configureStore,\n getDefaultMiddleware,\n} from \"@reduxjs/toolkit\";\nimport { useDispatch } from \"react-redux\";\n\nimport appStateReducer from \"./app/reducer\";\nimport userStateReducer from \"./user/reducer\";\nimport searchStateReducer from \"./search/search.reducer\";\nimport homeStateReducer from \"./home/home.reducer\";\nimport scheduleStateReducer from \"./schedule/schedule.reducer\";\nimport animeDetailsStateReducer from \"./animeDetails/animeDetails.reducer\";\nimport exploreStateReducer from \"./explore/explore.reducer\";\nimport watchPartyStateReducer from \"./watchParty/watchParty.reducer\";\n\nexport const rootReducer = combineReducers({\n app: appStateReducer,\n user: userStateReducer,\n animeState: searchStateReducer,\n homeState: homeStateReducer,\n scheduleState: scheduleStateReducer,\n animeDetailsState: animeDetailsStateReducer,\n exploreState: exploreStateReducer,\n watchPartyState: watchPartyStateReducer,\n});\n\nexport type RootState = ReturnType;\n\nexport const store = configureStore({\n reducer: rootReducer,\n middleware: getDefaultMiddleware(),\n});\n\nexport type AppDispatch = typeof store.dispatch;\nexport const useAppDispatch = () => useDispatch();\n","import { NavLink as Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nexport const SvgElement = styled.span`\n margin: auto;\n vertical-align: middle;\n display: inline-block;\n width: 2rem;\n height: 2rem;\n`;\n\nexport const Overlay = styled.div`\n display: grid;\n position: absolute;\n margin: 0;\n left: 0;\n top: 0;\n padding: 0.8rem;\n opacity: 0;\n`;\n\nexport const Container = styled(Link)`\n position: relative;\n text-decoration: none;\n border: 1px solid #2a2a2a;\n background-color: #1f1f1f;\n overflow: hidden;\n width: 100%;\n height: 100%;\n margin: auto;\n border-radius: 0.375rem;\n cursor: pointer;\n\n &:hover .poster {\n filter: blur(5px) brightness(40%);\n }\n\n &:hover .overlay {\n opacity: 1;\n transition: opacity 0.8s ease;\n }\n`;\n\nexport const Poster = styled.img`\n display: block;\n width: 100%;\n aspect-ratio: 2 / 3;\n object-fit: cover;\n overflow: hidden;\n transition: filter 0.3s ease-out, transform 0.5s ease-out;\n`;\n\nexport const TextContainer = styled.div`\n margin: 0;\n width: 100%;\n height: 4.2rem;\n padding: 0.5rem;\n box-sizing: border-box;\n`;\n\nexport const TextTitle = styled.div`\n color: #ffffff;\n text-overflow: ellipsis;\n min-height: 2.4rem;\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n\n @media screen and (max-width: 1550px) and (max-width: 1750px) {\n font-size: 1rem;\n }\n\n @media screen and (min-width: 1430px) and (max-width: 1550px) {\n font-size: 1rem;\n }\n\n @media screen and (max-width: 1430px) {\n font-size: 1rem;\n }\n\n @media screen and (max-device-width: 480px) {\n font-size: 1.6rem;\n }\n`;\n\nexport const TextYear = styled.div`\n font-size: medium;\n font-weight: bold;\n font-size: 0.8rem;\n color: #666666;\n\n @media screen and (max-device-width: 480px) {\n font-size: 1.4rem;\n }\n`;\n\nexport const TextDescription = styled.p`\n color: #ffffff;\n margin: 0;\n font-size: 0.9rem;\n text-overflow: ellipsis;\n display: -webkit-box;\n overflow: hidden;\n text-shadow: 0 3px 6px rgb(0 0 0 / 16%), 0 6px 16px rgb(0 0 0 / 12%),\n 0 9px 28px rgb(0 0 0 / 7%);\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 16;\n`;\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport Cookies from \"universal-cookie\";\nimport { kurumiApi } from \"../../api\";\n\nexport const createWatchPartyRoom = createAsyncThunk(\n \"watchPartyState/createWatchPartyRoom\",\n async (isPrivate: boolean) => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.post(\n `v2/watchParty/createRoom`,\n { isPrivate },\n {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n }\n );\n\n const { result } = data;\n return result;\n }\n);\n\nexport const getWatchPartyRooms = createAsyncThunk(\n \"watchPartyState/getWatchPartyRooms\",\n async () => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/watchParty/getRooms`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n const { result } = data;\n return result;\n }\n);\n\nexport const getWatchPartyRoom = createAsyncThunk(\n \"watchPartyState/getWatchPartyRoom\",\n async (roomId: string) => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/watchParty/${roomId}`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n const { result } = data;\n return result;\n }\n);\n","import { NavLink as Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nexport const Nav = styled.nav`\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n width: 3rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n z-index: 10;\n`;\n\nexport const BannerImg = styled(Link)`\n display: flex;\n width: 3rem;\n height: 3rem;\n margin: 0.6rem;\n border-radius: 0.8rem;\n z-index: 300;\n text-decoration: none;\n\n img {\n width: 3rem;\n height: 3rem;\n }\n\n p {\n margin: 0;\n margin-left: 0.4rem;\n align-self: center;\n color: #f5f5f4;\n font-weight: 200;\n font-family: \"anton\";\n font-size: 1.6rem;\n font-style: italic;\n }\n\n .banner.suffix {\n margin-left: 0;\n color: #ef4444;\n }\n`;\n\nexport const NavLink = styled(Link)<{ active: string }>`\n color: #fff;\n font-weight: 600;\n font-size: 1.2rem;\n display: flex;\n margin: 0 0 1rem 0;\n text-decoration: none;\n border-radius: 0.8rem;\n width: 3rem;\n height: 3rem;\n cursor: pointer;\n background-color: ${({ active }) =>\n active === \"true\" ? \"#57534E\" : undefined};\n transition: all 0.5s ease;\n\n &:hover {\n border-radius: 1rem;\n background-color: #44403c;\n }\n\n img {\n height: 54px;\n }\n\n @media screen and (max-width: 494px) {\n .banner.prefix,\n .banner.suffix {\n font-size: 1.8rem;\n }\n }\n\n svg {\n margin: auto;\n width: 1.6rem;\n height: 1.6rem;\n }\n`;\n\nexport const NavMenu = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n /* align-items: center; */\n height: 100%;\n`;\n\nexport const NavBtnLink = styled(Link)`\n border-radius: 4px;\n background: #ef4444;\n padding: 10px 22px;\n color: #fff;\n outline: none;\n border: none;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n text-decoration: none;\n margin-left: 12px;\n\n &:hover {\n transition: all 0.2s ease-in-out;\n background: #fff;\n color: #010606;\n }\n`;\n","export default __webpack_public_path__ + \"static/media/kuru.b07622a6.png\";","import { useLocation } from \"react-router-dom\";\n\nimport { BannerImg, Nav, NavLink, NavMenu } from \"./styles\";\nimport kuru from \"../../../assets/images/kuru.png\";\n\nconst Navbar = () => {\n const location = useLocation();\n const path = location.pathname;\n\n return (\n <>\n \n \"logo\"\n

ANI

\n

KURU

\n
\n \n \n );\n};\n\nexport default Navbar;\n","export default __webpack_public_path__ + \"static/media/kurumi.c9c3af47.png\";","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport Cookies from \"universal-cookie\";\n\nimport { kurumiApi } from \"../../api\";\n\nexport const getSearchResults = createAsyncThunk(\n \"animeState/getSearchResults\",\n async (searchParam: string) => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/anime?q=${searchParam}`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n const { result } = data;\n return result;\n }\n);\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { STATUS } from \"../../types\";\n\nimport {\n getLatestAnime,\n getNewAnime,\n getWatchingEpisodes,\n} from \"./home.actions\";\nimport { HomeState } from \"./home.types\";\n\nconst initialState = { loading: STATUS.IDLE } as HomeState;\nconst homeStateReducer = createSlice({\n name: \"homeState\",\n initialState,\n reducers: {\n setHomeLoadingStatus: (state, { payload }) => {\n return { ...state, loading: payload };\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getWatchingEpisodes.rejected, () => {\n window.location.replace(\"/login\");\n });\n builder.addCase(getWatchingEpisodes.fulfilled, (state, { payload }) => {\n state.watchingEpList = payload;\n });\n\n builder.addCase(getLatestAnime.rejected, () => {\n window.location.replace(\"/login\");\n });\n builder.addCase(getLatestAnime.fulfilled, (state, { payload }) => {\n state.latestList = payload;\n });\n\n builder.addCase(getNewAnime.rejected, () => {\n window.location.replace(\"/login\");\n });\n builder.addCase(getNewAnime.fulfilled, (state, { payload }) => {\n state.newList = payload;\n });\n },\n});\n\nexport const { setHomeLoadingStatus } = homeStateReducer.actions;\nexport default homeStateReducer.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { STATUS } from \"../../types\";\nimport {\n createWatchPartyRoom,\n getWatchPartyRooms,\n getWatchPartyRoom,\n} from \"./watchParty.action\";\n\nimport { WatchPartyState } from \"./watchParty.types\";\n\nconst initialState = {\n watchPartyRooms: [],\n currentRoom: {} as any,\n loading: STATUS.IDLE,\n} as WatchPartyState;\nconst watchPartyStateReducer = createSlice({\n name: \"watchPartyState\",\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder.addCase(createWatchPartyRoom.fulfilled, (state, { payload }) => {\n window.location.replace(`watchParty/${payload._id}`);\n });\n\n builder.addCase(getWatchPartyRoom.fulfilled, (state, { payload }) => {\n state.loading = STATUS.SUCCESS;\n\n state.currentRoom = payload;\n });\n\n builder.addCase(getWatchPartyRooms.pending, (state, { payload }) => {\n state.loading = STATUS.LOADING;\n });\n\n builder.addCase(getWatchPartyRooms.fulfilled, (state, { payload }) => {\n state.watchPartyRooms = payload;\n state.loading = STATUS.LOADING;\n });\n },\n});\n\nexport default watchPartyStateReducer.reducer;\n","import styled from \"styled-components\";\n\nexport const MobRootContainerStyle = styled.div`\n margin: 2rem 1rem 0 1rem;\n min-height: 100vh;\n`;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { AppState } from \"./types\";\n\nconst appState = createSlice({\n name: \"app\",\n initialState: {\n isMobile: window.matchMedia(\n \"screen and (max-device-width: 493px), screen and (max-device-width: 926px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 1.5)\"\n ).matches,\n } as AppState,\n reducers: {\n setMedia: (state, { payload }) => {\n return { ...state, isMobile: payload };\n },\n },\n});\n\nexport const { setMedia } = appState.actions;\nexport default appState.reducer;\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport Cookies from \"universal-cookie\";\nimport { kurumiApi } from \"../../api\";\n\nexport const getScheduleResults = createAsyncThunk(\n \"animeState/getScheduleResults\",\n async () => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/misc/schedule`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n });\n\n const { result } = data;\n const res: any = [[], [], [], [], [], [], []];\n\n result.forEach((e: any) => {\n const date = new Date(e.releaseTime);\n const anime = e.anime;\n anime.year = date.toLocaleTimeString(\"en-US\", {\n hour12: true,\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n\n res[(date.getDay() - new Date().getDay() + 7) % 7].push({\n ...e.anime,\n _id: e.animeId,\n releaseTime: e.releaseTime,\n });\n });\n\n for (let i = 0; i < 7; ++i) {\n res[i].sort((a: any, b: any) => {\n const bD = new Date(b.releaseTime);\n const aD = new Date(a.releaseTime);\n return (\n aD.getHours() - bD.getHours() || aD.getMinutes() - bD.getMinutes()\n );\n });\n }\n\n return res;\n }\n);\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport Cookies from \"universal-cookie\";\nimport { kurumiApi } from \"../../api\";\n\nexport const getAnimeByGenre = createAsyncThunk(\n \"animeState/getScheduleResults\",\n async (genre: string) => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.post(\n `v2/anime/genre`,\n { genre },\n {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n }\n );\n\n return data.result;\n }\n);\n","export * from \"../store\";\nexport * from \"../store/animeDetails/animeDetails.types\";\nexport * from \"../api\";\nexport * from \"../store/home/home.actions\";\nexport * from \"../store/home/home.reducer\";\nexport * from \"../store/watchParty/watchParty.action\";\nexport * from \"../store/watchParty/watchParty.reducer\";\n","import styled from \"styled-components\";\nimport theme from \"../../../themes/default.json\";\n\nexport const MobHeadingStyle = styled.p`\n color: ${theme.colors.red_500};\n font-size: 1.6rem;\n margin-top: 0;\n margin-bottom: 1rem;\n text-shadow: 0 3px 6px rgb(0 0 0 / 16%), 0 6px 16px rgb(0 0 0 / 12%),\n 0 9px 28px rgb(0 0 0 / 7%);\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n`;\n\nexport const MobSubHeadingStyle = styled.p`\n color: ${theme.colors.red_500};\n font-size: 1rem;\n margin-top: 0;\n margin-bottom: 1rem;\n font-weight: bold;\n text-shadow: 0 3px 6px rgb(0 0 0 / 16%), 0 6px 16px rgb(0 0 0 / 12%),\n 0 9px 28px rgb(0 0 0 / 7%);\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n`;\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport Cookies from \"universal-cookie\";\nimport { kurumiApi } from \"../../api\";\n\nexport const getAnimeData = createAsyncThunk(\n \"animeState/getAnimeData\",\n async (animeId: number) => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(`v2/anime/${animeId}?isMal=false`, {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n anilist_token: `Bearer ${cookies.get(\"anilist_token\")}`,\n },\n });\n\n const { result } = data;\n return result;\n }\n);\n\nexport const getAnimeEpisodes = createAsyncThunk(\n \"animeState/getAnimeEpisodes\",\n async ({ animeId, pageNo }: { animeId: number; pageNo: number }) => {\n const cookies = new Cookies();\n\n const { data } = await kurumiApi.get(\n `v2/anime/${animeId}/episodes?page_no=${pageNo}&per_page=50`,\n {\n headers: {\n Authorization: `Bearer ${cookies.get(\"access_token\")}`,\n },\n }\n );\n\n const { result } = data;\n return { ...result, pageNo };\n }\n);\n","import { SvgStyle } from \"../../styles\";\nimport { PaginationTooltips } from \"../../components\";\n\nconst PaginationTabs = ({\n hasPrevious,\n hasNext,\n handleFirst,\n handlePrevious,\n handleNext,\n handleLast,\n}: {\n hasPrevious: boolean;\n hasNext: boolean;\n handleFirst: () => void;\n handlePrevious: () => void;\n handleNext: () => void;\n handleLast: () => void;\n}) => {\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nexport default PaginationTabs;\n","import {\n ForwardedRef,\n forwardRef,\n memo,\n useEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { useSelector } from \"react-redux\";\nimport Plyr, { PlyrEvent } from \"plyr\";\nimport Hls from \"hls.js\";\nimport $ from \"jquery\";\n\nimport { RootState, useAppDispatch, getWatchingEpisodes } from \"../../store\";\n\nimport \"plyr/dist/plyr.css\";\nimport \"./player.css\";\nimport { PlayerMessageAttrs } from \"../../misc\";\nimport { showStatusToast } from \"../../../utils/toastMessage\";\n\nconst rafAsync = () => {\n return new Promise((resolve) => {\n requestAnimationFrame(resolve); //faster than set time out\n });\n};\n\n// Allows rerunning\nconst checkElement = (\n selector: any,\n element: any,\n triggerOnRemoval = false\n): any => {\n const check = triggerOnRemoval\n ? $(selector)[0] === element\n : document.querySelector(selector) === null || $(selector)[0] === element;\n if (check) {\n return rafAsync().then(() =>\n checkElement(selector, element, triggerOnRemoval)\n );\n } else {\n return Promise.resolve(true);\n }\n};\n\nconst addPlayerButtons = (selector: any, element: any): any => {\n console.log(\"player rice\");\n checkElement(selector, element).then(async (element: any) => {\n const isMobile = window.matchMedia(\n \"screen and (max-device-width: 493px), screen and (max-device-width: 926px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 1.5)\"\n ).matches;\n\n if (isMobile) {\n // remove volume controls\n $(\"div.plyr__controls > div.plyr__controls__item.plyr__volume\").remove();\n\n // rewind\n $(\"div.plyr__controls > button:nth-child(1) > svg\").replaceWith(`\n \n \n \n `);\n\n // forward\n $(\"div.plyr__controls > button:nth-child(3) > svg\").replaceWith(`\n \n \n \n `);\n\n // pause-play icons\n $(\"div.plyr__controls > button:nth-child(2) > svg.icon--pressed\")\n .replaceWith(`\n \n `);\n\n $(\"div.plyr__controls > button:nth-child(2) > svg.icon--not-pressed\")\n .replaceWith(`\n \n `);\n\n // settings\n $(\n \"div.plyr__controls > div.plyr__controls__item.plyr__menu > button > svg\"\n ).replaceWith(`\n \n \n \n `);\n } else {\n // skip op button\n $(\"div.plyr__controls > button:nth-child(1)\").parent().prepend(`\n \n Skip OP\n \n \n \n \n `);\n\n // pause-play icons\n $(\"div.plyr__controls > button:nth-child(2) > svg.icon--pressed\")\n .replaceWith(`\n \n `);\n\n $(\"div.plyr__controls > button:nth-child(2) > svg.icon--not-pressed\")\n .replaceWith(`\n \n `);\n\n $(\n \"div.plyr__controls > div.plyr__controls__item.plyr__volume > button > svg.icon--pressed\"\n ).replaceWith(`\n \n \n \n `);\n\n $(\n \"div.plyr__controls > div.plyr__controls__item.plyr__volume > button > svg.icon--not-pressed\"\n ).replaceWith(`\n \n \n \n `);\n\n $(\"div.plyr__controls > button:nth-child(9) > svg.icon--pressed\")\n .replaceWith(`\n \n \n \n `);\n\n $(\"div.plyr__controls > button:nth-child(9) > svg.icon--not-pressed\")\n .replaceWith(`\n \n \n \n `);\n\n // settings\n $(\n \"div.plyr__controls > div.plyr__controls__item.plyr__menu > button > svg\"\n ).replaceWith(`\n \n \n \n `);\n\n $(\"div.plyr__controls > button:nth-child(8) > svg\").replaceWith(`\n \n \n \n \n `);\n\n try {\n const isPrevEp =\n ($(\"p.prev-text\")[0].attributes as any).color.value === \"#ef4444\";\n const isNextEp =\n ($(\"p.next-text\")[0].attributes as any).color.value === \"#ef4444\";\n\n $(\".plyr__controls__item.plyr__menu\").append(`\n \n \n \n \n Previous Episode\n \n \n \n \n \n \n Next Episode\n \n `);\n } catch (err) {}\n\n try {\n $(\"a#previous_ep_button\")[0].onclick = () => {\n $(\"p.prev-text\")[0].click();\n };\n $(\"a#next_ep_button\")[0].onclick = () => {\n $(\"p.next-text\")[0].click();\n };\n } catch (err) {}\n\n // return addPlayerButtons(\"div.plyr__controls\", $(\"div.plyr__controls\")[0]);\n }\n });\n};\n\nconst Player = (\n props: {\n stream: string;\n animeId: number;\n epNo: number;\n epId: string;\n handleMarkAsWatched: (animeId: number, epNo: number) => Promise;\n handleOnPause?: (msg: any) => void;\n handleOnPlay?: any;\n emit: (event: string, msg: any) => void;\n emitPlayerEvents: (event: string, msg: PlayerMessageAttrs) => void;\n isMaster?: boolean;\n isRoom: boolean;\n },\n ref?: ForwardedRef<\n | {\n onPause: (time: number) => void;\n onPlay: (time: number) => void;\n onSeeked: (time: number, playing: boolean) => void;\n onGetTime: () => void;\n }\n | undefined\n >\n) => {\n const {\n animeId,\n emit,\n epId,\n epNo,\n handleMarkAsWatched,\n stream,\n isMaster,\n emitPlayerEvents,\n isRoom,\n } = props;\n const watchingList = useSelector<\n RootState,\n RootState[\"homeState\"][\"watchingEpList\"]\n >((state) => state.homeState.watchingEpList);\n const plyrRef = useRef();\n\n const isMobile = useSelector(\n (state) => state.app.isMobile\n );\n\n const user = useSelector(\n (state) => state.user.user\n );\n\n const streamUrl = atob(stream);\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(getWatchingEpisodes());\n addPlayerButtons(\"div.plyr__controls\", \"\");\n }, [dispatch]);\n\n useImperativeHandle(ref, () => ({\n onPause: (time) => {\n if (isMaster) return;\n plyrRef.current!.currentTime = time;\n plyrRef.current!.pause();\n },\n onPlay: (time) => {\n if (isMaster) return;\n plyrRef.current!.currentTime = time;\n plyrRef.current!.play();\n },\n onSeeked: async (time: number, playing: boolean) => {\n if (isMaster) return;\n plyrRef.current!.currentTime = time;\n if (playing) {\n await plyrRef.current!.play();\n } else {\n plyrRef.current!.pause();\n }\n },\n onGetTime: () => {\n if (!isMaster) return;\n emitPlayerEvents(\"seeked\", {\n time: plyrRef.current!.currentTime,\n playing: plyrRef.current!.playing,\n });\n },\n }));\n\n useEffect(() => {\n if (!watchingList || !user) return;\n\n const element = document.querySelector(\"video\");\n const startFrom =\n (watchingList.find((e) => e.episode.epId === epId) ?? {}).episode\n ?.currentTime ?? 0;\n\n let options: Plyr.Options = {\n i18n: {\n play: \"Play (K)\",\n pause: \"Pause (K)\",\n mute: \"Mute (M)\",\n unmute: \"Unmute (M)\",\n enterFullscreen: \"Enter fullscreen (F)\",\n exitFullscreen: \"Exit fullscreen (F)\",\n },\n autoplay: true,\n tooltips: { controls: true, seek: true },\n seekTime: 5,\n keyboard:\n isRoom && !isMaster\n ? { focused: false, global: false }\n : { focused: true, global: true },\n fullscreen: { iosNative: true },\n speed: { selected: 1, options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2] },\n listeners:\n isRoom && !isMaster\n ? {\n seek: (e) => false,\n pause: (e) => false,\n play: (e) => false,\n restart: (e) => false,\n rewind: (e) => false,\n }\n : {},\n };\n\n if (isMobile) {\n options.controls = [\n \"play-large\",\n \"rewind\",\n \"play\",\n \"fast-forward\",\n \"progress\",\n \"current-time\",\n \"mute\",\n \"volume\",\n \"settings\",\n \"fullscreen\",\n ];\n }\n\n if (streamUrl.includes(\"storage.googleapis\")) {\n plyrRef.current = new Plyr(element!, options);\n\n let runningInterval: NodeJS.Timeout;\n\n plyrRef.current.source = {\n sources: [{ src: streamUrl, type: \"video/mp4\", size: 1080 }],\n type: \"video\",\n };\n\n attachProgressListener(startFrom).then((data) => {\n runningInterval = data;\n });\n\n return () => {\n clearInterval(runningInterval);\n plyrRef.current && plyrRef.current.destroy();\n };\n } else if (Hls.isSupported() && streamUrl.includes(\"m3u8\")) {\n const hls = new Hls({ enableWorker: true });\n\n let runningInterval: NodeJS.Timeout;\n\n hls.loadSource(streamUrl);\n hls.on(Hls.Events.MANIFEST_PARSED, () => {\n const qualityLevels = hls.levels.map((level) => level.height).reverse();\n\n options.quality = {\n default: qualityLevels[0],\n options: qualityLevels,\n forced: true,\n\n onChange: (quality: number) => {\n const t = quality;\n hls.levels.forEach((e, n) => {\n if (e.height === t) {\n hls.currentLevel = n;\n }\n });\n },\n };\n plyrRef.current = new Plyr(element!, options);\n\n attachProgressListener(startFrom).then((data) => {\n runningInterval = data;\n });\n });\n\n hls.attachMedia(element!);\n\n return () => {\n clearInterval(runningInterval);\n hls && hls.destroy();\n plyrRef.current && plyrRef.current.destroy();\n };\n } else if (streamUrl.includes(\"m3u8\")) {\n plyrRef.current = new Plyr(element!, options);\n\n let runningInterval: NodeJS.Timeout;\n\n plyrRef.current.source = { type: \"video\", sources: [{ src: streamUrl }] };\n plyrRef.current.play();\n\n attachProgressListener(startFrom).then((data) => {\n runningInterval = data;\n });\n\n return () => {\n clearInterval(runningInterval);\n plyrRef.current && plyrRef.current.destroy();\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [watchingList, streamUrl, epId, animeId, user, epNo, handleMarkAsWatched]);\n\n const interval = (cb: () => void) =>\n setInterval(async () => {\n const { currentTime, duration } = plyrRef.current!;\n\n if (currentTime / duration > 0.85) {\n emit(\"setFinished\", {\n userId: user._id,\n animeId,\n epId,\n currentTime,\n });\n\n await handleMarkAsWatched(animeId, epNo);\n return cb();\n }\n\n emit(\"updateTime\", {\n userId: user._id,\n animeId,\n epId,\n currentTime,\n });\n }, 10 * 1000);\n\n const attachProgressListener = (startFrom: number): Promise => {\n let runningInterval: NodeJS.Timeout;\n\n if (isRoom && isMaster) {\n plyrRef.current!.on(\"seeked\", function (this: Plyr, event: PlyrEvent) {\n emitPlayerEvents(\"seeked\", {\n time: plyrRef.current!.currentTime,\n playing: plyrRef.current!.playing,\n });\n });\n plyrRef.current!.on(\"pause\", () => {\n emitPlayerEvents(\"pause\", {\n time: plyrRef.current!.currentTime,\n playing: false,\n });\n });\n plyrRef.current!.on(\"play\", () => {\n emitPlayerEvents(\"play\", {\n time: plyrRef.current!.currentTime,\n playing: true,\n });\n });\n }\n\n return new Promise((resolve) => {\n plyrRef.current!.once(\"canplay\", async () => {\n emit(\"getTime\", {});\n\n runningInterval = interval(() => clearInterval(runningInterval));\n\n emit(\"setStart\", { userId: user._id, animeId, epId });\n try {\n await plyrRef.current!.play();\n } catch {\n showStatusToast(\n \"Failed to play the video with audio due to Autoplay Policy. Unmute the video using (M) key or sliding the volume\"\n );\n plyrRef.current!.muted = true;\n await plyrRef.current!.play();\n }\n\n return resolve(runningInterval);\n });\n });\n };\n\n return (\n
\n \n
\n );\n};\n\nconst PlayerFwdRef = forwardRef(Player);\n\nexport default memo(PlayerFwdRef, (oldProps, newProps) => {\n return oldProps.stream === newProps.stream;\n});\n","import { SortTooltips } from \"../../components\";\nimport { SvgStyle } from \"../../styles\";\nimport { SORT_BY, SORT_ORDER } from \"../../misc\";\n\nconst SearchSortGroup = ({\n sortBy,\n sortOrder,\n setSortBy,\n setSortOrder,\n}: {\n sortBy: SORT_BY;\n sortOrder: SORT_ORDER;\n setSortBy: (a: SORT_BY) => void;\n setSortOrder: (a: SORT_ORDER) => void;\n}) => {\n const handleSortOrder = (sortOrder: SORT_ORDER) => {\n setSortOrder(sortOrder);\n localStorage.setItem(\"sortOrder\", `${sortOrder}`);\n };\n\n const handleSortBy = (sortBy: SORT_BY) => {\n setSortBy(sortBy);\n localStorage.setItem(\"sortBy\", `${sortBy}`);\n };\n\n return (\n <>\n \n\n {sortOrder === SORT_ORDER.ASC ? (\n handleSortOrder(SORT_ORDER.DESC)}\n >\n \n \n ) : (\n handleSortOrder(SORT_ORDER.ASC)}\n >\n \n \n )}\n\n handleSortBy(SORT_BY.TITLE)}\n >\n \n \n handleSortBy(SORT_BY.YEAR)}\n >\n \n \n handleSortBy(SORT_BY.RATING)}\n >\n \n \n handleSortBy(SORT_BY.POPULARITY)}\n >\n \n \n \n );\n};\n\nexport default SearchSortGroup;\n","import ReactTooltip from \"react-tooltip\";\n\nconst SortTooltips = () => {\n return (\n <>\n \n

Sort in reverse order

\n \n\n \n

Sort by relevance

\n \n\n \n

Sort by title

\n \n\n \n

Sort by year

\n \n\n \n

Sort by rating

\n \n\n \n

Sort by popularity

\n \n \n );\n};\n\nexport default SortTooltips;\n","import ReactTooltip from \"react-tooltip\";\n\nconst PaginationTooltips = () => {\n return (\n <>\n \n

Go to first

\n \n \n

Go to previous

\n \n \n

Go to next

\n \n \n

Go to last

\n \n \n );\n};\n\nexport default PaginationTooltips;\n","import { Flipped } from \"react-flip-toolkit\";\n\nimport {\n Overlay,\n Container,\n Poster,\n TextContainer,\n TextTitle,\n TextYear,\n TextDescription,\n} from \"./styles\";\nimport { Anime } from \"../../../misc\";\n\nconst AnimeElement = ({\n _id,\n title,\n coverImage,\n year,\n epNumber,\n description,\n bannerImage,\n onHover,\n isLink,\n handleClick,\n}: Anime & {\n onHover?: (bannerImage: string) => void;\n isLink?: boolean;\n handleClick?: (animeId: number) => void;\n}) => (\n \n onHover && onHover(bannerImage)}\n onMouseLeave={() => onHover && onHover(\"\")}\n style={{ textDecoration: \"none\" }}\n to={\n isLink\n ? epNumber\n ? `/anime/${_id}/episode/${epNumber}`\n : `/anime/${_id}`\n : \"#\"\n }\n onClick={() => !isLink && handleClick!(_id)}\n >\n \n \n {title.romaji}\n {year}\n \n \n \n \n
\n \n);\n\nexport default AnimeElement;\n","import styled from \"styled-components\";\n\nexport const AnimeGridElement = styled.div`\n margin-bottom: 1.6rem;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));\n grid-gap: 1rem;\n\n @media screen and (min-width: 1720px) and (max-width: 1820px) {\n grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));\n }\n\n @media screen and (min-width: 1520px) and (max-width: 1720px) {\n grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));\n }\n\n @media screen and (min-width: 1360px) and (max-width: 1520px) {\n grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));\n }\n\n @media screen and (min-width: 1170px) and (max-width: 1360px) {\n grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));\n }\n\n @media screen and (min-width: 0px) and (max-width: 1170px) {\n grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));\n }\n`;\n","import { memo } from \"react\";\nimport { Flipper } from \"react-flip-toolkit\";\n\nimport AnimeItem from \"../item\";\nimport { AnimeGridElement } from \"./styles\";\nimport { Anime, SORT_BY, SORT_ORDER } from \"../../../misc\";\n\nconst AnimeGrid = ({\n animeList,\n sortBy,\n sortOrder,\n onHover,\n isLink,\n handleClick,\n}: {\n animeList: Anime[];\n sortBy: SORT_BY;\n sortOrder: SORT_ORDER;\n onHover?: (bannerImage: string) => void;\n isLink?: boolean;\n handleClick?: (animeId: number) => void;\n}) => (\n \n \n {animeList.map((anime) => (\n \n ))}\n \n \n);\n\nexport default memo(\n AnimeGrid,\n (oldProps, newProps) =>\n oldProps.animeList[0]?._id === newProps.animeList[0]?._id\n);\n","import styled from \"styled-components\";\n\nexport const ButtonPrimary = styled.button`\n background-color: #ef4444;\n color: white;\n border: 0;\n border-radius: 4px;\n font-size: 1rem;\n min-width: 6rem;\n max-height: 3rem;\n text-transform: uppercase;\n transition: background-color 0.2s ease-in;\n\n &:hover {\n background-color: #f87171;\n transition: background-color 0.2s ease-out;\n }\n\n &:focus {\n outline: none;\n }\n`;\n","import { ButtonPrimary } from \"./styles\";\n\nconst Button = ({\n label,\n handleSubmit,\n}: {\n label: string;\n handleSubmit: () => any;\n}) => {\n return {label};\n};\n\nexport default Button;\n","import styled from \"styled-components\";\n\nexport const EpisodeGridElement = styled.div`\n margin-bottom: 1.6rem;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));\n grid-gap: 1rem;\n\n @media screen and (max-device-width: 480px) {\n grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));\n }\n`;\n","import { lazy, Suspense } from \"react\";\n\nimport { EpisodeGridElement } from \"./styles\";\nimport { Episode, MediaListStatus } from \"../../../misc\";\n\nconst EpisodeElement = lazy(() => import(\"../item\"));\n\nconst EpisodeGrid = ({\n episodeList,\n progress,\n mediaListStatus,\n onHover,\n isLink,\n handleOnClick,\n}: {\n episodeList: Episode[];\n progress: number | null;\n mediaListStatus: MediaListStatus | null;\n onHover?: (bannerImage: string) => void;\n isLink: boolean;\n handleOnClick?: (epNo: number) => void;\n}) => (\n \n {episodeList.map((episode: any) => (\n } key={episode.epId}>\n {progress !== null && mediaListStatus ? (\n episode.epNumber <= progress ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n \n ))}\n \n);\n\nexport default EpisodeGrid;\n","import styled from \"styled-components\";\n\nexport const Theater = styled.div`\n display: block;\n position: relative;\n width: 100%;\n height: 0;\n padding-top: 56.25%;\n`;\n\nexport const Player = styled.iframe`\n display: block;\n position: absolute;\n border: 0;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n`;\n","import styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\n\nexport const Container = styled.div`\n box-sizing: border-box;\n`;\n\nexport const GenreItem = styled(Link)`\n color: #fca5a5;\n display: inline;\n text-decoration: none;\n`;\n","import { Container, GenreItem } from \"./styles\";\n\nconst Genres = ({ genres }: { genres: string[] }) => {\n return (\n \n {genres.map((genre, i) => (\n \n {i === genres.length - 1 ? genre : `${genre} | `}\n \n ))}\n \n );\n};\n\nexport default Genres;\n","import styled from \"styled-components\";\n\nexport const InputField = styled.div<{ isActive: boolean }>`\n box-sizing: border-box;\n width: 100%;\n height: 56px;\n position: relative;\n transition: 0.3s box-shadow ease-out;\n box-shadow: ${({ isActive }) => (isActive ? \"0px 3px 0px 0px #ef4444\" : \"\")};\n\n &:hover {\n box-shadow: ${({ isActive }) =>\n isActive ? \"0px 3px 0px 0px #ef4444\" : \"0px 2px 0px 0px #ef4444\"};\n }\n`;\n\nexport const InputBox = styled.input`\n width: 100%;\n height: 60px;\n position: relative;\n padding: 0 1rem;\n border: none;\n border-radius: 4px;\n font-size: 1.2rem;\n font-weight: 400;\n line-height: normal;\n background-color: transparent;\n color: #ddd;\n outline: none;\n transition: 0.3s box-shadow ease-in-out, 0.1s padding ease-in-out;\n -webkit-appearance: none;\n\n &:hover .input-field {\n box-shadow: 0px 2px 0px 0px #ef4444;\n }\n`;\n","import { useState } from \"react\";\n\nimport { InputBox, InputField } from \"./styles\";\n\nconst Input = ({\n value,\n placeholder,\n isPassword = false,\n handleOnChange,\n handleOnSubmit,\n}: {\n value: string;\n placeholder: string;\n isPassword?: boolean;\n handleOnChange: (str: string) => void;\n handleOnSubmit?: (str: string) => Promise | void;\n}) => {\n const [isActive, setActive] = useState(false);\n\n return (\n \n setActive(true)}\n onBlur={() => setActive(false)}\n type={isPassword ? \"password\" : \"text\"}\n placeholder={placeholder}\n onChange={(e) => handleOnChange(e.currentTarget.value)}\n onKeyDown={(e) =>\n e.code === \"Enter\" &&\n handleOnSubmit &&\n handleOnSubmit(e.currentTarget.value)\n }\n />\n \n );\n};\n\nexport default Input;\n","import styled from \"styled-components\";\n\nexport const LoadingAnimation = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n`;\n","import { TraceSpinner } from \"react-spinners-kit\";\n\nimport { LoadingAnimation } from \"./styles\";\n\nconst Loading = ({ height }: { height?: string }) => {\n return (\n \n \n \n );\n};\n\nexport default Loading;\n","import { toast } from \"react-toastify\";\nimport { MediaListStatus } from \"../types\";\n\nexport const showStatusToast = (status: MediaListStatus | string): void => {\n switch (status) {\n case MediaListStatus.CURRENT: {\n toast.dark(`Marked as \"currently watching\"`, {\n style: { color: \"#C4B5FD\" },\n });\n return;\n }\n\n case MediaListStatus.PLANNING: {\n toast.dark(`Marked as \"planning to watch\"`, {\n style: { color: \"#7DD3FC\" },\n });\n return;\n }\n\n case MediaListStatus.COMPLETED: {\n toast.dark(`Marked as \"completed\"`, {\n style: { color: \"#BEF264\" },\n });\n return;\n }\n\n case MediaListStatus.DROPPED: {\n toast.dark(`Marked as \"dropped\"`, {\n style: { color: \"#ff5f71\" },\n });\n return;\n }\n\n case MediaListStatus.PAUSED: {\n toast.dark(`Marked as \"paused\"`, {\n style: { color: \"#FDE047\" },\n });\n return;\n }\n\n case MediaListStatus.REPEATING: {\n toast.dark(`Marked as \"repeating\"`, {\n style: { color: \"#e888f8\" },\n });\n return;\n }\n\n default: {\n toast.dark(status, {\n style: { color: \"#eee\" },\n });\n return;\n }\n }\n};\n\nexport const showIncorrectInviteToast = () => {\n toast.dark(`Incorrect invite key`, {\n style: { color: \"#C4B5FD\" },\n });\n};\n","export const genres: {\n [key: string]: { genre: string; slug: string; poster: string };\n} = {\n action: {\n genre: \"Action\",\n slug: \"action\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx113415-979nF8TZP2xC.jpg\",\n },\n adventure: {\n genre: \"Adventure\",\n slug: \"adventure\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx21355-xsLpqMFkMQQk.png\",\n },\n comedy: {\n genre: \"Comedy\",\n slug: \"comedy\",\n poster:\n \"https://vistapointe.net/images/great-teacher-onizuka-wallpaper-6.jpg\",\n },\n drama: {\n genre: \"Drama\",\n slug: \"drama\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx11887-AJezDTY27LxZ.png\",\n },\n ecchi: {\n genre: \"Ecchi\",\n slug: \"ecchi\",\n poster: \"https://m.media-amazon.com/images/I/91fzfdBwA5L.jpg\",\n },\n fantasy: {\n genre: \"Fantasy\",\n slug: \"fantasy\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx106286-5COcpd0J9VbL.png\",\n },\n horror: {\n genre: \"Horror\",\n slug: \"horror\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/medium/13807.jpg\",\n },\n \"mahou-shoujo\": {\n genre: \"Mahou Shoujo\",\n slug: \"mahou-shoujo\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx9756-oqKE3E6DLtgm.jpg\",\n },\n mecha: {\n genre: \"Mecha\",\n slug: \"mecha\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx30-1Ro1NFFg28bu.jpg\",\n },\n music: {\n genre: \"Music\",\n slug: \"music\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx5680-Xh6B67KuZ2PU.png\",\n },\n mystery: {\n genre: \"Mystery\",\n slug: \"mystery\",\n poster:\n \"https://images-na.ssl-images-amazon.com/images/I/81L4UXKIiPL._SL1500_.jpg\",\n },\n psychological: {\n genre: \"Psychological\",\n slug: \"psychological\",\n poster:\n \"https://i.pinimg.com/736x/3a/04/3d/3a043d713e57c304137d4567cfc6a636.jpg\",\n },\n romance: {\n genre: \"Romance\",\n slug: \"romance\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/nx102882-lKp3ExWNzoE6.jpg\",\n },\n \"sci-fi\": {\n genre: \"Sci-Fi\",\n slug: \"sci-fi\",\n poster:\n \"https://i.pinimg.com/originals/10/2e/d7/102ed747bce1dab9c16768abe11549b4.jpg\",\n },\n \"slice-of-life\": {\n genre: \"Slice of Life\",\n slug: \"slice-of-life\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx10165-1j2Qn8wIIn5S.png\",\n },\n sports: {\n genre: \"Sports\",\n slug: \"sports\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx1764-8AxfOVdCcMr0.png\",\n },\n supernatural: {\n genre: \"Supernatural\",\n slug: \"supernatural\",\n poster:\n \"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx1535-lawCwhzhi96X.jpg\",\n },\n};\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { getSearchResults } from \"./search.actions\";\nimport { STATUS } from \"../../types\";\nimport { Anime } from \"../animeDetails/animeDetails.types\";\nimport { SearchState } from \"./search.types\";\n\nconst initialState = {\n loading: STATUS.IDLE,\n searchList: [] as Anime[],\n searchParam: \"\",\n} as SearchState;\nconst searchStateReducer = createSlice({\n name: \"searchState\",\n initialState,\n reducers: {\n setSearchParam: (state, { payload }) => {\n return { ...state, searchParam: payload };\n },\n setSearchLoading: (state, { payload }) => {\n return { ...state, loading: payload };\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getSearchResults.pending, (state) => {\n state.loading = STATUS.LOADING;\n });\n builder.addCase(getSearchResults.rejected, (state) => {\n state.loading = STATUS.FAILED;\n window.location.replace(\"/login\");\n });\n builder.addCase(getSearchResults.fulfilled, (state, { payload }) => {\n state.searchList = payload;\n state.loading = STATUS.SUCCESS;\n });\n },\n});\n\nexport const { setSearchLoading, setSearchParam } = searchStateReducer.actions;\nexport default searchStateReducer.reducer;\n","export const millisToReadable = (millis: number): string => {\n let h, m;\n h = Math.floor(millis / 1000 / 60 / 60);\n m = Math.floor((millis / 1000 / 60 / 60 - h) * 60);\n\n m < 10 ? (m = `0${m}`) : (m = `${m}`);\n h < 10 ? (h = `0${h}`) : (h = `${h}`);\n\n if (h !== \"00\") return `${h}h ${m}m`;\n else return `${m}m`;\n};\n","import { MutableRefObject, useEffect } from \"react\";\n\nexport const useOutsideClickHook = (\n ref: MutableRefObject,\n cb: () => any\n) => {\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) =>\n ref.current && !ref.current.contains(event.target) && cb();\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [cb, ref]);\n};\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { getAnimeData, getAnimeEpisodes } from \"./animeDetails.actions\";\nimport { AnimeDetailsState } from \"./animeDetails.types\";\n\nconst initialState = {} as AnimeDetailsState;\nconst animeDetailsStateReducer = createSlice({\n name: \"animeDetailsState\",\n initialState,\n reducers: {\n setInitialState: (state) => {\n return {} as AnimeDetailsState;\n },\n setPageNo: (state, { payload }) => {\n return {\n ...state,\n episodeData: { ...state.episodesData, pageNo: payload },\n };\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getAnimeData.fulfilled, (state, { payload }) => {\n state.animeDetail = payload;\n });\n\n builder.addCase(getAnimeEpisodes.fulfilled, (state, { payload }) => {\n state.episodesData = {\n pageNo: payload.pageNo,\n showingResults: payload.showingResults,\n totalEpisodes: payload.totalEpisodes,\n };\n state.episodeList = payload.episodes;\n });\n },\n});\n\nexport const { setPageNo, setInitialState } = animeDetailsStateReducer.actions;\nexport default animeDetailsStateReducer.reducer;\n","import styled from \"styled-components\";\n\nexport const MainContainer = styled.div`\n grid-area: main;\n`;\n\nexport const KurumiBg = styled.div<{ img: string }>`\n position: absolute;\n bottom: 0;\n right: 0;\n width: 100%;\n height: 25vh;\n background-image: url(${({ img }) => img});\n background-position: 100% 5%;\n background-size: cover;\n`;\n","import { Loading } from \"../../components\";\nimport {\n ButtonStyle,\n HeadingStyle,\n LeftPaddingStyle,\n RightPaddingStyle,\n RootContainerStyle,\n} from \"../../styles\";\nimport { STATUS } from \"../../misc\";\n\nimport kuru from \"../../../assets/images/kurumi.png\";\nimport { MainContainer } from \"./styles\";\n\nconst LoginContainer = ({ loading }: { loading: any }) => (\n \n \n\n \n {loading === STATUS.LOADING ? (\n
\n \n
\n ) : (\n <>\n \n Login\n \n (window.location.href =\n process.env.NODE_ENV === \"development\"\n ? \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=http%3A%2F%2Flocalhost:3000%2Flogin%2Foauth&response_type=token&scope=identify%20guilds&prompt=none\"\n : \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=https%3A%2F%2Fanikuru.me%2Flogin%2Foauth&response_type=token&scope=identify%20guilds&prompt=none\")\n }\n >\n Login with Discord\n \n
\n \n (window.location.href =\n process.env.NODE_ENV === \"development\"\n ? \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=http%3A%2F%2Flocalhost:3000%2Finvite%2Foauth&response_type=token&scope=identify%20guilds%20guilds.join&prompt=none\"\n : \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=https%3A%2F%2Fanikuru.me%2Finvite%2Foauth&response_type=token&scope=identify%20guilds%20guilds.join&prompt=none\")\n }\n >\n I have an Invite!\n \n \n )}\n
\n \n
\n);\n\nexport default LoginContainer;\n","import { KurumiBg } from \"../styles\";\nimport { ButtonStyle } from \"../../../styles\";\nimport { MobHeadingStyle, MobRootContainerStyle } from \"../../../styles/mob\";\n\nimport kuru from \"../../../../assets/images/kurumi.png\";\nimport { STATUS } from \"../../../misc\";\nimport { Loading } from \"../../../components\";\n\nconst MobLoginContainer = ({ loading }: { loading: any }) => (\n \n {loading === STATUS.LOADING ? (\n
\n \n
\n ) : (\n <>\n \n Login\n \n (window.location.href =\n process.env.NODE_ENV === \"development\"\n ? \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=http%3A%2F%2Flocalhost:3000%2Flogin%2Foauth&response_type=token&scope=identify%20guilds&prompt=none\"\n : \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=https%3A%2F%2Fanikuru.me%2Flogin%2Foauth&response_type=token&scope=identify%20guilds&prompt=none\")\n }\n >\n Login with Discord\n \n
\n \n (window.location.href =\n process.env.NODE_ENV === \"development\"\n ? \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=http%3A%2F%2Flocalhost:3000%2Finvite%2Foauth&response_type=token&scope=identify%20guilds%20guilds.join&prompt=none\"\n : \"https://discord.com/api/oauth2/authorize?client_id=813683955265699891&redirect_uri=https%3A%2F%2Fanikuru.me%2Finvite%2Foauth&response_type=token&scope=identify%20guilds%20guilds.join&prompt=none\")\n }\n >\n I have an Invite!\n \n \n )}\n
\n);\n\nexport default MobLoginContainer;\n","import { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport Cookies from \"universal-cookie\";\nimport { RootState, useAppDispatch } from \"../../store\";\nimport { userAuth } from \"../../store/user/actions\";\nimport { STATUS } from \"../../types\";\n\nconst useQuery = () => {\n return new URLSearchParams(useLocation().search);\n};\n\nconst useLoginPage = () => {\n const loading = useSelector(\n (state) => state.user.loading\n );\n\n const query = useQuery();\n const dispatch = useAppDispatch();\n const history = useHistory();\n const location = useLocation();\n\n useEffect(() => {\n const cookies = new Cookies();\n const now = new Date();\n now.setDate(now.getDate() + 7);\n\n (async () => {\n if (loading === STATUS.IDLE) {\n const discordAccessToken = location.hash\n .replace(\"#token_type=Bearer&access_token=\", \"\")\n .replace(\"&expires_in=604800&scope=identify+guilds\", \"\");\n if (discordAccessToken) {\n cookies.set(\"discord_access_token\", discordAccessToken, {\n path: \"/\",\n expires: now,\n });\n\n await dispatch(userAuth());\n history.replace(\"/\");\n }\n }\n })();\n }, [dispatch, query, loading, history, location.hash]);\n\n return { loading };\n};\n\nexport default useLoginPage;\n","import LoginContainer from \"../../ui/containers/Login\";\nimport MobLoginContainer from \"../../ui/containers/Login/mob\";\nimport useLoginPage from \"./hooks\";\n\nconst LoginPage = ({ isMobile }: { isMobile: boolean }) => {\n const { loading } = useLoginPage();\n\n return isMobile ? (\n \n ) : (\n \n );\n};\n\nexport default LoginPage;\n","import styled from \"styled-components\";\n\nexport const Logo = styled.div`\n display: flex;\n width: 3rem;\n height: 3rem;\n margin: 0.6rem;\n border-radius: 0.8rem;\n\n img {\n width: 3rem;\n height: 3rem;\n }\n\n p {\n margin: 0;\n margin-left: 0.4rem;\n align-self: center;\n color: #f5f5f4;\n font-weight: 200;\n font-family: \"anton\";\n font-size: 1.6rem;\n font-style: italic;\n }\n\n .banner.suffix {\n margin-left: 0;\n color: #ef4444;\n }\n`;\n\nexport const Footer = styled.div<{ footer: string }>`\n position: relative;\n width: 100%;\n height: 25vh;\n background-image: url(${({ footer }) => footer});\n background-position: 100% 5%;\n background-size: cover;\n\n p {\n margin-left: 2rem;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n color: white;\n\n a {\n text-decoration: none;\n color: #ef4444;\n }\n }\n`;\n","export default __webpack_public_path__ + \"static/media/footer.2944a27e.png\";","import { Redirect, Route } from \"react-router-dom\";\nimport { useEffect } from \"react\";\nimport { userAuthCheck } from \"../../store/user/actions\";\n\nimport { MobRootContainerStyle } from \"../styles/mob/rootContainerStyles\";\nimport { Footer } from \"./PrivateRouteStyles\";\n\nimport footer from \"../../assets/images/footer.png\";\nimport { RootState, useAppDispatch } from \"../../store\";\nimport { useSelector } from \"react-redux\";\nimport { STATUS } from \"../../types\";\nimport { Loading } from \"../components\";\n\nconst PrivateRoute = ({\n component: Component,\n isMobile,\n ...rest\n}: {\n component: any;\n isMobile: boolean;\n}) => {\n const user = useSelector(\n (state) => state.user.user\n );\n const loading = useSelector(\n (state) => state.user.loading\n );\n\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(userAuthCheck());\n }, [dispatch]);\n\n return (\n \n !document.cookie ? (\n \n ) : (\n <>\n {loading === STATUS.SUCCESS && user._id && (\n <>\n {isMobile ? (\n \n \n \n ) : (\n // \n \n // \n )}\n
\n

\n © 2021 AniKuru |{\" \"}\n \n team.txt\n \n {\" \"}|{\" \"}\n \n info.txt\n \n {\" \"}|{\" \"}\n \n status\n {\" \"}\n

\n
\n \n )}\n {loading === STATUS.LOADING && (\n
\n \n
\n )}\n \n )\n }\n />\n );\n};\n\nexport default PrivateRoute;\n","import styled from \"styled-components\";\nimport { NavLink as Link } from \"react-router-dom\";\n\nexport const FAB = styled.div`\n background-color: #1f1f1f;\n border: 1px solid #2a2a2a;\n border-radius: 50%;\n width: 3rem;\n height: 3rem;\n position: fixed;\n bottom: 1.5rem;\n right: 1.5rem;\n z-index: 20;\n box-shadow: 0 3px 6px -4px rgb(0 0 0 / 40%), 0 6px 16px 0 rgb(0 0 0 / 32%),\n 0 9px 28px 8px rgb(0 0 0 / 24%);\n`;\n\nexport const Container = styled.div<{ visible: boolean }>`\n background-color: #1f1f1f;\n border: 1px solid #2a2a2a;\n border-radius: 0.325rem;\n width: 13rem;\n height: 13rem;\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n z-index: 20;\n opacity: ${({ visible }) => (visible ? 1 : 0)};\n visibility: ${({ visible }) => (visible ? \"\" : \"hidden\")};\n box-shadow: 0 3px 6px -4px rgb(0 0 0 / 48%), 0 6px 16px 0 rgb(0 0 0 / 40%),\n 0 9px 28px 8px rgb(0 0 0 / 32%);\n transform: ${({ visible }) => (visible ? \"scale(1)\" : \"scale(0.9)\")};\n transition: all 0.2s ease-in-out;\n`;\n\nexport const HamburgerContainer = styled.div`\n width: 100%;\n height: 100%;\n text-align: center;\n\n svg {\n fill: #ffffff;\n width: 1.4rem;\n height: 100%;\n }\n`;\n\nexport const Menu = styled.div`\n margin: 1rem;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(3rem, 1fr));\n grid-gap: 1rem;\n`;\n\nexport const MenuItem = styled(Link)`\n width: 3rem;\n height: 3rem;\n text-align: center;\n text-decoration: none;\n\n svg {\n margin: auto;\n stroke: #ffffff;\n width: 1.4rem;\n height: 1.4rem;\n vertical-align: -webkit-baseline-middle;\n }\n`;\n\nexport const DumbMenuItem = styled.div`\n width: 3rem;\n height: 3rem;\n text-align: center;\n\n svg {\n margin: auto;\n stroke: #ffffff;\n width: 1.4rem;\n height: 1.4rem;\n vertical-align: -webkit-baseline-middle;\n }\n`;\n","import { useState } from \"react\";\n\nimport {\n FAB,\n Container,\n Menu,\n MenuItem,\n HamburgerContainer,\n DumbMenuItem,\n} from \"./styles\";\n\nconst FloatingActionButton = () => {\n const [isOpen, setOpen] = useState(false);\n\n return (\n <>\n setOpen(!isOpen)}>\n \n \n \n \n \n \n \n \n setOpen(false)}>\n \n \n \n Home\n \n setOpen(false)}>\n \n \n \n Search\n \n setOpen(false)}>\n \n \n \n \n Schedule\n \n \n setOpen(false)}>\n \n \n \n Party\n \n setOpen(false)}>\n \n \n \n \n Profile\n \n \n \n \n \n setOpen(!isOpen)}>\n \n \n \n \n \n \n \n );\n};\n\nexport default FloatingActionButton;\n","import { ToastContainer } from \"react-toastify\";\n\nimport \"react-toastify/dist/ReactToastify.css\";\n\nconst Toast = () => (\n \n);\n\nexport default Toast;\n","import { useEffect, lazy, Suspense } from \"react\";\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport LoginPage from \"./pages/login\";\nimport PrivateRoute from \"./ui/PrivateRoute\";\nimport Navbar from \"./ui/components/Navbar\";\nimport { setMedia } from \"./store/app/reducer\";\nimport { RootState } from \"./store\";\nimport FloatingActionButton from \"./ui/components/FloatingActionButton\";\nimport Toast from \"./ui/components/Toast\";\n\nconst HomePage = lazy(() => import(\"./pages/home\"));\nconst AnimePage = lazy(() => import(\"./pages/anime\"));\nconst EpisodePage = lazy(() => import(\"./pages/episode\"));\nconst SearchPage = lazy(() => import(\"./pages/search\"));\nconst SchedulePage = lazy(() => import(\"./pages/PageSchedule\"));\nconst WatchPartyPage = lazy(() => import(\"./pages/PageWatchParty\"));\nconst WatchPartyRoomPage = lazy(() => import(\"./pages/watchPartyRoom\"));\nconst ProfilePage = lazy(() => import(\"./pages/profile\"));\nconst ExplorePage = lazy(() => import(\"./pages/PageExplore\"));\nconst ExploreGenrePage = lazy(() => import(\"./pages/PageExploreGenre\"));\nconst InvitePage = lazy(() => import(\"./pages/invite\"));\n\nconst App = () => {\n const isMobile = useSelector(\n (state) => state.app.isMobile\n );\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n const mql = window.matchMedia(\n \"screen and (max-device-width: 493px), screen and (max-device-width: 926px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 1.5)\"\n );\n\n const listener = (e: any) => {\n dispatch(setMedia(e.matches));\n };\n\n mql.addEventListener(\"change\", listener);\n\n return () => mql.removeEventListener(\"change\", listener);\n }, [dispatch]);\n\n return (\n \n {isMobile ? : }\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 \n }>\n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default App;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\n\nimport App from \"./App\";\nimport { store } from \"./store\";\n\nimport \"./index.css\";\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}