{"version":3,"file":"static/chunks/3848-08e08b9fa4370138.js","mappings":"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","sources":["webpack://_N_E/./src/components/commons/loading/StoryItemPlaceHolder.tsx","webpack://_N_E/./src/components/main/common/StoryGrid.tsx","webpack://_N_E/./src/operations/queries/directAdsBanner/__generated__/useDirectAdsBanner.generated.ts","webpack://_N_E/./src/operations/queries/directAdsBanner/useDirectAdsBanner.ts","webpack://_N_E/./src/components/main/common/banner/DirectAdsBannerWrapper.tsx","webpack://_N_E/./src/operations/queries/home/__generated__/useGetAllBanners.generated.ts","webpack://_N_E/./src/components/main/common/banner/RedirectUrlToStoryDetailRow.tsx","webpack://_N_E/./src/hooks/useGetRedirectUrlToStoryDetail.ts","webpack://_N_E/./public/assets/placeholder_home_banner.png","webpack://_N_E/./src/components/main/common/banner/EmptyHomeBannerItem.tsx","webpack://_N_E/./src/components/main/common/banner/HomeBannerItem.tsx","webpack://_N_E/./src/components/main/common/banner/HomeBanner.tsx","webpack://_N_E/./src/components/main/common/banner/HomeBannerWrapper.tsx","webpack://_N_E/./src/components/main/home/homeStory/UGCContestWinnerStory.tsx","webpack://_N_E/./src/components/main/home/HomeContainer.tsx","webpack://_N_E/./src/components/main/home/weekday/tab/WeekTabs.tsx","webpack://_N_E/./src/operations/queries/home/__generated__/useWeekDayStory.generated.ts","webpack://_N_E/./src/operations/queries/home/useWeekDayStory.ts","webpack://_N_E/./src/components/main/home/weekday/item/WeekDayStoryItemTitle.tsx","webpack://_N_E/./src/components/main/home/weekday/label/LabelNew.tsx","webpack://_N_E/./src/components/main/home/weekday/item/WeekDayStoryItem.tsx","webpack://_N_E/./src/components/main/home/weekday/grid/WeekDayStoryGrid.tsx","webpack://_N_E/./src/hooks/useGenreList.ts","webpack://_N_E/./src/components/main/home/weekday/tab/GenreList.tsx","webpack://_N_E/./src/components/main/home/weekday/tab/GenreSelectionBottomSheet.tsx","webpack://_N_E/./src/components/commons/popup/container/PopupContainerPortal.tsx","webpack://_N_E/./src/components/main/home/weekday/tab/GenreSelectionPopup.tsx","webpack://_N_E/./src/components/main/home/weekday/tab/GenreSelectionWrapper.tsx","webpack://_N_E/./src/components/main/home/weekday/tab/SortingSelectionWrapper.tsx","webpack://_N_E/./src/components/main/home/weekday/tab/ListOptions.tsx","webpack://_N_E/./src/components/main/home/weekday/grid/WeekDayStorySkeletonGrid.tsx","webpack://_N_E/./src/components/main/home/weekday/item/EmptyWeekdayStory.tsx","webpack://_N_E/./src/components/main/home/weekday/WeekDayContainer.tsx","webpack://_N_E/./src/operations/queries/home/__generated__/useInteractiveStoryGenreList.generated.ts","webpack://_N_E/./src/operations/queries/home/__generated__/useNovelStoryGenreList.generated.ts","webpack://_N_E/./src/operations/queries/home/__generated__/useStoryGenreList.generated.ts","webpack://_N_E/./src/operations/queries/home/useUGCContestWinnerStoryList.ts"],"sourcesContent":["import React from 'react';\nimport { StoryTitlePlaceHolderImage } from 'public/assets';\nimport { css } from '@emotion/react';\n\nconst StoryItemPlaceHolder = () => {\n return (\n
\n
\n \n
\n );\n};\n\nconst FIVE_ITEMS_MAX_WIDTH = '800px';\nconst FOUR_ITEMS_MAX_WIDTH = '610px';\nconst THREE_ITEMS_MAX_WIDTH = '490px';\n\nconst wrapper = css`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n\n .image-wrapper {\n background-image: url('/assets/img_empty.png');\n background-size: 7rem 11.875rem;\n width: 7rem;\n height: 11.875rem;\n }\n\n // 30px: 양 옆 마진\n @media screen and (max-width: ${FIVE_ITEMS_MAX_WIDTH}) {\n .image-wrapper {\n background-size: calc((100vw - 30px) / 5) calc(((100vw - 30px) / 5) * 1.5);\n width: calc((100vw - 30px) / 5);\n height: calc(((100vw - 30px) / 5) * 1.5);\n }\n }\n\n @media screen and (max-width: ${FOUR_ITEMS_MAX_WIDTH}) {\n .image-wrapper {\n background-size: calc((100vw - 30px) / 4) calc(((100vw - 30px) / 4) * 1.5);\n width: calc((100vw - 30px) / 4);\n height: calc(((100vw - 30px) / 4) * 1.5);\n }\n }\n\n @media screen and (max-width: ${THREE_ITEMS_MAX_WIDTH}) {\n .image-wrapper {\n background-size: calc((100vw - 30px) / 3) calc(((100vw - 30px) / 3) * 1.5);\n width: calc((100vw - 30px) / 3);\n height: calc(((100vw - 30px) / 3) * 1.5);\n }\n }\n`;\n\nexport default StoryItemPlaceHolder;\n","import React, { useRef } from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { Section } from '@customTypes/event';\nimport { useVisibleStoryItemEvent } from '@/hooks/useVisibleStoryItemEvent';\n\ninterface IStoryGrid {\n section?: Section;\n children: JSX.Element[] | JSX.Element;\n}\n\nconst StoryGrid = ({ section, children }: IStoryGrid) => {\n const storyListRef = useRef(null);\n\n useVisibleStoryItemEvent({ storyListRef, section });\n\n return (\n
\n
\n {children}\n
\n
\n );\n};\n\nconst FIVE_ITEMS_MAX_WIDTH = '800px';\nconst FOUR_ITEMS_MAX_WIDTH = '610px';\nconst THREE_ITEMS_MAX_WIDTH = '490px';\n\nconst container = css`\n width: 100%;\n max-width: ${theme.maxWidth};\n display: flex;\n align-items: center;\n\n .story-grid {\n width: 100%;\n padding: 1rem 0.9375rem 1.25rem;\n background: ${theme.colors.white};\n display: grid;\n justify-content: start;\n grid-template-columns: repeat(auto-fit, 7.8125rem);\n column-gap: 0.25rem;\n row-gap: 1rem;\n\n // 30px: 양 옆 마진\n @media screen and (max-width: ${FIVE_ITEMS_MAX_WIDTH}) {\n grid-template-columns: repeat(5, minmax(0, calc((100vw - 30px) / 5)));\n justify-content: center;\n }\n\n @media screen and (max-width: ${FOUR_ITEMS_MAX_WIDTH}) {\n grid-template-columns: repeat(4, minmax(0, calc((100vw - 30px) / 4)));\n justify-content: center;\n }\n\n @media screen and (max-width: ${THREE_ITEMS_MAX_WIDTH}) {\n grid-template-columns: repeat(3, minmax(0, calc((100vw - 30px) / 3)));\n justify-content: center;\n }\n }\n`;\n\nexport default StoryGrid;\n","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type GetDirectAdsBannerQueryVariables = Types.Exact<{\n type: Types.Direct_Ads_Type;\n}>;\n\n\nexport type GetDirectAdsBannerQuery = { __typename?: 'Query', getDirectAds?: { __typename?: 'DirectAds', link?: string | null, aOSFallbackLink?: string | null, iOSFallbackLink?: string | null, title: string, directAdsId: number, imageFile: { __typename?: 'ImageFile', link: string } } | null };\n\n\nexport const GetDirectAdsBannerDocument = gql`\n query GetDirectAdsBanner($type: DIRECT_ADS_TYPE!) {\n getDirectAds(data: {type: $type}) {\n imageFile {\n link\n }\n link\n aOSFallbackLink\n iOSFallbackLink\n title\n directAdsId\n }\n}\n `;\n\n/**\n * __useGetDirectAdsBannerQuery__\n *\n * To run a query within a React component, call `useGetDirectAdsBannerQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetDirectAdsBannerQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetDirectAdsBannerQuery({\n * variables: {\n * type: // value for 'type'\n * },\n * });\n */\nexport function useGetDirectAdsBannerQuery(baseOptions: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(GetDirectAdsBannerDocument, options);\n }\nexport function useGetDirectAdsBannerLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(GetDirectAdsBannerDocument, options);\n }\nexport type GetDirectAdsBannerQueryHookResult = ReturnType;\nexport type GetDirectAdsBannerLazyQueryHookResult = ReturnType;\nexport type GetDirectAdsBannerQueryResult = Apollo.QueryResult;","import { gql } from '@apollo/client';\nimport {\n useGetDirectAdsBannerQuery as useQuery,\n GetDirectAdsBannerQueryVariables,\n} from './__generated__/useDirectAdsBanner.generated';\n\nexport const DIRECT_ADS_BANNER = gql`\n query GetDirectAdsBanner($type: DIRECT_ADS_TYPE!) {\n getDirectAds(data: { type: $type }) {\n imageFile {\n link\n }\n link\n aOSFallbackLink\n iOSFallbackLink\n title\n directAdsId\n }\n }\n`;\n\nexport const useDirectAdsBanner = (\n variables: GetDirectAdsBannerQueryVariables,\n) => {\n const { data, loading } = useQuery({ variables });\n\n return { data, loading };\n};\n","import React, { useEffect, useState } from 'react';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\nimport { css } from '@emotion/react';\nimport { useDirectAdsBanner } from '@operations/queries/directAdsBanner/useDirectAdsBanner';\nimport { checkDevice, openOldDeepLink } from '@common/utils';\nimport { DirectAdsBanner } from '@components/commons';\nimport { adSalesImpressionDirect, adSalesClickDirect } from '@lib/eventManager';\n\nimport { Direct_Ads_Type } from '@/baseType';\nimport { AdLocationType, Section } from '@/customTypes/event';\nimport Skeleton from 'react-loading-skeleton';\n\ninterface IDirectAdsBannerWrapper {\n type: Direct_Ads_Type;\n section: Section;\n location: AdLocationType;\n}\n\nconst DirectAdsBannerWrapper = ({\n type,\n section,\n location,\n}: IDirectAdsBannerWrapper) => {\n const { t } = useTranslation();\n const router = useRouter();\n const [isShow, setIsShow] = useState(false);\n const { data: bannerData, loading: bannerLoading } = useDirectAdsBanner({\n type,\n });\n\n useEffect(() => {\n if (bannerData?.getDirectAds && checkDevice() !== 'PC') {\n const { directAdsId, title } = bannerData.getDirectAds;\n adSalesImpressionDirect({\n directAdsId,\n adTitle: title,\n adUrl: bannerData?.getDirectAds?.link ?? '',\n adLoc: location,\n adImageUrl: bannerData.getDirectAds.imageFile.link,\n });\n }\n }, [bannerData, location]);\n\n const onClickBanner = () => {\n if (!bannerData?.getDirectAds) return;\n openOldDeepLink({\n t,\n router,\n deepLink: bannerData.getDirectAds.link ?? '',\n iosStoreLink: bannerData.getDirectAds.iOSFallbackLink ?? '',\n aosStoreLink: bannerData.getDirectAds.aOSFallbackLink ?? '',\n });\n\n adSalesClickDirect({\n directAdsId: bannerData.getDirectAds.directAdsId,\n adTitle: bannerData.getDirectAds.title,\n adUrl: bannerData.getDirectAds.link ?? '',\n adLoc: location,\n adImageUrl: bannerData.getDirectAds.imageFile.link,\n });\n };\n\n useEffect(() => {\n setIsShow(checkDevice() !== 'PC');\n }, []);\n\n if (!isShow) return <>;\n\n return bannerLoading ? (\n
\n \n
\n ) : (\n <>\n {bannerData?.getDirectAds ? (\n
\n \n
\n ) : (\n <>\n )}\n \n );\n};\n\nconst wrapper = ({ hasMargin }: { hasMargin: boolean }) => css`\n ${hasMargin && `margin: 1rem;`}\n`;\nexport default DirectAdsBannerWrapper;\n","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type BannerDtoFragment = { __typename?: 'BundleBanner', bundleId?: number | null, bundleBannerId: number, title?: string | null, content?: string | null, storyId?: number | null, link?: string | null, linkType?: Types.Banner_Link_Type | null, iOSFallbackLink?: string | null, aOSFallbackLink?: string | null, bannerImageFile?: { __typename?: 'File', link: string } | null, story?: { __typename?: 'Story', storyId: number, name: string, authorName: string, onHiatus: boolean, isFinished: boolean, isNew: boolean, isUp: boolean, playType: Types.Story_Play_Type, introImageFile?: { __typename?: 'File', link: string } | null, storyWeekdays?: Array<{ __typename?: 'StoryWeekday', weekday: Types.Story_Weekday }> | null, genreKey?: { __typename?: 'StoryGenre', text: { __typename?: 'LocalizeKey', key: string } } | null } | null };\n\nexport type GetAllBundleBannersQueryVariables = Types.Exact<{\n location: Types.Banner_Location;\n}>;\n\n\nexport type GetAllBundleBannersQuery = { __typename?: 'Query', getAllBundleBannersByWeb: Array<{ __typename?: 'BundleBanner', bundleId?: number | null, bundleBannerId: number, title?: string | null, content?: string | null, storyId?: number | null, link?: string | null, linkType?: Types.Banner_Link_Type | null, iOSFallbackLink?: string | null, aOSFallbackLink?: string | null, bannerImageFile?: { __typename?: 'File', link: string } | null, story?: { __typename?: 'Story', storyId: number, name: string, authorName: string, onHiatus: boolean, isFinished: boolean, isNew: boolean, isUp: boolean, playType: Types.Story_Play_Type, introImageFile?: { __typename?: 'File', link: string } | null, storyWeekdays?: Array<{ __typename?: 'StoryWeekday', weekday: Types.Story_Weekday }> | null, genreKey?: { __typename?: 'StoryGenre', text: { __typename?: 'LocalizeKey', key: string } } | null } | null }> };\n\nexport const BannerDtoFragmentDoc = gql`\n fragment bannerDto on BundleBanner {\n bundleId\n bundleBannerId\n bannerImageFile {\n link\n }\n title\n content\n storyId\n link\n linkType\n iOSFallbackLink\n aOSFallbackLink\n story {\n storyId\n name\n authorName\n onHiatus\n isFinished\n isNew\n isUp\n playType\n introImageFile {\n link\n }\n storyWeekdays {\n weekday\n }\n genreKey {\n text {\n key\n }\n }\n }\n}\n `;\nexport const GetAllBundleBannersDocument = gql`\n query GetAllBundleBanners($location: BANNER_LOCATION!) {\n getAllBundleBannersByWeb(data: {location: $location}) {\n ...bannerDto\n }\n}\n ${BannerDtoFragmentDoc}`;\n\n/**\n * __useGetAllBundleBannersQuery__\n *\n * To run a query within a React component, call `useGetAllBundleBannersQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetAllBundleBannersQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetAllBundleBannersQuery({\n * variables: {\n * location: // value for 'location'\n * },\n * });\n */\nexport function useGetAllBundleBannersQuery(baseOptions: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(GetAllBundleBannersDocument, options);\n }\nexport function useGetAllBundleBannersLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(GetAllBundleBannersDocument, options);\n }\nexport type GetAllBundleBannersQueryHookResult = ReturnType;\nexport type GetAllBundleBannersLazyQueryHookResult = ReturnType;\nexport type GetAllBundleBannersQueryResult = Apollo.QueryResult;","import React, { useEffect } from 'react';\nimport { useRouter } from 'next/router';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { useGetRedirectUrlToStoryDetail } from '@hooks/useGetRedirectUrlToStoryDetail';\nimport { BookIcon, PopupXIcon } from 'public/assets';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport {\n viewHomeContinueBanner,\n touchHomeContinueBanner,\n touchHomeContinueBannerOff,\n} from '@/lib/eventManager';\n\nexport const RedirectUrlToStoryDetailRow = () => {\n const router = useRouter();\n const { t } = useTranslation();\n\n const { redirectUrlToStoryDetail, onResetRedirectUrlToStoryDetail } =\n useGetRedirectUrlToStoryDetail();\n\n useEffect(() => {\n viewHomeContinueBanner();\n }, []);\n\n if (!redirectUrlToStoryDetail) {\n return null;\n }\n\n return (\n {\n onResetRedirectUrlToStoryDetail();\n router.push(redirectUrlToStoryDetail);\n touchHomeContinueBanner();\n }}\n >\n \n {t('common_popup_description_want_continue_reading')}\n {\n e.stopPropagation();\n onResetRedirectUrlToStoryDetail();\n touchHomeContinueBannerOff();\n }}\n />\n \n );\n};\n\nconst container = css`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n display: flex;\n align-items: center;\n padding: 0.5rem 1rem;\n height: 2.5rem;\n background-color: rgba(117, 59, 189, 0.7);\n z-index: 1;\n cursor: pointer;\n\n span {\n font: ${theme.font.body.body2};\n font-weight: bold;\n color: ${theme.colors.white};\n margin-left: 0.5rem;\n }\n\n .close {\n position: relative;\n top: -1px;\n margin-left: auto;\n }\n`;\n","import { useEffect, useState } from 'react';\nimport { STORAGE_KEY } from '@common/values';\n\n// 로컬스토리지에 저장되어 있는 redirect url 값이 /story/ 로 시작하는 경우에 path 를 저장합니다.\n// path 가 있으면 홈, 인터랙티브, 웹소설 탭의 배너의 상단에 띠지를 보여줍니다.\n// 클릭하여 이동되거나, close 버튼을 누르면 해당 상태와 함께 로컬 스토리지의 데이터를 삭제합니다.\nexport const useGetRedirectUrlToStoryDetail = () => {\n const [redirectUrlToStoryDetail, setRedirectUrlToStoryDetail] = useState<\n string | null\n >(null);\n\n useEffect(() => {\n const redirectInfo = localStorage.getItem(STORAGE_KEY.REDIRECT_INFO);\n const parsedRedirectInfo: { redirectUrl: string; createdAt: Date } | null =\n redirectInfo ? JSON.parse(redirectInfo) : null;\n\n if (parsedRedirectInfo?.redirectUrl.includes('undefined')) {\n setRedirectUrlToStoryDetail(null);\n return;\n }\n\n const redirectUrl = parsedRedirectInfo?.redirectUrl;\n const isStoryDetailUrl = !!redirectUrl?.startsWith('/story/');\n\n if (isStoryDetailUrl && redirectUrl) {\n setRedirectUrlToStoryDetail(redirectUrl);\n }\n }, []);\n\n const onResetRedirectUrlToStoryDetail = () => {\n setRedirectUrlToStoryDetail(null);\n localStorage.removeItem(STORAGE_KEY.REDIRECT_INFO);\n };\n\n return {\n redirectUrlToStoryDetail,\n onResetRedirectUrlToStoryDetail,\n };\n};\n","export default {\"src\":\"/_next/static/media/placeholder_home_banner.8b3740e2.png\",\"height\":1120,\"width\":1600,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAMAAADJ2y/JAAAAM1BMVEWZnKGEhouDhopzdXhydHhucHRtb3NeYGNeX2JZW15YWl1DRUdDREdCQ0ZCQ0UvMDEuLzHMjVmxAAAAL0lEQVR42j3EQQIAEAgEwA0hof3/a3Uyh8EnIqVkUO21dVWYrTGXGXz7PRlIRpB8FA4BVgzpFLoAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":6};","import React from 'react';\nimport Image from 'next/image';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport placeholder from 'public/assets/placeholder_home_banner.png';\nimport { useRouter } from 'next/router';\n\nconst EmptyHomeBannerItem = () => {\n const router = useRouter();\n\n return (\n \n \n \n );\n};\n\nconst container = ({ isHomeTab }: { isHomeTab: boolean }) => css`\n position: relative;\n padding-bottom: ${isHomeTab ? '70%' : '56.25%'};\n\n @media screen and (max-width: ${theme.devices.mobile}) {\n padding-bottom: ${isHomeTab ? '100%' : '56.25%'};\n }\n`;\n\nexport default EmptyHomeBannerItem;\n","import React, { useRef, useEffect } from 'react';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { BannerDtoFragment } from '@operations/queries/home/__generated__/useGetAllBanners.generated';\nimport {\n viewStoryThumbnail,\n viewHomeTopBanner,\n clickHomeTopBanner,\n viewInteractiveTopBanner,\n viewNovelTopBanner,\n clickInteractiveTopBanner,\n clickNovelTopBanner,\n} from '@lib/eventManager';\nimport { Section, ContentType } from '@customTypes/event';\n\nimport { Banner_Link_Type, Story_Play_Type } from '@/baseType';\nimport { openOldDeepLink } from '@/common/utils';\n\nimport SPImage from '@components/commons/image/SPImage';\n\ninterface IHomeBannerItem {\n data: BannerDtoFragment;\n index: number;\n section: Section;\n}\n\nconst HomeBannerItem = ({ data, index, section }: IHomeBannerItem) => {\n const storyRef = useRef(null);\n const router = useRouter();\n const { t } = useTranslation();\n const isHome =\n !(\n // SPDEV-4590: 홈 탭 임시 제거에 따른 주석 처리, 기존 홈 탭으로 변경할 경우 아래 주석 제거\n // router.pathname.includes('/interactive') ||\n router.pathname.includes('/webnovel')\n );\n\n useEffect(() => {\n if (!storyRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (\n entry.isIntersecting &&\n storyRef.current &&\n entry.target instanceof HTMLElement\n ) {\n viewStoryThumbnail({\n section,\n index: entry.target.dataset.index,\n story: entry.target.dataset.name,\n storyId: entry.target.dataset.id,\n contentType: entry.target.dataset.contentType as ContentType,\n });\n\n isHome &&\n viewHomeTopBanner({\n bannerId: +(entry.target.dataset.bundleBannerId as string),\n bannerType: entry.target.dataset.name as string,\n });\n\n router.pathname.includes('/interactive') &&\n viewInteractiveTopBanner({\n bannerId: +(entry.target.dataset.bundleBannerId as string),\n bannerType: entry.target.dataset.name as string,\n });\n\n router.pathname.includes('/webnovel') &&\n viewNovelTopBanner({\n bannerId: +(entry.target.dataset.bundleBannerId as string),\n bannerType: entry.target.dataset.name as string,\n });\n }\n });\n },\n {\n threshold: 1,\n },\n );\n\n // 스토리 아이템 각각에 옵저버 부착\n observer.observe(storyRef.current as Element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const handleBannerItemClick = () => {\n isHome &&\n clickHomeTopBanner({\n bannerId: data?.bundleBannerId,\n bannerType: data?.title as string,\n });\n\n router.pathname.includes('/interactive') &&\n clickInteractiveTopBanner({\n bannerId: data?.bundleBannerId,\n bannerType: data?.title as string,\n });\n\n router.pathname.includes('/webnovel') &&\n clickNovelTopBanner({\n bannerId: data?.bundleBannerId,\n bannerType: data?.title as string,\n });\n\n if (!data.linkType) {\n data.storyId && router.push(`/story/${data.storyId}`);\n return;\n }\n\n if (data.linkType === Banner_Link_Type.DeepLink) {\n openOldDeepLink({\n t,\n router,\n deepLink: data.link || '/',\n iosStoreLink: data.iOSFallbackLink || '/',\n aosStoreLink: data.aOSFallbackLink || '/',\n });\n return;\n }\n\n if (data.linkType === Banner_Link_Type.WebCurrentWindowLink) {\n router.push(data.link || '/');\n return;\n }\n\n if (data.linkType === Banner_Link_Type.WebNewWindowLink) {\n window.open(data.link || '/', '_blank');\n return;\n }\n };\n\n return (\n \n \n
\n
\n
\n

