{"version":3,"file":"static/chunks/app/page-746b77a8422021fd.js","mappings":"oFAAAA,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAC,CAAA,CAAAC,IAAA,CAAAF,EAAA,SAEAH,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAE,IAAA,CAAAF,EAAA,MAEAH,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAE,IAAA,CAAAF,EAAA,OAEAH,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAC,CAAA,CAAAC,IAAA,CAAAF,EAAA,UAEAH,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAE,IAAA,CAAAF,EAAA,MAEAH,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAC,CAAA,CAAAC,IAAA,CAAAF,EAAA,UAEAH,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAE,IAAA,CAAAF,EAAA,OAEAH,QAAAC,OAAA,GAAAC,IAAA,CAAAC,EAAAE,IAAA,CAAAF,EAAA,kICXaG,qCAAAA,KAAN,IAAMA,EAAgBC,YAHX,OAGWA,OAAK,CAACC,aAAa,CAAoB,mDCHxDC,EAOAC,EAMAC,oFAbAF,EAAAA,GAAAA,CAAAA,EAAAA,CAAAA,CAAAA,4EAOAC,EAAAA,GAAAA,CAAAA,EAAAA,CAAAA,CAAAA,8CAMAC,EAAAA,GAAAA,CAAAA,EAAAA,CAAAA,CAAAA,kTC8CZ,IAAMC,EAAoB,CACxB,kBAEA,kBACA,kBACA,kBACA,mBACA,oBAEA,mBACA,mBACA,mBACA,oBACA,oBAEA,mBACA,mBACA,mBACA,oBACA,oBAEA,mBACA,mBACA,oBACA,oBACA,oBAEA,mBACA,mBACA,mBACA,oBACA,oBAEA,kBACA,kBACA,kBACA,kBACA,oBAEA,mBACD,CAEYC,EAAgB,IAC3B,IAAMC,EAAQC,KAAKC,IAAI,CAAC,CAACC,EAAS,IAAO,YACzC,GAAa,GACJL,CAAiB,CAAC,GAAG,CAEvBA,CAAiB,CAACE,EAAM,EAG3BI,EAAa,CACjB,UAEA,WACA,YACA,aACA,YACA,WAEA,WACA,YACA,aACA,YACA,WAEA,SACA,UACA,WACA,UACA,SAEA,aACA,cACA,eACA,cACA,aAEA,YACA,aACA,cACA,aACA,YAEA,SACA,UACA,WACA,UACA,SACD,CAEYC,EAAe,GACnBD,CAAU,CAACJ,EAAM,CAGbM,EAAsB,GAE1BL,KAAKM,GAAG,CAACN,KAAKO,KAAK,CAAC,CAACL,EADf,GACwBM,EAAQ,KAAM,GAGxCC,EAAiB,IAC5B,OAAQC,GACN,KAAKhB,EAAAA,EAAMA,CAACiB,QAAQ,CAClB,MAAO,OACT,MAAKjB,EAAAA,EAAMA,CAACkB,MAAM,CAChB,MAAO,KACT,MAAKlB,EAAAA,EAAMA,CAACmB,OAAO,CACjB,MAAO,MACT,MAAKnB,EAAAA,EAAMA,CAACoB,IAAI,CACd,MAAO,OACX,CACF,EAEaC,EAAc,IACzB,IAAMC,EAAOC,CAAAA,EAAAA,EAAAA,CAAAA,EAAkB,IAAIC,KAAQC,GAC3C,GAAIH,EAAO,EACT,MAAO,GAAQI,MAAA,CAALJ,EAAK,SAEjB,IAAMK,EAAQC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB,IAAIJ,KAAQC,GAC7C,GAAIE,EAAQ,EACV,MAAO,GAASD,MAAA,CAANC,EAAM,WAElB,IAAME,EAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAiB,IAAIN,KAAQC,GACzC,GAAII,EAAM,EACR,MAAO,GAAOH,MAAA,CAAJG,EAAI,SAEhB,IAAME,EAAOC,CAAAA,EAAAA,EAAAA,CAAAA,EAAkB,IAAIR,KAAQC,GAC3C,GAAIM,EAAO,EACT,MAAO,GAAQL,MAAA,CAALK,EAAK,WAEjB,IAAME,EAASC,CAAAA,EAAAA,EAAAA,CAAAA,EAAoB,IAAIV,KAAQC,GAC/C,GAAIQ,EAAS,EACX,MAAO,GAAUP,MAAA,CAAPO,EAAO,SAEnB,IAAME,EAASC,CAAAA,EAAAA,EAAAA,CAAAA,EAAoB,IAAIZ,KAAQC,GAC/C,MAAO,GAAUC,MAAA,CAAPS,EAAO,OACnB,EAEaE,EAAiB,IAC5B,IAAMvB,EAAO,IAAIU,OAAOc,OAAO,GAAK,IAAId,KAAKC,GAAMa,OAAO,GAG1D,MAAO,GAAgBH,MAAAA,CAFR7B,KAAKiC,KAAK,CAACzB,EAAO,IAAO,IAEvB,QAAaY,MAAA,CADfpB,KAAKiC,KAAK,CAACzB,EAAO,KAAQ,GACX,KAChC,iDC9LA0B,CAAAA,EAAA,QAN2B,OAAC,CAAEf,KAAAA,CAAI,CAAS,CAAAgB,EACzC,MACE,GAAAC,EAAAC,GAAA,EAACC,IAAAA,UAAGnB,EAAKoB,cAAc,IAE3B,uFCsBAL,CAAAA,EAAA,QArBiB,OAAC,CAAEf,KAAAA,CAAI,CAAEqB,YAAAA,CAAW,CAAS,CAAAL,EACtCM,EAAgBD,IAAgB5C,EAAAA,EAAOA,CAAC8C,YAAY,CAAGX,EAAAA,EAAcA,CAAGhB,EAAAA,EAAWA,CACnF,CAAC4B,EAAMC,EAAQ,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAASJ,EAActB,IAY/C,MAVA2B,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,IAAMC,EAAaC,YAAY,KAC7BJ,EAAQH,EAActB,GACxB,EAAG,KAEH,MAAO,KACL8B,cAAcF,EAChB,CACF,EAAG,CAAC5B,EAAMsB,EAAc,EAGtB,GAAAL,EAAAC,GAAA,EAACa,MAAAA,UACC,GAAAd,EAAAC,GAAA,EAACC,IAAAA,UAAGK,KAGV,8ECRAT,CAAAA,EAAA,QAZgB,OAAC,CAAEiB,QAAAA,CAAO,CAAEC,SAAAA,CAAQ,CAAS,CAAAjB,EACrCkB,EAAMC,CAAAA,EAAAA,EAAAA,MAAAA,EAAO,MACnB,MACE,GAAAlB,EAAAmB,IAAA,EAACL,MAAAA,CAAIG,IAAKA,EAAKG,UAAWC,IAAAA,OAAAA,WACxB,GAAArB,EAAAC,GAAA,EAACa,MAAAA,CAAIM,UAAWC,IAAAA,IAAAA,UACbN,IAEFC,IAGP,oBClBAM,EAAAC,OAAA,EAAkB,ufCAlBD,EAAAC,OAAA,EAAkB,gDCAlBD,EAAAC,OAAA,EAAkB","sources":["webpack://_N_E/?db85","webpack://_N_E/../../../src/shared/lib/router-context.shared-runtime.ts","webpack://_N_E/./src/app/lib/definitions.ts","webpack://_N_E/./src/app/lib/utils.ts","webpack://_N_E/./src/app/ui/dateToLocaleString.tsx","webpack://_N_E/./src/app/ui/realTime.tsx","webpack://_N_E/./src/app/ui/tooltip.tsx","webpack://_N_E/./src/app/page.module.css","webpack://_N_E/./src/app/ui/rating.module.css","webpack://_N_E/./src/app/ui/tooltip.module.css"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/node_modules/next/dist/client/link.js\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/node_modules/next/dist/shared/lib/lazy-dynamic/dynamic-bailout-to-csr.js\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/node_modules/next/dist/shared/lib/lazy-dynamic/preload-css.js\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/page.module.css\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/dateToLocaleString.tsx\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/rating.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/realTime.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/codebuild/output/src2723861806/src/boj-random-defense-client/src/app/ui/tooltip.tsx\");\n",null,"export enum Status {\n ACCEPTED = \"ACCEPTED\",\n PASSED = \"PASSED\",\n WAITING = \"WAITING\",\n NONE = \"NONE\",\n}\n\nexport enum Defense {\n RANGE = \"RANGE\",\n RANK = \"RANK\",\n NONE = \"NONE\",\n}\n\nexport enum Display {\n ELAPSED_TIME = 'elapsed',\n LAST_TIME = 'last',\n}\n\nexport type User = {\n handle: string\n rating: number\n topRating: number\n problemId: number\n problemName: string\n problemLevel: number\n defense: Defense\n status: Status\n updatedAt: Date\n}\n\nexport type Log = {\n id: string\n handle: string\n problemId: number\n problemName: string\n problemLevel: number\n rating: number\n defense: Defense\n status: Status\n elapsedTime: string\n createdAt: Date\n}\n\nexport type LogLastEvaluatedKey = {\n handle: string,\n 'problemId#status': string\n}","import { \n differenceInYears,\n differenceInMonths,\n differenceInDays,\n differenceInHours,\n differenceInMinutes,\n differenceInSeconds,\n} from \"date-fns\"\nimport { Status } from \"./definitions\"\n\nconst LEVEL_COLOR = [\n 'rgb(45, 45, 45)',\n\n 'rgb(157, 73, 0)',\n 'rgb(165, 79, 0)',\n 'rgb(173, 85, 0)',\n 'rgb(181, 93, 10)',\n 'rgb(198, 119, 57)',\n\n 'rgb(56, 84, 110)',\n 'rgb(61, 90, 116)',\n 'rgb(67, 95, 122)',\n 'rgb(73, 101, 128)',\n 'rgb(78, 106, 134)',\n\n 'rgb(210, 133, 0)',\n 'rgb(223, 143, 0)',\n 'rgb(236, 154, 0)',\n 'rgb(249, 165, 24)',\n 'rgb(255, 176, 40)',\n\n 'rgb(0, 199, 139)',\n 'rgb(0, 212, 151)',\n 'rgb(39, 226, 164)',\n 'rgb(62, 240, 177)',\n 'rgb(81, 253, 189)',\n\n 'rgb(0, 158, 229)',\n 'rgb(0, 169, 240)',\n 'rgb(0, 180, 252)',\n 'rgb(43, 191, 255)',\n 'rgb(65, 202, 255)',\n\n 'rgb(224, 0, 76)',\n 'rgb(234, 0, 83)',\n 'rgb(245, 0, 90)',\n 'rgb(255, 0, 98)',\n 'rgb(255, 48, 113)',\n\n 'rgb(180, 145, 255)',\n]\n\nexport const getLevelColor = (level: number) => {\n if (level >= 31) {\n return LEVEL_COLOR[31]\n }\n return LEVEL_COLOR[level]\n}\n\nconst LEVEL_GRAPH_COLOR = [\n 'rgb(45, 45, 45)',\n\n 'rgb(157, 73, 0)',\n 'rgb(165, 79, 0)',\n 'rgb(173, 85, 0)',\n 'rgb(181, 93, 10)',\n 'rgb(198, 119, 57)',\n\n 'rgb(56, 84, 110)',\n 'rgb(61, 90, 116)',\n 'rgb(67, 95, 122)',\n 'rgb(73, 101, 128)',\n 'rgb(78, 106, 134)',\n\n 'rgb(210, 133, 0)',\n 'rgb(223, 143, 0)',\n 'rgb(236, 154, 0)',\n 'rgb(249, 165, 24)',\n 'rgb(255, 176, 40)',\n\n 'rgb(0, 199, 139)',\n 'rgb(0, 212, 151)',\n 'rgb(39, 226, 164)',\n 'rgb(62, 240, 177)',\n 'rgb(81, 253, 189)',\n\n 'rgb(0, 158, 229)',\n 'rgb(0, 169, 240)',\n 'rgb(0, 180, 252)',\n 'rgb(43, 191, 255)',\n 'rgb(65, 202, 255)',\n\n 'rgb(224, 0, 76)',\n 'rgb(234, 0, 83)',\n 'rgb(245, 0, 90)',\n 'rgb(255, 0, 98)',\n 'rgb(255, 48, 113)',\n\n 'rgb(179, 0, 224)',\n]\n\nexport const getGraphColor = (rating: number) => {\n const level = Math.ceil((rating + 0.5) / 100)\n if (level >= 31) {\n return LEVEL_GRAPH_COLOR[31]\n }\n return LEVEL_GRAPH_COLOR[level]\n}\n\nconst LEVEL_TEXT = [\n 'Unrated',\n\n 'Bronze V',\n 'Bronze IV',\n 'Bronze III',\n 'Bronze II',\n 'Bronze I',\n\n 'Silver V',\n 'Silver IV',\n 'Silver III',\n 'Silver II',\n 'Silver I',\n\n 'Gold V',\n 'Gold IV',\n 'Gold III',\n 'Gold II',\n 'Gold I',\n\n 'Platinum V',\n 'Platinum IV',\n 'Platinum III',\n 'Platinum II',\n 'Platinum I',\n\n 'Diamond V',\n 'Diamond IV',\n 'Diamond III',\n 'Diamond II',\n 'Diamond I',\n\n 'Ruby V',\n 'Ruby IV',\n 'Ruby III',\n 'Ruby II',\n 'Ruby I',\n]\n\nexport const getLevelText = (level: number) => {\n return LEVEL_TEXT[level]\n}\n\nexport const getLowLevelByRating = (rating: number) => {\n const diff = 200;\n return Math.max(Math.round((rating - diff) / 100), 1);\n};\n\nexport const getStatusColor = (status: Status) => {\n switch (status) {\n case Status.ACCEPTED:\n return 'green'\n case Status.PASSED:\n return 'red'\n case Status.WAITING:\n return 'gray'\n case Status.NONE:\n return 'black'\n }\n}\n\nexport const getLastTime = (date: Date) => {\n const year = differenceInYears(new Date(), date)\n if (year > 0) {\n return `${year}년 전`\n }\n const month = differenceInMonths(new Date(), date)\n if (month > 0) {\n return `${month}개월 전`\n }\n const day = differenceInDays(new Date(), date)\n if (day > 0) {\n return `${day}일 전`\n }\n const hour = differenceInHours(new Date(), date)\n if (hour > 0) {\n return `${hour}시간 전`\n }\n const minute = differenceInMinutes(new Date(), date)\n if (minute > 0) {\n return `${minute}분 전`\n }\n const second = differenceInSeconds(new Date(), date)\n return `${second}초 전`\n}\n\nexport const getElapsedTime = (date: Date) => {\n const diff = new Date().getTime() - new Date(date).getTime()\n const minute = Math.floor(diff / 1000 / 60)\n const second = Math.floor(diff / 1000) % 60\n return `${minute}분 ${second}초`\n}","'use client'\n\ntype Props = {\n date: Date\n}\nconst DateToLocaleString = ({ date }: Props) => {\n return (\n

{date.toLocaleString()}

\n )\n}\n\nexport default DateToLocaleString","\"use client\"\n\nimport { useEffect, useState } from 'react'\nimport { getElapsedTime, getLastTime } from '../lib/utils'\nimport { Display } from '../lib/definitions'\n\ntype Props = {\n date: Date\n displayType: Display\n}\nconst RealTime = ({ date, displayType }: Props) => {\n const getTextToDate = displayType === Display.ELAPSED_TIME ? getElapsedTime : getLastTime\n const [text, setText] = useState(getTextToDate(date))\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setText(getTextToDate(date))\n }, 1000)\n\n return () => {\n clearInterval(intervalId)\n }\n }, [date, getTextToDate])\n\n return (\n
\n

