From fdc93948b1641909a4228d71c4ab657b161bb3ca Mon Sep 17 00:00:00 2001 From: S-Gihun <89789115+S-Gihun@users.noreply.github.com> Date: Mon, 12 May 2025 23:31:23 +0900 Subject: [PATCH 1/4] =?UTF-8?q?6=EC=A3=BC=EC=B0=A8=20=EB=82=B4=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week7/.gitignore | 26 + Week7/README.md | 54 + Week7/eslint.config.js | 28 + Week7/index.html | 13 + Week7/package-lock.json | 2590 +++++++++++++++++ Week7/package.json | 42 + Week7/public/vite.svg | 1 + Week7/src/App.css | 0 Week7/src/App.tsx | 12 + Week7/src/api/Get/lp.ts | 36 + Week7/src/api/Get/users.ts | 8 + Week7/src/api/Post/auth.ts | 29 + Week7/src/api/Post/upload.ts | 14 + Week7/src/api/axios-instance.ts | 121 + Week7/src/assets/react.svg | 1 + .../Buttons/GoogleLoginButton/index.tsx | 21 + .../Buttons/SignUpNextButton/index.tsx | 30 + Week7/src/components/Cards/LpCard.tsx | 46 + .../components/Cards/LpCardListSkeleton.tsx | 17 + Week7/src/components/Cards/LpCardSkeleton.tsx | 17 + Week7/src/components/Comment/CommentItem.tsx | 34 + .../Comment/CommentListSkeleton.tsx | 17 + .../src/components/Comment/CommentSection.tsx | 79 + .../components/Comment/CommentSkeleton.tsx | 12 + Week7/src/components/Divider/index.tsx | 11 + Week7/src/components/Footer/index.tsx | 9 + Week7/src/components/ImageUpLoader/index.tsx | 35 + Week7/src/components/LoadingSpinner/index.tsx | 12 + .../Login/FieldErrorMessage/index.tsx | 6 + .../src/components/Login/LoginForm/index.tsx | 62 + Week7/src/components/Navigation/index.tsx | 79 + Week7/src/components/SideBar/SideBar.tsx | 75 + Week7/src/components/SignUp/StepEmail.tsx | 30 + Week7/src/components/SignUp/StepPassword.tsx | 45 + Week7/src/components/SignUp/StepProfile.tsx | 80 + Week7/src/components/Titles/LoginTitle.tsx | 25 + Week7/src/constants/key.ts | 10 + .../src/context/TokenContext/AuthContext.tsx | 18 + .../src/context/TokenContext/AuthProvider.tsx | 86 + Week7/src/context/TokenContext/useAuth.tsx | 11 + Week7/src/enums/pagination.ts | 4 + Week7/src/hook/queries/Lp/useGetDetailLp.ts | 12 + .../hook/queries/Lp/useGetInfiniteComment.ts | 22 + .../hook/queries/Lp/useGetInfiniteLpList.ts | 22 + Week7/src/hook/queries/Lp/useGetLpList.ts | 45 + Week7/src/hook/queries/User/useGetMyInfo.ts | 13 + Week7/src/hook/useForm.ts | 59 + Week7/src/hook/useLocalStorage.ts | 29 + Week7/src/index.css | 13 + Week7/src/layout/ProtectedLayout.tsx | 38 + Week7/src/layout/root-layout.tsx | 32 + Week7/src/main.tsx | 23 + Week7/src/pages/ErrorPage.tsx | 5 + Week7/src/pages/GoogleLoginRedirectPage.tsx | 32 + Week7/src/pages/HomePage.tsx | 96 + Week7/src/pages/LoginPage.tsx | 75 + Week7/src/pages/Mypage.tsx | 33 + Week7/src/pages/SignUpPage.tsx | 119 + Week7/src/router/routePaths.ts | 14 + Week7/src/router/routes.tsx | 74 + Week7/src/types/auth.ts | 51 + Week7/src/types/common.ts | 20 + Week7/src/utils/validate.ts | 32 + Week7/src/vite-env.d.ts | 9 + Week7/tsconfig.app.json | 26 + Week7/tsconfig.json | 7 + Week7/tsconfig.node.json | 24 + Week7/vite.config.ts | 7 + Week7/yarn.lock | 1722 +++++++++++ 69 files changed, 6500 insertions(+) create mode 100644 Week7/.gitignore create mode 100644 Week7/README.md create mode 100644 Week7/eslint.config.js create mode 100644 Week7/index.html create mode 100644 Week7/package-lock.json create mode 100644 Week7/package.json create mode 100644 Week7/public/vite.svg create mode 100644 Week7/src/App.css create mode 100644 Week7/src/App.tsx create mode 100644 Week7/src/api/Get/lp.ts create mode 100644 Week7/src/api/Get/users.ts create mode 100644 Week7/src/api/Post/auth.ts create mode 100644 Week7/src/api/Post/upload.ts create mode 100644 Week7/src/api/axios-instance.ts create mode 100644 Week7/src/assets/react.svg create mode 100644 Week7/src/components/Buttons/GoogleLoginButton/index.tsx create mode 100644 Week7/src/components/Buttons/SignUpNextButton/index.tsx create mode 100644 Week7/src/components/Cards/LpCard.tsx create mode 100644 Week7/src/components/Cards/LpCardListSkeleton.tsx create mode 100644 Week7/src/components/Cards/LpCardSkeleton.tsx create mode 100644 Week7/src/components/Comment/CommentItem.tsx create mode 100644 Week7/src/components/Comment/CommentListSkeleton.tsx create mode 100644 Week7/src/components/Comment/CommentSection.tsx create mode 100644 Week7/src/components/Comment/CommentSkeleton.tsx create mode 100644 Week7/src/components/Divider/index.tsx create mode 100644 Week7/src/components/Footer/index.tsx create mode 100644 Week7/src/components/ImageUpLoader/index.tsx create mode 100644 Week7/src/components/LoadingSpinner/index.tsx create mode 100644 Week7/src/components/Login/FieldErrorMessage/index.tsx create mode 100644 Week7/src/components/Login/LoginForm/index.tsx create mode 100644 Week7/src/components/Navigation/index.tsx create mode 100644 Week7/src/components/SideBar/SideBar.tsx create mode 100644 Week7/src/components/SignUp/StepEmail.tsx create mode 100644 Week7/src/components/SignUp/StepPassword.tsx create mode 100644 Week7/src/components/SignUp/StepProfile.tsx create mode 100644 Week7/src/components/Titles/LoginTitle.tsx create mode 100644 Week7/src/constants/key.ts create mode 100644 Week7/src/context/TokenContext/AuthContext.tsx create mode 100644 Week7/src/context/TokenContext/AuthProvider.tsx create mode 100644 Week7/src/context/TokenContext/useAuth.tsx create mode 100644 Week7/src/enums/pagination.ts create mode 100644 Week7/src/hook/queries/Lp/useGetDetailLp.ts create mode 100644 Week7/src/hook/queries/Lp/useGetInfiniteComment.ts create mode 100644 Week7/src/hook/queries/Lp/useGetInfiniteLpList.ts create mode 100644 Week7/src/hook/queries/Lp/useGetLpList.ts create mode 100644 Week7/src/hook/queries/User/useGetMyInfo.ts create mode 100644 Week7/src/hook/useForm.ts create mode 100644 Week7/src/hook/useLocalStorage.ts create mode 100644 Week7/src/index.css create mode 100644 Week7/src/layout/ProtectedLayout.tsx create mode 100644 Week7/src/layout/root-layout.tsx create mode 100644 Week7/src/main.tsx create mode 100644 Week7/src/pages/ErrorPage.tsx create mode 100644 Week7/src/pages/GoogleLoginRedirectPage.tsx create mode 100644 Week7/src/pages/HomePage.tsx create mode 100644 Week7/src/pages/LoginPage.tsx create mode 100644 Week7/src/pages/Mypage.tsx create mode 100644 Week7/src/pages/SignUpPage.tsx create mode 100644 Week7/src/router/routePaths.ts create mode 100644 Week7/src/router/routes.tsx create mode 100644 Week7/src/types/auth.ts create mode 100644 Week7/src/types/common.ts create mode 100644 Week7/src/utils/validate.ts create mode 100644 Week7/src/vite-env.d.ts create mode 100644 Week7/tsconfig.app.json create mode 100644 Week7/tsconfig.json create mode 100644 Week7/tsconfig.node.json create mode 100644 Week7/vite.config.ts create mode 100644 Week7/yarn.lock diff --git a/Week7/.gitignore b/Week7/.gitignore new file mode 100644 index 00000000..50c8dda2 --- /dev/null +++ b/Week7/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env diff --git a/Week7/README.md b/Week7/README.md new file mode 100644 index 00000000..40ede56e --- /dev/null +++ b/Week7/README.md @@ -0,0 +1,54 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default tseslint.config({ + extends: [ + // Remove ...tseslint.configs.recommended and replace with this + ...tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + ...tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + ...tseslint.configs.stylisticTypeChecked, + ], + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default tseslint.config({ + plugins: { + // Add the react-x and react-dom plugins + 'react-x': reactX, + 'react-dom': reactDom, + }, + rules: { + // other rules... + // Enable its recommended typescript rules + ...reactX.configs['recommended-typescript'].rules, + ...reactDom.configs.recommended.rules, + }, +}) +``` diff --git a/Week7/eslint.config.js b/Week7/eslint.config.js new file mode 100644 index 00000000..092408a9 --- /dev/null +++ b/Week7/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/Week7/index.html b/Week7/index.html new file mode 100644 index 00000000..e4b78eae --- /dev/null +++ b/Week7/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/Week7/package-lock.json b/Week7/package-lock.json new file mode 100644 index 00000000..dcc6ffed --- /dev/null +++ b/Week7/package-lock.json @@ -0,0 +1,2590 @@ +{ + "name": "week3", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "week3", + "version": "0.0.0", + "dependencies": { + "@hookform/resolvers": "^5.0.1", + "@tailwindcss/line-clamp": "^0.4.4", + "@tailwindcss/vite": "^4.0.17", + "axios": "^1.8.4", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-hook-form": "^7.55.0", + "react-router-dom": "^7.4.1", + "tailwindcss": "^4.0.17", + "zod": "^3.24.2" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react-swc": "^3.8.0", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1", + "vite": "^6.2.0" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.12.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.0.1.tgz", + "integrity": "sha512-u/+Jp83luQNx9AdyW2fIPGY6Y7NG68eN2ZW8FOJYL+M0i4s49+refdJdOp/A9n9HFQtQs3HIDHQvX3ZET2o7YA==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", + "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@swc/core": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.13.tgz", + "integrity": "sha512-9BXdYz12Wl0zWmZ80PvtjBWeg2ncwJ9L5WJzjhN6yUTZWEV/AwAdVdJnIEp4pro3WyKmAaMxcVOSbhuuOZco5g==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.19" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.11.13", + "@swc/core-darwin-x64": "1.11.13", + "@swc/core-linux-arm-gnueabihf": "1.11.13", + "@swc/core-linux-arm64-gnu": "1.11.13", + "@swc/core-linux-arm64-musl": "1.11.13", + "@swc/core-linux-x64-gnu": "1.11.13", + "@swc/core-linux-x64-musl": "1.11.13", + "@swc/core-win32-arm64-msvc": "1.11.13", + "@swc/core-win32-ia32-msvc": "1.11.13", + "@swc/core-win32-x64-msvc": "1.11.13" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.13.tgz", + "integrity": "sha512-loSERhLaQ9XDS+5Kdx8cLe2tM1G0HLit8MfehipAcsdctpo79zrRlkW34elOf3tQoVPKUItV0b/rTuhjj8NtHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.20.tgz", + "integrity": "sha512-/rlIpxwKrhz4BIplXf6nsEHtqlhzuNN34/k3kMAXH4/lvVoA3cdq+60aqVNnyvw2uITEaCi0WV3pxBe4dQqoXQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tailwindcss/line-clamp": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz", + "integrity": "sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.17.tgz", + "integrity": "sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg==", + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "tailwindcss": "4.0.17" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.17.tgz", + "integrity": "sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.0.17", + "@tailwindcss/oxide-darwin-arm64": "4.0.17", + "@tailwindcss/oxide-darwin-x64": "4.0.17", + "@tailwindcss/oxide-freebsd-x64": "4.0.17", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.17", + "@tailwindcss/oxide-linux-arm64-gnu": "4.0.17", + "@tailwindcss/oxide-linux-arm64-musl": "4.0.17", + "@tailwindcss/oxide-linux-x64-gnu": "4.0.17", + "@tailwindcss/oxide-linux-x64-musl": "4.0.17", + "@tailwindcss/oxide-win32-arm64-msvc": "4.0.17", + "@tailwindcss/oxide-win32-x64-msvc": "4.0.17" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.17.tgz", + "integrity": "sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.17.tgz", + "integrity": "sha512-HJbBYDlDVg5cvYZzECb6xwc1IDCEM3uJi3hEZp3BjZGCNGJcTsnCpan+z+VMW0zo6gR0U6O6ElqU1OoZ74Dhww==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.0.17", + "@tailwindcss/oxide": "4.0.17", + "lightningcss": "1.29.2", + "tailwindcss": "4.0.17" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.0.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", + "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", + "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", + "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/type-utils": "8.29.0", + "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", + "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", + "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/utils": "8.29.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", + "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", + "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", + "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", + "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.29.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.1.tgz", + "integrity": "sha512-aEUPCckHDcFyxpwFm0AIkbtv6PpUp3xTb9wYGFjtABynXjCYKkWoxX0AOK9NT9XCrdk6mBBUOeHQS+RKdcNO1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/core": "^1.11.11" + }, + "peerDependencies": { + "vite": "^4 || ^5 || ^6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.55.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz", + "integrity": "sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-router": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.1.tgz", + "integrity": "sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.1.tgz", + "integrity": "sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==", + "license": "MIT", + "dependencies": { + "react-router": "7.4.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", + "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.38.0", + "@rollup/rollup-android-arm64": "4.38.0", + "@rollup/rollup-darwin-arm64": "4.38.0", + "@rollup/rollup-darwin-x64": "4.38.0", + "@rollup/rollup-freebsd-arm64": "4.38.0", + "@rollup/rollup-freebsd-x64": "4.38.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", + "@rollup/rollup-linux-arm-musleabihf": "4.38.0", + "@rollup/rollup-linux-arm64-gnu": "4.38.0", + "@rollup/rollup-linux-arm64-musl": "4.38.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-musl": "4.38.0", + "@rollup/rollup-linux-s390x-gnu": "4.38.0", + "@rollup/rollup-linux-x64-gnu": "4.38.0", + "@rollup/rollup-linux-x64-musl": "4.38.0", + "@rollup/rollup-win32-arm64-msvc": "4.38.0", + "@rollup/rollup-win32-ia32-msvc": "4.38.0", + "@rollup/rollup-win32-x64-msvc": "4.38.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwindcss": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.17.tgz", + "integrity": "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", + "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.29.0", + "@typescript-eslint/parser": "8.29.0", + "@typescript-eslint/utils": "8.29.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", + "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.24.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", + "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/Week7/package.json b/Week7/package.json new file mode 100644 index 00000000..22a1ce5f --- /dev/null +++ b/Week7/package.json @@ -0,0 +1,42 @@ +{ + "name": "week3", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@hookform/resolvers": "^5.0.1", + "@tailwindcss/line-clamp": "^0.4.4", + "@tailwindcss/vite": "^4.0.17", + "@tanstack/react-query": "^5.75.4", + "@tanstack/react-query-devtools": "^5.75.4", + "axios": "^1.8.4", + "lucide-react": "^0.487.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-hook-form": "^7.55.0", + "react-icons": "^5.5.0", + "react-intersection-observer": "^9.16.0", + "react-router-dom": "^7.4.1", + "tailwindcss": "^4.0.17", + "zod": "^3.24.2" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react-swc": "^3.8.0", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1", + "vite": "^6.2.0" + } +} diff --git a/Week7/public/vite.svg b/Week7/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/Week7/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Week7/src/App.css b/Week7/src/App.css new file mode 100644 index 00000000..e69de29b diff --git a/Week7/src/App.tsx b/Week7/src/App.tsx new file mode 100644 index 00000000..04330a1c --- /dev/null +++ b/Week7/src/App.tsx @@ -0,0 +1,12 @@ +import Router from "./router/routes"; +import "./App.css"; + +function App() { + return ( + <> + + + ); +} + +export default App; diff --git a/Week7/src/api/Get/lp.ts b/Week7/src/api/Get/lp.ts new file mode 100644 index 00000000..b07e1c01 --- /dev/null +++ b/Week7/src/api/Get/lp.ts @@ -0,0 +1,36 @@ +import { PaginationDto } from "../../types/common"; +import { + CommentDto, + ResponseLpCommentDto, + ResponseLpDetailDto, + ResponseLpListDto, +} from "../../types/lp"; +import axiosInstance from "../axios-instance"; + +// LP 목록 조회 +export const getLpList = async ( + paginationDto: PaginationDto +): Promise => { + const { data } = await axiosInstance.get("/lps", { + params: paginationDto, + }); + + return data; +}; + +// LP 상세 조회 +export const getLpDetail = async (id: number): Promise => { + const { data } = await axiosInstance.get(`/lps/${id}`); + return data; +}; + +// 댓글 목록 조회 +export const getLpComments = async ( + commentDto: CommentDto +): Promise => { + const { data } = await axiosInstance.get(`/lps/${commentDto.id}/comments`, { + params: commentDto, + }); + + return data; +}; diff --git a/Week7/src/api/Get/users.ts b/Week7/src/api/Get/users.ts new file mode 100644 index 00000000..12d7a5aa --- /dev/null +++ b/Week7/src/api/Get/users.ts @@ -0,0 +1,8 @@ +import { ResponseMyInfoDto } from "../../types/auth"; +import axiosInstance from "../axios-instance"; + +export const getMyInfo = async (): Promise => { + const { data } = await axiosInstance.get("/users/me"); + + return data; +}; diff --git a/Week7/src/api/Post/auth.ts b/Week7/src/api/Post/auth.ts new file mode 100644 index 00000000..e2b55c7b --- /dev/null +++ b/Week7/src/api/Post/auth.ts @@ -0,0 +1,29 @@ +import { + RequestSignInDto, + RequestSignUpDto, + ResponseSignInDto, + ResponseSignUpDto, +} from "../../types/auth"; +import axiosInstance from "../axios-instance"; + +export const postSignUp = async ( + body: RequestSignUpDto +): Promise => { + const { data } = await axiosInstance.post("/auth/signup", body); + + return data; +}; + +export const postSignIn = async ( + body: RequestSignInDto +): Promise => { + const { data } = await axiosInstance.post("/auth/signin", body); + + return data; +}; + +export const postSignOut = async () => { + const { data } = await axiosInstance.post("/auth/signout"); + + return data; +}; diff --git a/Week7/src/api/Post/upload.ts b/Week7/src/api/Post/upload.ts new file mode 100644 index 00000000..493abd77 --- /dev/null +++ b/Week7/src/api/Post/upload.ts @@ -0,0 +1,14 @@ +import axiosInstance from "../axios-instance"; + +export const uploadAvatar = async (file: File): Promise => { + const formData = new FormData(); + formData.append("file", file); + + const { data } = await axiosInstance.post("/uploads/public", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }); + + return data.data.imageUrl; // 이게 핵심! +}; diff --git a/Week7/src/api/axios-instance.ts b/Week7/src/api/axios-instance.ts new file mode 100644 index 00000000..a5ebae66 --- /dev/null +++ b/Week7/src/api/axios-instance.ts @@ -0,0 +1,121 @@ +import axios, { InternalAxiosRequestConfig } from "axios"; +import { LOCAL_STORAGE_KEY } from "../constants/key"; +import { useLocalStorage } from "../hook/useLocalStorage"; + +// request에 config라는 속성이 있다. +interface CustomInternalAxiosRequestConfig extends InternalAxiosRequestConfig { + _retry?: boolean; // 요청을 재시도 여부를 나타내는 플래그 +} + +// 전역 변수로 refresh 요청의 Promise를 저장해서 중복 요청을 방지한다. +let refreshPromise: Promise | null = null; + +const axiosInstance = axios.create({ + baseURL: import.meta.env.VITE_SERVER_API_URL, +}); + +// 요청 인터셉터: 모든 요청 전에 accessToeken을 Authorization 헤더에 추가한다. +axiosInstance.interceptors.request.use( + (config) => { + const token = localStorage.getItem(LOCAL_STORAGE_KEY.accessToken); + + // accessToken이 존재하면 Authorization 헤더에 Bearer 토큰 형식으로 추가한다. + if (token) { + config.headers = config.headers || {}; + config.headers.Authorization = `Bearer ${JSON.parse(token)}`; + } + + // 수정된 요청 설정을 반환한다. + return config; + }, + (error) => Promise.reject(error) +); + +// 응답 인터셉터: 401 에러가 발생 -> refresh 토큰을 통한 토큰 갱신을 처리합니다. + +axiosInstance.interceptors.response.use( + (response) => response, // + async (error) => { + const originalRequest: CustomInternalAxiosRequestConfig = error.config; + // 401 에러면서, 아직 재시도 하지 않은 요청 경우 처리 + if ( + error.response && + error.response.status === 401 && + !originalRequest._retry + // 만약 커스텀한 에러를 사용하고 있다면, 아래와 같이 추가할 수 있습니다. + // error.reponse.errorCode === "AUTH_001" && error.response.errorCode === "TokenExpired" + // 이런 느낌으로도 가능하다 + ) { + // refresh 엔드포인트 401 에러가 발생한 경우 (Unauthorized), 중복 재시도 방지를 위해 로그아웃 처리 + if (originalRequest.url === "/auth/refresh") { + const { removeItem: removeAccessToken } = useLocalStorage( + LOCAL_STORAGE_KEY.accessToken + ); + const { removeItem: removeRefreshToken } = useLocalStorage( + LOCAL_STORAGE_KEY.refreshToken + ); + removeAccessToken(); + removeRefreshToken(); + window.location.href = "/login"; + return Promise.reject(error); + } + // 재시도 플래그 설정 ( 무한 루프 방지 ) + originalRequest._retry = true; + + // 이미 refresh 요청이 진행중이면, 그 Promise를 재사용합니다. + if (!refreshPromise) { + // refresh 요청 실행 후, 프로미스를 전역 변수에 할당. + refreshPromise = (async () => { + const { getItem: getRefreshToken } = useLocalStorage( + LOCAL_STORAGE_KEY.refreshToken + ); + const refreshToken = getRefreshToken(); + + const { data } = await axiosInstance.post("/auth/refresh", { + refresh: refreshToken, + }); + // 새 토큰이 반환 + const { setItem: setAccessToken } = useLocalStorage( + LOCAL_STORAGE_KEY.accessToken + ); + const { setItem: setRefreshToken } = useLocalStorage( + LOCAL_STORAGE_KEY.refreshToken + ); + setAccessToken(data.data.accessToken); + setRefreshToken(data.data.refreshToken); + + // 새 AccessToken을 반환하여 다른 요청들이 이것을 사용할 수 있게 함. + return data.data.accessToken; + })() + .catch((error) => { + // refresh 요청 실패 시, localStorage에서 토큰 제거 후 로그아웃 처리 + const { removeItem: removeAccessToken } = useLocalStorage( + LOCAL_STORAGE_KEY.accessToken + ); + const { removeItem: removeRefreshToken } = useLocalStorage( + LOCAL_STORAGE_KEY.refreshToken + ); + removeAccessToken(); + removeRefreshToken(); + window.location.href = "/login"; + return Promise.reject(error); + }) + .finally(() => { + // refresh 요청이 끝나면, refreshPromise를 null로 초기화 + refreshPromise = null; + }); + } + // 진행중인 refreshPromise가 해결될 때까지 기다림 + return refreshPromise.then((newAccessToken) => { + // 원본 요청의 Authorization 헤더를 새 AccessToken으로 업데이트 + originalRequest.headers.Authorization = `Bearer ${newAccessToken}`; + // 업데이트 된 원본 요청을 재시도합니다. + return axiosInstance(originalRequest); + }); + } + // 401 에러가 아닌 경우, 원본 에러를 그대로 반환 + return Promise.reject(error); + } +); + +export default axiosInstance; diff --git a/Week7/src/assets/react.svg b/Week7/src/assets/react.svg new file mode 100644 index 00000000..6c87de9b --- /dev/null +++ b/Week7/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Week7/src/components/Buttons/GoogleLoginButton/index.tsx b/Week7/src/components/Buttons/GoogleLoginButton/index.tsx new file mode 100644 index 00000000..d6c4722c --- /dev/null +++ b/Week7/src/components/Buttons/GoogleLoginButton/index.tsx @@ -0,0 +1,21 @@ +interface GoogleLoginButtonProps { + onClick: () => void; +} + +const GoogleLoginButton = ({ onClick }: GoogleLoginButtonProps) => { + return ( + + ); +}; + +export default GoogleLoginButton; diff --git a/Week7/src/components/Buttons/SignUpNextButton/index.tsx b/Week7/src/components/Buttons/SignUpNextButton/index.tsx new file mode 100644 index 00000000..4453f51b --- /dev/null +++ b/Week7/src/components/Buttons/SignUpNextButton/index.tsx @@ -0,0 +1,30 @@ +import { useFormContext } from "react-hook-form"; + +type Props = { + onNext: () => void; + fieldsToValidate: string[]; +}; + +const SignUpNextButton = ({ onNext, fieldsToValidate }: Props) => { + const { + formState: { errors }, + watch, + } = useFormContext(); + + const values = watch(); + const isInvalid = fieldsToValidate.some( + (field) => !values[field] || !!errors[field] + ); + + return ( + + ); +}; + +export default SignUpNextButton; diff --git a/Week7/src/components/Cards/LpCard.tsx b/Week7/src/components/Cards/LpCard.tsx new file mode 100644 index 00000000..75cd0d59 --- /dev/null +++ b/Week7/src/components/Cards/LpCard.tsx @@ -0,0 +1,46 @@ +import { useNavigate } from "react-router-dom"; +import { useAuth } from "../../context/TokenContext/useAuth"; +import RoutePaths from "../../router/routePaths"; + +type LpCardProps = { + id: number; + thumbnail: string; + title: string; + updatedAt: string; + likes: { id: number }[]; +}; + +const LpCard = ({ id, thumbnail, title, updatedAt, likes }: LpCardProps) => { + const navigate = useNavigate(); + const { isLoggedIn } = useAuth(); + + const handleClick = () => { + if (!isLoggedIn) { + alert("로그인 후 이용해주세요."); + navigate("/login"); + return; + } + + navigate(RoutePaths.DETAIL.replace(":id", String(id))); + }; + + return ( +
+ 앨범 커버 +
+

{title}

+

{updatedAt.slice(0, 10)}

+

❤️ {likes.length}

+
+
+ ); +}; + +export default LpCard; diff --git a/Week7/src/components/Cards/LpCardListSkeleton.tsx b/Week7/src/components/Cards/LpCardListSkeleton.tsx new file mode 100644 index 00000000..e4e31a94 --- /dev/null +++ b/Week7/src/components/Cards/LpCardListSkeleton.tsx @@ -0,0 +1,17 @@ +import LpCardSkeleton from "./LpCardSkeleton"; + +interface LpCardListSkeletonProps { + count: number; +} + +const LpCardListSkeleton = ({ count }: LpCardListSkeletonProps) => { + return ( + <> + {new Array(count).fill(0).map((_, idx) => ( + + ))} + + ); +}; + +export default LpCardListSkeleton; diff --git a/Week7/src/components/Cards/LpCardSkeleton.tsx b/Week7/src/components/Cards/LpCardSkeleton.tsx new file mode 100644 index 00000000..5d66021a --- /dev/null +++ b/Week7/src/components/Cards/LpCardSkeleton.tsx @@ -0,0 +1,17 @@ +const LpCardSkeleton = () => { + return ( +
+ {/* 이미지 영역 */} +
+ + {/* 텍스트 영역 */} +
+
+
+
+
+
+ ); +}; + +export default LpCardSkeleton; diff --git a/Week7/src/components/Comment/CommentItem.tsx b/Week7/src/components/Comment/CommentItem.tsx new file mode 100644 index 00000000..e3458709 --- /dev/null +++ b/Week7/src/components/Comment/CommentItem.tsx @@ -0,0 +1,34 @@ +import { commentDetailDto } from "../../types/lp"; + +interface CommentItemProps { + comment: commentDetailDto; +} + +const CommentItem = ({ comment }: CommentItemProps) => ( +
  • + {comment.author.name} +
    +

    {comment.author.name}

    +

    {comment.content}

    + + {new Date(comment.createdAt).toLocaleString()} + +
    + +
  • +); + +export default CommentItem; diff --git a/Week7/src/components/Comment/CommentListSkeleton.tsx b/Week7/src/components/Comment/CommentListSkeleton.tsx new file mode 100644 index 00000000..8df2aa62 --- /dev/null +++ b/Week7/src/components/Comment/CommentListSkeleton.tsx @@ -0,0 +1,17 @@ +import CommentItemSkeleton from "./CommentSkeleton"; + +interface CommentListSkeletonProps { + count: number; +} + +const CommentListSkeleton = ({ count }: CommentListSkeletonProps) => { + return ( + <> + {new Array(count).fill(0).map((_, idx) => ( + + ))} + + ); +}; + +export default CommentListSkeleton; diff --git a/Week7/src/components/Comment/CommentSection.tsx b/Week7/src/components/Comment/CommentSection.tsx new file mode 100644 index 00000000..d5ccd8bc --- /dev/null +++ b/Week7/src/components/Comment/CommentSection.tsx @@ -0,0 +1,79 @@ +// src/components/Comment/Comments.tsx +import { useState } from "react"; +import { commentDetailDto } from "../../types/lp"; +import { PAGINATION_ORDER } from "../../enums/pagination"; +import CommentItem from "./CommentItem"; + +export interface CommentsProps { + comments: commentDetailDto[]; // 댓글 전체 배열 + order: PAGINATION_ORDER; // 현재 정렬 순서 + setOrder: (o: PAGINATION_ORDER) => void; // 정렬 순서 변경 콜백 + onPost: (text: string) => void; // 댓글 등록 콜백 +} + +const Comments = ({ comments, order, setOrder, onPost }: CommentsProps) => { + const [input, setInput] = useState(""); + + return ( +
    + {/* 1. 제목 + 정렬 버튼 */} +
    +

    댓글

    +
    + + +
    +
    + + {/* 2. 입력창 + 전송 */} +
    + setInput(e.target.value)} + placeholder="댓글을 입력해주세요" + className="flex-1 bg-zinc-800 text-white placeholder-zinc-500 rounded-full px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" + /> + +
    + + {/* 3. 댓글 리스트 */} +
      + {comments.map((c) => ( + + ))} +
    +
    + ); +}; + +export default Comments; diff --git a/Week7/src/components/Comment/CommentSkeleton.tsx b/Week7/src/components/Comment/CommentSkeleton.tsx new file mode 100644 index 00000000..ae27c23c --- /dev/null +++ b/Week7/src/components/Comment/CommentSkeleton.tsx @@ -0,0 +1,12 @@ +const CommentItemSkeleton: React.FC = () => ( +
  • +
    +
    +
    +
    +
    +
    +
  • +); + +export default CommentItemSkeleton; diff --git a/Week7/src/components/Divider/index.tsx b/Week7/src/components/Divider/index.tsx new file mode 100644 index 00000000..5da01ceb --- /dev/null +++ b/Week7/src/components/Divider/index.tsx @@ -0,0 +1,11 @@ +const Divider = () => { + return ( +
    +
    + OR +
    +
    + ); +}; + +export default Divider; diff --git a/Week7/src/components/Footer/index.tsx b/Week7/src/components/Footer/index.tsx new file mode 100644 index 00000000..88605b97 --- /dev/null +++ b/Week7/src/components/Footer/index.tsx @@ -0,0 +1,9 @@ +const Footer = () => { + return ( +
    + UMC - 8th Jett +
    + ); +}; + +export default Footer; diff --git a/Week7/src/components/ImageUpLoader/index.tsx b/Week7/src/components/ImageUpLoader/index.tsx new file mode 100644 index 00000000..c52df185 --- /dev/null +++ b/Week7/src/components/ImageUpLoader/index.tsx @@ -0,0 +1,35 @@ +type ImageUploadProps = { + previewUrl: string; + onImageChange: (file: File | null) => void; +}; + +const ImageUpload = ({ previewUrl, onImageChange }: ImageUploadProps) => { + const handleChange = (e: React.ChangeEvent) => { + const file = e.target.files?.[0] ?? null; + onImageChange(file); + }; + + return ( +
    + + +
    + ); +}; + +export default ImageUpload; diff --git a/Week7/src/components/LoadingSpinner/index.tsx b/Week7/src/components/LoadingSpinner/index.tsx new file mode 100644 index 00000000..2ee15060 --- /dev/null +++ b/Week7/src/components/LoadingSpinner/index.tsx @@ -0,0 +1,12 @@ +const LoadingSpinner = () => { + return ( +
    + 로딩 중... +
    + ); +}; + +export default LoadingSpinner; diff --git a/Week7/src/components/Login/FieldErrorMessage/index.tsx b/Week7/src/components/Login/FieldErrorMessage/index.tsx new file mode 100644 index 00000000..4fa305bc --- /dev/null +++ b/Week7/src/components/Login/FieldErrorMessage/index.tsx @@ -0,0 +1,6 @@ +const FieldErrorMessage = ({ message }: { message: string }) => { + if (!message) return null; + return
    {message}
    ; +}; + +export default FieldErrorMessage; diff --git a/Week7/src/components/Login/LoginForm/index.tsx b/Week7/src/components/Login/LoginForm/index.tsx new file mode 100644 index 00000000..31263321 --- /dev/null +++ b/Week7/src/components/Login/LoginForm/index.tsx @@ -0,0 +1,62 @@ +import FieldErrorMessage from "../FieldErrorMessage"; + +type Props = { + getInputProps: (name: keyof T) => { + value: string; + onChange: ( + e: React.ChangeEvent + ) => void; + onBlur: () => void; + }; + errors: Record; + touched: Record; + isDisabled: boolean; + onSubmit: () => void; +}; + +const LoginForm = ({ + getInputProps, + errors, + touched, + isDisabled, + onSubmit, +}: Props) => { + return ( +
    + + {touched.email && } + + + {touched.password && } + + +
    + ); +}; + +export default LoginForm; diff --git a/Week7/src/components/Navigation/index.tsx b/Week7/src/components/Navigation/index.tsx new file mode 100644 index 00000000..6cfca483 --- /dev/null +++ b/Week7/src/components/Navigation/index.tsx @@ -0,0 +1,79 @@ +import { NavLink } from "react-router-dom"; +import RoutePaths from "../../router/routePaths"; +import { useAuth } from "../../context/TokenContext/useAuth"; +import { SearchIcon } from "lucide-react"; + +import { useGetMyInfo } from "../../hook/queries/User/useGetMyInfo"; + +type NavbarProps = { + onSidebarToggle: () => void; +}; + +const Navbar = ({ onSidebarToggle }: NavbarProps) => { + const { logout, isLoggedIn, accessToken } = useAuth(); + const { data } = useGetMyInfo(accessToken); + + return ( + + ); +}; + +export default Navbar; diff --git a/Week7/src/components/SideBar/SideBar.tsx b/Week7/src/components/SideBar/SideBar.tsx new file mode 100644 index 00000000..55d087dc --- /dev/null +++ b/Week7/src/components/SideBar/SideBar.tsx @@ -0,0 +1,75 @@ +import { useRef, useEffect } from "react"; +import { NavLink } from "react-router-dom"; +import RoutePaths from "../../router/routePaths"; + +type SidebarProps = { + isOpen: boolean; + onClose: () => void; +}; + +const Sidebar = ({ isOpen, onClose }: SidebarProps) => { + const sidebarRef = useRef(null); + + // 바깥 클릭 시 닫힘 처리 + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + const sidebarEl = sidebarRef.current; + const target = event.target as Node; + if ( + sidebarEl && + !sidebarEl.contains(target) && + !document.getElementById("sidebar-toggle-btn")?.contains(target) + ) { + onClose(); + } + }; + + if (isOpen) { + document.addEventListener("mousedown", handleClickOutside); + } + + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, [isOpen, onClose]); + + return ( + <> + {/* ✅ 오버레이 - 작은 화면일 때만 */} +
    + + {/* ✅ 사이드바 본체 */} +
    +
    +
    + 🔍 찾기 + 👤 마이페이지 +
    +
    + +
    +
    +
    + + ); +}; + +export default Sidebar; diff --git a/Week7/src/components/SignUp/StepEmail.tsx b/Week7/src/components/SignUp/StepEmail.tsx new file mode 100644 index 00000000..3a69a670 --- /dev/null +++ b/Week7/src/components/SignUp/StepEmail.tsx @@ -0,0 +1,30 @@ +import SignUpNextButton from "../Buttons/SignUpNextButton"; +import { StepProps } from "../../types/auth"; +import { useFormContext } from "react-hook-form"; + +const StepEmail = ({ onNext }: StepProps) => { + const { + register, + formState: { errors }, + } = useFormContext(); + return ( + <> + + {errors.email?.message && ( +
    + {String(errors.email.message)} +
    + )} + + + + ); +}; + +export default StepEmail; diff --git a/Week7/src/components/SignUp/StepPassword.tsx b/Week7/src/components/SignUp/StepPassword.tsx new file mode 100644 index 00000000..a99ea798 --- /dev/null +++ b/Week7/src/components/SignUp/StepPassword.tsx @@ -0,0 +1,45 @@ +import { useFormContext } from "react-hook-form"; +import { StepProps } from "../../types/auth"; +import SignUpNextButton from "../Buttons/SignUpNextButton"; + +const StepPassword = ({ onNext }: StepProps) => { + const { + register, + formState: { errors }, + } = useFormContext(); + return ( + <> + + {errors.password?.message && ( +
    + {String(errors.password.message)} +
    + )} + + + {errors.passwordCheck?.message && ( +
    + {String(errors.passwordCheck.message)} +
    + )} + + + ); +}; + +export default StepPassword; diff --git a/Week7/src/components/SignUp/StepProfile.tsx b/Week7/src/components/SignUp/StepProfile.tsx new file mode 100644 index 00000000..720659ae --- /dev/null +++ b/Week7/src/components/SignUp/StepProfile.tsx @@ -0,0 +1,80 @@ +import { useEffect, useState } from "react"; +import { useFormContext } from "react-hook-form"; +import ImageUpload from "../ImageUpLoader"; + +type CompleteStepProps = { + onSubmit: () => void; + isSubmitting: boolean; + onAvatarChange: (file: File | null) => void; +}; + +const StepProfile = ({ + isSubmitting, + onSubmit, + onAvatarChange, +}: CompleteStepProps) => { + const { + register, + formState: { errors }, + watch, + } = useFormContext(); + + // "name" 필드의 값을 감시합니다. + const nameValue = watch("name"); + const isNameInvalid = !nameValue || !!errors.name; + + const [imageFile, setImageFile] = useState(null); + const [previewUrl, setPreviewUrl] = useState(""); + + const handleImageChange = (file: File | null) => { + setImageFile(file); + onAvatarChange(file); + + if (file) { + const url = URL.createObjectURL(file); + setPreviewUrl(url); + } else { + setPreviewUrl(""); + } + }; + + useEffect(() => { + if (imageFile) { + const url = previewUrl; + return () => { + URL.revokeObjectURL(url); + }; + } + }, [imageFile, previewUrl]); + + return ( +
    + + + {errors.name?.message && ( +
    + {String(errors.name.message)} +
    + )} + +
    + ); +}; + +export default StepProfile; diff --git a/Week7/src/components/Titles/LoginTitle.tsx b/Week7/src/components/Titles/LoginTitle.tsx new file mode 100644 index 00000000..852f1ccb --- /dev/null +++ b/Week7/src/components/Titles/LoginTitle.tsx @@ -0,0 +1,25 @@ +import { ChevronLeft } from "lucide-react"; +import { useNavigate } from "react-router-dom"; + +type Props = { + text: string; +}; + +const LoginTitle = ({ text }: Props) => { + const navigate = useNavigate(); + + return ( +
    + + +

    {text}

    +
    + ); +}; + +export default LoginTitle; diff --git a/Week7/src/constants/key.ts b/Week7/src/constants/key.ts new file mode 100644 index 00000000..180b1836 --- /dev/null +++ b/Week7/src/constants/key.ts @@ -0,0 +1,10 @@ +export const LOCAL_STORAGE_KEY = { + accessToken: "accessToken", + refreshToken: "refreshToken", +}; + +export const QUERY_KEY = { + lps: "lps", + comment: "comment", + my: "my", +}; diff --git a/Week7/src/context/TokenContext/AuthContext.tsx b/Week7/src/context/TokenContext/AuthContext.tsx new file mode 100644 index 00000000..1a06e39c --- /dev/null +++ b/Week7/src/context/TokenContext/AuthContext.tsx @@ -0,0 +1,18 @@ +import { createContext } from "react"; +import { RequestSignInDto } from "../../types/auth"; + +interface AuthContextType { + accessToken: string | null; + refreshToken: string | null; + isLoggedIn: boolean; + login: (signInData: RequestSignInDto) => Promise; + logout: () => Promise; +} + +export const AuthContext = createContext({ + accessToken: null, + refreshToken: null, + isLoggedIn: false, + login: async () => {}, + logout: async () => {}, +}); diff --git a/Week7/src/context/TokenContext/AuthProvider.tsx b/Week7/src/context/TokenContext/AuthProvider.tsx new file mode 100644 index 00000000..fe67e781 --- /dev/null +++ b/Week7/src/context/TokenContext/AuthProvider.tsx @@ -0,0 +1,86 @@ +import { PropsWithChildren, useState } from "react"; +import { RequestSignInDto } from "../../types/auth"; +import { useLocalStorage } from "../../hook/useLocalStorage"; +import { LOCAL_STORAGE_KEY } from "../../constants/key"; +import { postSignIn, postSignOut } from "../../api/Post/auth"; +import { AuthContext } from "./AuthContext"; +import RoutePaths from "../../router/routePaths"; + +export const AuthProvider = ({ children }: PropsWithChildren) => { + const { + getItem: getAccessTokenFromStorage, + setItem: setAccessTokenInStorage, + removeItem: removeAccessTokenFromStorage, + } = useLocalStorage(LOCAL_STORAGE_KEY.accessToken); + + const { + getItem: getRefreshTokenFromStorage, + setItem: setRefreshTokenInStorage, + removeItem: removeRefreshTokenFromStorage, + } = useLocalStorage(LOCAL_STORAGE_KEY.refreshToken); + + // Lazy initalization + // useState(() => getAccessTokenFromStorage()) + // Not => useState(getAccessTokenFromStorage()) or useState(getAccessTokenFromStorage) + const [accessToken, setAccessToken] = useState(() => + getAccessTokenFromStorage() + ); + const [refreshToken, setRefreshToken] = useState(() => + getRefreshTokenFromStorage() + ); + + const isLoggedIn = !!accessToken; + + const login = async (signInData: RequestSignInDto) => { + try { + const { data } = await postSignIn(signInData); + if (data) { + const newAccessToken = data.accessToken; + const newRefreshToken = data.refreshToken; + + setAccessTokenInStorage(newAccessToken); + setRefreshTokenInStorage(newRefreshToken); + + setAccessToken(newAccessToken); + setRefreshToken(newRefreshToken); + + alert("로그인 성공"); + window.location.href = RoutePaths.MYPAGE; + } + } catch (error) { + console.error("로그인 오류", error); + alert("로그인에 실패했습니다. 다시 시도해주세요."); + } + }; + + const logout = async () => { + try { + await postSignOut(); + removeAccessTokenFromStorage(); + removeRefreshTokenFromStorage(); + + setAccessToken(null); + setRefreshToken(null); + + alert("로그아웃 성공"); + window.location.href = "/"; + } catch (error) { + console.error("로그아웃 오류", error); + alert("로그아웃에 실패했습니다. 다시 시도해주세요."); + } + }; + + return ( + + {children} + + ); +}; diff --git a/Week7/src/context/TokenContext/useAuth.tsx b/Week7/src/context/TokenContext/useAuth.tsx new file mode 100644 index 00000000..d2875917 --- /dev/null +++ b/Week7/src/context/TokenContext/useAuth.tsx @@ -0,0 +1,11 @@ +import { useContext } from "react"; +import { AuthContext } from "./AuthContext"; + +export const useAuth = () => { + const context = useContext(AuthContext); + if (!context) { + throw new Error("AuthContext를 찾을 수 없습니다."); + } + + return context; +}; diff --git a/Week7/src/enums/pagination.ts b/Week7/src/enums/pagination.ts new file mode 100644 index 00000000..4fecb1aa --- /dev/null +++ b/Week7/src/enums/pagination.ts @@ -0,0 +1,4 @@ +export enum PAGINATION_ORDER { + "asc" = "asc", + "desc" = "desc", +} diff --git a/Week7/src/hook/queries/Lp/useGetDetailLp.ts b/Week7/src/hook/queries/Lp/useGetDetailLp.ts new file mode 100644 index 00000000..66a5a781 --- /dev/null +++ b/Week7/src/hook/queries/Lp/useGetDetailLp.ts @@ -0,0 +1,12 @@ +import { useQuery } from "@tanstack/react-query"; +import { getLpDetail } from "../../../api/Get/lp"; +import { QUERY_KEY } from "../../../constants/key"; + +export function useGetLpDetail(lpId: number) { + return useQuery({ + queryKey: [QUERY_KEY.lps, lpId], + queryFn: () => getLpDetail(lpId), + staleTime: 5 * 60 * 1000, // 5분 + gcTime: 10 * 60 * 1000, // 10분 + }); +} diff --git a/Week7/src/hook/queries/Lp/useGetInfiniteComment.ts b/Week7/src/hook/queries/Lp/useGetInfiniteComment.ts new file mode 100644 index 00000000..18941f02 --- /dev/null +++ b/Week7/src/hook/queries/Lp/useGetInfiniteComment.ts @@ -0,0 +1,22 @@ +import { useInfiniteQuery } from "@tanstack/react-query"; +import { QUERY_KEY } from "../../../constants/key"; +import { getLpComments } from "../../../api/Get/lp"; +import { PAGINATION_ORDER } from "../../../enums/pagination"; + +function useGetInfiniteComment( + id: number, + limit: number, + order: PAGINATION_ORDER +) { + return useInfiniteQuery({ + queryFn: ({ pageParam }) => + getLpComments({ id, cursor: pageParam, limit, order }), + queryKey: [QUERY_KEY.comment, order], + initialPageParam: 0, + getNextPageParam: (lastPage) => { + return lastPage.data.hasNext ? lastPage.data.nextCursor : undefined; + }, + }); +} + +export default useGetInfiniteComment; diff --git a/Week7/src/hook/queries/Lp/useGetInfiniteLpList.ts b/Week7/src/hook/queries/Lp/useGetInfiniteLpList.ts new file mode 100644 index 00000000..6d546ada --- /dev/null +++ b/Week7/src/hook/queries/Lp/useGetInfiniteLpList.ts @@ -0,0 +1,22 @@ +import { useInfiniteQuery } from "@tanstack/react-query"; +import { QUERY_KEY } from "../../../constants/key"; +import { getLpList } from "../../../api/Get/lp"; +import { PAGINATION_ORDER } from "../../../enums/pagination"; + +function useGetInfiniteLpList( + limit: number, + search: string, + order: PAGINATION_ORDER +) { + return useInfiniteQuery({ + queryFn: ({ pageParam }) => + getLpList({ cursor: pageParam, limit, search, order }), + queryKey: [QUERY_KEY.lps, search, order], + initialPageParam: 0, + getNextPageParam: (lastPage) => { + return lastPage.data.hasNext ? lastPage.data.nextCursor : undefined; + }, + }); +} + +export default useGetInfiniteLpList; diff --git a/Week7/src/hook/queries/Lp/useGetLpList.ts b/Week7/src/hook/queries/Lp/useGetLpList.ts new file mode 100644 index 00000000..d5ceec2f --- /dev/null +++ b/Week7/src/hook/queries/Lp/useGetLpList.ts @@ -0,0 +1,45 @@ +import { useQuery } from "@tanstack/react-query"; +import { PaginationDto } from "../../../types/common"; +import { getLpList } from "../../../api/Get/lp"; +import { QUERY_KEY } from "../../../constants/key"; + +export function useGetLpList({ cursor, search, limit, order }: PaginationDto) { + return useQuery({ + queryKey: [QUERY_KEY.lps, search, order], + queryFn: () => + getLpList({ + cursor, + search, + limit, + order, + }), + // 데이터가 신선하다고 간주하는 시간. + // 이 시간 동안은 캐시된 데이터를 그대로 사용한다. 컴포넌트가 마운트 되거나 창에 포커스 들어오는 경우도 재요청X + // 5분동안 기존 데이터를 그대로 활용해서 네트워크 요청을 줄인다. + staleTime: 5 * 60 * 1000, // 5분 + // 사용되지 않은 (비활성 상태)인 쿼리 데이터가 캐시에 남아있는 시간 + // staleTime이 지나고 데이터가 신선하지 않더라도, 일정 시간동안 메모리에 보관. + // 그 이후에 해당 쿼리가 전혀 사용되지 않으면 gcTime이 지난 후에 제거한다. => ( Garbage Collection ) + // 예 ) 10분 동안 사용되지 않으면 해당 캐시 데이터가 삭제되어, 다시 요청 시 새 데이터를 받아오게 합니다. + gcTime: 100 * 60 * 10, // 10분 + + // 조건에 따라 쿼리를 실행 여부 제어 + // enabled: Boolean(search), + + // 1분마다 refetch + // refetchInterval: 100 * 60, + + // retry: 쿼리 요청이 실패했을 때 자동으로 재시도할 횟수를 지정합니다. + // 기본값은 3회 정도, + // retry: 3, => 3회 재시도 // 근데 app.tsx에서 defaultOptions에 retry: 3으로 설정했으므로 생략 가능 + + // iniitialData : 쿼리 실행 전 미리 제공할 초기 데이터를 설정합니다. + // 컴포너트가랜더링 될 때 빈 데이터 구조를 미리 제공해서, 로딩 전에도 안전하게 UI를 구성할 수 있게 해주는 애다. + + // 파라미터가 변경될 때 이전 데이터를 유지하여 UI 깜빡임(Flicking)을 줄여줍니다. + // ex) 페이지네이션 시 페이지 전환 사이에 이전 데이터를 보여주어 사용자 경험을 향상시킨다. + // placeholderData: keepPreviousData, // 이전 데이터를 유지합니다. 페이지네이션을 사용할 때 유용합니다. + + select: (data) => data.data.data, // 쿼리 응답에서 필요한 데이터만 선택합니다. + }); +} diff --git a/Week7/src/hook/queries/User/useGetMyInfo.ts b/Week7/src/hook/queries/User/useGetMyInfo.ts new file mode 100644 index 00000000..5e7928da --- /dev/null +++ b/Week7/src/hook/queries/User/useGetMyInfo.ts @@ -0,0 +1,13 @@ +import { useQuery } from "@tanstack/react-query"; +import { getMyInfo } from "../../../api/Get/users"; +import { QUERY_KEY } from "../../../constants/key"; + +export function useGetMyInfo(accessToken: string | null) { + return useQuery({ + queryKey: [QUERY_KEY.my], + queryFn: () => getMyInfo(), + staleTime: 5 * 60 * 1000, // 5분 + gcTime: 10 * 60 * 1000, // 10분 + enabled: !!accessToken, + }); +} diff --git a/Week7/src/hook/useForm.ts b/Week7/src/hook/useForm.ts new file mode 100644 index 00000000..18b3e82d --- /dev/null +++ b/Week7/src/hook/useForm.ts @@ -0,0 +1,59 @@ +import { ChangeEvent, useEffect, useState } from "react"; + +interface UseFormProps { + initialValue: T; // { email: '', password: '' } + + // 값이 올바른 지 검증하는 함수 + // keyof ? "email" | "password" 객체 타입의 키들을 유니언 문자열로 뽑아내는 것 + validate: (value: T) => Record; +} + +function useForm({ initialValue, validate }: UseFormProps) { + const [values, setValues] = useState(initialValue); + const [touched, setTouched] = useState>({}); + const [errors, setErrors] = useState>({}); + + // 사용자가 입력값을 바꿀 때 실행 되는 함수 + const handleChange = (name: keyof T, text: string) => { + setValues({ + ...values, + // computed property 문법 + [name]: text, + }); + }; + + // Blur 처리 함수 + const handleBlur = (name: keyof T) => { + setTouched({ + ...touched, + [name]: true, + }); + }; + + // 이메일, 패스워드 인풋 가져오기 + const getInputProps = (name: keyof T) => { + const value = values[name]; + + const onChange = ( + event: ChangeEvent + ) => { + handleChange(name, event.target.value); + }; + + const onBlur = () => { + handleBlur(name); + }; + + return { value, onChange, onBlur }; + }; + + // values가 변경될 때마다 에러 검증 로직이 실행된다. + useEffect(() => { + const newErrors = validate(values); + setErrors(newErrors); + }, [validate, values]); + + return { values, errors, touched, getInputProps }; +} + +export default useForm; diff --git a/Week7/src/hook/useLocalStorage.ts b/Week7/src/hook/useLocalStorage.ts new file mode 100644 index 00000000..4a1739e3 --- /dev/null +++ b/Week7/src/hook/useLocalStorage.ts @@ -0,0 +1,29 @@ +export const useLocalStorage = (key: string) => { + const setItem = (value: unknown) => { + try { + window.localStorage.setItem(key, JSON.stringify(value)); + } catch (error) { + console.log(error); + } + }; + + const getItem = () => { + try { + const item = window.localStorage.getItem(key); + + return item ? JSON.parse(item) : null; + } catch (error) { + console.log(error); + } + }; + + const removeItem = () => { + try { + window.localStorage.removeItem(key); + } catch (error) { + console.log(error); + } + }; + + return { setItem, getItem, removeItem }; +}; diff --git a/Week7/src/index.css b/Week7/src/index.css new file mode 100644 index 00000000..e3178a92 --- /dev/null +++ b/Week7/src/index.css @@ -0,0 +1,13 @@ +@import "tailwindcss"; + +@keyframes spin-slow { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.animate-spin-slow { + animation: spin-slow 10s linear infinite; +} diff --git a/Week7/src/layout/ProtectedLayout.tsx b/Week7/src/layout/ProtectedLayout.tsx new file mode 100644 index 00000000..9d9b86b9 --- /dev/null +++ b/Week7/src/layout/ProtectedLayout.tsx @@ -0,0 +1,38 @@ +import { Navigate, Outlet } from "react-router-dom"; +import { useAuth } from "../context/TokenContext/useAuth"; +import Navbar from "../components/Navigation"; +import Footer from "../components/Footer"; +import RoutePaths from "../router/routePaths"; +import { useState } from "react"; +import Sidebar from "../components/SideBar/SideBar"; + +const ProtectedLayout = () => { + const { isLoggedIn } = useAuth(); + const [isOpen, setIsOpen] = useState(true); + + if (!isLoggedIn) { + return ; + } + + return ( +
    + {/* 상단 네비게이션 바 */} + setIsOpen(!isOpen)} /> + + {/* 하단 전체 영역: 사이드바 + 메인 콘텐츠 */} +
    + {/* 왼쪽 사이드바 */} + setIsOpen(false)} /> + + {/* 메인 콘텐츠 */} +
    + +
    +
    + +
    +
    + ); +}; + +export default ProtectedLayout; diff --git a/Week7/src/layout/root-layout.tsx b/Week7/src/layout/root-layout.tsx new file mode 100644 index 00000000..e6a53192 --- /dev/null +++ b/Week7/src/layout/root-layout.tsx @@ -0,0 +1,32 @@ +import { Outlet } from "react-router-dom"; +import Navbar from "../components/Navigation"; +import Footer from "../components/Footer"; + +import { useState } from "react"; +import Sidebar from "../components/SideBar/SideBar"; + +const RootLayout = () => { + const [isOpen, setIsOpen] = useState(false); + + return ( +
    + {/* 상단 네비게이션 바 */} + setIsOpen(!isOpen)} /> + + {/* 하단 전체 영역: 사이드바 + 메인 콘텐츠 */} +
    + {/* 왼쪽 사이드바 */} + setIsOpen(false)} /> + + {/* 메인 콘텐츠 */} +
    + +
    +
    + +
    +
    + ); +}; + +export default RootLayout; diff --git a/Week7/src/main.tsx b/Week7/src/main.tsx new file mode 100644 index 00000000..39748fd6 --- /dev/null +++ b/Week7/src/main.tsx @@ -0,0 +1,23 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "./index.css"; +import App from "./App.tsx"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: 3, // 쿼리 요청이 실패했을 때 자동으로 재시도할 횟수를 지정합니다. + }, + }, +}); + +createRoot(document.getElementById("root")!).render( + + + + {import.meta.env.DEV && } + + +); diff --git a/Week7/src/pages/ErrorPage.tsx b/Week7/src/pages/ErrorPage.tsx new file mode 100644 index 00000000..447e1cfe --- /dev/null +++ b/Week7/src/pages/ErrorPage.tsx @@ -0,0 +1,5 @@ +const ErrorPage = () => { + return
    Error페이지
    ; +}; + +export default ErrorPage; diff --git a/Week7/src/pages/GoogleLoginRedirectPage.tsx b/Week7/src/pages/GoogleLoginRedirectPage.tsx new file mode 100644 index 00000000..b0ae972e --- /dev/null +++ b/Week7/src/pages/GoogleLoginRedirectPage.tsx @@ -0,0 +1,32 @@ +import { useEffect } from "react"; +import { useLocalStorage } from "../hook/useLocalStorage"; +import { LOCAL_STORAGE_KEY } from "../constants/key"; +import RoutePaths from "../router/routePaths"; +import LoadingSpinner from "../components/LoadingSpinner"; + +const GoogleLoginRedirectPage = () => { + const { setItem: setAccessToken } = useLocalStorage( + LOCAL_STORAGE_KEY.accessToken + ); + const { setItem: setRefreshToken } = useLocalStorage( + LOCAL_STORAGE_KEY.refreshToken + ); + useEffect(() => { + const urlParams = new URLSearchParams(window.location.search); + const accessToken = urlParams.get("accessToken"); + const refreshToken = urlParams.get("refreshToken"); + + if (accessToken) { + setAccessToken(accessToken); + setRefreshToken(refreshToken); + window.location.href = RoutePaths.MYPAGE; + } + }, [setAccessToken, setRefreshToken]); + return ( +
    + +
    + ); +}; + +export default GoogleLoginRedirectPage; diff --git a/Week7/src/pages/HomePage.tsx b/Week7/src/pages/HomePage.tsx new file mode 100644 index 00000000..6c8896d7 --- /dev/null +++ b/Week7/src/pages/HomePage.tsx @@ -0,0 +1,96 @@ +import { useEffect, useState } from "react"; +import LpCard from "../components/Cards/LpCard"; +import { PAGINATION_ORDER } from "../enums/pagination"; +import useGetInfiniteLpList from "../hook/queries/Lp/useGetInfiniteLpList"; +import { useInView } from "react-intersection-observer"; +import LoadingSpinner from "../components/LoadingSpinner"; +import LpCardListSkeleton from "../components/Cards/LpCardListSkeleton"; + +const HomePage = () => { + const [search] = useState(""); + const [sortOrder, setSortOrder] = useState< + PAGINATION_ORDER.asc | PAGINATION_ORDER.desc + >(PAGINATION_ORDER.asc); + + const { + data: infiniteData, + isFetching, + isPending, + hasNextPage, + isError, + fetchNextPage, + } = useGetInfiniteLpList(20, search, sortOrder); + + // ref, InView + // ref => 특정한 HTML 요소를 감시할 수 있다. + // inView => 그 요소가 화면에 보이면 true, 아니면 false + const { ref, inView } = useInView({ + threshold: 0, + }); + + useEffect(() => { + if (inView) { + if (!isFetching && hasNextPage) { + fetchNextPage(); + } + } + }, [inView, isFetching, hasNextPage, fetchNextPage]); + + if (isError) { + return
    에러
    ; + } + return ( + <> + {/* 정렬 버튼 */} +
    + + +
    +
    + {isPending && } + {infiniteData?.pages + ?.map((page) => page.data.data) + ?.flat() + ?.map((item) => ( + + ))} + + {isFetching && } +
    +
    + {isFetching && ( +
    + +
    + )} +
    + + ); +}; + +export default HomePage; diff --git a/Week7/src/pages/LoginPage.tsx b/Week7/src/pages/LoginPage.tsx new file mode 100644 index 00000000..15060839 --- /dev/null +++ b/Week7/src/pages/LoginPage.tsx @@ -0,0 +1,75 @@ +import { useNavigate } from "react-router-dom"; +import GoogleLoginButton from "../components/Buttons/GoogleLoginButton"; +import Divider from "../components/Divider"; +import LoginForm from "../components/Login/LoginForm"; +import LoginTitle from "../components/Titles/LoginTitle"; +import { useAuth } from "../context/TokenContext/useAuth"; +import useForm from "../hook/useForm"; + +import { UserSignInformation, validateLogin } from "../utils/validate"; +import { useEffect } from "react"; +import RoutePaths from "../router/routePaths"; + +const LoginPage = () => { + const { login, isLoggedIn } = useAuth(); + const navigate = useNavigate(); + + useEffect(() => { + if (isLoggedIn) { + navigate("/"); + } + }, [isLoggedIn, navigate]); + + const { values, errors, touched, getInputProps } = + useForm({ + initialValue: { + email: "", + password: "", + }, + validate: validateLogin, + }); + + const handleSubmit = async () => { + await login(values); + }; + + const handleGoogleLogin = () => { + window.location.href = RoutePaths.GOOGLE_LOGIN; + }; + + // 오류가 하나라도 있거나, 입력값이 비어 있으면 버튼을 비활성화 + // some -> 하나라도 해당하면 true 를 반환 + // every -> 전부가 해당해야 true 를 반환 + // Object.values = 객체의 "값들만" 배열로 반환 + // 여기선 [email 값, password 값]를 의미할듯 + const isDisabled = + Object.values(values).some((v) => v === "") || + Object.values(errors || {}).some((e) => e !== ""); + + // {...getInputProps('email')} + /* + value={} + onChange={} + onBlur={} + */ + + return ( +
    + + + + + + + +
    + ); +}; + +export default LoginPage; diff --git a/Week7/src/pages/Mypage.tsx b/Week7/src/pages/Mypage.tsx new file mode 100644 index 00000000..e5e33c75 --- /dev/null +++ b/Week7/src/pages/Mypage.tsx @@ -0,0 +1,33 @@ +import { useEffect, useState } from "react"; +import { getMyInfo } from "../api/Get/users"; +import { ResponseMyInfoDto } from "../types/auth"; + +const Mypage = () => { + const [data, setData] = useState(); + + useEffect(() => { + const getData = async () => { + const reponse = await getMyInfo(); + + console.log(reponse); + + setData(reponse); + }; + + getData(); + }, []); + + return ( +
    +
    + +
    +
    {data?.data.name}
    +
    + ); +}; + +export default Mypage; diff --git a/Week7/src/pages/SignUpPage.tsx b/Week7/src/pages/SignUpPage.tsx new file mode 100644 index 00000000..f84b9b45 --- /dev/null +++ b/Week7/src/pages/SignUpPage.tsx @@ -0,0 +1,119 @@ +import { zodResolver } from "@hookform/resolvers/zod"; +import { FormProvider, SubmitHandler, useForm } from "react-hook-form"; +import { z } from "zod"; +import { postSignUp } from "../api/Post/auth"; +import { useState } from "react"; +import StepEmail from "../components/SignUp/StepEmail"; +import StepPassword from "../components/SignUp/StepPassword"; +import StepProfile from "../components/SignUp/StepProfile"; +import { uploadAvatar } from "../api/Post/upload"; +import LoginTitle from "../components/Titles/LoginTitle"; +import GoogleLoginButton from "../components/Buttons/GoogleLoginButton"; +import Divider from "../components/Divider"; +import { useNavigate } from "react-router-dom"; +import RoutePaths from "../router/routePaths"; + +const schema = z + .object({ + email: z.string().email({ message: "올바른 이메일 형식이 아닙니다." }), + password: z + .string() + .min(8, { message: "비밀번호는 8자 이상이어야합니다." }) + .max(20, { message: "비밀번호는 20자 이하여야합니다." }), + passwordCheck: z + .string() + .min(8, { message: "비밀번호는 8자 이상이어야합니다." }) + .max(20, { message: "비밀번호는 20자 이하여야합니다." }), + name: z.string().min(1, { message: "이름을 입력해주세요." }), + }) + .refine((data) => data.password === data.passwordCheck, { + message: "비밀번호가 일치하지 않습니다.", + path: ["passwordCheck"], + }); + +export type FormFields = z.infer; + +const SignUpPage = () => { + const navigate = useNavigate(); + const [step, setStep] = useState(1); + const [avatar, setAvatar] = useState(null); + const methods = useForm({ + defaultValues: { + name: "", + email: "", + password: "", + passwordCheck: "", + }, + resolver: zodResolver(schema), + mode: "onChange", + }); + + const onSubmit: SubmitHandler = async (data) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { passwordCheck, ...rest } = data; + let avatarUrl = ""; + if (avatar) { + try { + avatarUrl = await uploadAvatar(avatar); // 이미지 업로드 → URL 받기 + } catch (e) { + console.error("이미지 업로드 실패", e); + return; + } + } + + const requestBody = { + ...rest, + avatar: avatarUrl, // 문자열 URL로 포함 + }; + + const response = await postSignUp(requestBody); + + console.log("회원가입 성공:", response); + + navigate(`${RoutePaths.LOGIN}`); + }; + + // trigger -> 유효성 검사 + const handleNext = async (fieldsToValidate: (keyof FormFields)[]) => { + const valid = await methods.trigger(fieldsToValidate); + if (valid) { + setStep((prev) => prev + 1); + } + }; + const handleGoogleLogin = () => { + window.location.href = RoutePaths.GOOGLE_LOGIN; + }; + + return ( + <> + +
    +
    + + {step === 1 && ( + <> + + + handleNext(["email"])} /> + + )} + {step === 2 && ( + handleNext(["password", "passwordCheck"])} + /> + )} + {step === 3 && ( + + )} +
    +
    +
    + + ); +}; + +export default SignUpPage; diff --git a/Week7/src/router/routePaths.ts b/Week7/src/router/routePaths.ts new file mode 100644 index 00000000..3a0aede5 --- /dev/null +++ b/Week7/src/router/routePaths.ts @@ -0,0 +1,14 @@ +const RoutePaths = Object.freeze({ + MAIN: "/", + LOGIN: "/login", + SIGNUP: "/signup", + MYPAGE: "/my", + SEARCH: "/search", + DETAIL: "/lp/:lpId", + GOOGLE_LOGIN: `${import.meta.env.VITE_SERVER_API_URL}/auth/google/login`, + GOOGLE_REDIRECT: `/v1/auth/google/redirect`, + // 기존 VITE_SERVER_API_URL 사용하지 않기때문에, v1까지 붙여줘야한다. + GOOGLE_CALLBACK: `/v1/auth/google/callback`, +}); + +export default RoutePaths; diff --git a/Week7/src/router/routes.tsx b/Week7/src/router/routes.tsx new file mode 100644 index 00000000..a767e936 --- /dev/null +++ b/Week7/src/router/routes.tsx @@ -0,0 +1,74 @@ +import RootLayout from "../layout/root-layout"; +import ErrorPage from "../pages/ErrorPage"; +import HomePage from "../pages/HomePage"; + +import { + createBrowserRouter, + RouteObject, + RouterProvider, +} from "react-router-dom"; +import RoutePaths from "./routePaths"; +import LoginPage from "../pages/LoginPage"; +import SignUpPage from "../pages/SignUpPage"; +import Mypage from "../pages/Mypage"; +import { AuthProvider } from "../context/TokenContext/AuthProvider"; +import ProtectedLayout from "../layout/ProtectedLayout"; +import GoogleLoginRedirectPage from "../pages/GoogleLoginRedirectPage"; +import LpDetailPage from "../pages/LpDetailPage"; + +// publicRoutes : 인증 없이 접근 가능한 경로 +const publicRoutes: RouteObject[] = [ + { + path: "/", + element: , + errorElement: , + children: [ + { + index: true, + element: , + }, + { + path: RoutePaths.LOGIN, + element: , + }, + { + path: RoutePaths.SIGNUP, + element: , + }, + { + path: RoutePaths.GOOGLE_CALLBACK, + element: , + }, + ], + }, +]; + +// protectedRoutes : 인증이 필요한 경로 +const protectedRoutes: RouteObject[] = [ + { + path: "/", + element: , + errorElement: , + children: [ + { + path: RoutePaths.MYPAGE, + element: , + }, + { + path: RoutePaths.DETAIL, + element: , + }, + ], + }, +]; +const router = createBrowserRouter([...publicRoutes, ...protectedRoutes]); + +const Router: React.FC = () => { + return ( + + + + ); +}; + +export default Router; diff --git a/Week7/src/types/auth.ts b/Week7/src/types/auth.ts new file mode 100644 index 00000000..f9956552 --- /dev/null +++ b/Week7/src/types/auth.ts @@ -0,0 +1,51 @@ +import { CommonResponse } from "./common"; + +// 회원가입 관련 타입 + +export type RequestSignUpDto = { + name: string; + email: string; + bio?: string; + avatar?: string; + password: string; +}; + +export type ResponseSignUpDto = CommonResponse<{ + id: number; + name: string; + email: string; + bio: string | null; + avatar: string | null; + createdAt: Date; + updatedAt: Date; +}>; + +export type StepProps = { + onNext: () => void; +}; + +// 로그인 관련 타입 + +export type RequestSignInDto = { + email: string; + password: string; +}; + +export type ResponseSignInDto = CommonResponse<{ + id: number; + name: string; + accessToken: string; + refreshToken: string; +}>; + +// 내 정보 조회 + +export type ResponseMyInfoDto = CommonResponse<{ + id: number; + name: string; + email: string; + bio: string | null; + avatar: string | null; + createdAt: Date; + updatedAt: Date; +}>; diff --git a/Week7/src/types/common.ts b/Week7/src/types/common.ts new file mode 100644 index 00000000..c53b31bc --- /dev/null +++ b/Week7/src/types/common.ts @@ -0,0 +1,20 @@ +import { PAGINATION_ORDER } from "../enums/pagination"; + +export type CommonResponse = { + status: boolean; + statusCode: number; + message: string; + data: T; +}; + +export type CursorBasedResponse = CommonResponse<{ + data: T; + nextCursor: number | null; + hasNext: boolean; +}>; +export type PaginationDto = { + cursor?: number; + limit?: number; + search?: string; + order?: PAGINATION_ORDER; +}; diff --git a/Week7/src/utils/validate.ts b/Week7/src/utils/validate.ts new file mode 100644 index 00000000..c5e04072 --- /dev/null +++ b/Week7/src/utils/validate.ts @@ -0,0 +1,32 @@ +export type UserSignInformation = { + email: string; + password: string; +}; + +function validateUser(values: UserSignInformation) { + const errors = { + email: "", + password: "", + }; + + if ( + !/^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i.test( + values.email + ) + ) { + errors.email = "올바른 이메일 형식이 아닙니다."; + } + + if (!(values.password.length >= 8 && values.password.length <= 20)) { + errors.password = "비밀번호는 8~20자 사이로 입력해주세요."; + } + + return errors; +} + +// 로그인 유효성 검사 +function validateLogin(values: UserSignInformation) { + return validateUser(values); +} + +export { validateLogin }; diff --git a/Week7/src/vite-env.d.ts b/Week7/src/vite-env.d.ts new file mode 100644 index 00000000..12a29a12 --- /dev/null +++ b/Week7/src/vite-env.d.ts @@ -0,0 +1,9 @@ +/// + +interface ImportMetaEnv { + readonly VITE_SERVER_API_URL: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/Week7/tsconfig.app.json b/Week7/tsconfig.app.json new file mode 100644 index 00000000..358ca9ba --- /dev/null +++ b/Week7/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/Week7/tsconfig.json b/Week7/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/Week7/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/Week7/tsconfig.node.json b/Week7/tsconfig.node.json new file mode 100644 index 00000000..db0becc8 --- /dev/null +++ b/Week7/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/Week7/vite.config.ts b/Week7/vite.config.ts new file mode 100644 index 00000000..3716779c --- /dev/null +++ b/Week7/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react-swc"; +import tailwindcss from "@tailwindcss/vite"; + +export default defineConfig({ + plugins: [react(), tailwindcss()], +}); diff --git a/Week7/yarn.lock b/Week7/yarn.lock new file mode 100644 index 00000000..61c2028a --- /dev/null +++ b/Week7/yarn.lock @@ -0,0 +1,1722 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@esbuild/aix-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8" + integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag== + +"@esbuild/android-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196" + integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w== + +"@esbuild/android-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee" + integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA== + +"@esbuild/android-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2" + integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg== + +"@esbuild/darwin-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz" + integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA== + +"@esbuild/darwin-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374" + integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA== + +"@esbuild/freebsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6" + integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w== + +"@esbuild/freebsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809" + integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ== + +"@esbuild/linux-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058" + integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g== + +"@esbuild/linux-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6" + integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g== + +"@esbuild/linux-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737" + integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ== + +"@esbuild/linux-loong64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a" + integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w== + +"@esbuild/linux-mips64el@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30" + integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q== + +"@esbuild/linux-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067" + integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g== + +"@esbuild/linux-riscv64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3" + integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw== + +"@esbuild/linux-s390x@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602" + integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q== + +"@esbuild/linux-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb" + integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg== + +"@esbuild/netbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac" + integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw== + +"@esbuild/netbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f" + integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg== + +"@esbuild/openbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f" + integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg== + +"@esbuild/openbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768" + integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw== + +"@esbuild/sunos-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb" + integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA== + +"@esbuild/win32-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf" + integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q== + +"@esbuild/win32-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f" + integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg== + +"@esbuild/win32-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d" + integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.5.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz" + integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.2": + version "0.19.2" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz" + integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w== + dependencies: + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz" + integrity sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ== + +"@eslint/core@^0.12.0": + version "0.12.0" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz" + integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.23.0", "@eslint/js@^9.21.0": + version "9.23.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz" + integrity sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw== + +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + +"@eslint/plugin-kit@^0.2.7": + version "0.2.7" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz" + integrity sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g== + dependencies: + "@eslint/core" "^0.12.0" + levn "^0.4.1" + +"@hookform/resolvers@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.0.1.tgz" + integrity sha512-u/+Jp83luQNx9AdyW2fIPGY6Y7NG68eN2ZW8FOJYL+M0i4s49+refdJdOp/A9n9HFQtQs3HIDHQvX3ZET2o7YA== + dependencies: + "@standard-schema/utils" "^0.3.0" + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz" + integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@rollup/rollup-android-arm-eabi@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz#6ba67cc0f3a2d7e3a208256a349c2cb2798f57be" + integrity sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg== + +"@rollup/rollup-android-arm64@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz#c8806f88fd6727d3cf144c4ffb00f40d451b6618" + integrity sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ== + +"@rollup/rollup-darwin-arm64@4.38.0": + version "4.38.0" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz" + integrity sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg== + +"@rollup/rollup-darwin-x64@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz#77ee357aeeefe3fe8bee33df18c240e391450476" + integrity sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg== + +"@rollup/rollup-freebsd-arm64@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz#ac8028c99221d1cef22788adda465077d5926911" + integrity sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA== + +"@rollup/rollup-freebsd-x64@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz#64376ff0e1541cd8677e74898782ec4935277e02" + integrity sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg== + +"@rollup/rollup-linux-arm-gnueabihf@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz#7de1584c09adcac08f90d1e500c679c428b6eb36" + integrity sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg== + +"@rollup/rollup-linux-arm-musleabihf@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz#1d5d0f28d93cdc37d60c381c6bbe649bed4960d5" + integrity sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg== + +"@rollup/rollup-linux-arm64-gnu@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz#a97f73a43a374e44bef4a9ed84899c26454831ea" + integrity sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA== + +"@rollup/rollup-linux-arm64-musl@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz#00e3b646a7976752052ebc72d005808b9e7f2801" + integrity sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ== + +"@rollup/rollup-linux-loongarch64-gnu@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz#0d6dcaa3671cf987faace4b34ab7320ee3c18b65" + integrity sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg== + +"@rollup/rollup-linux-powerpc64le-gnu@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz#54c2d7a4d86767001475f0157c408fd042f7fd8f" + integrity sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw== + +"@rollup/rollup-linux-riscv64-gnu@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz#8cb565417b29851a0c549614898bdab689f23187" + integrity sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg== + +"@rollup/rollup-linux-riscv64-musl@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz#8bc00b75fd07b15c35a54b41a5f052c01dbf925b" + integrity sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA== + +"@rollup/rollup-linux-s390x-gnu@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz#1fe4a88b97e36d64dbf1f01cfa7842d269a094cf" + integrity sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q== + +"@rollup/rollup-linux-x64-gnu@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz#11c32c463e68a86e279cda090a9405a7558f9406" + integrity sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w== + +"@rollup/rollup-linux-x64-musl@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz#520c2a8547672ec6c56a6833f6d38e9380d63dc7" + integrity sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g== + +"@rollup/rollup-win32-arm64-msvc@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz#d27ab565009357014c9f2d6393ee58bd63a63cb8" + integrity sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg== + +"@rollup/rollup-win32-ia32-msvc@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz#6c02847c60fcc7a6d74e00a60f350d079558d84d" + integrity sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA== + +"@rollup/rollup-win32-x64-msvc@4.38.0": + version "4.38.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz#38197da22c1af7b6b5d1cc7541757379193b8e83" + integrity sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw== + +"@standard-schema/utils@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz" + integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g== + +"@swc/core-darwin-arm64@1.11.13": + version "1.11.13" + resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.13.tgz" + integrity sha512-loSERhLaQ9XDS+5Kdx8cLe2tM1G0HLit8MfehipAcsdctpo79zrRlkW34elOf3tQoVPKUItV0b/rTuhjj8NtHg== + +"@swc/core-darwin-x64@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.11.13.tgz#9cad870d48ebff805e8946ddcbe3d8312182f70b" + integrity sha512-uSA4UwgsDCIysUPfPS8OrQTH2h9spO7IYFd+1NB6dJlVGUuR6jLKuMBOP1IeLeax4cGHayvkcwSJ3OvxHwgcZQ== + +"@swc/core-linux-arm-gnueabihf@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.13.tgz#51839e5a850bfa300e2c838fee8379e4dba1de78" + integrity sha512-boVtyJzS8g30iQfe8Q46W5QE/cmhKRln/7NMz/5sBP/am2Lce9NL0d05NnFwEWJp1e2AMGHFOdRr3Xg1cDiPKw== + +"@swc/core-linux-arm64-gnu@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.13.tgz#4145f1e504bdfa92604aee883d777bc8c4fba5d7" + integrity sha512-+IK0jZ84zHUaKtwpV+T+wT0qIUBnK9v2xXD03vARubKF+eUqCsIvcVHXmLpFuap62dClMrhCiwW10X3RbXNlHw== + +"@swc/core-linux-arm64-musl@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.13.tgz#b1813ae2e99e386ca16fff5af6601ac45ef57c5b" + integrity sha512-+ukuB8RHD5BHPCUjQwuLP98z+VRfu+NkKQVBcLJGgp0/+w7y0IkaxLY/aKmrAS5ofCNEGqKL+AOVyRpX1aw+XA== + +"@swc/core-linux-x64-gnu@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.13.tgz#13b89a0194c4033c01400e9c65d9c21c56a4a6cd" + integrity sha512-q9H3WI3U3dfJ34tdv60zc8oTuWvSd5fOxytyAO9Pc5M82Hic3jjWaf2xBekUg07ubnMZpyfnv+MlD+EbUI3Llw== + +"@swc/core-linux-x64-musl@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.13.tgz#0d0e5aa889dd4da69723e2287c3c1714d9bfd8aa" + integrity sha512-9aaZnnq2pLdTbAzTSzy/q8dr7Woy3aYIcQISmw1+Q2/xHJg5y80ZzbWSWKYca/hKonDMjIbGR6dp299I5J0aeA== + +"@swc/core-win32-arm64-msvc@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.13.tgz#ad7281f9467e3de09f52615afe2276a8ef738a9d" + integrity sha512-n3QZmDewkHANcoHvtwvA6yJbmS4XJf0MBMmwLZoKDZ2dOnC9D/jHiXw7JOohEuzYcpLoL5tgbqmjxa3XNo9Oow== + +"@swc/core-win32-ia32-msvc@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.13.tgz#046f6dbddb5b69a29bbaa98de104090a46088b74" + integrity sha512-wM+Nt4lc6YSJFthCx3W2dz0EwFNf++j0/2TQ0Js9QLJuIxUQAgukhNDVCDdq8TNcT0zuA399ALYbvj5lfIqG6g== + +"@swc/core-win32-x64-msvc@1.11.13": + version "1.11.13" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.13.tgz#0412620d8594a7d3e482d3e79d9e89d80f9a14c0" + integrity sha512-+X5/uW3s1L5gK7wAo0E27YaAoidJDo51dnfKSfU7gF3mlEUuWH8H1bAy5OTt2mU4eXtfsdUMEVXSwhDlLtQkuA== + +"@swc/core@^1.11.11": + version "1.11.13" + resolved "https://registry.npmjs.org/@swc/core/-/core-1.11.13.tgz" + integrity sha512-9BXdYz12Wl0zWmZ80PvtjBWeg2ncwJ9L5WJzjhN6yUTZWEV/AwAdVdJnIEp4pro3WyKmAaMxcVOSbhuuOZco5g== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.19" + optionalDependencies: + "@swc/core-darwin-arm64" "1.11.13" + "@swc/core-darwin-x64" "1.11.13" + "@swc/core-linux-arm-gnueabihf" "1.11.13" + "@swc/core-linux-arm64-gnu" "1.11.13" + "@swc/core-linux-arm64-musl" "1.11.13" + "@swc/core-linux-x64-gnu" "1.11.13" + "@swc/core-linux-x64-musl" "1.11.13" + "@swc/core-win32-arm64-msvc" "1.11.13" + "@swc/core-win32-ia32-msvc" "1.11.13" + "@swc/core-win32-x64-msvc" "1.11.13" + +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/types@^0.1.19": + version "0.1.20" + resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.20.tgz" + integrity sha512-/rlIpxwKrhz4BIplXf6nsEHtqlhzuNN34/k3kMAXH4/lvVoA3cdq+60aqVNnyvw2uITEaCi0WV3pxBe4dQqoXQ== + dependencies: + "@swc/counter" "^0.1.3" + +"@tailwindcss/line-clamp@^0.4.4": + version "0.4.4" + resolved "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz" + integrity sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g== + +"@tailwindcss/node@4.0.17": + version "4.0.17" + resolved "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.17.tgz" + integrity sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg== + dependencies: + enhanced-resolve "^5.18.1" + jiti "^2.4.2" + tailwindcss "4.0.17" + +"@tailwindcss/oxide-android-arm64@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.17.tgz#f8e1bb04c3af8923f39d3ddf3a3a52d2a398b29b" + integrity sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg== + +"@tailwindcss/oxide-darwin-arm64@4.0.17": + version "4.0.17" + resolved "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.17.tgz" + integrity sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg== + +"@tailwindcss/oxide-darwin-x64@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.17.tgz#b16698d42a29ed8e26b9b6063afceefdbe4dd9dd" + integrity sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ== + +"@tailwindcss/oxide-freebsd-x64@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.17.tgz#4b92d981ff70fb354959c3e517a25e3590f2037d" + integrity sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ== + +"@tailwindcss/oxide-linux-arm-gnueabihf@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.17.tgz#94154c6f4174b375b3bedc9fecf88e7c55072aaa" + integrity sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ== + +"@tailwindcss/oxide-linux-arm64-gnu@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.17.tgz#11614d3642ab9eb8b42a0bf28e952a833801a09b" + integrity sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g== + +"@tailwindcss/oxide-linux-arm64-musl@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.17.tgz#5dc1826d103d8082e9d3f3fe4d3180bf8cf80163" + integrity sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w== + +"@tailwindcss/oxide-linux-x64-gnu@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.17.tgz#1d50848d4b21d528f63f470ae7239db2624dc6bb" + integrity sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg== + +"@tailwindcss/oxide-linux-x64-musl@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.17.tgz#ac1d476927a89f862c67937e9369edaf6eccb592" + integrity sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw== + +"@tailwindcss/oxide-win32-arm64-msvc@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.17.tgz#f30694a6bea7f84c4b367b2af81085cb3bf569bc" + integrity sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw== + +"@tailwindcss/oxide-win32-x64-msvc@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.17.tgz#ac86a140bbe205c1285d20f6c490b3b51598fdc0" + integrity sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg== + +"@tailwindcss/oxide@4.0.17": + version "4.0.17" + resolved "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.17.tgz" + integrity sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw== + optionalDependencies: + "@tailwindcss/oxide-android-arm64" "4.0.17" + "@tailwindcss/oxide-darwin-arm64" "4.0.17" + "@tailwindcss/oxide-darwin-x64" "4.0.17" + "@tailwindcss/oxide-freebsd-x64" "4.0.17" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.0.17" + "@tailwindcss/oxide-linux-arm64-gnu" "4.0.17" + "@tailwindcss/oxide-linux-arm64-musl" "4.0.17" + "@tailwindcss/oxide-linux-x64-gnu" "4.0.17" + "@tailwindcss/oxide-linux-x64-musl" "4.0.17" + "@tailwindcss/oxide-win32-arm64-msvc" "4.0.17" + "@tailwindcss/oxide-win32-x64-msvc" "4.0.17" + +"@tailwindcss/vite@^4.0.17": + version "4.0.17" + resolved "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.17.tgz" + integrity sha512-HJbBYDlDVg5cvYZzECb6xwc1IDCEM3uJi3hEZp3BjZGCNGJcTsnCpan+z+VMW0zo6gR0U6O6ElqU1OoZ74Dhww== + dependencies: + "@tailwindcss/node" "4.0.17" + "@tailwindcss/oxide" "4.0.17" + lightningcss "1.29.2" + tailwindcss "4.0.17" + +"@tanstack/query-core@5.75.4": + version "5.75.4" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.75.4.tgz#e05f2fe4145fb5354271ad19e63eec61f6ce3012" + integrity sha512-pcqOUgWG9oGlzkfRQQMMsEFmtQu0wq81A414CtELZGq+ztVwSTAaoB3AZRAXQJs88LmNMk2YpUKuQbrvzNDyRg== + +"@tanstack/query-devtools@5.74.7": + version "5.74.7" + resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.74.7.tgz#c9b022b386ac86e6395228b5d6912e6444b3b971" + integrity sha512-nSNlfuGdnHf4yB0S+BoNYOE1o3oAH093weAYZolIHfS2stulyA/gWfSk/9H4ZFk5mAAHb5vNqAeJOmbdcGPEQw== + +"@tanstack/react-query-devtools@^5.75.4": + version "5.75.4" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.75.4.tgz#89614363d63c997ade81ade4a18e90b57512d4d8" + integrity sha512-CSJZWa316EFtLZtr6RQLAnqWb1MESzyZ7j0bMQjuhYas5FDp/3MA7G6RE4hWauqCCDsNIfIm2Rnm1zJTZVye/w== + dependencies: + "@tanstack/query-devtools" "5.74.7" + +"@tanstack/react-query@^5.75.4": + version "5.75.4" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.75.4.tgz#721e1cdf7debb110671f558dc2b6276f637554a5" + integrity sha512-Vf65pzYRkf8fk9SP1ncIZjvaXszBhtsvpf+h45Y/9kOywOrVZfBGUpCdffdsVzbmBzmz6TCFes9bM0d3pRrIsA== + dependencies: + "@tanstack/query-core" "5.75.4" + +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + +"@types/estree@1.0.7", "@types/estree@^1.0.6": + version "1.0.7" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/react-dom@^19.0.4": + version "19.0.4" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz" + integrity sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg== + +"@types/react@^19.0.10": + version "19.0.12" + resolved "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz" + integrity sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA== + dependencies: + csstype "^3.0.2" + +"@typescript-eslint/eslint-plugin@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz" + integrity sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.29.0" + "@typescript-eslint/type-utils" "8.29.0" + "@typescript-eslint/utils" "8.29.0" + "@typescript-eslint/visitor-keys" "8.29.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^2.0.1" + +"@typescript-eslint/parser@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz" + integrity sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g== + dependencies: + "@typescript-eslint/scope-manager" "8.29.0" + "@typescript-eslint/types" "8.29.0" + "@typescript-eslint/typescript-estree" "8.29.0" + "@typescript-eslint/visitor-keys" "8.29.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz" + integrity sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw== + dependencies: + "@typescript-eslint/types" "8.29.0" + "@typescript-eslint/visitor-keys" "8.29.0" + +"@typescript-eslint/type-utils@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz" + integrity sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q== + dependencies: + "@typescript-eslint/typescript-estree" "8.29.0" + "@typescript-eslint/utils" "8.29.0" + debug "^4.3.4" + ts-api-utils "^2.0.1" + +"@typescript-eslint/types@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz" + integrity sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg== + +"@typescript-eslint/typescript-estree@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz" + integrity sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow== + dependencies: + "@typescript-eslint/types" "8.29.0" + "@typescript-eslint/visitor-keys" "8.29.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.1" + +"@typescript-eslint/utils@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz" + integrity sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.29.0" + "@typescript-eslint/types" "8.29.0" + "@typescript-eslint/typescript-estree" "8.29.0" + +"@typescript-eslint/visitor-keys@8.29.0": + version "8.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz" + integrity sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg== + dependencies: + "@typescript-eslint/types" "8.29.0" + eslint-visitor-keys "^4.2.0" + +"@vitejs/plugin-react-swc@^3.8.0": + version "3.8.1" + resolved "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.1.tgz" + integrity sha512-aEUPCckHDcFyxpwFm0AIkbtv6PpUp3xTb9wYGFjtABynXjCYKkWoxX0AOK9NT9XCrdk6mBBUOeHQS+RKdcNO1A== + dependencies: + "@swc/core" "^1.11.11" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.14.0: + version "8.14.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.8.4: + version "1.8.4" + resolved "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cookie@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz" + integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +enhanced-resolve@^5.18.1: + version "5.18.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz" + integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +esbuild@^0.25.0: + version "0.25.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz" + integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.2" + "@esbuild/android-arm" "0.25.2" + "@esbuild/android-arm64" "0.25.2" + "@esbuild/android-x64" "0.25.2" + "@esbuild/darwin-arm64" "0.25.2" + "@esbuild/darwin-x64" "0.25.2" + "@esbuild/freebsd-arm64" "0.25.2" + "@esbuild/freebsd-x64" "0.25.2" + "@esbuild/linux-arm" "0.25.2" + "@esbuild/linux-arm64" "0.25.2" + "@esbuild/linux-ia32" "0.25.2" + "@esbuild/linux-loong64" "0.25.2" + "@esbuild/linux-mips64el" "0.25.2" + "@esbuild/linux-ppc64" "0.25.2" + "@esbuild/linux-riscv64" "0.25.2" + "@esbuild/linux-s390x" "0.25.2" + "@esbuild/linux-x64" "0.25.2" + "@esbuild/netbsd-arm64" "0.25.2" + "@esbuild/netbsd-x64" "0.25.2" + "@esbuild/openbsd-arm64" "0.25.2" + "@esbuild/openbsd-x64" "0.25.2" + "@esbuild/sunos-x64" "0.25.2" + "@esbuild/win32-arm64" "0.25.2" + "@esbuild/win32-ia32" "0.25.2" + "@esbuild/win32-x64" "0.25.2" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-plugin-react-hooks@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz" + integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== + +eslint-plugin-react-refresh@^0.4.19: + version "0.4.19" + resolved "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz" + integrity sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ== + +eslint-scope@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz" + integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@^9.21.0: + version "9.23.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz" + integrity sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.2" + "@eslint/config-helpers" "^0.2.0" + "@eslint/core" "^0.12.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.23.0" + "@eslint/plugin-kit" "^0.2.7" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.3.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +form-data@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^15.15.0: + version "15.15.0" + resolved "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz" + integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.2.1: + version "3.3.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jiti@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz" + integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lightningcss-darwin-arm64@1.29.2: + version "1.29.2" + resolved "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz" + integrity sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA== + +lightningcss-darwin-x64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz#891b6f9e57682d794223c33463ca66d3af3fb038" + integrity sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w== + +lightningcss-freebsd-x64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz#8a95f9ab73b2b2b0beefe1599fafa8b058938495" + integrity sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg== + +lightningcss-linux-arm-gnueabihf@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz#5c60bbf92b39d7ed51e363f7b98a7111bf5914a1" + integrity sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg== + +lightningcss-linux-arm64-gnu@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz#e73d7608c4cce034c3654e5e8b53be74846224de" + integrity sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ== + +lightningcss-linux-arm64-musl@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz#a95a18d5a909831c092e0a8d2de4b9ac1a8db151" + integrity sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ== + +lightningcss-linux-x64-gnu@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz#551ca07e565394928642edee92acc042e546cb78" + integrity sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg== + +lightningcss-linux-x64-musl@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz#2fd164554340831bce50285b57101817850dd258" + integrity sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w== + +lightningcss-win32-arm64-msvc@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz#da43ea49fafc5d2de38e016f1a8539d5eed98318" + integrity sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw== + +lightningcss-win32-x64-msvc@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz#ddefaa099a39b725b2f5bbdcb9fc718435cc9797" + integrity sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA== + +lightningcss@1.29.2: + version "1.29.2" + resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz" + integrity sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.29.2" + lightningcss-darwin-x64 "1.29.2" + lightningcss-freebsd-x64 "1.29.2" + lightningcss-linux-arm-gnueabihf "1.29.2" + lightningcss-linux-arm64-gnu "1.29.2" + lightningcss-linux-arm64-musl "1.29.2" + lightningcss-linux-x64-gnu "1.29.2" + lightningcss-linux-x64-musl "1.29.2" + lightningcss-win32-arm64-msvc "1.29.2" + lightningcss-win32-x64-msvc "1.29.2" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lucide-react@^0.487.0: + version "0.487.0" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.487.0.tgz#c18a463404e8ef106d46a7c9cceddf9fc8b9ff6b" + integrity sha512-aKqhOQ+YmFnwq8dWgGjOuLc8V1R9/c/yOd+zDY4+ohsR2Jo05lSGc3WsstYPIzcTpeosN7LoCkLReUUITvaIvw== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.8: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss@^8.5.3: + version "8.5.3" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@^19.0.0: + version "19.1.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz" + integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== + dependencies: + scheduler "^0.26.0" + +react-hook-form@^7.55.0: + version "7.55.0" + resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz" + integrity sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog== + +react-icons@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.5.0.tgz#8aa25d3543ff84231685d3331164c00299cdfaf2" + integrity sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw== + +react-intersection-observer@^9.16.0: + version "9.16.0" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.16.0.tgz#7376d54edc47293300961010844d53b273ee0fb9" + integrity sha512-w9nJSEp+DrW9KmQmeWHQyfaP6b03v+TdXynaoA964Wxt7mdR3An11z4NNCQgL4gKSK7y1ver2Fq+JKH6CWEzUA== + +react-router-dom@^7.4.1: + version "7.4.1" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.1.tgz" + integrity sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA== + dependencies: + react-router "7.4.1" + +react-router@7.4.1: + version "7.4.1" + resolved "https://registry.npmjs.org/react-router/-/react-router-7.4.1.tgz" + integrity sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg== + dependencies: + "@types/cookie" "^0.6.0" + cookie "^1.0.1" + set-cookie-parser "^2.6.0" + turbo-stream "2.4.0" + +react@^19.0.0: + version "19.1.0" + resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz" + integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rollup@^4.30.1: + version "4.38.0" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz" + integrity sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw== + dependencies: + "@types/estree" "1.0.7" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.38.0" + "@rollup/rollup-android-arm64" "4.38.0" + "@rollup/rollup-darwin-arm64" "4.38.0" + "@rollup/rollup-darwin-x64" "4.38.0" + "@rollup/rollup-freebsd-arm64" "4.38.0" + "@rollup/rollup-freebsd-x64" "4.38.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.38.0" + "@rollup/rollup-linux-arm-musleabihf" "4.38.0" + "@rollup/rollup-linux-arm64-gnu" "4.38.0" + "@rollup/rollup-linux-arm64-musl" "4.38.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.38.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.38.0" + "@rollup/rollup-linux-riscv64-gnu" "4.38.0" + "@rollup/rollup-linux-riscv64-musl" "4.38.0" + "@rollup/rollup-linux-s390x-gnu" "4.38.0" + "@rollup/rollup-linux-x64-gnu" "4.38.0" + "@rollup/rollup-linux-x64-musl" "4.38.0" + "@rollup/rollup-win32-arm64-msvc" "4.38.0" + "@rollup/rollup-win32-ia32-msvc" "4.38.0" + "@rollup/rollup-win32-x64-msvc" "4.38.0" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +scheduler@^0.26.0: + version "0.26.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz" + integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== + +semver@^7.6.0: + version "7.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + +set-cookie-parser@^2.6.0: + version "2.7.1" + resolved "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz" + integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +tailwindcss@4.0.17, tailwindcss@^4.0.17: + version "4.0.17" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.17.tgz" + integrity sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw== + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-api-utils@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + +turbo-stream@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz" + integrity sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +typescript-eslint@^8.24.1: + version "8.29.0" + resolved "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz" + integrity sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg== + dependencies: + "@typescript-eslint/eslint-plugin" "8.29.0" + "@typescript-eslint/parser" "8.29.0" + "@typescript-eslint/utils" "8.29.0" + +typescript@~5.7.2: + version "5.7.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +vite@^6.2.0: + version "6.2.4" + resolved "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz" + integrity sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw== + dependencies: + esbuild "^0.25.0" + postcss "^8.5.3" + rollup "^4.30.1" + optionalDependencies: + fsevents "~2.3.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.24.2: + version "3.24.2" + resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz" + integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== From 2c9f65940fab3dad4731b98230a13366ea776883 Mon Sep 17 00:00:00 2001 From: S-Gihun <89789115+S-Gihun@users.noreply.github.com> Date: Thu, 15 May 2025 22:11:18 +0900 Subject: [PATCH 2/4] =?UTF-8?q?7=EC=A3=BC=EC=B0=A8=20=EA=B3=BC=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week7/package.json | 1 + Week7/src/App.tsx | 2 + Week7/src/api/Delete/comment.ts | 13 + Week7/src/api/Delete/lp.ts | 21 ++ Week7/src/api/Delete/user.ts | 7 + Week7/src/api/Patch/comment.ts | 15 + Week7/src/api/Patch/lp.ts | 10 + Week7/src/api/Patch/user.ts | 10 + Week7/src/api/Post/lp.ts | 31 ++ Week7/src/assets/images/defalut_user.jpg | Bin 0 -> 137402 bytes Week7/src/assets/images/lp.png | Bin 0 -> 85850 bytes Week7/src/components/Cards/LpCard.tsx | 2 +- Week7/src/components/Comment/CommentItem.tsx | 112 +++++-- .../src/components/Comment/CommentSection.tsx | 69 +++- Week7/src/components/Forms/LpForm.tsx | 131 ++++++++ Week7/src/components/Modal/ConfirmModal.tsx | 45 +++ Week7/src/components/Modal/LpModal.tsx | 34 ++ Week7/src/components/Navigation/index.tsx | 2 +- Week7/src/components/SideBar/SideBar.tsx | 29 +- Week7/src/hook/mutations/useCreateComment.ts | 18 ++ Week7/src/hook/mutations/useCreateLp.ts | 18 ++ Week7/src/hook/mutations/useDeleteComment.ts | 17 + Week7/src/hook/mutations/useDeleteLike.ts | 89 ++++++ Week7/src/hook/mutations/useDeleteLp.ts | 17 + Week7/src/hook/mutations/usePatchComment.ts | 17 + Week7/src/hook/mutations/usePatchLp.ts | 17 + Week7/src/hook/mutations/usePatchMyInfo.ts | 56 ++++ Week7/src/hook/mutations/usePostLike.ts | 112 +++++++ Week7/src/hook/queries/Lp/useLpImageUpload.ts | 39 +++ Week7/src/pages/HomePage.tsx | 51 ++- Week7/src/pages/LoginPage.tsx | 1 - Week7/src/pages/LpDetailPage.tsx | 301 ++++++++++++++++++ Week7/src/pages/Mypage.tsx | 139 +++++++- Week7/src/types/auth.ts | 6 + Week7/src/types/lp.ts | 185 +++++++++++ Week7/yarn.lock | 15 +- 36 files changed, 1571 insertions(+), 61 deletions(-) create mode 100644 Week7/src/api/Delete/comment.ts create mode 100644 Week7/src/api/Delete/lp.ts create mode 100644 Week7/src/api/Delete/user.ts create mode 100644 Week7/src/api/Patch/comment.ts create mode 100644 Week7/src/api/Patch/lp.ts create mode 100644 Week7/src/api/Patch/user.ts create mode 100644 Week7/src/api/Post/lp.ts create mode 100644 Week7/src/assets/images/defalut_user.jpg create mode 100644 Week7/src/assets/images/lp.png create mode 100644 Week7/src/components/Forms/LpForm.tsx create mode 100644 Week7/src/components/Modal/ConfirmModal.tsx create mode 100644 Week7/src/components/Modal/LpModal.tsx create mode 100644 Week7/src/hook/mutations/useCreateComment.ts create mode 100644 Week7/src/hook/mutations/useCreateLp.ts create mode 100644 Week7/src/hook/mutations/useDeleteComment.ts create mode 100644 Week7/src/hook/mutations/useDeleteLike.ts create mode 100644 Week7/src/hook/mutations/useDeleteLp.ts create mode 100644 Week7/src/hook/mutations/usePatchComment.ts create mode 100644 Week7/src/hook/mutations/usePatchLp.ts create mode 100644 Week7/src/hook/mutations/usePatchMyInfo.ts create mode 100644 Week7/src/hook/mutations/usePostLike.ts create mode 100644 Week7/src/hook/queries/Lp/useLpImageUpload.ts create mode 100644 Week7/src/pages/LpDetailPage.tsx create mode 100644 Week7/src/types/lp.ts diff --git a/Week7/package.json b/Week7/package.json index 22a1ce5f..5037b673 100644 --- a/Week7/package.json +++ b/Week7/package.json @@ -20,6 +20,7 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "react-hook-form": "^7.55.0", + "react-hot-toast": "^2.5.2", "react-icons": "^5.5.0", "react-intersection-observer": "^9.16.0", "react-router-dom": "^7.4.1", diff --git a/Week7/src/App.tsx b/Week7/src/App.tsx index 04330a1c..ec4d31dc 100644 --- a/Week7/src/App.tsx +++ b/Week7/src/App.tsx @@ -1,9 +1,11 @@ import Router from "./router/routes"; import "./App.css"; +import { Toaster } from "react-hot-toast"; function App() { return ( <> + ); diff --git a/Week7/src/api/Delete/comment.ts b/Week7/src/api/Delete/comment.ts new file mode 100644 index 00000000..32c8817f --- /dev/null +++ b/Week7/src/api/Delete/comment.ts @@ -0,0 +1,13 @@ +import { DeleteCommentDto, ResponseDeleteComment } from "../../types/lp"; +import axiosInstance from "../axios-instance"; + +export const deleteComment = async ({ + lpId, + commentId, +}: DeleteCommentDto): Promise => { + const { data } = await axiosInstance.delete( + `/lps/${lpId}/comments/${commentId}` + ); + + return data; +}; diff --git a/Week7/src/api/Delete/lp.ts b/Week7/src/api/Delete/lp.ts new file mode 100644 index 00000000..824f6f8d --- /dev/null +++ b/Week7/src/api/Delete/lp.ts @@ -0,0 +1,21 @@ +import { + RequestLpDto, + ResponseDeleteLp, + ResponseLikeLpDto, +} from "../../types/lp"; +import axiosInstance from "../axios-instance"; + +export const deleteLike = async ({ + lpId, +}: RequestLpDto): Promise => { + const { data } = await axiosInstance.delete(`/lps/${lpId}/likes`); + return data; +}; + +export const deleteLp = async ({ + lpId, +}: RequestLpDto): Promise => { + const { data } = await axiosInstance.delete(`/lps/${lpId}`); + + return data; +}; diff --git a/Week7/src/api/Delete/user.ts b/Week7/src/api/Delete/user.ts new file mode 100644 index 00000000..3a6b37a2 --- /dev/null +++ b/Week7/src/api/Delete/user.ts @@ -0,0 +1,7 @@ +import axiosInstance from "../axios-instance"; + +export const deleteUser = async () => { + const { data } = await axiosInstance.delete(`/users`); + + return data; +}; diff --git a/Week7/src/api/Patch/comment.ts b/Week7/src/api/Patch/comment.ts new file mode 100644 index 00000000..4655becb --- /dev/null +++ b/Week7/src/api/Patch/comment.ts @@ -0,0 +1,15 @@ +import { PatchCommentDto, ResponseLpCommentDto } from "../../types/lp"; +import axiosInstance from "../axios-instance"; + +export const pathComment = async ({ + lpId, + commentId, + content, +}: PatchCommentDto): Promise => { + const { data } = await axiosInstance.patch( + `/lps/${lpId}/comments/${commentId}`, + { content } + ); + + return data; +}; diff --git a/Week7/src/api/Patch/lp.ts b/Week7/src/api/Patch/lp.ts new file mode 100644 index 00000000..6487bf8e --- /dev/null +++ b/Week7/src/api/Patch/lp.ts @@ -0,0 +1,10 @@ +import axiosInstance from "../axios-instance"; +import { PatchLpDto, ResponseLpDto } from "../../types/lp"; + +export const patchLp = async ( + lpId: number, + body: PatchLpDto +): Promise => { + const { data } = await axiosInstance.patch(`/lps/${lpId}`, body); + return data; +}; diff --git a/Week7/src/api/Patch/user.ts b/Week7/src/api/Patch/user.ts new file mode 100644 index 00000000..0350080b --- /dev/null +++ b/Week7/src/api/Patch/user.ts @@ -0,0 +1,10 @@ +import { PatchMyInfoDto, ResponseMyInfoDto } from "../../types/auth"; +import axiosInstance from "../axios-instance"; + +export const patchMyInfo = async ( + patchMyInfo: PatchMyInfoDto +): Promise => { + const { data } = await axiosInstance.patch(`/users`, patchMyInfo); + + return data; +}; diff --git a/Week7/src/api/Post/lp.ts b/Week7/src/api/Post/lp.ts new file mode 100644 index 00000000..a7b2edd9 --- /dev/null +++ b/Week7/src/api/Post/lp.ts @@ -0,0 +1,31 @@ +import { + commentDetailDto, + CreateCommentDto, + CreateLpDto, + RequestLpDto, + ResponseLikeLpDto, + ResponseLpDto, +} from "../../types/lp"; +import axiosInstance from "../axios-instance"; + +export const postLike = async ({ + lpId, +}: RequestLpDto): Promise => { + const { data } = await axiosInstance.post(`/lps/${lpId}/likes`); + return data; +}; + +export const createLp = async (body: CreateLpDto): Promise => { + const { data } = await axiosInstance.post("/lps", body); + return data; +}; + +export const createComment = async ({ + lpId, + content, +}: CreateCommentDto): Promise => { + const { data } = await axiosInstance.post(`/lps/${lpId}/comments`, { + content, + }); + return data; +}; diff --git a/Week7/src/assets/images/defalut_user.jpg b/Week7/src/assets/images/defalut_user.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1fd98835698a51b84d7b009eff87a82f146ef63 GIT binary patch literal 137402 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⋘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 z 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 QVD}k@ADOG?^}ojc7aJ#CZU6uP literal 0 HcmV?d00001 diff --git a/Week7/src/assets/images/lp.png b/Week7/src/assets/images/lp.png new file mode 100644 index 0000000000000000000000000000000000000000..2e23409c5bac8dc20f4844288ca839bfe201eebb GIT binary patch literal 85850 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

    8b16UftiV-g|nxZdW9VdVpeo0pFe&lih2h3KVfW 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 literal 0 HcmV?d00001 diff --git a/Week7/src/components/Cards/LpCard.tsx b/Week7/src/components/Cards/LpCard.tsx index 75cd0d59..4809c19b 100644 --- a/Week7/src/components/Cards/LpCard.tsx +++ b/Week7/src/components/Cards/LpCard.tsx @@ -21,7 +21,7 @@ const LpCard = ({ id, thumbnail, title, updatedAt, likes }: LpCardProps) => { return; } - navigate(RoutePaths.DETAIL.replace(":id", String(id))); + navigate(RoutePaths.DETAIL.replace(":lpId", String(id))); }; return ( diff --git a/Week7/src/components/Comment/CommentItem.tsx b/Week7/src/components/Comment/CommentItem.tsx index e3458709..b0f21c13 100644 --- a/Week7/src/components/Comment/CommentItem.tsx +++ b/Week7/src/components/Comment/CommentItem.tsx @@ -1,33 +1,97 @@ import { commentDetailDto } from "../../types/lp"; +import { HiPencil, HiTrash, HiCheck, HiX } from "react-icons/hi"; +import { ResponseMyInfoDto } from "../../types/auth"; -interface CommentItemProps { +export interface CommentItemProps { comment: commentDetailDto; + isEditing: boolean; + editText: string; + myInfo: ResponseMyInfoDto; + onEditClick: (comment: commentDetailDto) => void; + onDeleteClick: (commentId: number) => void; + onEditChange: (text: string) => void; + onEditCancel: () => void; + onEditSubmit: () => void; } -const CommentItem = ({ comment }: CommentItemProps) => ( -

  • - {comment.author.name} -
    -

    {comment.author.name}

    -

    {comment.content}

    - - {new Date(comment.createdAt).toLocaleString()} - +const CommentItem: React.FC = ({ + comment, + isEditing, + editText, + myInfo, + onEditClick, + onDeleteClick, + onEditChange, + onEditCancel, + onEditSubmit, +}) => ( +
  • +
    +
    + {comment.author.name} +
    +

    + {comment.author.name} +

    + {isEditing ? ( +