{data.title}

\n

{data.content}

\n
\n
\n );\n};\n\nconst container = ({ isHome }: { isHome: boolean }) => css`\n position: relative;\n /* SPDEV-4590: 홈 탭 임시 제거에 따른 배너 이미지 비율 변경(1:1), 기존 홈 탭으로 변경 할 경우 70% 로 변경 */\n padding-bottom: ${isHome ? '100%' : '56.25%'};\n\n .story-title-wrapper {\n padding: 0 1em;\n width: 100%;\n position: absolute;\n bottom: 1.5625rem;\n\n .title {\n ${theme.font.header.headline2};\n color: ${theme.colors.white};\n }\n\n .desc {\n margin: 0.125rem 0 0.5rem;\n ${theme.font.body.body2};\n color: ${theme.colors.white};\n }\n\n @media screen and (max-width: ${theme.devices.mobile}) {\n bottom: 2.75em;\n }\n }\n\n .dim-top {\n position: absolute;\n width: 100%;\n height: 6.25rem;\n background: linear-gradient(\n 180deg,\n rgba(36, 37, 38, 0) 0%,\n rgba(36, 37, 38, 0.3) 100%\n );\n transform: rotate(-180deg);\n }\n\n .dim-bottom {\n position: absolute;\n bottom: 0;\n width: 100%;\n height: 10rem;\n background: linear-gradient(\n 180deg,\n rgba(36, 37, 38, 0) 0%,\n rgba(36, 37, 38, 0.6) 100%\n );\n }\n\n @media screen and (max-width: ${theme.devices.mobile}) {\n padding-bottom: ${isHome ? '100%' : '56.25%'};\n // 56.25%: 이미지 비율값(9 / 16 * 100)\n }\n`;\n\nexport default HomeBannerItem;\n","import React, { memo } from 'react';\nimport { BannerDtoFragment } from '@operations/queries/home/__generated__/useGetAllBanners.generated';\n\nimport { RedirectUrlToStoryDetailRow } from '@components/main/common/banner/RedirectUrlToStoryDetailRow';\nimport EmptyHomeBannerItem from './EmptyHomeBannerItem';\nimport HomeBannerItem from './HomeBannerItem';\nimport { CarouselTopBanner } from '@components/commons';\n\ninterface IHomeBanner {\n list?: BannerDtoFragment[];\n}\n\nconst HomeBanner = ({ list }: IHomeBanner) => {\n return (\n
\n \n \n {list?.length ? (\n list?.map((story, index) => (\n \n ))\n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(HomeBanner);\n","import React, { memo, useEffect, useState } from 'react';\nimport { useRouter } from 'next/router';\nimport { viewHomeTab } from '@lib/eventManager';\nimport { useGetAllBundleBannersQuery } from '@/operations/queries/home/__generated__/useGetAllBanners.generated';\nimport { Banner_Location } from '@/baseType';\n\nimport HomeBanner from './HomeBanner';\n\nconst HomeBannerWrapper = () => {\n const [bannerList, setBannerList] = useState([]);\n const router = useRouter();\n const { firstBannerStoryId } = router.query;\n\n useGetAllBundleBannersQuery({\n variables: {\n location: router.pathname.includes('/interactive')\n ? // SPDEV-4590: 홈 탭 임시 제거에 따른 배너 변경\n Banner_Location.Home\n : router.pathname.includes('/webnovel')\n ? Banner_Location.Epub\n : Banner_Location.Home,\n },\n onCompleted: (data) => {\n setBannerList(data.getAllBundleBannersByWeb);\n },\n });\n\n useEffect(() => {\n viewHomeTab();\n if (firstBannerStoryId) {\n const firstBanner = bannerList.filter(\n (story) => story.storyId === firstBannerStoryId,\n );\n const otherBanners = bannerList.filter(\n (story) => story.storyId !== firstBannerStoryId,\n );\n setBannerList([...firstBanner, ...otherBanners]);\n }\n }, [firstBannerStoryId]);\n\n return ;\n};\n\nexport default memo(HomeBannerWrapper);\n","import React from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { usePlayTypeContext } from '@/provider/PlayTypeProvider';\nimport { formatMoreLink, getHomeSectionName } from '@common/utils';\n\nimport StoryItem from '@components/main/common/storyItem/StoryItem';\nimport StoryWrapper from '@components/main/common/StoryWrapper';\nimport SectionTitle from '@components/main/common/title/SectionTitle';\nimport { CarouselStory } from '@components/commons';\nimport { useWebNovelContestWinnerStoryList } from '@/operations/queries/home/useUGCContestWinnerStoryList';\n\nconst UGCContestWinnerStory = () => {\n const { t } = useTranslation();\n const { playType } = usePlayTypeContext();\n\n const { data } = useWebNovelContestWinnerStoryList();\n\n if (!data?.listStoryForEpubContestWinner.list.length) {\n return null;\n }\n\n return (\n \n \n \n {data.listStoryForEpubContestWinner.list?.map((item, index, array) => (\n \n ))}\n \n \n );\n};\n\nexport default UGCContestWinnerStory;\n","import React, { useEffect, lazy } from 'react';\nimport { Story_Play_Type } from '@/baseType';\nimport { viewHomeTab } from '@lib/eventManager';\nimport { MonthlyStory, NewStory } from '@components/main/home/homeStory';\nimport { LayoutForLazyLoading } from '@/components/commons';\nimport PlayTypeProvider from '@/provider/PlayTypeProvider';\nimport { HOME_SECTION_TITLES } from '@/customTypes/home';\nimport useTranslation from 'next-translate/useTranslation';\nimport WebNovelContestWinnerStory from './homeStory/UGCContestWinnerStory';\n\nconst LazyRankingStory = lazy(\n () => import('@components/main/home/homeStory/RankingStory'),\n);\nconst LazyPlayedStory = lazy(\n () => import('@components/main/home/homeStory/PlayedStory'),\n);\nconst LazyGenreStoryList = lazy(\n () => import('@components/main/home/homeStory/GenreStoryList'),\n);\nconst LazyInteractiveGenreStoryList = lazy(\n () => import('@components/main/home/homeStory/InteractiveGenreStoryList'),\n);\nconst LazyNovelGenreStoryList = lazy(\n () => import('@components/main/home/homeStory/NovelGenreStoryList'),\n);\nconst LazyFavoriteStory = lazy(\n () => import('@components/main/home/homeStory/FavoriteStory'),\n);\nconst LazyFeaturedStoryItem = lazy(\n () => import('@components/main/home/homeStory/FeaturedStoryItem'),\n);\nconst LazyGenerationStoryList = lazy(\n () => import('@components/main/home/homeStory/GenerationStoryList'),\n);\nconst LazyOriginalStory = lazy(\n () => import('@components/main/home/homeStory/OriginalStory'),\n);\nconst LazyFinishedStory = lazy(\n () => import('@components/main/home/homeStory/FinishedStory'),\n);\nconst LazyAdultStory = lazy(\n () => import('@components/main/home/homeStory/AdultStory'),\n);\n\ninterface IHomeContainer {\n playType?: Story_Play_Type;\n}\n\nconst HomeContainer = ({ playType }: IHomeContainer) => {\n const { t } = useTranslation();\n\n useEffect(() => {\n viewHomeTab();\n }, []);\n\n if (playType === Story_Play_Type.Interactive) {\n // 인터랙티브 홈화면\n return (\n \n {/* 실시간 TOP 10 스토리 */}\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 } else if (playType === Story_Play_Type.Epub) {\n // 웹소설 홈화면\n return (\n \n {/* WWW 웹소설 공모전 수상작 */}\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 } else {\n // 전체 홈화면\n return (\n \n {/* 실시간 TOP 10 스토리 */}\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 HomeContainer;\n","import React, { useRef } from 'react';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { WeekDayTabList } from '@customTypes/story';\nimport { touchWeekdayTab } from '@lib/eventManager';\nimport { getHomeWeekdayTabText, getWeekDaySectionName } from '@common/utils';\nimport {\n STORAGE_KEY,\n WEEK_DAY_TAB_LIST,\n HOME_TAB_SCROLL_POSITION,\n} from '@common/values';\n\nconst WeekDayTabs = () => {\n const { t } = useTranslation();\n const router = useRouter();\n const { week } = router.query;\n const tabListRef = useRef(null);\n\n const handleTabItemClick = (tab: WeekDayTabList) => {\n touchWeekdayTab({ section: getWeekDaySectionName(tab.type) });\n\n if (router.pathname.includes('/webnovel')) {\n router.replace({\n pathname: '/webnovel',\n query: { ...router.query, week: tab.type },\n });\n return;\n }\n\n if (router.pathname.includes('/interactive')) {\n router.replace({\n pathname: '/interactive',\n query: { ...router.query, week: tab.type },\n });\n return;\n }\n\n sessionStorage.setItem(\n STORAGE_KEY.HOME.SCROLL_POSITION,\n `${HOME_TAB_SCROLL_POSITION}`,\n );\n router.push({\n pathname: '/',\n query: { ...router.query, week: tab.type },\n });\n };\n\n return (\n
    \n {WEEK_DAY_TAB_LIST.map((tab) => {\n return (\n handleTabItemClick(tab)}\n >\n {getHomeWeekdayTabText({ t, type: tab.textKey })}\n \n );\n })}\n
\n );\n};\n\nconst container = css`\n display: flex;\n align-items: center;\n width: 100%;\n height: 2.625rem;\n padding: 0 0.875rem;\n border-bottom: 0.0625rem solid ${theme.colors.gray200};\n white-space: nowrap;\n overflow-x: scroll;\n overflow-y: hidden;\n scroll-behavior: smooth;\n gap: 0.75rem;\n background: ${theme.colors.white};\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .tab-item {\n width: 1.75rem;\n height: 1.75rem;\n display: flex;\n justify-content: center;\n align-items: center;\n color: ${theme.colors.gray600};\n font: ${theme.font.body.body1};\n cursor: pointer;\n }\n\n .tab-item.active {\n background: ${theme.colors.black};\n color: ${theme.colors.white};\n border-radius: 50%;\n font: ${theme.font.header.subhead1};\n }\n\n @media screen and (max-width: ${theme.devices.mobile}) {\n justify-content: space-around;\n }\n`;\n\nexport default WeekDayTabs;\n","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type WeekdayStoryItemFragment = { __typename?: 'Story', storyId: number, name: string, type: Types.Story_Type, onHiatus: boolean, isFinished: boolean, isOriginal: boolean, isNew: boolean, isUp: boolean, isAdult: boolean, authorName: string, isTimeLeapFree: boolean, shortDesc?: string | null, sectionType: Types.Story_Section_Type, playType: Types.Story_Play_Type, mainImageFile?: { __typename?: 'File', link: string } | null, introImageFile?: { __typename?: 'File', link: string } | null, storyWeekdays?: Array<{ __typename?: 'StoryWeekday', weekday: Types.Story_Weekday }> | null, genreKey?: { __typename?: 'StoryGenre', text: { __typename?: 'LocalizeKey', key: string } } | null };\n\nexport type ListWeekdayStoryQueryVariables = Types.Exact<{\n page?: Types.InputMaybe;\n pageSize?: Types.InputMaybe;\n uiSectionType?: Types.InputMaybe;\n sorting?: Types.InputMaybe;\n weekday?: Types.InputMaybe;\n genre?: Types.InputMaybe;\n version?: Types.InputMaybe;\n playType?: Types.InputMaybe;\n}>;\n\n\nexport type ListWeekdayStoryQuery = { __typename?: 'Query', listStoryByWebV3: { __typename?: 'ListableStory', totalCount: number, page: number, pageSize: number, version?: number | null, list: Array<{ __typename?: 'Story', storyId: number, name: string, type: Types.Story_Type, onHiatus: boolean, isFinished: boolean, isOriginal: boolean, isNew: boolean, isUp: boolean, isAdult: boolean, authorName: string, isTimeLeapFree: boolean, shortDesc?: string | null, sectionType: Types.Story_Section_Type, playType: Types.Story_Play_Type, mainImageFile?: { __typename?: 'File', link: string } | null, introImageFile?: { __typename?: 'File', link: string } | null, storyWeekdays?: Array<{ __typename?: 'StoryWeekday', weekday: Types.Story_Weekday }> | null, genreKey?: { __typename?: 'StoryGenre', text: { __typename?: 'LocalizeKey', key: string } } | null }> } };\n\nexport const WeekdayStoryItemFragmentDoc = gql`\n fragment WeekdayStoryItem on Story {\n storyId\n name\n type\n onHiatus\n isFinished\n isOriginal\n isNew\n isUp\n isAdult\n mainImageFile {\n link\n }\n introImageFile {\n link\n }\n storyWeekdays {\n weekday\n }\n genreKey {\n text {\n key\n }\n }\n authorName\n isTimeLeapFree\n shortDesc\n sectionType\n playType\n}\n `;\nexport const ListWeekdayStoryDocument = gql`\n query listWeekdayStory($page: Int, $pageSize: Int, $uiSectionType: UI_STORY_SECTION_TYPE, $sorting: STORY_SORTING, $weekday: STORY_WEEKDAY, $genre: String, $version: Int, $playType: STORY_PLAY_TYPE) {\n listStoryByWebV3(\n data: {page: $page, pageSize: $pageSize, uiSectionType: $uiSectionType, sorting: $sorting, weekday: $weekday, genre: $genre, version: $version, playType: $playType}\n ) {\n totalCount\n page\n pageSize\n version\n list {\n ...WeekdayStoryItem\n }\n }\n}\n ${WeekdayStoryItemFragmentDoc}`;\n\n/**\n * __useListWeekdayStoryQuery__\n *\n * To run a query within a React component, call `useListWeekdayStoryQuery` and pass it any options that fit your needs.\n * When your component renders, `useListWeekdayStoryQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useListWeekdayStoryQuery({\n * variables: {\n * page: // value for 'page'\n * pageSize: // value for 'pageSize'\n * uiSectionType: // value for 'uiSectionType'\n * sorting: // value for 'sorting'\n * weekday: // value for 'weekday'\n * genre: // value for 'genre'\n * version: // value for 'version'\n * playType: // value for 'playType'\n * },\n * });\n */\nexport function useListWeekdayStoryQuery(baseOptions?: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(ListWeekdayStoryDocument, options);\n }\nexport function useListWeekdayStoryLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(ListWeekdayStoryDocument, options);\n }\nexport type ListWeekdayStoryQueryHookResult = ReturnType;\nexport type ListWeekdayStoryLazyQueryHookResult = ReturnType;\nexport type ListWeekdayStoryQueryResult = Apollo.QueryResult;","import { useRouter } from 'next/router';\nimport { gql } from '@apollo/client';\nimport {\n useListWeekdayStoryQuery as useQuery,\n ListWeekdayStoryQueryVariables,\n} from '../home/__generated__/useWeekDayStory.generated';\n\nexport const WEEKDAY_STORY_ITEM = gql`\n fragment WeekdayStoryItem on Story {\n storyId\n name\n type\n onHiatus\n isFinished\n isOriginal\n isNew\n isUp\n isAdult\n mainImageFile {\n link\n }\n introImageFile {\n link\n }\n storyWeekdays {\n weekday\n }\n genreKey {\n text {\n key\n }\n }\n authorName\n isTimeLeapFree\n shortDesc\n sectionType\n playType\n }\n`;\n\nexport const LIST_WEEKDAY_STORY = gql`\n query listWeekdayStory(\n $page: Int\n $pageSize: Int\n $uiSectionType: UI_STORY_SECTION_TYPE\n $sorting: STORY_SORTING\n $weekday: STORY_WEEKDAY\n $genre: String\n $version: Int\n $playType: STORY_PLAY_TYPE\n ) {\n listStoryByWebV3(\n data: {\n page: $page\n pageSize: $pageSize\n uiSectionType: $uiSectionType\n sorting: $sorting\n weekday: $weekday\n genre: $genre\n version: $version\n playType: $playType\n }\n ) {\n totalCount\n page\n pageSize\n version\n list {\n ...WeekdayStoryItem\n }\n }\n }\n ${WEEKDAY_STORY_ITEM}\n`;\n\nexport const useWeekDayStoryQuery = (\n variables: ListWeekdayStoryQueryVariables,\n) => {\n const router = useRouter();\n const { data, fetchMore, loading, networkStatus } = useQuery({\n variables,\n onError: (e) => {\n router.push('/404');\n },\n });\n\n const hasNext =\n data &&\n data?.listStoryByWebV3.totalCount > data?.listStoryByWebV3.list.length;\n\n return { data, fetchMore, hasNext, loading, networkStatus };\n};\n","import React from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\n\nimport { HomeTabTitlePauseIcon, HomeTabTitleUpIcon } from 'public/assets';\n\ninterface IWeekDayStoryItemTitle {\n title?: string;\n genre?: string;\n author?: string;\n isShowUp?: boolean;\n isPause?: boolean;\n}\n\nconst WeekDayStoryItemTitle = ({\n title,\n genre,\n author,\n isShowUp,\n isPause,\n}: IWeekDayStoryItemTitle) => {\n return (\n
\n
\n \n {isShowUp ? (\n \n ) : (\n isPause && \n )}\n \n

{title}

\n
\n
\n {genre && {genre} ・ } {author && {author}}\n
\n
\n );\n};\n\nconst container = css`\n margin-top: 0.5rem;\n width: 100%;\n\n .title-wrapper {\n display: flex;\n\n svg {\n margin: 0 0.25rem 0.0375rem 0;\n }\n }\n\n /* 줄바꿈 문자 */\n .title {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-all;\n word-wrap: break-word;\n height: 1.25rem;\n white-space: nowrap;\n color: ${theme.colors.gray800};\n ${theme.font.header.subhead1}\n }\n\n .genre {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-all;\n word-wrap: break-word;\n height: 1.125rem;\n white-space: nowrap;\n overflow: hidden;\n ${theme.font.body.caption}\n color: ${theme.colors.gray500};\n }\n`;\n\nexport default WeekDayStoryItemTitle;\n","import React from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\n\nconst LabelNew = () => {\n const { t } = useTranslation();\n return (\n
\n
{t('home_screen_title_week_new')}
\n
\n );\n};\n\nconst wrapper = css`\n position: relative;\n display: flex;\n align-items: flex-start;\n margin-right: 0.25rem;\n .band {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 1.25rem;\n padding: 0.2rem 0.25rem;\n background: ${theme.colors.red500};\n color: ${theme.colors.white};\n font-weight: 800;\n font-size: 0.5625rem;\n border-radius: 0.125rem;\n }\n`;\n\nexport default LabelNew;\n","import React from 'react';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\nimport { AdultLabelIcon } from 'public/assets';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { getStatusText, getLabelText } from '@common/utils';\nimport { WeekdayStoryItemFragment } from '@operations/queries/home/__generated__/useWeekDayStory.generated';\nimport {\n Challenge_Story_Genre,\n Story_Sorting,\n Story_Play_Type,\n} from '@/baseType';\nimport { useAppDispatch } from '@store/hooks';\nimport {\n setCurrentStoryLabelText,\n setWeekdayFilter,\n setWeekdaySorting,\n setPreviousSection,\n} from '@slices/eventSlice';\nimport { getWeekDaySectionName } from '@common/utils';\nimport { HOME_TAB_TYPE } from '@customTypes/home';\nimport { WeekDayTab } from '@customTypes/story';\n\nimport WeekDayStoryItemTitle from '@/components/main/home/weekday/item/WeekDayStoryItemTitle';\nimport { LabelNew } from '@/components/main/home/weekday/label';\nimport SPImage from '@components/commons/image/SPImage';\n\nimport StoryItemLink from '../../../common/storyItem/link/StoryItemLink';\nimport BandLabel from '@/components/main/common/label/BandLabel';\n\ninterface IWeekDayStoryItem {\n index: number;\n data: WeekdayStoryItemFragment;\n hasTitle?: boolean;\n playType?: Story_Play_Type; // 여기서 오는 playType은 url에있는 playType\n}\n\nconst WeekDayStoryItem = ({\n data,\n hasTitle,\n index,\n playType,\n}: IWeekDayStoryItem) => {\n const { t } = useTranslation();\n const router = useRouter();\n const { week, genre, sorting } = router.query;\n const dispatch = useAppDispatch();\n\n const setEventParams = () => {\n dispatch(\n setCurrentStoryLabelText(\n getLabelText({\n currentHomeTab: HOME_TAB_TYPE.WeekDay,\n currentWeekTab: week as WeekDayTab,\n isFinished: data.isFinished,\n isOnHiatus: data.onHiatus,\n isNew: data.isNew,\n isUp: data.isUp,\n weekdays: data.storyWeekdays,\n }),\n ),\n );\n dispatch(setWeekdayFilter(genre as Challenge_Story_Genre | 'TOTAL'));\n dispatch(setWeekdaySorting(sorting as Story_Sorting));\n dispatch(setPreviousSection(getWeekDaySectionName(week as WeekDayTab)));\n };\n\n return (\n \n \n
\n \n {data.isAdult && (\n
\n \n
\n )}\n {data.isTimeLeapFree && (\n
\n
타임리프 무료이벤트
\n
\n )}\n\n
\n {playType !== Story_Play_Type.Interactive &&\n data.playType === Story_Play_Type.Interactive && (\n \n )}\n {/* 요일탭에서 신작 라벨 보여주기 */}\n {week !== 'New' && week !== 'Finished' && data?.isNew && (\n \n )}\n
\n
\n <>\n {hasTitle && (\n \n )}\n \n \n
\n );\n};\n\nconst FIVE_ITEMS_MAX_WIDTH = '800px';\nconst FOUR_ITEMS_MAX_WIDTH = '610px';\nconst THREE_ITEMS_MAX_WIDTH = '490px';\n\nconst wrapper = css`\n display: flex;\n flex-direction: column;\n width: 7.8125rem;\n text-align: left;\n cursor: pointer;\n\n .thumbnail {\n position: relative;\n width: 7.8125rem;\n height: 11.875rem;\n border: 0.0625rem solid ${theme.colors.gray200};\n border-radius: 0.22rem;\n\n img {\n border-radius: 0.22rem;\n image-rendering: auto;\n }\n\n .adult-sign {\n position: absolute;\n top: 0.25rem;\n right: 0.25rem;\n }\n }\n\n .weekday-list {\n right: 0.25rem;\n display: flex;\n gap: 0.125rem;\n flex-wrap: wrap;\n }\n\n .event-wrapper {\n position: relative;\n display: flex;\n align-items: flex-end;\n padding: 0.25rem;\n height: 100%;\n }\n\n .event {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n padding: 0.375rem 0.25rem 0.25rem;\n background: ${theme.colors.primary500};\n color: ${theme.colors.white};\n font-weight: 600;\n font-size: 0.5625rem;\n letter-spacing: -0.0313rem;\n border-radius: 0.125rem;\n }\n\n // 30px: 양 옆 마진\n @media screen and (max-width: ${FIVE_ITEMS_MAX_WIDTH}) {\n width: 100%;\n\n .thumbnail {\n width: calc((100vw - 30px) / 5);\n height: calc(((100vw - 30px) / 5) * 1.5);\n }\n }\n\n @media screen and (max-width: ${FOUR_ITEMS_MAX_WIDTH}) {\n width: 100%;\n\n .thumbnail {\n width: calc((100vw - 30px) / 4);\n height: calc(((100vw - 30px) / 4) * 1.5);\n }\n }\n\n @media screen and (max-width: ${THREE_ITEMS_MAX_WIDTH}) {\n width: 100%;\n\n .thumbnail {\n width: calc((100vw - 30px) / 3);\n height: calc(((100vw - 30px) / 3) * 1.5);\n }\n }\n\n .labelContainer {\n display: flex;\n align-items: start;\n\n padding: 0.25rem;\n }\n`;\n\nexport default WeekDayStoryItem;\n","import React, { useRef, useEffect } from 'react';\nimport { useRouter } from 'next/router';\nimport { NetworkStatus } from '@common/values';\nimport { WeekDayTab } from '@customTypes/story';\nimport { SPLoading } from '@components/commons';\nimport useInfiniteScroll from '@hooks/useInfiniteScroll';\nimport { ListWeekdayStoryQuery } from '@operations/queries/home/__generated__/useWeekDayStory.generated';\nimport { getWeekDaySectionName } from '@common/utils';\n\nimport StoryGrid from '../../../common/StoryGrid';\nimport WeekDayStoryItem from '../item/WeekDayStoryItem';\nimport { Story_Play_Type } from '@/baseType';\n\ninterface IWeekDayStoryGrid {\n data?: ListWeekdayStoryQuery;\n fetchMore: (options: { variables: { page: number } }) => void;\n hasNext: boolean;\n networkStatus: number;\n nextPage: number;\n playType?: Story_Play_Type;\n}\n\nconst WeekDayStoryGrid = ({\n data,\n fetchMore,\n networkStatus,\n hasNext,\n nextPage,\n playType,\n}: IWeekDayStoryGrid) => {\n const router = useRouter();\n const fetchMoreRef = useRef(null);\n const { week } = router.query;\n\n const intersecting = useInfiniteScroll(fetchMoreRef);\n\n const fetchNextPage = () => {\n if (!data) return;\n\n fetchMore({\n variables: {\n page: nextPage,\n ...(data?.listStoryByWebV3?.version && {\n version: data?.listStoryByWebV3?.version,\n }),\n },\n });\n };\n\n useEffect(() => {\n if (intersecting && hasNext) {\n fetchNextPage();\n }\n }, [intersecting, hasNext]);\n\n return (\n \n <>\n {data?.listStoryByWebV3.list.map((item, index) => (\n \n ))}\n {networkStatus === NetworkStatus.loading && }\n
\n \n \n );\n};\n\nexport default WeekDayStoryGrid;\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport { Story_Play_Type } from '@/baseType';\nimport { useInteractiveStoryGenresQuery } from '@/operations/queries/home/__generated__/useInteractiveStoryGenreList.generated';\nimport { useEpubStoryGenresQuery } from '@/operations/queries/home/__generated__/useNovelStoryGenreList.generated';\nimport { useStoryGenreListQuery } from '@/operations/queries/home/__generated__/useStoryGenreList.generated';\n\nexport const useGenreList = (playType?: string) => {\n switch (playType) {\n case Story_Play_Type.Epub: {\n const { data: epubData } = useEpubStoryGenresQuery();\n return epubData?.epubStoryGenresV3;\n }\n case Story_Play_Type.Interactive: {\n const { data: interactiveData } = useInteractiveStoryGenresQuery();\n return interactiveData?.interactiveStoryGenresV3;\n }\n\n default: {\n const { data: homeData } = useStoryGenreListQuery();\n return homeData?.homeStoryGenresV3;\n }\n }\n};\n","import React from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useRouter } from 'next/router';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { CheckBottomSheet } from 'public/assets';\nimport { STORAGE_KEY, HOME_TAB_SCROLL_POSITION } from '@common/values';\nimport { Story_Play_Type } from '@/baseType';\nimport { useGenreList } from '@/hooks/useGenreList';\n\ninterface IGenreList {\n onClose: () => void;\n contentHeight: number;\n}\n\nconst GenreList = ({ onClose, contentHeight }: IGenreList) => {\n const { t } = useTranslation();\n const router = useRouter();\n // const [genreList, setGenreList] = useState([]);\n const { genre = 'TOTAL' } = router.query;\n const playType = router.pathname.includes('/webnovel')\n ? Story_Play_Type.Epub\n : router.pathname.includes('/interactive')\n ? Story_Play_Type.Interactive\n : undefined;\n\n const genreList: any = useGenreList(playType);\n\n const handelGenreItemClick = (selectedGenreType: string) => {\n onClose();\n sessionStorage.setItem(\n STORAGE_KEY.HOME.SCROLL_POSITION,\n `${HOME_TAB_SCROLL_POSITION}`,\n );\n\n router.push({\n pathname: window.location.pathname,\n query: { ...router.query, genre: selectedGenreType },\n });\n };\n\n return (\n
\n {genreList &&\n [\n {\n showFilter: true,\n type: 'TOTAL',\n text: {\n ko_KR: '전체',\n key: 'ugc_screen_label_all',\n },\n },\n ...genreList,\n ]?.map((item: any) => (\n handelGenreItemClick(item.type)}\n >\n
{t(item.text.key ?? '')}
\n {genre === item.type && }\n \n ))}\n
\n );\n};\n\nconst container = ({ contentHeight }: { contentHeight: number }) => css`\n max-height: ${contentHeight}px;\n overflow-y: scroll;\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .genre-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 3.5rem;\n color: ${theme.colors.gray700};\n cursor: pointer;\n ${theme.font.body.body3}\n }\n`;\n\nexport default GenreList;\n","import React, { useState } from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { css } from '@emotion/react';\n\nimport BottomSheetContainer from '@components/commons/popup/container/BottomSheetContainer';\nimport GenreList from './GenreList';\n\ninterface IGenreSelectionBottomSheet {\n isShow: boolean;\n onClose: () => void;\n}\n\nconst GenreSelectionBottomSheet = ({\n isShow,\n onClose,\n}: IGenreSelectionBottomSheet) => {\n const { t } = useTranslation();\n const [isCloseButtonClick, setIsCloseButtonClick] = useState(false);\n\n const handleCloseButtonClick = () => {\n setIsCloseButtonClick(true);\n\n setTimeout(() => {\n setIsCloseButtonClick(false);\n onClose();\n }, 450);\n };\n\n if (!isShow) return null;\n\n return (\n \n
    \n \n
\n \n );\n};\n\nconst container = css`\n overflow-y: scroll;\n\n ::-webkit-scrollbar {\n display: none;\n }\n`;\n\nexport default GenreSelectionBottomSheet;\n","import React, { useEffect } from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { Portal } from '@components/commons';\n\ninterface IPopupContainer {\n children: JSX.Element | JSX.Element[];\n onClose?: () => void;\n}\n\nconst PopupContainer = ({ children, onClose }: IPopupContainer) => {\n useEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n return (\n \n
\n {\n onClose && onClose();\n }}\n />\n {children}\n
\n
\n );\n};\n\nconst container = css`\n width: 100%;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 29;\n\n .bg {\n width: 100%;\n height: 100%;\n background-color: ${theme.colors.gray900};\n opacity: 0.6;\n }\n`;\n\nexport default PopupContainer;\n","import React from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { NavCloseBtn } from 'public/assets';\n\nimport GenreList from '@/components/main/home/weekday/tab/GenreList';\nimport PopupContainerPortal from '@components/commons/popup/container/PopupContainerPortal';\n\ninterface IGenreSelectionPopup {\n isShow: boolean;\n onClose: () => void;\n}\n\nconst GenreSelectionPopup = ({ isShow, onClose }: IGenreSelectionPopup) => {\n const { t } = useTranslation();\n\n if (!isShow) return null;\n\n return (\n \n
\n
\n

{t('common_popup_title_select_genre')}

\n \n
\n \n
\n
\n );\n};\n\nconst popupContainer = css`\n position: absolute;\n width: 19.5rem;\n padding: 1.8125rem 1.25rem 0.8125rem;\n background: ${theme.colors.white};\n border-radius: 0.75rem;\n\n .close-icon {\n cursor: pointer;\n }\n\n .header {\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.8125rem;\n position: sticky;\n\n .title {\n color: ${theme.colors.gray900};\n font: ${theme.font.header.navigation};\n }\n }\n`;\n\nexport default GenreSelectionPopup;\n","import React, { useEffect, useState } from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { ArrowDownIcon } from 'public/assets';\nimport { insertCommas, isMobileDevice } from '@common/utils';\n\nimport GenreSelectionBottomSheet from './GenreSelectionBottomSheet';\nimport GenreSelectionPopup from './GenreSelectionPopup';\nimport { useRouter } from 'next/router';\nimport { Genre } from '@customTypes/story';\nimport { Story_Play_Type } from '@/baseType';\nimport { useGenreList } from '@/hooks/useGenreList';\n\ninterface IGenreSelectionWrapper {\n count: number;\n}\n\nconst GenreSelectionWrapper = ({ count }: IGenreSelectionWrapper) => {\n const { t } = useTranslation();\n const router = useRouter();\n const { genre } = router.query;\n const [isGenreSelectionBottomSheetOpen, setIsGenreSelectionBottomSheetOpen] =\n useState(false);\n const [isGenreSelectionPopupOpen, setIsGenreSelectionPopupOpen] =\n useState(false);\n const [currentGenreText, setCurrentGenreText] = useState({\n showFilter: true,\n type: 'TOTAL',\n text: {\n ko_KR: '전체',\n key: 'ugc_screen_label_all',\n },\n });\n\n const handleGenreSelectionTitleClick = () => {\n isMobileDevice()\n ? setIsGenreSelectionBottomSheetOpen(true)\n : setIsGenreSelectionPopupOpen(true);\n };\n\n // const { data } = useQuery(CHALLENGE_STORY_GENRE);\n const playType = router.pathname.includes('/webnovel')\n ? Story_Play_Type.Epub\n : router.pathname.includes('/interactive')\n ? Story_Play_Type.Interactive\n : undefined;\n\n const genreList = useGenreList(playType);\n useEffect(() => {\n if (!genreList) return;\n\n const allType: Genre = {\n showFilter: true,\n type: 'TOTAL',\n text: {\n ko_KR: '전체',\n key: 'ugc_screen_label_all',\n },\n };\n const genreTypeList = [allType, ...genreList];\n const currentGenreType = genreTypeList.find((item) => item.type === genre);\n\n setCurrentGenreText(currentGenreType || allType);\n }, [genre, genreList]);\n\n return (\n <>\n
\n
\n {t(currentGenreText?.text.key ?? '')}{' '}\n {count > 0 && ({insertCommas(count)})}\n
\n \n
\n setIsGenreSelectionBottomSheetOpen(false)}\n />\n setIsGenreSelectionPopupOpen(false)}\n />\n \n );\n};\n\nconst container = css`\n display: flex;\n align-items: center;\n color: ${theme.colors.gray800};\n cursor: pointer;\n position: relative;\n\n .title {\n height: 1rem;\n font: ${theme.font.header.subhead1};\n }\n\n .icon {\n margin-left: 0.125rem;\n }\n`;\n\nexport default GenreSelectionWrapper;\n","import React from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useRouter } from 'next/router';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { Story_Sorting } from '@/baseType';\nimport { STORAGE_KEY, HOME_TAB_SCROLL_POSITION } from '@common/values';\n\nconst SortingSelectionWrapper = () => {\n const { t } = useTranslation();\n const router = useRouter();\n const { sorting = Story_Sorting.DailyRankAsc } = router.query;\n const handleSortingItemClick = (selectedSortingType: Story_Sorting) => {\n sessionStorage.setItem(\n STORAGE_KEY.HOME.SCROLL_POSITION,\n `${HOME_TAB_SCROLL_POSITION}`,\n );\n router.push({\n pathname: window.location.pathname,\n query: {\n ...router.query,\n sorting: selectedSortingType,\n },\n });\n };\n\n return (\n
\n handleSortingItemClick(Story_Sorting.DailyRankAsc)}\n role=\"radio\"\n >\n {t('home_screen_label_sort_popular')}\n \n
\n handleSortingItemClick(Story_Sorting.PublishedDesc)}\n role=\"radio\"\n >\n {t('home_screen_title_sort_recent')}\n \n
\n );\n};\n\nconst container = css`\n display: flex;\n align-items: center;\n height: 1.125rem;\n\n .sorting-item {\n color: ${theme.colors.gray500};\n font: ${theme.font.body.body1};\n cursor: pointer;\n }\n\n .sorting-item.active {\n color: ${theme.colors.gray800};\n font: ${theme.font.header.subhead1};\n }\n\n .divider {\n margin: 0 0.5rem;\n width: 0.0625rem;\n height: 0.75rem;\n background: ${theme.colors.gray400};\n }\n`;\n\nexport default SortingSelectionWrapper;\n","import React from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\n\nimport GenreSelectionWrapper from './GenreSelectionWrapper';\nimport SortingSelectionWrapper from './SortingSelectionWrapper';\n\ninterface IListOptions {\n storyCount: number;\n}\n\nconst ListOptions = ({ storyCount }: IListOptions) => {\n return (\n
\n \n \n
\n );\n};\n\nconst container = css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 1rem 0.1875rem;\n transform: translate(0, 0.5625rem);\n\n .sorting {\n display: flex;\n align-items: center;\n height: 1.125rem;\n\n .sorting-item {\n color: ${theme.colors.gray800};\n font: ${theme.font.header.subhead1};\n }\n\n .divider {\n margin: 0 0.5rem;\n width: 0.0625rem;\n height: 0.75rem;\n background: ${theme.colors.gray400};\n }\n }\n`;\n\nexport default ListOptions;\n","import React from 'react';\nimport { useRouter } from 'next/router';\nimport { WeekDayTab } from '@customTypes/story';\nimport { getWeekDaySectionName } from '@common/utils';\n\nimport StoryItemPlaceHolder from '@components/commons/loading/StoryItemPlaceHolder';\nimport StoryGrid from '../../../common/StoryGrid';\n\nconst WeekDayStorySkeletonGrid = () => {\n const router = useRouter();\n const { week } = router.query;\n\n return (\n \n {new Array(6).fill('').map((_, index) => (\n \n ))}\n \n );\n};\n\nexport default WeekDayStorySkeletonGrid;\n","import React from 'react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { WeekdayEmptyStoryIcon } from 'public/assets';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\n\nconst EmptyWeekdayStory = () => {\n const { t } = useTranslation();\n\n return (\n
\n \n

\n {t('common_screen_label_message_not_exist_weekday_story')}\n

\n
\n );\n};\n\nconst text = css`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 6.75rem 0;\n\n .centent {\n margin-top: 0.75rem;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 1.25rem;\n text-align: center;\n letter-spacing: -0.0187rem;\n color: ${theme.colors.gray500};\n }\n`;\n\nexport default EmptyWeekdayStory;\n","import React, { useEffect } from 'react';\nimport { useRouter } from 'next/router';\nimport WeekDayTabs from '@/components/main/home/weekday/tab/WeekTabs';\nimport { useWeekDayStoryQuery } from '@operations/queries/home/useWeekDayStory';\nimport { WeekDayTab } from '@customTypes/story';\nimport {\n Ui_Story_Section_Type,\n Story_Weekday,\n Story_Sorting,\n Direct_Ads_Type,\n Story_Play_Type,\n} from '@/baseType';\n\nimport { STORAGE_KEY } from '@common/values';\n\nimport WeekDayStoryGrid from './grid/WeekDayStoryGrid';\nimport ListOptions from './tab/ListOptions';\nimport DirectAdsBannerWrapper from '../../common/banner/DirectAdsBannerWrapper';\nimport WeekDayStorySkeletonGrid from './grid/WeekDayStorySkeletonGrid';\nimport EmptyWeekdayStory from './item/EmptyWeekdayStory';\n\nconst DEFAULT_PAGE_COUNT = 15;\n\nconst WeekDayContainer = () => {\n const router = useRouter();\n const { week, genre, sorting } = router.query;\n const playType = router.pathname.includes('/webnovel')\n ? Story_Play_Type.Epub\n : router.pathname.includes('/interactive')\n ? Story_Play_Type.Interactive\n : undefined; // undefined면 home화면\n const { data, hasNext, fetchMore, networkStatus, loading } =\n useWeekDayStoryQuery({\n page: 1,\n pageSize: DEFAULT_PAGE_COUNT,\n ...((week as WeekDayTab) === 'New' && {\n uiSectionType: 'New' as Ui_Story_Section_Type,\n }),\n ...((week as WeekDayTab) === 'Finished' && {\n uiSectionType: 'Finished' as Ui_Story_Section_Type,\n }),\n ...(genre !== 'TOTAL' && { genre: genre as string }),\n ...(sorting && { sorting: sorting as Story_Sorting }),\n ...(Object.keys(Story_Weekday).indexOf(week as string) !== -1 && {\n weekday: week as Story_Weekday,\n }),\n // 요일탭에서는 인터랙티브 작품만 노출\n playType,\n });\n useEffect(() => {\n const rawScrollPosition =\n sessionStorage.getItem(STORAGE_KEY.HOME.SCROLL_POSITION) || '0';\n const scroll = Number(rawScrollPosition);\n if (playType === undefined) {\n window.scrollTo({\n top: scroll,\n });\n }\n\n sessionStorage.removeItem(STORAGE_KEY.HOME.SCROLL_POSITION);\n }, [week, genre, sorting]);\n\n return (\n <>\n
\n \n
\n {loading ? (\n \n ) : (\n <>\n {data && (\n \n )}\n {data && data.listStoryByWebV3.list.length > 0 ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n )}\n \n )}\n \n );\n};\n\nexport default WeekDayContainer;\n","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport { GenreInfoDtoFragmentDoc } from './useNovelStoryGenreList.generated';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type InteractiveStoryGenresQueryVariables = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type InteractiveStoryGenresQuery = { __typename?: 'Query', interactiveStoryGenresV3: Array<{ __typename?: 'StoryGenre', type: string, text: { __typename?: 'LocalizeKey', key: string, ko_KR: string }, title?: { __typename?: 'LocalizeKey', key: string, ko_KR: string } | null }> };\n\n\nexport const InteractiveStoryGenresDocument = gql`\n query interactiveStoryGenres {\n interactiveStoryGenresV3 {\n ...GenreInfoDto\n }\n}\n ${GenreInfoDtoFragmentDoc}`;\n\n/**\n * __useInteractiveStoryGenresQuery__\n *\n * To run a query within a React component, call `useInteractiveStoryGenresQuery` and pass it any options that fit your needs.\n * When your component renders, `useInteractiveStoryGenresQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useInteractiveStoryGenresQuery({\n * variables: {\n * },\n * });\n */\nexport function useInteractiveStoryGenresQuery(baseOptions?: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(InteractiveStoryGenresDocument, options);\n }\nexport function useInteractiveStoryGenresLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(InteractiveStoryGenresDocument, options);\n }\nexport type InteractiveStoryGenresQueryHookResult = ReturnType;\nexport type InteractiveStoryGenresLazyQueryHookResult = ReturnType;\nexport type InteractiveStoryGenresQueryResult = Apollo.QueryResult;","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type GenreInfoDtoFragment = { __typename?: 'StoryGenre', type: string, text: { __typename?: 'LocalizeKey', key: string, ko_KR: string }, title?: { __typename?: 'LocalizeKey', key: string, ko_KR: string } | null };\n\nexport type EpubStoryGenresQueryVariables = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type EpubStoryGenresQuery = { __typename?: 'Query', epubStoryGenresV3: Array<{ __typename?: 'StoryGenre', type: string, text: { __typename?: 'LocalizeKey', key: string, ko_KR: string }, title?: { __typename?: 'LocalizeKey', key: string, ko_KR: string } | null }> };\n\nexport const GenreInfoDtoFragmentDoc = gql`\n fragment GenreInfoDto on StoryGenre {\n type\n text {\n key\n ko_KR\n }\n title {\n key\n ko_KR\n }\n}\n `;\nexport const EpubStoryGenresDocument = gql`\n query epubStoryGenres {\n epubStoryGenresV3 {\n type\n text {\n key\n ko_KR\n }\n title {\n key\n ko_KR\n }\n }\n}\n `;\n\n/**\n * __useEpubStoryGenresQuery__\n *\n * To run a query within a React component, call `useEpubStoryGenresQuery` and pass it any options that fit your needs.\n * When your component renders, `useEpubStoryGenresQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useEpubStoryGenresQuery({\n * variables: {\n * },\n * });\n */\nexport function useEpubStoryGenresQuery(baseOptions?: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(EpubStoryGenresDocument, options);\n }\nexport function useEpubStoryGenresLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(EpubStoryGenresDocument, options);\n }\nexport type EpubStoryGenresQueryHookResult = ReturnType;\nexport type EpubStoryGenresLazyQueryHookResult = ReturnType;\nexport type EpubStoryGenresQueryResult = Apollo.QueryResult;","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport { GenreInfoDtoFragmentDoc } from './useNovelStoryGenreList.generated';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type StoryGenreListQueryVariables = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type StoryGenreListQuery = { __typename?: 'Query', homeStoryGenresV3: Array<{ __typename?: 'StoryGenre', type: string, text: { __typename?: 'LocalizeKey', key: string, ko_KR: string }, title?: { __typename?: 'LocalizeKey', key: string, ko_KR: string } | null }> };\n\n\nexport const StoryGenreListDocument = gql`\n query StoryGenreList {\n homeStoryGenresV3 {\n ...GenreInfoDto\n }\n}\n ${GenreInfoDtoFragmentDoc}`;\n\n/**\n * __useStoryGenreListQuery__\n *\n * To run a query within a React component, call `useStoryGenreListQuery` and pass it any options that fit your needs.\n * When your component renders, `useStoryGenreListQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useStoryGenreListQuery({\n * variables: {\n * },\n * });\n */\nexport function useStoryGenreListQuery(baseOptions?: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(StoryGenreListDocument, options);\n }\nexport function useStoryGenreListLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(StoryGenreListDocument, options);\n }\nexport type StoryGenreListQueryHookResult = ReturnType;\nexport type StoryGenreListLazyQueryHookResult = ReturnType;\nexport type StoryGenreListQueryResult = Apollo.QueryResult;","import { gql } from '@apollo/client';\nimport {\n useListStoryForEpubContestWinnerQuery as useQuery,\n ListStoryForEpubContestWinnerQueryVariables,\n} from './__generated__/useUGCContestWinnerStoryList.generated';\n\nexport const UGC_CONTEST_WINNER_STORY = gql`\n query listStoryForEpubContestWinner($page: Int, $version: Int) {\n listStoryForEpubContestWinner(\n data: { page: $page, pageSize: 15, version: $version }\n ) {\n totalCount\n page\n pageSize\n version\n list {\n ...StoryVerticalCoverDto\n }\n }\n }\n`;\nexport const useWebNovelContestWinnerStoryList = (\n variables?: ListStoryForEpubContestWinnerQueryVariables,\n) => {\n const { data, fetchMore, loading } = useQuery({\n variables,\n });\n\n const hasNext =\n data &&\n data?.listStoryForEpubContestWinner.totalCount >\n data?.listStoryForEpubContestWinner.list.length;\n\n return { data, fetchMore, hasNext, loading };\n};\n"],"names":["wrapper","css","className","width","height","container","theme","section","children","storyListRef","useRef","useVisibleStoryItemEvent","ref","defaultOptions","GetDirectAdsBannerDocument","gql","useDirectAdsBanner","variables","baseOptions","options","Apollo","useQuery","data","loading","hasMargin","type","location","t","useTranslation","router","useRouter","useState","isShow","setIsShow","bannerData","bannerLoading","useEffect","getDirectAds","checkDevice","directAdsId","title","adSalesImpressionDirect","adTitle","adUrl","link","adLoc","adImageUrl","imageFile","src","onClickBanner","openOldDeepLink","deepLink","iosStoreLink","iOSFallbackLink","aosStoreLink","aOSFallbackLink","adSalesClickDirect","BannerDtoFragmentDoc","GetAllBundleBannersDocument","RedirectUrlToStoryDetailRow","redirectUrlToStoryDetail","setRedirectUrlToStoryDetail","redirectInfo","localStorage","getItem","STORAGE_KEY","parsedRedirectInfo","JSON","parse","redirectUrl","includes","startsWith","onResetRedirectUrlToStoryDetail","removeItem","useGetRedirectUrlToStoryDetail","viewHomeContinueBanner","onClick","push","touchHomeContinueBanner","e","stopPropagation","touchHomeContinueBannerOff","isHomeTab","pathname","placeholder","objectFit","layout","priority","isHome","index","storyRef","current","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","target","HTMLElement","viewStoryThumbnail","dataset","story","name","storyId","id","contentType","viewHomeTopBanner","bannerId","bundleBannerId","bannerType","viewInteractiveTopBanner","viewNovelTopBanner","threshold","observe","disconnect","playType","Story_Play_Type","clickHomeTopBanner","clickInteractiveTopBanner","clickNovelTopBanner","linkType","Banner_Link_Type","window","open","SPImage","bannerImageFile","alt","content","HomeBanner","list","style","position","length","map","key","memo","HomeBannerWrapper","bannerList","setBannerList","firstBannerStoryId","query","useGetAllBundleBannersQuery","Banner_Location","onCompleted","getAllBundleBannersByWeb","viewHomeTab","firstBanner","filter","otherBanners","usePlayTypeContext","useWebNovelContestWinnerStoryList","listStoryForEpubContestWinner","StoryWrapper","SectionTitle","showMoreButton","moreLink","formatMoreLink","sectionName","getHomeSectionName","item","array","StoryItem","isFirstItem","isLastItem","showInteractiveBanner","LazyRankingStory","lazy","LazyPlayedStory","LazyGenreStoryList","LazyInteractiveGenreStoryList","LazyNovelGenreStoryList","LazyFavoriteStory","LazyFeaturedStoryItem","LazyGenerationStoryList","LazyOriginalStory","LazyFinishedStory","LazyAdultStory","PlayTypeProvider","HOME_SECTION_TITLES","week","tabListRef","WEEK_DAY_TAB_LIST","tab","touchWeekdayTab","getWeekDaySectionName","replace","sessionStorage","setItem","HOME_TAB_SCROLL_POSITION","handleTabItemClick","getHomeWeekdayTabText","textKey","WeekdayStoryItemFragmentDoc","ListWeekdayStoryDocument","WEEKDAY_STORY_ITEM","useWeekDayStoryQuery","onError","fetchMore","networkStatus","hasNext","listStoryByWebV3","totalCount","genre","author","isShowUp","isPause","hasTitle","sorting","dispatch","useAppDispatch","getLabelText","currentHomeTab","HOME_TAB_TYPE","currentWeekTab","isFinished","isOnHiatus","onHiatus","isNew","isUp","weekdays","storyWeekdays","getStatusText","StoryItemLink","isAdult","setEventParams","setCurrentStoryLabelText","setWeekdayFilter","setWeekdaySorting","setPreviousSection","mainImageFile","isTimeLeapFree","BandLabel","text","borderColor","authorName","genreKey","nextPage","fetchMoreRef","intersecting","useInfiniteScroll","page","version","fetchNextPage","StoryGrid","NetworkStatus","useGenreList","epubData","useEpubStoryGenresQuery","epubStoryGenresV3","interactiveData","useInteractiveStoryGenresQuery","interactiveStoryGenresV3","homeData","useStoryGenreListQuery","homeStoryGenresV3","contentHeight","onClose","undefined","genreList","showFilter","ko_KR","selectedGenreType","isCloseButtonClick","setIsCloseButtonClick","handleCloseButtonClick","setTimeout","BottomSheetContainer","isTitleHasUnderline","marginTop","innerHeight","hasCloseButton","document","body","overflow","popupContainer","PopupContainerPortal","fill","count","isGenreSelectionBottomSheetOpen","setIsGenreSelectionBottomSheetOpen","isGenreSelectionPopupOpen","setIsGenreSelectionPopupOpen","currentGenreText","setCurrentGenreText","allType","currentGenreType","find","isMobileDevice","insertCommas","Story_Sorting","handleSortingItemClick","selectedSortingType","role","storyCount","Array","_","StoryItemPlaceHolder","pageSize","uiSectionType","Object","keys","Story_Weekday","indexOf","weekday","rawScrollPosition","scroll","Number","scrollTo","top","DirectAdsBannerWrapper","Direct_Ads_Type","InteractiveStoryGenresDocument","GenreInfoDtoFragmentDoc","EpubStoryGenresDocument","StoryGenreListDocument"],"sourceRoot":""}