{text}

\n
\n )\n}\n\nexport default RealTime","\"use client\"\n\nimport { ReactNode, useRef } from \"react\"\nimport styles from \"./tooltip.module.css\"\n\ntype Props = {\n tooltip: ReactNode\n children: ReactNode\n}\nconst Tooltip = ({ tooltip, children }: Props) => {\n const ref = useRef(null)\n return (\n
\n
\n {tooltip}\n
\n {children}\n
\n )\n}\n\nexport default Tooltip","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table\":\"page_table__71QjM\",\"tableHeader\":\"page_tableHeader__bN6Hs\",\"tableHeaderRank\":\"page_tableHeaderRank__xnxZT\",\"tableHeaderHandle\":\"page_tableHeaderHandle__RwQuX\",\"tableHeaderRating\":\"page_tableHeaderRating__b6Hkx\",\"tableHeaderLastDefense\":\"page_tableHeaderLastDefense__mBqEi\",\"tableRow\":\"page_tableRow__ONhyR\",\"tableRowRank\":\"page_tableRowRank__VsZug\",\"tableRowHandle\":\"page_tableRowHandle__V5LaD\",\"tableRowRating\":\"page_tableRowRating__KfpwE\",\"tableRowLastDefense\":\"page_tableRowLastDefense__g3Qzy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"rating\":\"rating_rating__1KnU2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"tooltip\":\"tooltip_tooltip__Yzy_4\",\"text\":\"tooltip_text__o0NLL\"};"],"names":["Promise","resolve","then","__webpack_require__","t","bind","RouterContext","React","createContext","Status","Defense","Display","LEVEL_GRAPH_COLOR","getGraphColor","level","Math","ceil","rating","LEVEL_TEXT","getLevelText","getLowLevelByRating","max","round","diff","getStatusColor","status","ACCEPTED","PASSED","WAITING","NONE","getLastTime","year","differenceInYears","Date","date","concat","month","differenceInMonths","day","differenceInDays","hour","differenceInHours","minute","differenceInMinutes","second","differenceInSeconds","getElapsedTime","getTime","floor","__webpack_exports__","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","p","toLocaleString","displayType","getTextToDate","ELAPSED_TIME","text","setText","useState","useEffect","intervalId","setInterval","clearInterval","div","tooltip","children","ref","useRef","jsxs","className","styles","module","exports"],"sourceRoot":""}