diff --git a/apps/service/eslint.config.mjs b/apps/service/eslint.config.mjs index eae7c9cf..6a3704e4 100644 --- a/apps/service/eslint.config.mjs +++ b/apps/service/eslint.config.mjs @@ -1,8 +1,19 @@ import baseConfig from '../../eslint.config.mjs'; +import { FlatCompat } from '@eslint/eslintrc'; +import { fileURLToPath } from 'url'; +import path from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); /** @type {import("eslint").FlatConfig[]} */ export default [ ...baseConfig, + ...compat.extends('next/core-web-vitals'), { rules: { 'react/react-in-jsx-scope': 'off', // Next.js에서는 불필요 diff --git a/apps/service/package.json b/apps/service/package.json index 81c5f573..df1c5302 100644 --- a/apps/service/package.json +++ b/apps/service/package.json @@ -28,6 +28,7 @@ "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", + "eslint-config-next": "^15.2.4", "openapi-typescript": "^7.6.1" } } diff --git a/apps/service/src/apis/authMiddleware.ts b/apps/service/src/apis/authMiddleware.ts index 259ff234..87fc26fb 100644 --- a/apps/service/src/apis/authMiddleware.ts +++ b/apps/service/src/apis/authMiddleware.ts @@ -1,7 +1,8 @@ 'use client'; -import { getAccessToken, setAccessToken } from '@utils'; import { Middleware } from 'openapi-fetch'; +import { getAccessToken, setAccessToken } from '@utils'; + const UNPROTECTED_ROUTES = ['/api/v1/auth/admin/login', '/api/v1/auth/oauth/social-login']; const reissueToken = async () => { diff --git a/apps/service/src/apis/client.ts b/apps/service/src/apis/client.ts index d1f33cd4..7500693d 100644 --- a/apps/service/src/apis/client.ts +++ b/apps/service/src/apis/client.ts @@ -1,7 +1,8 @@ -import { paths } from '@schema'; import createFetchClient from 'openapi-fetch'; import createClient from 'openapi-react-query'; +import { paths } from '@schema'; + export const client = createFetchClient({ baseUrl: process.env.NEXT_PUBLIC_API_BASE_URL, }); diff --git a/apps/service/src/apis/controller/auth/postKakaoLogin.ts b/apps/service/src/apis/controller/auth/postKakaoLogin.ts index 28781616..f79e80eb 100644 --- a/apps/service/src/apis/controller/auth/postKakaoLogin.ts +++ b/apps/service/src/apis/controller/auth/postKakaoLogin.ts @@ -1,7 +1,6 @@ 'use client'; import { setAccessToken, setName } from '@utils'; - import { client } from '@/apis/client'; const postKakaoAccessToken = async (code: string) => { diff --git a/apps/service/src/apis/controller/commentary/index.ts b/apps/service/src/apis/controller/commentary/index.ts index 8398e90c..b5d93fbb 100644 --- a/apps/service/src/apis/controller/commentary/index.ts +++ b/apps/service/src/apis/controller/commentary/index.ts @@ -1,3 +1,3 @@ -import getCommentary from './getCommentary'; +import useGetCommentary from './useGetCommentary'; -export { getCommentary }; +export { useGetCommentary }; diff --git a/apps/service/src/apis/controller/commentary/getCommentary.ts b/apps/service/src/apis/controller/commentary/useGetCommentary.ts similarity index 73% rename from apps/service/src/apis/controller/commentary/getCommentary.ts rename to apps/service/src/apis/controller/commentary/useGetCommentary.ts index 4268b4d0..ead38992 100644 --- a/apps/service/src/apis/controller/commentary/getCommentary.ts +++ b/apps/service/src/apis/controller/commentary/useGetCommentary.ts @@ -1,11 +1,11 @@ import { TanstackQueryClient } from '@apis'; -type GetCommentaryProps = { +type UseGetCommentaryProps = { publishId: string; problemId: string; }; -const getCommentary = ({ publishId, problemId }: GetCommentaryProps) => { +const useGetCommentary = ({ publishId, problemId }: UseGetCommentaryProps) => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/commentary', @@ -24,4 +24,4 @@ const getCommentary = ({ publishId, problemId }: GetCommentaryProps) => { ); }; -export default getCommentary; +export default useGetCommentary; diff --git a/apps/service/src/apis/controller/home/index.ts b/apps/service/src/apis/controller/home/index.ts index 4616ff03..8751c920 100644 --- a/apps/service/src/apis/controller/home/index.ts +++ b/apps/service/src/apis/controller/home/index.ts @@ -1,3 +1,3 @@ -import getHomeFeed from './getHomeFeed'; +import useGetHomeFeed from './useGetHomeFeed'; -export { getHomeFeed }; +export { useGetHomeFeed }; diff --git a/apps/service/src/apis/controller/home/getHomeFeed.ts b/apps/service/src/apis/controller/home/useGetHomeFeed.ts similarity index 77% rename from apps/service/src/apis/controller/home/getHomeFeed.ts rename to apps/service/src/apis/controller/home/useGetHomeFeed.ts index a5323c6d..91b8a2ae 100644 --- a/apps/service/src/apis/controller/home/getHomeFeed.ts +++ b/apps/service/src/apis/controller/home/useGetHomeFeed.ts @@ -1,6 +1,6 @@ import { TanstackQueryClient } from '@apis'; -const getHomeFeed = () => { +const useGetHomeFeed = () => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/home-feed', @@ -12,4 +12,4 @@ const getHomeFeed = () => { ); }; -export default getHomeFeed; +export default useGetHomeFeed; diff --git a/apps/service/src/apis/controller/problem/index.ts b/apps/service/src/apis/controller/problem/index.ts index b54f6040..8f50789c 100644 --- a/apps/service/src/apis/controller/problem/index.ts +++ b/apps/service/src/apis/controller/problem/index.ts @@ -1,15 +1,15 @@ -import getProblemAll from './getProblemAll'; -import getProblemById from './getProblemById'; -import getProblemsByPublishId from './getProblemsByPublishId'; -import getProblemThumbnail from './getProblemThumbnail'; -import getChildProblemById from './getChildProblemById'; -import getChildData from './getChildData'; +import useGetProblemAll from './useGetProblemAll'; +import useGetProblemById from './useGetProblemById'; +import useGetProblemsByPublishId from './useGetProblemsByPublishId'; +import useGetProblemThumbnail from './useGetProblemThumbnail'; +import useGetChildProblemById from './useGetChildProblemById'; +import useGetChildData from './useGetChildData'; export { - getProblemAll, - getProblemById, - getProblemsByPublishId, - getProblemThumbnail, - getChildProblemById, - getChildData, + useGetProblemAll, + useGetProblemById, + useGetProblemsByPublishId, + useGetProblemThumbnail, + useGetChildProblemById, + useGetChildData, }; diff --git a/apps/service/src/apis/controller/problem/getChildData.ts b/apps/service/src/apis/controller/problem/useGetChildData.ts similarity index 69% rename from apps/service/src/apis/controller/problem/getChildData.ts rename to apps/service/src/apis/controller/problem/useGetChildData.ts index b8751239..e2086804 100644 --- a/apps/service/src/apis/controller/problem/getChildData.ts +++ b/apps/service/src/apis/controller/problem/useGetChildData.ts @@ -1,6 +1,6 @@ -import { TanstackQueryClient } from '@/apis/client'; +import { TanstackQueryClient } from '@apis'; -const getChildData = (publishId: string, problemId: string) => { +const useGetChildData = (publishId: string, problemId: string) => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/problem/child/{publishId}/{problemId}', @@ -19,4 +19,4 @@ const getChildData = (publishId: string, problemId: string) => { ); }; -export default getChildData; +export default useGetChildData; diff --git a/apps/service/src/apis/controller/problem/getChildProblemById.ts b/apps/service/src/apis/controller/problem/useGetChildProblemById.ts similarity index 67% rename from apps/service/src/apis/controller/problem/getChildProblemById.ts rename to apps/service/src/apis/controller/problem/useGetChildProblemById.ts index 5b15bbfe..3e38ccaf 100644 --- a/apps/service/src/apis/controller/problem/getChildProblemById.ts +++ b/apps/service/src/apis/controller/problem/useGetChildProblemById.ts @@ -1,6 +1,6 @@ -import { TanstackQueryClient } from '@/apis/client'; +import { TanstackQueryClient } from '@apis'; -const getChildProblemById = (publishId: string, problemId: string, childProblemId: string) => { +const useGetChildProblemById = (publishId: string, problemId: string, childProblemId: string) => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/problem/{publishId}/{problemId}/{childProblemId}', @@ -20,4 +20,4 @@ const getChildProblemById = (publishId: string, problemId: string, childProblemI ); }; -export default getChildProblemById; +export default useGetChildProblemById; diff --git a/apps/service/src/apis/controller/problem/getProblemAll.ts b/apps/service/src/apis/controller/problem/useGetProblemAll.ts similarity index 72% rename from apps/service/src/apis/controller/problem/getProblemAll.ts rename to apps/service/src/apis/controller/problem/useGetProblemAll.ts index 0c7ca1a0..277688c0 100644 --- a/apps/service/src/apis/controller/problem/getProblemAll.ts +++ b/apps/service/src/apis/controller/problem/useGetProblemAll.ts @@ -1,11 +1,11 @@ import { TanstackQueryClient } from '@apis'; -type GetProblemAllProps = { +type useGetProblemAllProps = { year: number; month: number; }; -const getProblemAll = ({ year, month }: GetProblemAllProps) => { +const useGetProblemAll = ({ year, month }: useGetProblemAllProps) => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/problem/all/{year}/{month}', @@ -24,4 +24,4 @@ const getProblemAll = ({ year, month }: GetProblemAllProps) => { ); }; -export default getProblemAll; +export default useGetProblemAll; diff --git a/apps/service/src/apis/controller/problem/getProblemById.ts b/apps/service/src/apis/controller/problem/useGetProblemById.ts similarity index 77% rename from apps/service/src/apis/controller/problem/getProblemById.ts rename to apps/service/src/apis/controller/problem/useGetProblemById.ts index b73d70d3..2aa17c83 100644 --- a/apps/service/src/apis/controller/problem/getProblemById.ts +++ b/apps/service/src/apis/controller/problem/useGetProblemById.ts @@ -1,6 +1,6 @@ import { TanstackQueryClient } from '@apis'; -const getProblemById = (publishId: string, problemId: string) => { +const useGetProblemById = (publishId: string, problemId: string) => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/problem/{publishId}/{problemId}', @@ -19,4 +19,4 @@ const getProblemById = (publishId: string, problemId: string) => { ); }; -export default getProblemById; +export default useGetProblemById; diff --git a/apps/service/src/apis/controller/problem/getProblemThumbnail.ts b/apps/service/src/apis/controller/problem/useGetProblemThumbnail.ts similarity index 76% rename from apps/service/src/apis/controller/problem/getProblemThumbnail.ts rename to apps/service/src/apis/controller/problem/useGetProblemThumbnail.ts index cc9fd7bd..86109a2f 100644 --- a/apps/service/src/apis/controller/problem/getProblemThumbnail.ts +++ b/apps/service/src/apis/controller/problem/useGetProblemThumbnail.ts @@ -1,6 +1,6 @@ import { TanstackQueryClient } from '@apis'; -const getProblemThumbnail = (publishId: string, problemId: string) => { +const useGetProblemThumbnail = (publishId: string, problemId: string) => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/problem/thumbnail/{publishId}/{problemId}', @@ -19,4 +19,4 @@ const getProblemThumbnail = (publishId: string, problemId: string) => { ); }; -export default getProblemThumbnail; +export default useGetProblemThumbnail; diff --git a/apps/service/src/apis/controller/problem/getProblemsByPublishId.ts b/apps/service/src/apis/controller/problem/useGetProblemsByPublishId.ts similarity index 75% rename from apps/service/src/apis/controller/problem/getProblemsByPublishId.ts rename to apps/service/src/apis/controller/problem/useGetProblemsByPublishId.ts index 7d919fa4..ab71e1d0 100644 --- a/apps/service/src/apis/controller/problem/getProblemsByPublishId.ts +++ b/apps/service/src/apis/controller/problem/useGetProblemsByPublishId.ts @@ -1,6 +1,6 @@ import { TanstackQueryClient } from '@apis'; -const getProblemsByPublishId = (publishId: string) => { +const useGetProblemsByPublishId = (publishId: string) => { return TanstackQueryClient.useQuery( 'get', '/api/v1/client/problem/{publishId}', @@ -18,4 +18,4 @@ const getProblemsByPublishId = (publishId: string) => { ); }; -export default getProblemsByPublishId; +export default useGetProblemsByPublishId; diff --git a/apps/service/src/app/(home)/page.tsx b/apps/service/src/app/(home)/page.tsx index ee8f383d..81864b0d 100644 --- a/apps/service/src/app/(home)/page.tsx +++ b/apps/service/src/app/(home)/page.tsx @@ -1,12 +1,12 @@ 'use client'; import { useRouter } from 'next/navigation'; +import dayjs from 'dayjs'; + import { Button } from '@components'; import { IcCalendar } from '@svg'; -import { getHomeFeed } from '@apis'; -import dayjs from 'dayjs'; +import { useGetHomeFeed } from '@apis'; import { DailyProgress } from '@types'; import { useTrackEvent } from '@hooks'; - import { GuideButton, HomeHeader, @@ -18,7 +18,7 @@ import { const Page = () => { const router = useRouter(); const { trackEvent } = useTrackEvent(); - const { data } = getHomeFeed(); + const { data } = useGetHomeFeed(); const homeFeedData = data?.data; const dailyProgresses = homeFeedData?.dailyProgresses; diff --git a/apps/service/src/app/@modal/(.)comming-soon-modal/page.tsx b/apps/service/src/app/@modal/(.)comming-soon-modal/page.tsx index e0605706..734c8154 100644 --- a/apps/service/src/app/@modal/(.)comming-soon-modal/page.tsx +++ b/apps/service/src/app/@modal/(.)comming-soon-modal/page.tsx @@ -1,15 +1,16 @@ 'use client'; -import { BaseModalTemplate, RouteModal } from '@components'; import { useRouter } from 'next/navigation'; -const page = () => { +import { BaseModalTemplate, RouteModal } from '@components'; + +const Page = () => { const router = useRouter(); return ( - + router.back()}> @@ -21,4 +22,4 @@ const page = () => { ); }; -export default page; +export default Page; diff --git a/apps/service/src/app/@modal/(.)image-modal/page.tsx b/apps/service/src/app/@modal/(.)image-modal/page.tsx index ef8cf4d2..752d18d7 100644 --- a/apps/service/src/app/@modal/(.)image-modal/page.tsx +++ b/apps/service/src/app/@modal/(.)image-modal/page.tsx @@ -1,9 +1,10 @@ 'use client'; -import { RouteModal } from '@components'; import Image from 'next/image'; import { useSearchParams } from 'next/navigation'; -const page = () => { +import { RouteModal } from '@components'; + +const Page = () => { const searchParams = useSearchParams(); const imageUrl = searchParams.get('imageUrl'); @@ -22,4 +23,4 @@ const page = () => { ); }; -export default page; +export default Page; diff --git a/apps/service/src/app/@modal/(.)login-modal/page.tsx b/apps/service/src/app/@modal/(.)login-modal/page.tsx index 4c060f3a..47ce5ff4 100644 --- a/apps/service/src/app/@modal/(.)login-modal/page.tsx +++ b/apps/service/src/app/@modal/(.)login-modal/page.tsx @@ -1,8 +1,9 @@ 'use client'; -import { RouteModal, TwoButtonModalTemplate } from '@components'; import { useRouter } from 'next/navigation'; -const page = () => { +import { RouteModal, TwoButtonModalTemplate } from '@components'; + +const Page = () => { const router = useRouter(); return ( @@ -22,4 +23,4 @@ const page = () => { ); }; -export default page; +export default Page; diff --git a/apps/service/src/app/api/auth/callback/kakao/page.tsx b/apps/service/src/app/api/auth/callback/kakao/page.tsx index b38e51e3..d9f216cb 100644 --- a/apps/service/src/app/api/auth/callback/kakao/page.tsx +++ b/apps/service/src/app/api/auth/callback/kakao/page.tsx @@ -1,9 +1,10 @@ 'use client'; -import { postKakaoLogin } from '@apis'; import { useSearchParams } from 'next/navigation'; import { useEffect } from 'react'; +import { postKakaoLogin } from '@apis'; + const Page = () => { const searchParams = useSearchParams(); const code = searchParams.get('code'); @@ -12,7 +13,7 @@ const Page = () => { if (code) { postKakaoLogin(code); } - }, []); + }, [code]); return <>; }; diff --git a/apps/service/src/app/component/page.tsx b/apps/service/src/app/component/page.tsx index 50729630..184ac562 100644 --- a/apps/service/src/app/component/page.tsx +++ b/apps/service/src/app/component/page.tsx @@ -1,5 +1,6 @@ 'use client'; import { useState } from 'react'; + import { Button, SmallButton, @@ -14,7 +15,6 @@ import { StatusIcon, } from '@components'; import { IcSolve } from '@svg'; - import { GuideButton } from '@/components/home'; import { TabMenu } from '@/components/report'; diff --git a/apps/service/src/app/layout.tsx b/apps/service/src/app/layout.tsx index 2e43092d..dde72ff3 100644 --- a/apps/service/src/app/layout.tsx +++ b/apps/service/src/app/layout.tsx @@ -13,6 +13,9 @@ const isDevelopment = process.env.NEXT_PUBLIC_VERCEL_ENV === 'development'; export const metadata: Metadata = { + metadataBase: isDevelopment + ? new URL('http://www.dev.math-pointer.com') + : new URL('https://math-pointer.com'), title: '포인터', description: '포인터', robots: isDevelopment diff --git a/apps/service/src/app/login/page.tsx b/apps/service/src/app/login/page.tsx index 5a52ca88..16cd3c6f 100644 --- a/apps/service/src/app/login/page.tsx +++ b/apps/service/src/app/login/page.tsx @@ -1,9 +1,9 @@ 'use client'; -import { useTrackEvent } from '@hooks'; -import { getAccessToken } from '@utils'; import { useEffect } from 'react'; import { useRouter } from 'next/navigation'; +import { useTrackEvent } from '@hooks'; +import { getAccessToken } from '@utils'; import { LogoLogin } from '@/assets/svg/logo'; import { KakaoButton } from '@/components/login'; @@ -24,11 +24,11 @@ const Page = () => { if (accessToken) { router.replace('/'); } - }, []); + }, [router]); return ( -
-
+
+

손해설부터 처방까지
@@ -37,7 +37,7 @@ const Page = () => {

포인터

-
+

포인터는 태블릿의 스플릿뷰를 권장해요

{/* */} diff --git a/apps/service/src/app/my-page/page.tsx b/apps/service/src/app/my-page/page.tsx index 6341b2b4..8ab7be0c 100644 --- a/apps/service/src/app/my-page/page.tsx +++ b/apps/service/src/app/my-page/page.tsx @@ -1,5 +1,4 @@ import { Header } from '@components'; - import { NameCard, SettingList } from '@/components/my-page'; const Page = () => { diff --git a/apps/service/src/app/problem/calandar/page.tsx b/apps/service/src/app/problem/calandar/page.tsx index 19a4db42..012073b5 100644 --- a/apps/service/src/app/problem/calandar/page.tsx +++ b/apps/service/src/app/problem/calandar/page.tsx @@ -1,5 +1,4 @@ import { Header } from '@components'; - import { ProblemCalandar } from '@/components/problem'; const Page = () => { diff --git a/apps/service/src/app/problem/list/[publishId]/page.tsx b/apps/service/src/app/problem/list/[publishId]/page.tsx index 186af3af..92a820bf 100644 --- a/apps/service/src/app/problem/list/[publishId]/page.tsx +++ b/apps/service/src/app/problem/list/[publishId]/page.tsx @@ -1,15 +1,15 @@ 'use client'; -import { Header } from '@components'; -import { getProblemsByPublishId } from '@apis'; import dayjs from 'dayjs'; import { useParams } from 'next/navigation'; +import { Header } from '@components'; +import { useGetProblemsByPublishId } from '@apis'; import { ProblemStatusCard } from '@/components/problem'; const Page = () => { const { publishId } = useParams<{ publishId: string }>(); - const { data } = getProblemsByPublishId(publishId); + const { data } = useGetProblemsByPublishId(publishId); const { date, problems, title } = data?.data ?? {}; const publishDate = dayjs(date).format('MM월 DD일'); diff --git a/apps/service/src/app/problem/solve/[publishId]/[problemId]/SolveButtonsClient.tsx b/apps/service/src/app/problem/solve/[publishId]/[problemId]/SolveButtonsClient.tsx index 3dcbb8cf..29904a47 100644 --- a/apps/service/src/app/problem/solve/[publishId]/[problemId]/SolveButtonsClient.tsx +++ b/apps/service/src/app/problem/solve/[publishId]/[problemId]/SolveButtonsClient.tsx @@ -1,7 +1,8 @@ 'use client'; -import { SolveButton } from '@components'; -import { getChildData, postChildProblemSubmit, postProblemSubmit } from '@apis'; import { useRouter } from 'next/navigation'; + +import { SolveButton } from '@components'; +import { useGetChildData, postChildProblemSubmit, postProblemSubmit } from '@apis'; import { useInvalidate, useTrackEvent } from '@hooks'; interface SolveButtonsClientProps { @@ -13,7 +14,7 @@ const SolveButtonsClient = ({ publishId, problemId }: SolveButtonsClientProps) = const router = useRouter(); const { invalidateAll } = useInvalidate(); const { trackEvent } = useTrackEvent(); - const { data } = getChildData(publishId, problemId); + const { data } = useGetChildData(publishId, problemId); const childProblemId = data?.data?.childProblemIds[0]; const handleClickDirect = async () => { diff --git a/apps/service/src/app/problem/solve/[publishId]/[problemId]/child-problem/[childProblemId]/page.tsx b/apps/service/src/app/problem/solve/[publishId]/[problemId]/child-problem/[childProblemId]/page.tsx index 35fa37b8..0e85036f 100644 --- a/apps/service/src/app/problem/solve/[publishId]/[problemId]/child-problem/[childProblemId]/page.tsx +++ b/apps/service/src/app/problem/solve/[publishId]/[problemId]/child-problem/[childProblemId]/page.tsx @@ -2,7 +2,9 @@ import { useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { SubmitHandler, useForm } from 'react-hook-form'; -import { getChildProblemById } from '@apis'; +import Image from 'next/image'; + +import { useGetChildProblemById } from '@apis'; import { putChildProblemSubmit, putChildProblemSkip } from '@apis'; import { AnswerInput, @@ -19,8 +21,6 @@ import { } from '@components'; import { useInvalidate, useModal, useTrackEvent } from '@hooks'; import { components } from '@schema'; -import Image from 'next/image'; - import { useChildProblemContext } from '@/hooks/problem'; type ChildProblemSubmitUpdateResponse = components['schemas']['ChildProblemSubmitUpdateResponse']; @@ -53,7 +53,7 @@ const Page = () => { const selectedAnswer = watch('answer'); // apis - const { data, isLoading } = getChildProblemById(publishId, problemId, childProblemId); + const { data, isLoading } = useGetChildProblemById(publishId, problemId, childProblemId); const { problemNumber, childProblemNumber = 1, diff --git a/apps/service/src/app/problem/solve/[publishId]/[problemId]/main-problem/page.tsx b/apps/service/src/app/problem/solve/[publishId]/[problemId]/main-problem/page.tsx index b23eeec8..d5480e52 100644 --- a/apps/service/src/app/problem/solve/[publishId]/[problemId]/main-problem/page.tsx +++ b/apps/service/src/app/problem/solve/[publishId]/[problemId]/main-problem/page.tsx @@ -2,7 +2,9 @@ import { useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { SubmitHandler, useForm } from 'react-hook-form'; -import { getProblemById, putProblemSubmit } from '@apis'; +import Image from 'next/image'; + +import { useGetProblemById, putProblemSubmit } from '@apis'; import { AnswerInput, Button, @@ -17,8 +19,6 @@ import { } from '@components'; import { useInvalidate, useModal, useTrackEvent } from '@hooks'; import { ProblemStatus } from '@types'; -import Image from 'next/image'; - import { useChildProblemContext } from '@/hooks/problem'; const statusLabel: Record = { @@ -48,7 +48,7 @@ const Page = () => { const selectedAnswer = watch('answer'); // apis - const { data, isLoading } = getProblemById(publishId, problemId); + const { data, isLoading } = useGetProblemById(publishId, problemId); const { number, diff --git a/apps/service/src/app/problem/solve/[publishId]/[problemId]/page.tsx b/apps/service/src/app/problem/solve/[publishId]/[problemId]/page.tsx index 1b84730c..1b51fd1c 100644 --- a/apps/service/src/app/problem/solve/[publishId]/[problemId]/page.tsx +++ b/apps/service/src/app/problem/solve/[publishId]/[problemId]/page.tsx @@ -1,16 +1,17 @@ 'use client'; -import { getProblemThumbnail } from '@apis'; -import { ImageContainer, ProgressHeader, TimeTag } from '@components'; import { useParams } from 'next/navigation'; import Image from 'next/image'; +import { useGetProblemThumbnail } from '@apis'; +import { ImageContainer, ProgressHeader, TimeTag } from '@components'; + import SolveButtonsClient from './SolveButtonsClient'; const Page = () => { const { publishId, problemId } = useParams<{ publishId: string; problemId: string }>(); - const { data, isLoading } = getProblemThumbnail(publishId, problemId); + const { data, isLoading } = useGetProblemThumbnail(publishId, problemId); const { number, imageUrl, recommendedMinute, recommendedSecond } = data?.data ?? {}; if (isLoading) { diff --git a/apps/service/src/app/providers.tsx b/apps/service/src/app/providers.tsx index 8e904bd9..828c16e8 100644 --- a/apps/service/src/app/providers.tsx +++ b/apps/service/src/app/providers.tsx @@ -1,9 +1,9 @@ 'use client'; -import { client } from '@apis'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import type * as React from 'react'; +import { client } from '@apis'; import authMiddleware from '@/apis/authMiddleware'; export default function Providers({ children }: { children: React.ReactNode }) { diff --git a/apps/service/src/app/report/[publishId]/[problemId]/advanced/page.tsx b/apps/service/src/app/report/[publishId]/[problemId]/advanced/page.tsx index 4673fb00..409a050b 100644 --- a/apps/service/src/app/report/[publishId]/[problemId]/advanced/page.tsx +++ b/apps/service/src/app/report/[publishId]/[problemId]/advanced/page.tsx @@ -1,9 +1,9 @@ 'use client'; -import { NavigationFooter, SmallButton, ProgressHeader, ImageContainer } from '@components'; import { useParams, useRouter } from 'next/navigation'; -import { useTrackEvent } from '@hooks'; import Image from 'next/image'; +import { NavigationFooter, SmallButton, ProgressHeader, ImageContainer } from '@components'; +import { useTrackEvent } from '@hooks'; import { useReportContext } from '@/hooks/report'; const Page = () => { @@ -44,7 +44,11 @@ const Page = () => {

한 걸음 더

- + 메인 문제 {problemNumber}번 다시 보기
diff --git a/apps/service/src/app/report/[publishId]/[problemId]/analysis/page.tsx b/apps/service/src/app/report/[publishId]/[problemId]/analysis/page.tsx index eb9a9bfd..040d904f 100644 --- a/apps/service/src/app/report/[publishId]/[problemId]/analysis/page.tsx +++ b/apps/service/src/app/report/[publishId]/[problemId]/analysis/page.tsx @@ -1,11 +1,11 @@ 'use client'; import { useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; +import Image from 'next/image'; + import { IcRight, IcThumbtack } from '@svg'; import { ImageContainer, NavigationFooter, ProgressHeader } from '@components'; import { useTrackEvent } from '@hooks'; -import Image from 'next/image'; - import { useReportContext } from '@/hooks/report'; import { TabMenu } from '@/components/report'; @@ -48,45 +48,48 @@ const Page = () => { return ( <> -
-
-

메인 문제 {problemNumber}번

-
- 정답 - - {answer} - {answerType === 'MULTIPLE_CHOICE' && '번'} - -
-
-
- - - analysis - - - handWriting +
+
+

메인 문제 {problemNumber}번

+
+ 정답 + + {answer} + {answerType === 'MULTIPLE_CHOICE' && '번'} + +
+
+
+ - - + + analysis + + + handWriting + +
+
+
-
+
문제 이미지 diff --git a/apps/service/src/components/home/ProblemSwiper/ProblemSwiper.tsx b/apps/service/src/components/home/ProblemSwiper/ProblemSwiper.tsx index c3b3a89b..4bf303db 100644 --- a/apps/service/src/components/home/ProblemSwiper/ProblemSwiper.tsx +++ b/apps/service/src/components/home/ProblemSwiper/ProblemSwiper.tsx @@ -1,9 +1,9 @@ 'use client'; import { Swiper, SwiperSlide } from 'swiper/react'; import { Pagination } from 'swiper/modules'; -import { components } from '@schema'; import dayjs from 'dayjs'; +import { components } from '@schema'; import { ProblemCard, ProblemSecretCard, ProblemEmptyCard } from '@/components/home'; import './ProblemSwiper.css'; diff --git a/apps/service/src/components/my-page/NameCard.tsx b/apps/service/src/components/my-page/NameCard.tsx index b38b673b..7435fd93 100644 --- a/apps/service/src/components/my-page/NameCard.tsx +++ b/apps/service/src/components/my-page/NameCard.tsx @@ -1,6 +1,7 @@ 'use client'; import { useEffect, useState } from 'react'; + import { getName } from '@utils'; const NameCard = () => { @@ -13,7 +14,7 @@ const NameCard = () => { return (

- {name} + {name}

{/*

고등학교 {grade}학년

*/} diff --git a/apps/service/src/components/my-page/SettingList.tsx b/apps/service/src/components/my-page/SettingList.tsx index ccd4b896..8502892e 100644 --- a/apps/service/src/components/my-page/SettingList.tsx +++ b/apps/service/src/components/my-page/SettingList.tsx @@ -1,10 +1,11 @@ 'use client'; -import { useTrackEvent } from '@hooks'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import React from 'react'; +import { useTrackEvent } from '@hooks'; + const SettingList = () => { const { trackEvent } = useTrackEvent(); const router = useRouter(); diff --git a/apps/service/src/components/problem/DayProblemCard.tsx b/apps/service/src/components/problem/DayProblemCard.tsx index 922ff304..fbb9d746 100644 --- a/apps/service/src/components/problem/DayProblemCard.tsx +++ b/apps/service/src/components/problem/DayProblemCard.tsx @@ -1,11 +1,12 @@ import dayjs from 'dayjs'; -import 'dayjs/locale/ko'; +import Link from 'next/link'; +import Image from 'next/image'; + import { Button, Divider, Tag } from '@components'; import { IcSolve } from '@svg'; import { components } from '@schema'; -import Link from 'next/link'; -import Image from 'next/image'; +import 'dayjs/locale/ko'; dayjs.locale('ko'); const answerStatusLabel = (status: string) => { @@ -54,7 +55,7 @@ const DayProblemCard = ({ dayProblemData }: DayProblemCardProps) => {
-

{`${dateFormatted} ${dayOfWeek}`}

+

{`${dateFormatted} ${dayOfWeek}`}

{progressLabel} @@ -86,7 +87,7 @@ const DayProblemCard = ({ dayProblemData }: DayProblemCardProps) => {
- diff --git a/apps/service/src/components/problem/ProblemCalandar.tsx b/apps/service/src/components/problem/ProblemCalandar.tsx index 04705296..53d054ea 100644 --- a/apps/service/src/components/problem/ProblemCalandar.tsx +++ b/apps/service/src/components/problem/ProblemCalandar.tsx @@ -1,9 +1,10 @@ 'use client'; import dayjs from 'dayjs'; import { useState } from 'react'; + import { IcMinus, IcMinusSmall, IcNextBlack, IcPrevBlack } from '@svg'; import { components } from '@schema'; -import { getProblemAll } from '@apis'; +import { useGetProblemAll } from '@apis'; import { useTrackEvent } from '@hooks'; import DayProblemCard from './DayProblemCard'; @@ -18,7 +19,7 @@ const ProblemCalandar = () => { const month = currentDay.month() + 1; // apis - const { data: publishedData } = getProblemAll({ year, month }); + const { data: publishedData } = useGetProblemAll({ year, month }); const publishedDataArray: AllProblemGetResponse[] = Array.from({ length: 32 }).map(() => ({})); (publishedData?.data ?? []).forEach((data) => { diff --git a/apps/service/src/components/problem/ProblemStatusCard.tsx b/apps/service/src/components/problem/ProblemStatusCard.tsx index 582a1520..5870aaed 100644 --- a/apps/service/src/components/problem/ProblemStatusCard.tsx +++ b/apps/service/src/components/problem/ProblemStatusCard.tsx @@ -1,11 +1,12 @@ 'use client'; +import { useRouter } from 'next/navigation'; +import React, { useState } from 'react'; + import { Button, StatusIcon, StatusTag } from '@components'; import { useTrackEvent } from '@hooks'; import { components } from '@schema'; import { IcDown, IcUp } from '@svg'; -import { useRouter } from 'next/navigation'; -import React, { useState } from 'react'; type ProblemFeedProgressesGetResponse = components['schemas']['ProblemFeedProgressesGetResponse']; diff --git a/apps/service/src/contexts/ProblemContext.tsx b/apps/service/src/contexts/ProblemContext.tsx index 33e1fdc1..bad04eb4 100644 --- a/apps/service/src/contexts/ProblemContext.tsx +++ b/apps/service/src/contexts/ProblemContext.tsx @@ -1,7 +1,8 @@ 'use client'; import { createContext, useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; -import { getChildData } from '@apis'; + +import { useGetChildData } from '@apis'; export interface ProblemContextType { childProblemLength: number; @@ -18,7 +19,7 @@ export const ProblemProvider = ({ children }: { children: React.ReactNode }) => const [step, setStep] = useState(0); // api - const { data } = getChildData(publishId, problemId); + const { data } = useGetChildData(publishId, problemId); const childData = data?.data; const { mainProblemImageUrl = '', childProblemIds = [] } = childData ?? {}; diff --git a/apps/service/src/contexts/ReportContext.tsx b/apps/service/src/contexts/ReportContext.tsx index 780e021f..4f854773 100644 --- a/apps/service/src/contexts/ReportContext.tsx +++ b/apps/service/src/contexts/ReportContext.tsx @@ -1,17 +1,18 @@ 'use client'; -import { getCommentary } from '@apis'; -import { components } from '@schema'; import { useParams } from 'next/navigation'; import { createContext } from 'react'; +import { useGetCommentary } from '@apis'; +import { components } from '@schema'; + type CommentaryGetResponse = components['schemas']['CommentaryGetResponse']; export const ReportContext = createContext(null); export const ReportProvider = ({ children }: { children: React.ReactNode }) => { const { publishId, problemId } = useParams<{ publishId: string; problemId: string }>(); - const { data: reportData } = getCommentary({ + const { data: reportData } = useGetCommentary({ publishId, problemId, }); diff --git a/apps/service/src/hooks/problem/useProblemContext.tsx b/apps/service/src/hooks/problem/useProblemContext.tsx index c967e908..1b827eaa 100644 --- a/apps/service/src/hooks/problem/useProblemContext.tsx +++ b/apps/service/src/hooks/problem/useProblemContext.tsx @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import { ProblemContext } from '@contexts'; const useProblemContext = () => { diff --git a/apps/service/src/hooks/report/useReportContext.tsx b/apps/service/src/hooks/report/useReportContext.tsx index 7a1c2982..ced9c520 100644 --- a/apps/service/src/hooks/report/useReportContext.tsx +++ b/apps/service/src/hooks/report/useReportContext.tsx @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import { ReportContext } from '@contexts'; const useReportContext = () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 200d7188..5380a6fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 10.0.1(eslint@9.19.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.19.0(jiti@2.4.2)) eslint-plugin-prettier: specifier: ^5.2.3 version: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.19.0(jiti@2.4.2)))(eslint@9.19.0(jiti@2.4.2))(prettier@3.4.2) @@ -211,6 +211,9 @@ importers: '@types/react-dom': specifier: ^19 version: 19.0.3(@types/react@19.0.8) + eslint-config-next: + specifier: ^15.2.4 + version: 15.2.4(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) openapi-typescript: specifier: ^7.6.1 version: 7.6.1(typescript@5.7.3) @@ -869,9 +872,15 @@ packages: peerDependencies: react: '>=16.8.0' + '@emnapi/core@1.4.0': + resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} + '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} @@ -1351,12 +1360,18 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@napi-rs/wasm-runtime@0.2.7': + resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} + '@next/env@15.1.4': resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==} '@next/eslint-plugin-next@15.1.6': resolution: {integrity: sha512-+slMxhTgILUntZDGNgsKEYHUvpn72WP1YTlkmEhS51vnVd7S9jEEy0n9YAMcI21vUG4akTw9voWH02lrClt/yw==} + '@next/eslint-plugin-next@15.2.4': + resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} + '@next/swc-darwin-arm64@15.1.4': resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==} engines: {node: '>= 10'} @@ -1423,6 +1438,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -1544,6 +1563,9 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@rushstack/eslint-patch@1.11.0': + resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -1889,6 +1911,9 @@ packages: resolution: {integrity: sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==} hasBin: true + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2042,6 +2067,81 @@ packages: resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-darwin-arm64@1.3.3': + resolution: {integrity: sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.3.3': + resolution: {integrity: sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + resolution: {integrity: sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + resolution: {integrity: sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + resolution: {integrity: sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + resolution: {integrity: sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + resolution: {integrity: sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + resolution: {integrity: sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + resolution: {integrity: sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + resolution: {integrity: sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + resolution: {integrity: sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + resolution: {integrity: sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + resolution: {integrity: sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + resolution: {integrity: sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + resolution: {integrity: sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==} + cpu: [x64] + os: [win32] + '@vitejs/plugin-react-swc@3.7.2': resolution: {integrity: sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==} peerDependencies: @@ -2106,6 +2206,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -2142,6 +2246,9 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -2165,6 +2272,14 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + babel-dead-code-elimination@1.0.8: resolution: {integrity: sha512-og6HQERk0Cmm+nTT4Od2wbPtgABXFMPaHACjbKLulZIFMkYyXZLkUGuAxdgpMJBrxyt/XFpSz++lNzjbcMnPkQ==} @@ -2390,6 +2505,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -2514,6 +2632,9 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.18.1: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} @@ -2583,6 +2704,15 @@ packages: engines: {node: '>=6.0'} hasBin: true + eslint-config-next@15.2.4: + resolution: {integrity: sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + eslint-config-prettier@10.0.1: resolution: {integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==} hasBin: true @@ -2598,6 +2728,19 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-typescript@3.10.0: + resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + eslint-module-utils@2.12.0: resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} @@ -2629,6 +2772,12 @@ packages: '@typescript-eslint/parser': optional: true + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + eslint-plugin-only-warn@1.1.0: resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} engines: {node: '>=6'} @@ -2746,6 +2895,14 @@ packages: fastq@1.19.0: resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -3016,6 +3173,9 @@ packages: resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} engines: {node: '>= 0.4'} + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -3202,6 +3362,13 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3942,6 +4109,9 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -3950,6 +4120,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -4062,6 +4236,10 @@ packages: tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} @@ -4240,6 +4418,9 @@ packages: resolution: {integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==} engines: {node: '>=18.12.0'} + unrs-resolver@1.3.3: + resolution: {integrity: sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==} + update-browserslist-db@1.1.2: resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true @@ -5156,11 +5337,22 @@ snapshots: react: 19.0.0 tslib: 2.8.1 + '@emnapi/core@1.4.0': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.23.1': optional: true @@ -5465,12 +5657,23 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@napi-rs/wasm-runtime@0.2.7': + dependencies: + '@emnapi/core': 1.4.0 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + '@next/env@15.1.4': {} '@next/eslint-plugin-next@15.1.6': dependencies: fast-glob: 3.3.1 + '@next/eslint-plugin-next@15.2.4': + dependencies: + fast-glob: 3.3.1 + '@next/swc-darwin-arm64@15.1.4': optional: true @@ -5513,6 +5716,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.0 + '@nolyfill/is-core-module@1.0.39': {} + '@pkgr/core@0.1.1': {} '@redocly/ajv@8.11.2': @@ -5605,6 +5810,8 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@rushstack/eslint-patch@1.11.0': {} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -5995,6 +6202,11 @@ snapshots: semver: 7.7.0 update-check: 1.5.4 + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.7 @@ -6244,6 +6456,53 @@ snapshots: '@typescript-eslint/types': 8.23.0 eslint-visitor-keys: 4.2.0 + '@unrs/resolver-binding-darwin-arm64@1.3.3': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + dependencies: + '@napi-rs/wasm-runtime': 0.2.7 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + optional: true + '@vitejs/plugin-react-swc@3.7.2(@swc/helpers@0.5.15)(vite@6.0.11(@types/node@20.17.16)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@swc/core': 1.10.12(@swc/helpers@0.5.15) @@ -6302,6 +6561,8 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.2: {} + array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.3 @@ -6368,6 +6629,8 @@ snapshots: get-intrinsic: 1.2.7 is-array-buffer: 3.0.5 + ast-types-flow@0.0.8: {} + ast-types@0.13.4: dependencies: tslib: 2.8.1 @@ -6390,6 +6653,10 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 + axe-core@4.10.3: {} + + axobject-query@4.1.0: {} + babel-dead-code-elimination@1.0.8: dependencies: '@babel/core': 7.26.7 @@ -6664,6 +6931,8 @@ snapshots: csstype@3.1.3: {} + damerau-levenshtein@1.0.8: {} + data-uri-to-buffer@6.0.2: {} data-view-buffer@1.0.2: @@ -6791,6 +7060,8 @@ snapshots: emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 @@ -6969,6 +7240,26 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-config-next@15.2.4(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3): + dependencies: + '@next/eslint-plugin-next': 15.2.4 + '@rushstack/eslint-patch': 1.11.0 + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-react: 7.37.4(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.1.0(eslint@9.19.0(jiti@2.4.2)) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + eslint-config-prettier@10.0.1(eslint@9.19.0(jiti@2.4.2)): dependencies: eslint: 9.19.0(jiti@2.4.2) @@ -6985,17 +7276,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.19.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@2.4.2)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0(supports-color@9.4.0) + eslint: 9.19.0(jiti@2.4.2) + get-tsconfig: 4.10.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.12 + unrs-resolver: 1.3.3 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.19.0(jiti@2.4.2)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.19.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.19.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.19.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7006,7 +7313,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.19.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.19.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.19.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7024,6 +7331,25 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-jsx-a11y@6.10.2(eslint@9.19.0(jiti@2.4.2)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.19.0(jiti@2.4.2) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + eslint-plugin-only-warn@1.1.0: {} eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.1(eslint@9.19.0(jiti@2.4.2)))(eslint@9.19.0(jiti@2.4.2))(prettier@3.4.2): @@ -7185,6 +7511,10 @@ snapshots: dependencies: reusify: 1.0.4 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -7500,6 +7830,10 @@ snapshots: call-bound: 1.0.3 has-tostringtag: 1.0.2 + is-bun-module@2.0.0: + dependencies: + semver: 7.7.1 + is-callable@1.2.7: {} is-core-module@2.16.1: @@ -7666,6 +8000,12 @@ snapshots: dependencies: json-buffer: 3.0.1 + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -8452,6 +8792,8 @@ snapshots: sprintf-js@1.1.3: {} + stable-hash@0.0.5: {} + streamsearch@1.1.0: {} string-width@4.2.3: @@ -8460,6 +8802,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 @@ -8577,6 +8925,11 @@ snapshots: tinycolor2@1.6.0: {} + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + tinygradient@1.1.5: dependencies: '@types/tinycolor2': 1.4.6 @@ -8759,6 +9112,24 @@ snapshots: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 + unrs-resolver@1.3.3: + optionalDependencies: + '@unrs/resolver-binding-darwin-arm64': 1.3.3 + '@unrs/resolver-binding-darwin-x64': 1.3.3 + '@unrs/resolver-binding-freebsd-x64': 1.3.3 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-arm64-musl': 1.3.3 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-s390x-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-musl': 1.3.3 + '@unrs/resolver-binding-wasm32-wasi': 1.3.3 + '@unrs/resolver-binding-win32-arm64-msvc': 1.3.3 + '@unrs/resolver-binding-win32-ia32-msvc': 1.3.3 + '@unrs/resolver-binding-win32-x64-msvc': 1.3.3 + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4