From b2e37bd7db278fa146bfb7395203b4a25bb9d4d1 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Tue, 10 Oct 2023 14:15:18 +0900 Subject: [PATCH 01/46] reset --- .github/delete-merged-branch-config.yml | 15 ++++++++++++++ .github/pull_request_template.md | 27 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 .github/delete-merged-branch-config.yml create mode 100644 .github/pull_request_template.md diff --git a/.github/delete-merged-branch-config.yml b/.github/delete-merged-branch-config.yml new file mode 100644 index 00000000..2a6d27be --- /dev/null +++ b/.github/delete-merged-branch-config.yml @@ -0,0 +1,15 @@ +name: delete branch on close pr + +on: + pull_request: + types: [closed] + +permissions: + pull-requests: write + +jobs: + delete-branch: + runs-on: ubuntu-latest + steps: + - name: delete branch + uses: SvanBoxel/delete-merged-branch@main diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..a8581477 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,27 @@ +## 요구사항 + +### 기본 + +- [x] +- [] +- [] + +### 심화 + +- [x] +- [] + +## 주요 변경사항 + +- +- + +## 스크린샷 + +![image](이미지url) + +## 멘토에게 + +- +- +- 셀프 코드 리뷰를 통해 질문 이어가겠습니다. From e11e25f095cf9fa1909206fd16ef114c00c9442a Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Tue, 10 Oct 2023 14:47:30 +0900 Subject: [PATCH 02/46] =?UTF-8?q?fix:=20=EB=A8=B8=EC=A7=80=20=ED=9B=84=20?= =?UTF-8?q?=EB=B8=8C=EB=9E=9C=EC=B9=98=20=EC=82=AD=EC=A0=9C=20github=20act?= =?UTF-8?q?ion=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/delete-merged-branch-config.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/delete-merged-branch-config.yml b/.github/delete-merged-branch-config.yml index 2a6d27be..d5493361 100644 --- a/.github/delete-merged-branch-config.yml +++ b/.github/delete-merged-branch-config.yml @@ -4,12 +4,11 @@ on: pull_request: types: [closed] -permissions: - pull-requests: write - jobs: delete-branch: runs-on: ubuntu-latest steps: - name: delete branch uses: SvanBoxel/delete-merged-branch@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 212e8643d8aebe6cab293e61e2800c4e9b5d6d88 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Tue, 10 Oct 2023 14:50:26 +0900 Subject: [PATCH 03/46] =?UTF-8?q?env:=20workflows=20=ED=8F=B4=EB=8D=94?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/{ => workflows}/delete-merged-branch-config.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{ => workflows}/delete-merged-branch-config.yml (100%) diff --git a/.github/delete-merged-branch-config.yml b/.github/workflows/delete-merged-branch-config.yml similarity index 100% rename from .github/delete-merged-branch-config.yml rename to .github/workflows/delete-merged-branch-config.yml From c0346f0a10d2e18cd146ec9724d6fa0dba2a64a5 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 5 Apr 2025 21:50:14 +0900 Subject: [PATCH 04/46] =?UTF-8?q?:tada:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=B4=88=EA=B8=B0=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 24 + README.md | 54 + eslint.config.js | 28 + index.html | 13 + package.json | 29 + pnpm-lock.yaml | 2014 +++++++++++++++++++++++++++++++++++++ public/vite.svg | 1 + src/App.tsx | 6 + src/components/Button.tsx | 0 src/hooks/useFetch.ts | 0 src/layouts/Footer.tsx | 0 src/layouts/Header.tsx | 0 src/main.tsx | 10 + src/pages/Home.tsx | 0 src/pages/Login.tsx | 0 src/pages/SignUp.tsx | 0 src/styles/index.css | 68 ++ src/vite-env.d.ts | 1 + tsconfig.app.json | 26 + tsconfig.json | 7 + tsconfig.node.json | 24 + vite.config.ts | 7 + 22 files changed, 2312 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/vite.svg create mode 100644 src/App.tsx create mode 100644 src/components/Button.tsx create mode 100644 src/hooks/useFetch.ts create mode 100644 src/layouts/Footer.tsx create mode 100644 src/layouts/Header.tsx create mode 100644 src/main.tsx create mode 100644 src/pages/Home.tsx create mode 100644 src/pages/Login.tsx create mode 100644 src/pages/SignUp.tsx create mode 100644 src/styles/index.css create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a547bf36 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# 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? diff --git a/README.md b/README.md new file mode 100644 index 00000000..40ede56e --- /dev/null +++ b/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/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..092408a9 --- /dev/null +++ b/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/index.html b/index.html new file mode 100644 index 00000000..fcb3ac29 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 00000000..a38cfbd4 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "14-sprint-mission", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "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/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..9e344fe1 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2014 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + react: + specifier: ^19.0.0 + version: 19.1.0 + react-dom: + specifier: ^19.0.0 + version: 19.1.0(react@19.1.0) + devDependencies: + '@eslint/js': + specifier: ^9.21.0 + version: 9.24.0 + '@types/react': + specifier: ^19.0.10 + version: 19.1.0 + '@types/react-dom': + specifier: ^19.0.4 + version: 19.1.1(@types/react@19.1.0) + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.2.5) + eslint: + specifier: ^9.21.0 + version: 9.24.0 + eslint-plugin-react-hooks: + specifier: ^5.1.0 + version: 5.2.0(eslint@9.24.0) + eslint-plugin-react-refresh: + specifier: ^0.4.19 + version: 0.4.19(eslint@9.24.0) + globals: + specifier: ^15.15.0 + version: 15.15.0 + typescript: + specifier: ~5.7.2 + version: 5.7.3 + typescript-eslint: + specifier: ^8.24.1 + version: 8.29.0(eslint@9.24.0)(typescript@5.7.3) + vite: + specifier: ^6.2.0 + version: 6.2.5 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.1': + resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.13.0': + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.24.0': + resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.8': + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rollup/rollup-android-arm-eabi@4.39.0': + resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.39.0': + resolution: {integrity: sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.39.0': + resolution: {integrity: sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.39.0': + resolution: {integrity: sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.39.0': + resolution: {integrity: sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.39.0': + resolution: {integrity: sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.39.0': + resolution: {integrity: sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.39.0': + resolution: {integrity: sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.39.0': + resolution: {integrity: sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.39.0': + resolution: {integrity: sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.39.0': + resolution: {integrity: sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.39.0': + resolution: {integrity: sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.39.0': + resolution: {integrity: sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.39.0': + resolution: {integrity: sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.39.0': + resolution: {integrity: sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.39.0': + resolution: {integrity: sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.39.0': + resolution: {integrity: sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.39.0': + resolution: {integrity: sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.39.0': + resolution: {integrity: sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.39.0': + resolution: {integrity: sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==} + cpu: [x64] + os: [win32] + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/react-dom@19.1.1': + resolution: {integrity: sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.1.0': + resolution: {integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==} + + '@typescript-eslint/eslint-plugin@8.29.0': + resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + 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' + + '@typescript-eslint/parser@8.29.0': + resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.29.0': + resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.29.0': + resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.29.0': + resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.29.0': + resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.29.0': + resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.29.0': + resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001711: + resolution: {integrity: sha512-OpFA8GsKtoV3lCcsI3U5XBAV+oVrMu96OS8XafKqnhOaEAW2mveD1Mx81Sx/02chERwhDakuXs28zbyEc4QMKg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + electron-to-chromium@1.5.132: + resolution: {integrity: sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg==} + + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + 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 + + eslint-plugin-react-refresh@0.4.19: + resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.24.0: + resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.39.0: + resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.29.0: + resolution: {integrity: sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + vite@6.2.5: + resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + 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 + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.27.0': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.0': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.27.0': + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/traverse@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@esbuild/aix-ppc64@0.25.2': + optional: true + + '@esbuild/android-arm64@0.25.2': + optional: true + + '@esbuild/android-arm@0.25.2': + optional: true + + '@esbuild/android-x64@0.25.2': + optional: true + + '@esbuild/darwin-arm64@0.25.2': + optional: true + + '@esbuild/darwin-x64@0.25.2': + optional: true + + '@esbuild/freebsd-arm64@0.25.2': + optional: true + + '@esbuild/freebsd-x64@0.25.2': + optional: true + + '@esbuild/linux-arm64@0.25.2': + optional: true + + '@esbuild/linux-arm@0.25.2': + optional: true + + '@esbuild/linux-ia32@0.25.2': + optional: true + + '@esbuild/linux-loong64@0.25.2': + optional: true + + '@esbuild/linux-mips64el@0.25.2': + optional: true + + '@esbuild/linux-ppc64@0.25.2': + optional: true + + '@esbuild/linux-riscv64@0.25.2': + optional: true + + '@esbuild/linux-s390x@0.25.2': + optional: true + + '@esbuild/linux-x64@0.25.2': + optional: true + + '@esbuild/netbsd-arm64@0.25.2': + optional: true + + '@esbuild/netbsd-x64@0.25.2': + optional: true + + '@esbuild/openbsd-arm64@0.25.2': + optional: true + + '@esbuild/openbsd-x64@0.25.2': + optional: true + + '@esbuild/sunos-x64@0.25.2': + optional: true + + '@esbuild/win32-arm64@0.25.2': + optional: true + + '@esbuild/win32-ia32@0.25.2': + optional: true + + '@esbuild/win32-x64@0.25.2': + optional: true + + '@eslint-community/eslint-utils@4.5.1(eslint@9.24.0)': + dependencies: + eslint: 9.24.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.20.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.1': {} + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.13.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.24.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.8': + dependencies: + '@eslint/core': 0.13.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@rollup/rollup-android-arm-eabi@4.39.0': + optional: true + + '@rollup/rollup-android-arm64@4.39.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.39.0': + optional: true + + '@rollup/rollup-darwin-x64@4.39.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.39.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.39.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.39.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.39.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.39.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.39.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.39.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.39.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.39.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.39.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.39.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.39.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.39.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.39.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.39.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.39.0': + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.7 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@types/babel__traverse@7.20.7': + dependencies: + '@babel/types': 7.27.0 + + '@types/estree@1.0.7': {} + + '@types/json-schema@7.0.15': {} + + '@types/react-dom@19.1.1(@types/react@19.1.0)': + dependencies: + '@types/react': 19.1.0 + + '@types/react@19.1.0': + dependencies: + csstype: 3.1.3 + + '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.29.0(eslint@9.24.0)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/type-utils': 8.29.0(eslint@9.24.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.29.0(eslint@9.24.0)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.29.0 + eslint: 9.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.29.0(eslint@9.24.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.29.0 + debug: 4.4.0 + eslint: 9.24.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.29.0': + dependencies: + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 + + '@typescript-eslint/type-utils@8.29.0(eslint@9.24.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.29.0(eslint@9.24.0)(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.24.0 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.29.0': {} + + '@typescript-eslint/typescript-estree@8.29.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.29.0(eslint@9.24.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) + eslint: 9.24.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.29.0': + dependencies: + '@typescript-eslint/types': 8.29.0 + eslint-visitor-keys: 4.2.0 + + '@vitejs/plugin-react@4.3.4(vite@6.2.5)': + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.2.5 + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001711 + electron-to-chromium: 1.5.132 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001711: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + electron-to-chromium@1.5.132: {} + + esbuild@0.25.2: + 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 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.24.0): + dependencies: + eslint: 9.24.0 + + eslint-plugin-react-refresh@0.4.19(eslint@9.24.0): + dependencies: + eslint: 9.24.0 + + eslint-scope@8.3.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.24.0: + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.1 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.24.0 + '@eslint/plugin-kit': 0.2.8 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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.4 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.15.0: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.19: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + 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.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.1.0(react@19.1.0): + dependencies: + react: 19.1.0 + scheduler: 0.26.0 + + react-refresh@0.14.2: {} + + react@19.1.0: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rollup@4.39.0: + dependencies: + '@types/estree': 1.0.7 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.39.0 + '@rollup/rollup-android-arm64': 4.39.0 + '@rollup/rollup-darwin-arm64': 4.39.0 + '@rollup/rollup-darwin-x64': 4.39.0 + '@rollup/rollup-freebsd-arm64': 4.39.0 + '@rollup/rollup-freebsd-x64': 4.39.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.39.0 + '@rollup/rollup-linux-arm-musleabihf': 4.39.0 + '@rollup/rollup-linux-arm64-gnu': 4.39.0 + '@rollup/rollup-linux-arm64-musl': 4.39.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.39.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.39.0 + '@rollup/rollup-linux-riscv64-gnu': 4.39.0 + '@rollup/rollup-linux-riscv64-musl': 4.39.0 + '@rollup/rollup-linux-s390x-gnu': 4.39.0 + '@rollup/rollup-linux-x64-gnu': 4.39.0 + '@rollup/rollup-linux-x64-musl': 4.39.0 + '@rollup/rollup-win32-arm64-msvc': 4.39.0 + '@rollup/rollup-win32-ia32-msvc': 4.39.0 + '@rollup/rollup-win32-x64-msvc': 4.39.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + scheduler@0.26.0: {} + + semver@6.3.1: {} + + semver@7.7.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.1.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.29.0(eslint@9.24.0)(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(typescript@5.7.3) + '@typescript-eslint/parser': 8.29.0(eslint@9.24.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.29.0(eslint@9.24.0)(typescript@5.7.3) + eslint: 9.24.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + typescript@5.7.3: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + vite@6.2.5: + dependencies: + esbuild: 0.25.2 + postcss: 8.5.3 + rollup: 4.39.0 + optionalDependencies: + fsevents: 2.3.3 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 00000000..04bf4a14 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,6 @@ +function App() { + return <> + +} + +export default App diff --git a/src/components/Button.tsx b/src/components/Button.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/hooks/useFetch.ts b/src/hooks/useFetch.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/layouts/Footer.tsx b/src/layouts/Footer.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/layouts/Header.tsx b/src/layouts/Header.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 00000000..bef5202a --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/SignUp.tsx b/src/pages/SignUp.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/styles/index.css b/src/styles/index.css new file mode 100644 index 00000000..08a3ac9e --- /dev/null +++ b/src/styles/index.css @@ -0,0 +1,68 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 00000000..358ca9ba --- /dev/null +++ b/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/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..db0becc8 --- /dev/null +++ b/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/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..8b0f57b9 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From d0f019aac46c8e4390e585655bed3d030c61883a Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 5 Apr 2025 22:12:45 +0900 Subject: [PATCH 05/46] =?UTF-8?q?:art:=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20?= =?UTF-8?q?=EC=BC=80=EB=B0=A5=EC=BC=80=EC=9D=B4=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/{pages/SignUp.tsx => components/button.tsx} | 0 src/layouts/footer.tsx | 0 src/layouts/header.tsx | 0 src/pages/home.tsx | 0 src/pages/login.tsx | 0 src/pages/sign-up.tsx | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename src/{pages/SignUp.tsx => components/button.tsx} (100%) create mode 100644 src/layouts/footer.tsx create mode 100644 src/layouts/header.tsx create mode 100644 src/pages/home.tsx create mode 100644 src/pages/login.tsx create mode 100644 src/pages/sign-up.tsx diff --git a/src/pages/SignUp.tsx b/src/components/button.tsx similarity index 100% rename from src/pages/SignUp.tsx rename to src/components/button.tsx diff --git a/src/layouts/footer.tsx b/src/layouts/footer.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/layouts/header.tsx b/src/layouts/header.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/home.tsx b/src/pages/home.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/login.tsx b/src/pages/login.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/sign-up.tsx b/src/pages/sign-up.tsx new file mode 100644 index 00000000..e69de29b From 99e85a47fc450c33b87a9da02de85734eb036db8 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 5 Apr 2025 22:19:26 +0900 Subject: [PATCH 06/46] =?UTF-8?q?:bug:=20=ED=8C=8C=EC=9D=BC=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=98=EB=A9=B4=20git=EC=97=90=EC=84=9C=20?= =?UTF-8?q?2=ED=8C=8C=EC=9D=BC=20=EB=9C=A8=EB=8A=94=20=EB=B2=84=EA=B7=B8?= =?UTF-8?q?=20=EB=B0=9C=EC=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Button.tsx | 0 src/components/button.tsx | 0 src/hooks/useFetch.ts | 0 src/layouts/Footer.tsx | 0 src/layouts/Header.tsx | 0 src/layouts/footer.tsx | 0 src/layouts/header.tsx | 0 src/pages/Login.tsx | 0 src/pages/login.tsx | 0 src/pages/sign-up.tsx | 0 10 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/components/Button.tsx delete mode 100644 src/components/button.tsx delete mode 100644 src/hooks/useFetch.ts delete mode 100644 src/layouts/Footer.tsx delete mode 100644 src/layouts/Header.tsx delete mode 100644 src/layouts/footer.tsx delete mode 100644 src/layouts/header.tsx delete mode 100644 src/pages/Login.tsx delete mode 100644 src/pages/login.tsx delete mode 100644 src/pages/sign-up.tsx diff --git a/src/components/Button.tsx b/src/components/Button.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/button.tsx b/src/components/button.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/hooks/useFetch.ts b/src/hooks/useFetch.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/src/layouts/Footer.tsx b/src/layouts/Footer.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/layouts/Header.tsx b/src/layouts/Header.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/layouts/footer.tsx b/src/layouts/footer.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/layouts/header.tsx b/src/layouts/header.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pages/login.tsx b/src/pages/login.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pages/sign-up.tsx b/src/pages/sign-up.tsx deleted file mode 100644 index e69de29b..00000000 From b84aadbe7bc3ea7a03ba79cb597038af339e5fa3 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 5 Apr 2025 22:20:02 +0900 Subject: [PATCH 07/46] =?UTF-8?q?:bug:=20=ED=8C=8C=EC=9D=BC=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=98=EB=A9=B4=20git=EC=97=90=EC=84=9C=20?= =?UTF-8?q?2=ED=8C=8C=EC=9D=BC=20=EB=9C=A8=EB=8A=94=20=EB=B2=84=EA=B7=B8?= =?UTF-8?q?=20=EB=B0=9C=EC=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Home.tsx | 0 src/pages/home.tsx | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/pages/Home.tsx delete mode 100644 src/pages/home.tsx diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pages/home.tsx b/src/pages/home.tsx deleted file mode 100644 index e69de29b..00000000 From 6603927773d972a9ebca3e0591abd5196203a56c Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 5 Apr 2025 23:13:16 +0900 Subject: [PATCH 08/46] =?UTF-8?q?:sparkles:=20alias=EB=A5=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=B4=EC=84=9C=20@=EB=A1=9C=20=EB=A3=A8=ED=8A=B8?= =?UTF-8?q?=20dir=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vite.config.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index 8b0f57b9..5c62d107 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,7 +1,15 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import path from "path"; // https://vite.dev/config/ export default defineConfig({ plugins: [react()], -}) + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + "@components": path.resolve(__dirname, "./src/components"), + "@assets": path.resolve(__dirname, "./src/assets"), + }, + }, +}); From a10cee530a5a5e2f32bce02221fdede0a8eb0f44 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 5 Apr 2025 23:14:03 +0900 Subject: [PATCH 09/46] =?UTF-8?q?Revert=20":sparkles:=20alias=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=B4=EC=84=9C=20@=EB=A1=9C=20=EB=A3=A8?= =?UTF-8?q?=ED=8A=B8=20dir=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6603927773d972a9ebca3e0591abd5196203a56c. --- vite.config.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index 5c62d107..8b0f57b9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,15 +1,7 @@ -import { defineConfig } from "vite"; -import react from "@vitejs/plugin-react"; -import path from "path"; +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' // https://vite.dev/config/ export default defineConfig({ plugins: [react()], - resolve: { - alias: { - "@": path.resolve(__dirname, "./src"), - "@components": path.resolve(__dirname, "./src/components"), - "@assets": path.resolve(__dirname, "./src/assets"), - }, - }, -}); +}) From 2edb5188fed2d18b73a4afcec4ba7941de6a4ef4 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 5 Apr 2025 23:30:08 +0900 Subject: [PATCH 10/46] =?UTF-8?q?:wrench:=20path=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=EC=84=9C=20@=EC=97=90=20./src=EA=B0=80=20=EB=8C=80?= =?UTF-8?q?=EC=9D=91=EB=90=98=EB=8F=84=EB=A1=9D=20alias=20=EC=A7=80?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vite.config.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index 8b0f57b9..5c62d107 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,7 +1,15 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import path from "path"; // https://vite.dev/config/ export default defineConfig({ plugins: [react()], -}) + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + "@components": path.resolve(__dirname, "./src/components"), + "@assets": path.resolve(__dirname, "./src/assets"), + }, + }, +}); From 71dce2403643c88b0906a024accbcea693b456fa Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 8 Apr 2025 22:40:57 +0900 Subject: [PATCH 11/46] =?UTF-8?q?:bento:=20home=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/icons/logo-header.svg | 15 +++++++++++++++ src/assets/images/images/banner-home-01.png | Bin 0 -> 31827 bytes src/assets/images/images/banner-home-02.png | Bin 0 -> 45158 bytes src/assets/images/images/banner-home-03.png | Bin 0 -> 22604 bytes src/assets/images/images/footer-home.png | Bin 0 -> 56852 bytes src/assets/images/images/hero-home.png | Bin 0 -> 49167 bytes 6 files changed, 15 insertions(+) create mode 100644 src/assets/images/icons/logo-header.svg create mode 100644 src/assets/images/images/banner-home-01.png create mode 100644 src/assets/images/images/banner-home-02.png create mode 100644 src/assets/images/images/banner-home-03.png create mode 100644 src/assets/images/images/footer-home.png create mode 100644 src/assets/images/images/hero-home.png diff --git a/src/assets/images/icons/logo-header.svg b/src/assets/images/icons/logo-header.svg new file mode 100644 index 00000000..3cfc13de --- /dev/null +++ b/src/assets/images/icons/logo-header.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/images/banner-home-01.png b/src/assets/images/images/banner-home-01.png new file mode 100644 index 0000000000000000000000000000000000000000..a77985bed3f9aa21d9a0ab54d70eabe659a548da GIT binary patch literal 31827 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 vUvKyh#P23pu}*mZ^+`AFYjf}$+G0#*7k%YG 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/images/banner-home-02.png b/src/assets/images/images/banner-home-02.png new file mode 100644 index 0000000000000000000000000000000000000000..837a1709492c5043ca6134a21a3e6911b2e04a4b GIT binary patch literal 45158 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 z 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/images/hero-home.png b/src/assets/images/images/hero-home.png new file mode 100644 index 0000000000000000000000000000000000000000..83a4881c6430a3acb80dd0d58e46de6c15b27039 GIT binary patch literal 49167 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 literal 0 HcmV?d00001 From bc895e68a0c32c99f5079f4457e0239756805e06 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 8 Apr 2025 22:56:36 +0900 Subject: [PATCH 12/46] =?UTF-8?q?:bento:=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8F=B4=EB=8D=94=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/{images => }/banner-home-01.png | Bin src/assets/images/{images => }/banner-home-02.png | Bin src/assets/images/{images => }/banner-home-03.png | Bin src/assets/images/{images => }/footer-home.png | Bin src/assets/images/{images => }/hero-home.png | Bin src/assets/images/{icons => }/logo-header.svg | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename src/assets/images/{images => }/banner-home-01.png (100%) rename src/assets/images/{images => }/banner-home-02.png (100%) rename src/assets/images/{images => }/banner-home-03.png (100%) rename src/assets/images/{images => }/footer-home.png (100%) rename src/assets/images/{images => }/hero-home.png (100%) rename src/assets/images/{icons => }/logo-header.svg (100%) diff --git a/src/assets/images/images/banner-home-01.png b/src/assets/images/banner-home-01.png similarity index 100% rename from src/assets/images/images/banner-home-01.png rename to src/assets/images/banner-home-01.png diff --git a/src/assets/images/images/banner-home-02.png b/src/assets/images/banner-home-02.png similarity index 100% rename from src/assets/images/images/banner-home-02.png rename to src/assets/images/banner-home-02.png diff --git a/src/assets/images/images/banner-home-03.png b/src/assets/images/banner-home-03.png similarity index 100% rename from src/assets/images/images/banner-home-03.png rename to src/assets/images/banner-home-03.png diff --git a/src/assets/images/images/footer-home.png b/src/assets/images/footer-home.png similarity index 100% rename from src/assets/images/images/footer-home.png rename to src/assets/images/footer-home.png diff --git a/src/assets/images/images/hero-home.png b/src/assets/images/hero-home.png similarity index 100% rename from src/assets/images/images/hero-home.png rename to src/assets/images/hero-home.png diff --git a/src/assets/images/icons/logo-header.svg b/src/assets/images/logo-header.svg similarity index 100% rename from src/assets/images/icons/logo-header.svg rename to src/assets/images/logo-header.svg From 226c4447d787c292ca23c8b9893eb52fd2c14fda Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 8 Apr 2025 23:44:31 +0900 Subject: [PATCH 13/46] =?UTF-8?q?:wrench:=20@=EB=A5=BC=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20=EC=A0=88=EB=8C=80=EA=B2=BD=EB=A1=9C=20pat?= =?UTF-8?q?h=20alias=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 ++- pnpm-lock.yaml | 41 +++++++++++++++++++++++++++++++++++++++++ tsconfig.app.json | 6 ++++++ vite.config.ts | 11 ++--------- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index a38cfbd4..0e185ff1 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "globals": "^15.15.0", "typescript": "~5.7.2", "typescript-eslint": "^8.24.1", - "vite": "^6.2.0" + "vite": "^6.2.0", + "vite-tsconfig-paths": "^5.1.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e344fe1..a91b5f77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,6 +48,9 @@ importers: vite: specifier: ^6.2.0 version: 6.2.5 + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.7.3)(vite@6.2.5) packages: @@ -769,6 +772,9 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -992,6 +998,16 @@ packages: peerDependencies: typescript: '>=4.8.4' + tsconfck@3.1.5: + resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -1017,6 +1033,14 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + vite@6.2.5: resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -1776,6 +1800,8 @@ snapshots: globals@15.15.0: {} + globrex@0.1.2: {} + graphemer@1.4.0: {} has-flag@4.0.0: {} @@ -1969,6 +1995,10 @@ snapshots: dependencies: typescript: 5.7.3 + tsconfck@3.1.5(typescript@5.7.3): + optionalDependencies: + typescript: 5.7.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -1995,6 +2025,17 @@ snapshots: dependencies: punycode: 2.3.1 + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.2.5): + dependencies: + debug: 4.4.0 + globrex: 0.1.2 + tsconfck: 3.1.5(typescript@5.7.3) + optionalDependencies: + vite: 6.2.5 + transitivePeerDependencies: + - supports-color + - typescript + vite@6.2.5: dependencies: esbuild: 0.25.2 diff --git a/tsconfig.app.json b/tsconfig.app.json index 358ca9ba..97a2ad7a 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -6,6 +6,12 @@ "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@components/*": ["./src/components/*"], + "@assets/*": ["./src/assets/*"] + }, /* Bundler mode */ "moduleResolution": "bundler", diff --git a/vite.config.ts b/vite.config.ts index 5c62d107..45f06a5d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,15 +1,8 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; -import path from "path"; +import tsconfigPaths from "vite-tsconfig-paths"; // https://vite.dev/config/ export default defineConfig({ - plugins: [react()], - resolve: { - alias: { - "@": path.resolve(__dirname, "./src"), - "@components": path.resolve(__dirname, "./src/components"), - "@assets": path.resolve(__dirname, "./src/assets"), - }, - }, + plugins: [react(), tsconfigPaths()], }); From e1b36a0fbd0fe0efc16390caa680fd599b66b4b9 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 13:22:54 +0900 Subject: [PATCH 14/46] =?UTF-8?q?:package:=20react-router-dom=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 ++- pnpm-lock.yaml | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e185ff1..6b16fb73 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ }, "dependencies": { "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "react-router-dom": "^7.5.0" }, "devDependencies": { "@eslint/js": "^9.21.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a91b5f77..1468e938 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: react-dom: specifier: ^19.0.0 version: 19.1.0(react@19.1.0) + react-router-dom: + specifier: ^7.5.0 + version: 7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@eslint/js': specifier: ^9.21.0 @@ -491,6 +494,9 @@ packages: '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} @@ -620,6 +626,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -936,6 +946,23 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} + react-router-dom@7.5.0: + resolution: {integrity: sha512-fFhGFCULy4vIseTtH5PNcY/VvDJK5gvOWcwJVHQp8JQcWVr85ENhJ3UpuF/zP1tQOIFYNRJHzXtyhU1Bdgw0RA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.5.0: + resolution: {integrity: sha512-estOHrRlDMKdlQa6Mj32gIks4J+AxNsYoE0DbTTxiMy2mPzZuWSDU+N85/r1IlNR7kGfznF3VCUlvc5IUO+B9g==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react@19.1.0: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} @@ -968,6 +995,9 @@ packages: engines: {node: '>=10'} hasBin: true + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1008,6 +1038,9 @@ packages: typescript: optional: true + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -1460,6 +1493,8 @@ snapshots: dependencies: '@babel/types': 7.27.0 + '@types/cookie@0.6.0': {} + '@types/estree@1.0.7': {} '@types/json-schema@7.0.15': {} @@ -1620,6 +1655,8 @@ snapshots: convert-source-map@2.0.0: {} + cookie@1.0.2: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -1931,6 +1968,22 @@ snapshots: react-refresh@0.14.2: {} + react-router-dom@7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-router: 7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + + react-router@7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@types/cookie': 0.6.0 + cookie: 1.0.2 + react: 19.1.0 + set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 19.1.0(react@19.1.0) + react@19.1.0: {} resolve-from@4.0.0: {} @@ -1973,6 +2026,8 @@ snapshots: semver@7.7.1: {} + set-cookie-parser@2.7.1: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -1999,6 +2054,8 @@ snapshots: optionalDependencies: typescript: 5.7.3 + turbo-stream@2.4.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 From 652ee8329171e2a68be5e9787f6535af8ce08169 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 15:01:48 +0900 Subject: [PATCH 15/46] =?UTF-8?q?:sparkles:=20=EA=B8=B0=EB=B3=B8=EC=A0=81?= =?UTF-8?q?=EC=9D=B8=20=EB=9D=BC=EC=9A=B0=ED=84=B0=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 04bf4a14..918925ab 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,18 @@ +import Home from "@/pages/home.tsx"; +import { BrowserRouter, Route, Routes } from "react-router-dom"; + function App() { - return <> - + return ( + <> + + + } /> + 로그인 페이지} /> + 회원가입 페이지} /> + + + + ); } -export default App +export default App; From e5f92e21bad9753506605547a10811b757165390 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 15:03:45 +0900 Subject: [PATCH 16/46] =?UTF-8?q?:art:=20=EB=A1=9C=EA=B3=A0=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EC=BD=98=20=EB=B0=8F=20=ED=83=80=EC=9D=B4=ED=8F=AC=20?= =?UTF-8?q?SVG=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/logo-header.svg | 15 --------------- src/assets/images/logo-icon.svg | 14 ++++++++++++++ src/assets/images/logo-typo.svg | 3 +++ 3 files changed, 17 insertions(+), 15 deletions(-) delete mode 100644 src/assets/images/logo-header.svg create mode 100644 src/assets/images/logo-icon.svg create mode 100644 src/assets/images/logo-typo.svg diff --git a/src/assets/images/logo-header.svg b/src/assets/images/logo-header.svg deleted file mode 100644 index 3cfc13de..00000000 --- a/src/assets/images/logo-header.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/assets/images/logo-icon.svg b/src/assets/images/logo-icon.svg new file mode 100644 index 00000000..95d41963 --- /dev/null +++ b/src/assets/images/logo-icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/logo-typo.svg b/src/assets/images/logo-typo.svg new file mode 100644 index 00000000..22e13aba --- /dev/null +++ b/src/assets/images/logo-typo.svg @@ -0,0 +1,3 @@ + + + From bad05471c1032904b1709c11858261bf36c35379 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 16:53:33 +0900 Subject: [PATCH 17/46] =?UTF-8?q?:sparkles:=20=ED=99=88=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=97=90=20=EB=B0=B0=EB=84=88=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20HomeFeature=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home/home-feature.tsx | 23 ++++++++++++ src/pages/home/home.tsx | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/pages/home/home-feature.tsx create mode 100644 src/pages/home/home.tsx diff --git a/src/pages/home/home-feature.tsx b/src/pages/home/home-feature.tsx new file mode 100644 index 00000000..15e05e28 --- /dev/null +++ b/src/pages/home/home-feature.tsx @@ -0,0 +1,23 @@ +interface HomeFeatureProps { + image: string; + keyword: string; + title: string; + description: string; +} + +export default function HomeFeature({ + image, + keyword, + title, + description, +}: HomeFeatureProps) { + return ( +

+ ); +} + diff --git a/src/pages/home/home.tsx b/src/pages/home/home.tsx new file mode 100644 index 00000000..7d22241a --- /dev/null +++ b/src/pages/home/home.tsx @@ -0,0 +1,65 @@ +import logoIcon from "@assets/images/logo-icon.svg"; +import logoTypo from "@assets/images/logo-typo.svg"; +import heroHome from "@assets/images/hero-home.png"; +import bannerHome01 from "@assets/images/banner-home-01.png"; +import bannerHome02 from "@assets/images/banner-home-02.png"; +import bannerHome03 from "@assets/images/banner-home-03.png"; +import { Link } from "react-router-dom"; +import HomeFeature from "./home-feature"; + +const banners = [ + { + image: bannerHome01, + keyword: "Hot item", + title: "인기 상품을 확인해보세요", + description: "가장 HOT한 중고거래 물품을 판다 마켓에서 확인해보세요", + }, + { + image: bannerHome02, + keyword: "Search", + title: "구매를 원하는 상품을 검색하세요", + description: "구매하고 싶은 물품은 검색해서 쉽게 찾아보세요", + }, + { + image: bannerHome03, + keyword: "register", + title: "판매를 원하는 상품을 등록하세요", + description: "어떤 물건이든 판매하고 싶은 상품을 쉽게 등록하세요", + }, +]; + +export default function Home() { + return ( + <> +
+ + 판다마켓 아이콘 + 판다마켓 + + + 로그인 + +
+
+
+

일상의 모든 물건을 거래해보세요

+ + 구경하러 가기 + + 판다마켓 +
+
+ {banners.map((banner, idx) => ( + + ))} +
+
+ + ); +} From 79ee605cb8f0ff5a7da890ad8f7be5a959440251 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 21:03:14 +0900 Subject: [PATCH 18/46] =?UTF-8?q?:art:=20HTML=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=EC=9D=98=20DOCTYPE=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=A0=9C=EB=AA=A9=EC=9D=84=20'=ED=8C=90=EB=8B=A4=EB=A7=88?= =?UTF-8?q?=EC=BC=93'=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD,=20pretendard?= =?UTF-8?q?=20=EC=9B=B9=ED=8F=B0=ED=8A=B8=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index fcb3ac29..ccd7bb90 100644 --- a/index.html +++ b/index.html @@ -1,10 +1,16 @@ - + + - Vite + React + TS + 판다마켓
From 1e582079c581932cc1779907a5a447263a7d9983 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 21:03:43 +0900 Subject: [PATCH 19/46] =?UTF-8?q?:art:=20reset.css=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20main.tsx=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=A6=AC=EC=85=8B=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.tsx | 15 ++++++++------- src/styles/reset.css | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 src/styles/reset.css diff --git a/src/main.tsx b/src/main.tsx index bef5202a..780cd6eb 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,10 +1,11 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import './index.css' -import App from './App.tsx' +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "@/styles/reset.css"; +import "@/styles/index.css"; +import App from "./App.tsx"; -createRoot(document.getElementById('root')!).render( +createRoot(document.getElementById("root")!).render( - , -) + +); diff --git a/src/styles/reset.css b/src/styles/reset.css new file mode 100644 index 00000000..91648d3d --- /dev/null +++ b/src/styles/reset.css @@ -0,0 +1,44 @@ +/* reset.css - Eric Meyer’s Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} From b62f1fbfa5c9e60c2938ba2b5c95d27f030111fd Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 21:04:11 +0900 Subject: [PATCH 20/46] =?UTF-8?q?:art:=20index.css=20=EC=83=89=EC=83=81=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=B6=94=EA=B0=80,=20=ED=8F=B0=ED=8A=B8?= =?UTF-8?q?=20=EB=B3=80=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/index.css | 108 ++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 58 deletions(-) diff --git a/src/styles/index.css b/src/styles/index.css index 08a3ac9e..3b96ecfa 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -1,68 +1,60 @@ :root { - font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; + /* Primary color */ + --primary-100: #3692ff; + --primary-200: #1967d6; + --primary-300: #1251aa; - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; + /* Secondary color */ + --gray-900: #111827; /* gray900 */ + --gray-800: #1f2937; /* gray800 */ + --gray-700: #374151; /* gray700 */ + --gray-600: #4b5563; /* gray600 */ + --gray-500: #6b7280; /* gray500 */ + --gray-400: #9ca3af; /* gray400 */ + --gray-200: #e5e7eb; /* gray200 */ + --gray-100: #f3f4f6; /* gray100 */ + --gray-50: #f9fafb; /* gray50 */ - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} + /* Error */ + --error: #f74747; -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} + /* 3xl */ + --font-3xl-size: 32px; + --font-3xl-line-height: 42px; -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} + /* 2xl */ + --font-2xl-size: 28px; + --font-2xl-line-height: 38px; -h1 { - font-size: 3.2em; - line-height: 1.1; -} + /* xl */ + --font-xl-size: 24px; + --font-xl-line-height: 34px; -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; + /* lg */ + --font-lg-size: 20px; + --font-lg-line-height: 30px; + + /* md */ + --font-md-size: 18px; + --font-md-line-height: 28px; + + /* sm */ + --font-sm-size: 16px; + --font-sm-line-height: 26px; + + /* xs */ + --font-xs-size: 14px; + --font-xs-line-height: 24px; + + /* font-weight */ + --weight-bold: 700; + --weight-semibold: 600; + --weight-medium: 500; + --weight-regular: 400; } -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } +body { + font-family: "Pretendard Variable", Pretendard, -apple-system, + BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", + "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif; } From b2ff8e97ecf9070ed2097ee6c21acdec1938c3aa Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 12 Apr 2025 23:01:49 +0900 Subject: [PATCH 21/46] =?UTF-8?q?:art:=20=EB=AA=A8=EB=93=A0=20=EC=9A=94?= =?UTF-8?q?=EC=86=8C=EC=97=90=20box-sizing:=20border-box=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/index.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/styles/index.css b/src/styles/index.css index 3b96ecfa..3f85b1f0 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -52,6 +52,9 @@ --weight-medium: 500; --weight-regular: 400; } +* { + box-sizing: border-box; +} body { font-family: "Pretendard Variable", Pretendard, -apple-system, From 009a8c5618492f1886ac3b5e3b32999c25ba0f59 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sun, 13 Apr 2025 23:05:13 +0900 Subject: [PATCH 22/46] =?UTF-8?q?:art:=20=EB=B0=B0=EB=84=88=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EB=B0=8F=20=EC=B4=88=EA=B8=B0=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/bannerData.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/constants/bannerData.ts diff --git a/src/constants/bannerData.ts b/src/constants/bannerData.ts new file mode 100644 index 00000000..8eb4b210 --- /dev/null +++ b/src/constants/bannerData.ts @@ -0,0 +1,31 @@ +import bannerHome01 from "@assets/images/banner-home-01.png"; +import bannerHome02 from "@assets/images/banner-home-02.png"; +import bannerHome03 from "@assets/images/banner-home-03.png"; + +export interface Banner { + image: string; + keyword: string; + title: string; + description: string; +} + +export const bannerData: Banner[] = [ + { + image: bannerHome01, + keyword: "Hot item", + title: "인기 상품을 확인해보세요", + description: "가장 HOT한 중고거래 물품을\n판다 마켓에서 확인해보세요", + }, + { + image: bannerHome02, + keyword: "Search", + title: "구매를 원하는 상품을 검색하세요", + description: "구매하고 싶은 물품은 검색해서\n쉽게 찾아보세요", + }, + { + image: bannerHome03, + keyword: "register", + title: "판매를 원하는 상품을 등록하세요", + description: "어떤 물건이든 판매하고 싶은 상품을\n쉽게 등록하세요", + }, +]; From eb82e0671a13394a03548fb91b067116d714cedb Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 15 Apr 2025 22:08:03 +0900 Subject: [PATCH 23/46] =?UTF-8?q?:art:=20=EC=86=8C=EC=85=9C=20=EB=AF=B8?= =?UTF-8?q?=EB=94=94=EC=96=B4=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80=20(Facebook,=20Instagra?= =?UTF-8?q?m,=20Twitter,=20YouTube)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/ic_facebook.png | Bin 0 -> 387 bytes src/assets/images/ic_instagram.png | Bin 0 -> 405 bytes src/assets/images/ic_twitter.png | Bin 0 -> 332 bytes src/assets/images/ic_youtube.png | Bin 0 -> 288 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/images/ic_facebook.png create mode 100644 src/assets/images/ic_instagram.png create mode 100644 src/assets/images/ic_twitter.png create mode 100644 src/assets/images/ic_youtube.png diff --git a/src/assets/images/ic_facebook.png b/src/assets/images/ic_facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..58333d45fa5077fa680a265fa7d54aff8a6399c4 GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6l5$8 za(7}_cTVOdki(Mh=uyew;%s{R#v)nd6zOz`sLaC zY-d!Q3G$XU&dreOk0@^_6frV1IsGVV)@qZUM5&rxytZL?Zd$R3Zr|E*RY~q}#HNW` zFB>pjo^zEkLub>fnO$3z!%p<%yC35DImx~4p5?dF7x4!*4dk4@e|S-1o@)2hQpf$) zKh238aSQe@4h~ez&s}c(WOp9_XR{72i<8wsVIIp^XD<^zQ}m>7KWDRfSDC$_;jWVT fY9;*tgzcBjJ$GOE`Ku?uFk|p^^>bP0l+XkKFwc^L literal 0 HcmV?d00001 diff --git a/src/assets/images/ic_instagram.png b/src/assets/images/ic_instagram.png new file mode 100644 index 0000000000000000000000000000000000000000..98e24ea6a98ac8c523b1ba211b2d6ed5cb72abc8 GIT binary patch literal 405 zcmV;G0c!q*l_ zFGk`+rHBjmWK$Xd4{s`G#>S}$T9ux*Lb+RVOJo~4hg$MG!jr@gPW&M8#7Af>A+)iQ zmT#cz$2;1ZuETiJx%bP#Ce? z@skX&df$AGwPed>hmv{P;P%eqS%x*)Qpw9{CcLNhOY!Lvf`2$oJnRoUlp}nH^d+J# zYfmIi9^;S(XeIuO$Guk`e6>7FCDBW2D5#DXl{W z%l#i5l6@^?pe+_0`7&r)(|?)W2}UoZ^8}au7xb7veMa8YlF9jNAF{u+Tm3V7@8$cS ZSwfp5jFgtWzY6p$gQu&X%Q~loCIDzdd)WX0 literal 0 HcmV?d00001 diff --git a/src/assets/images/ic_youtube.png b/src/assets/images/ic_youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..f51731d4091084e7f089930baa2cf5a328ba421b GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6l5$8 za(7}_cTVOdki(Mh=6C-KhYWaJ=XO*ZJDDZ0M6_}y zFiSKFO0c>mG?g?@jEGw_}Qh)J=eKMyFFTUcim|^L8qg!Be#)azc$S;>H zy51?aNTx-GR9Ldc1Y( fJF-jW+HvW|<9Bp#OWLFZJ;31U>gTe~DWM4f3?^xf literal 0 HcmV?d00001 From 19607888d15bb72a34fd37c8520683d05e180b3a Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 15 Apr 2025 22:09:09 +0900 Subject: [PATCH 24/46] =?UTF-8?q?:recycle:=20useMediaQuery=20=ED=9B=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=98=EC=97=AC=20=EB=AF=B8=EB=94=94?= =?UTF-8?q?=EC=96=B4=20=EC=BF=BC=EB=A6=AC=20=EC=83=81=ED=83=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useMediaQuery.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/hooks/useMediaQuery.ts diff --git a/src/hooks/useMediaQuery.ts b/src/hooks/useMediaQuery.ts new file mode 100644 index 00000000..82107cb1 --- /dev/null +++ b/src/hooks/useMediaQuery.ts @@ -0,0 +1,18 @@ +import { useEffect, useState } from "react"; + +const useMediaQuery = (query: string) => { + const [matches, setMatches] = useState(window.matchMedia(query).matches); + + useEffect(() => { + const mediaQueryList = window.matchMedia(query); + const documentChangeHandler = () => setMatches(mediaQueryList.matches); + mediaQueryList.addEventListener("change", documentChangeHandler); + return () => { + mediaQueryList.removeEventListener("change", documentChangeHandler); + }; + }, [query]); + + return matches; +}; + +export default useMediaQuery; From d0b4cc25a8dab227ed05b8f5ea73f578d6609600 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 15 Apr 2025 22:09:50 +0900 Subject: [PATCH 25/46] =?UTF-8?q?:sparkles:=20=ED=99=88=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(=ED=97=A4=EB=8D=94,=20=EB=A9=94=EC=9D=B8,?= =?UTF-8?q?=20=ED=91=B8=ED=84=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home/home-feature.tsx | 23 ------ .../home/home-footer/home-footer-bottom.tsx | 31 +++++++ .../home/home-footer/home-footer-top.tsx | 19 +++++ src/pages/home/home-footer/home-footer.tsx | 12 +++ src/pages/home/home-header/home-header.tsx | 31 +++++++ src/pages/home/home-main/home-feature.tsx | 28 +++++++ src/pages/home/home-main/home-main.tsx | 44 ++++++++++ src/pages/home/home.tsx | 67 +++------------- src/pages/home/styles/home-feature.module.css | 52 ++++++++++++ src/pages/home/styles/home-footer.module.css | 68 ++++++++++++++++ src/pages/home/styles/home-header.module.css | 35 ++++++++ src/pages/home/styles/home.module.css | 80 +++++++++++++++++++ 12 files changed, 409 insertions(+), 81 deletions(-) delete mode 100644 src/pages/home/home-feature.tsx create mode 100644 src/pages/home/home-footer/home-footer-bottom.tsx create mode 100644 src/pages/home/home-footer/home-footer-top.tsx create mode 100644 src/pages/home/home-footer/home-footer.tsx create mode 100644 src/pages/home/home-header/home-header.tsx create mode 100644 src/pages/home/home-main/home-feature.tsx create mode 100644 src/pages/home/home-main/home-main.tsx create mode 100644 src/pages/home/styles/home-feature.module.css create mode 100644 src/pages/home/styles/home-footer.module.css create mode 100644 src/pages/home/styles/home-header.module.css create mode 100644 src/pages/home/styles/home.module.css diff --git a/src/pages/home/home-feature.tsx b/src/pages/home/home-feature.tsx deleted file mode 100644 index 15e05e28..00000000 --- a/src/pages/home/home-feature.tsx +++ /dev/null @@ -1,23 +0,0 @@ -interface HomeFeatureProps { - image: string; - keyword: string; - title: string; - description: string; -} - -export default function HomeFeature({ - image, - keyword, - title, - description, -}: HomeFeatureProps) { - return ( -
- -

{keyword}

-

{title}

-

{description}

-
- ); -} - diff --git a/src/pages/home/home-footer/home-footer-bottom.tsx b/src/pages/home/home-footer/home-footer-bottom.tsx new file mode 100644 index 00000000..9739924e --- /dev/null +++ b/src/pages/home/home-footer/home-footer-bottom.tsx @@ -0,0 +1,31 @@ +import styles from "../styles/home-footer.module.css"; +import icFacebook from "@assets/images/ic_facebook.png"; +import icInstagram from "@assets/images/ic_instagram.png"; +import icTwitter from "@assets/images/ic_twitter.png"; +import icYoutube from "@assets/images/ic_youtube.png"; + +export default function HomeFooterBottom() { + return ( +
+ ); +} diff --git a/src/pages/home/home-footer/home-footer-top.tsx b/src/pages/home/home-footer/home-footer-top.tsx new file mode 100644 index 00000000..2558d6ed --- /dev/null +++ b/src/pages/home/home-footer/home-footer-top.tsx @@ -0,0 +1,19 @@ +import styles from "../styles/home-footer.module.css"; +import footerHome from "@assets/images/footer-home.png"; + +export default function HomeFooterTop() { + return ( +
+

+ 믿을 수 있는 +
+ 판다마켓 중고 거래 +

+ 판다 캐릭터 +
+ ); +} diff --git a/src/pages/home/home-footer/home-footer.tsx b/src/pages/home/home-footer/home-footer.tsx new file mode 100644 index 00000000..126af024 --- /dev/null +++ b/src/pages/home/home-footer/home-footer.tsx @@ -0,0 +1,12 @@ +import styles from "../styles/home-footer.module.css"; +import HomeFooterTop from "./home-footer-top"; +import HomeFooterBottom from "./home-footer-bottom"; + +export default function HomeFooter() { + return ( +
+ + +
+ ); +} diff --git a/src/pages/home/home-header/home-header.tsx b/src/pages/home/home-header/home-header.tsx new file mode 100644 index 00000000..87ef21be --- /dev/null +++ b/src/pages/home/home-header/home-header.tsx @@ -0,0 +1,31 @@ +import logoIcon from "@assets/images/logo-icon.svg"; +import logoTypo from "@assets/images/logo-typo.svg"; +import styles from "../styles/home-header.module.css"; +import { Link } from "react-router-dom"; + +interface HomeHeaderProps { + isMobile: boolean; +} + +export default function HomeHeader({ isMobile }: HomeHeaderProps) { + return ( +
+ + {isMobile || ( + 판다마켓 아이콘 + )} + 판다마켓 + + + 로그인 + +
+ ); +} diff --git a/src/pages/home/home-main/home-feature.tsx b/src/pages/home/home-main/home-feature.tsx new file mode 100644 index 00000000..52b3beab --- /dev/null +++ b/src/pages/home/home-main/home-feature.tsx @@ -0,0 +1,28 @@ +import { Banner } from "@/constants/bannerData"; +import styles from "../styles/home-feature.module.css"; + +export default function HomeFeature({ + image, + keyword, + title, + description, +}: Banner) { + return ( +
+ +
+

+ {keyword} +

+

+ {title} +

+

+ {description} +

+
+
+ ); +} diff --git a/src/pages/home/home-main/home-main.tsx b/src/pages/home/home-main/home-main.tsx new file mode 100644 index 00000000..400c196f --- /dev/null +++ b/src/pages/home/home-main/home-main.tsx @@ -0,0 +1,44 @@ +import styles from "../styles/home.module.css"; +import { Link } from "react-router-dom"; +import heroHome from "@assets/images/hero-home.png"; +import { bannerData } from "@/constants/bannerData"; +import HomeFeature from "./home-feature"; +import useMediaQuery from "@/hooks/useMediaQuery"; + +interface HomeMainProps { + isMobile: boolean; +} + +export default function HomeMain({ isMobile }: HomeMainProps) { + const isDesktop = useMediaQuery("(min-width: 1080px)"); + + return ( +
+
+
+

+ 일상의 모든 물건을{(isMobile || isDesktop) &&
} 거래해보세요 +

+ + 구경하러 가기 + +
+ 판다마켓 +
+
+ {bannerData.map((banner, idx) => ( + + ))} +
+
+ ); +} diff --git a/src/pages/home/home.tsx b/src/pages/home/home.tsx index 7d22241a..77b6ab91 100644 --- a/src/pages/home/home.tsx +++ b/src/pages/home/home.tsx @@ -1,65 +1,16 @@ -import logoIcon from "@assets/images/logo-icon.svg"; -import logoTypo from "@assets/images/logo-typo.svg"; -import heroHome from "@assets/images/hero-home.png"; -import bannerHome01 from "@assets/images/banner-home-01.png"; -import bannerHome02 from "@assets/images/banner-home-02.png"; -import bannerHome03 from "@assets/images/banner-home-03.png"; -import { Link } from "react-router-dom"; -import HomeFeature from "./home-feature"; - -const banners = [ - { - image: bannerHome01, - keyword: "Hot item", - title: "인기 상품을 확인해보세요", - description: "가장 HOT한 중고거래 물품을 판다 마켓에서 확인해보세요", - }, - { - image: bannerHome02, - keyword: "Search", - title: "구매를 원하는 상품을 검색하세요", - description: "구매하고 싶은 물품은 검색해서 쉽게 찾아보세요", - }, - { - image: bannerHome03, - keyword: "register", - title: "판매를 원하는 상품을 등록하세요", - description: "어떤 물건이든 판매하고 싶은 상품을 쉽게 등록하세요", - }, -]; +import useMediaQuery from "@/hooks/useMediaQuery"; +import HomeFooter from "./home-footer/home-footer"; +import HomeMain from "./home-main/home-main"; +import HomeHeader from "./home-header/home-header"; export default function Home() { + const isMobile = useMediaQuery("(max-width:768px"); + return ( <> -
- - 판다마켓 아이콘 - 판다마켓 - - - 로그인 - -
-
-
-

일상의 모든 물건을 거래해보세요

- - 구경하러 가기 - - 판다마켓 -
-
- {banners.map((banner, idx) => ( - - ))} -
-
+ + + ); } diff --git a/src/pages/home/styles/home-feature.module.css b/src/pages/home/styles/home-feature.module.css new file mode 100644 index 00000000..49c2235a --- /dev/null +++ b/src/pages/home/styles/home-feature.module.css @@ -0,0 +1,52 @@ +.home-feature { + width: 100%; + max-width: 988px; + height: auto; + margin: 40px auto; + padding: 0 16px; + background-color: #fcfcfc; +} + +.home-feature__image { + width: 100%; + height: auto; +} + +.home-feature__text-wrapper { + width: 100%; + margin-top: 24px; +} + +.home-feature__keyword { + color: var(--primary-100); +} + +.home-feature__title { + color: var(--gray-700); +} + +.home-feature__description { + white-space: pre-line; + color: var(--gray-700); +} + +@media (min-width: 768px) { + .home-feature { + margin-top: 0; + margin-bottom: 52px; + padding: 0 24px; + } +} + +@media (min-width: 1024px) { + .home-feature { + margin: 138px auto; + display: flex; + align-items: center; + gap: 64px; + } + + .home-feature__image { + max-width: 579px; + } +} diff --git a/src/pages/home/styles/home-footer.module.css b/src/pages/home/styles/home-footer.module.css new file mode 100644 index 00000000..6456d742 --- /dev/null +++ b/src/pages/home/styles/home-footer.module.css @@ -0,0 +1,68 @@ +.footer { + background-color: #0d0d22; + color: #ffffff; + text-align: center; +} + +.footer__top { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + min-height: 540px; + background-color: #d7e8ff; /* 연한 하늘색 */ +} + +.footer__slogan { + padding-top: 121px; + color: #333333; + margin-bottom: 32px; +} + +.footer__mascots { + width: 100%; + max-width: 747px; + height: auto; + margin-top: auto; +} + +.footer__bottom { + height: 160px; + display: flex; + flex-direction: row; + justify-content: space-around; + margin-top: 32px; + gap: 24px; +} + +.footer__nav { + display: flex; + gap: 24px; + font-size: 14px; + color: #cccccc; +} + +.footer__nav a { + color: inherit; + text-decoration: none; +} + +.footer__socials { + display: flex; + gap: 16px; +} + +.footer__socials a { + font-size: 18px; + color: #ffffff; + text-decoration: none; +} + +.footer__copyright { + font-size: 13px; + color: #aaaaaa; + margin-top: 8px; +} + +@media (min-width: 1024px) { +} diff --git a/src/pages/home/styles/home-header.module.css b/src/pages/home/styles/home-header.module.css new file mode 100644 index 00000000..0e4ca510 --- /dev/null +++ b/src/pages/home/styles/home-header.module.css @@ -0,0 +1,35 @@ +.header { + width: 100%; + height: 70px; + padding: 9.5px 16px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.logo { + display: flex; + gap: 8.6px; +} + +.logoIcon { + width: 40px; +} + +.logoTypo { + position: relative; + top: 1.5px; + width: 103px; +} + +.btn-login { + width: 128px; + height: 48px; + padding: 12px 23px; + background-color: var(--primary-100); + border-radius: 8px; + color: var(--gray-100); + text-decoration: none; + align-content: center; + text-align: center; +} diff --git a/src/pages/home/styles/home.module.css b/src/pages/home/styles/home.module.css new file mode 100644 index 00000000..8d72edaa --- /dev/null +++ b/src/pages/home/styles/home.module.css @@ -0,0 +1,80 @@ + + +.hero { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + min-height: 540px; + background-color: #cfe5ff; + align-items: center; + text-align: center; + overflow: hidden; +} + +.hero-content-wrapper { + display: flex; + flex-direction: column; + align-items: center; +} + +.hero__title { + margin-top: 48px; + color: var(--gray-700); +} + +.hero__btn { + width: fit-content; + height: 48px; + padding: 12px 71px; + margin-top: 18px; + background-color: var(--primary-100); + border-radius: 40px; + color: var(--gray-50); + text-decoration: none; +} + +.hero__image { + width: 100%; + min-width: 448px; + max-width: 746px; + height: auto; + margin-top: auto; +} + +.features { + margin-top: 52px; +} + +.features > *:nth-child(even) { + text-align: right; +} + +@media (min-width: 768px) { + .hero__btn { + padding: 12px 96px; + } + + .features { + margin-top: 24px; + } +} + +@media (min-width: 1024px) { + .hero { + flex-direction: row; + justify-content: center; + } + + .hero-content-wrapper { + align-items: baseline; + } + + .hero__title { + text-align: left; + } + + .features > *:nth-child(even) { + flex-direction: row-reverse; + } +} From cebcdb1041799c466785509b0d6e650251b849fb Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 15 Apr 2025 22:10:39 +0900 Subject: [PATCH 26/46] =?UTF-8?q?:lipstick:=20=ED=8F=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=8A=A4=ED=83=80=EC=9D=BC=EC=9D=84=20=EC=9C=84=ED=95=9C=20CSS?= =?UTF-8?q?=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.tsx | 1 + src/styles/fonts.css | 54 ++++++++++++++++++++++++++++++++++++++++++++ src/styles/index.css | 34 ---------------------------- 3 files changed, 55 insertions(+), 34 deletions(-) create mode 100644 src/styles/fonts.css diff --git a/src/main.tsx b/src/main.tsx index 780cd6eb..92a27894 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -2,6 +2,7 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import "@/styles/reset.css"; import "@/styles/index.css"; +import "@/styles/fonts.css"; import App from "./App.tsx"; createRoot(document.getElementById("root")!).render( diff --git a/src/styles/fonts.css b/src/styles/fonts.css new file mode 100644 index 00000000..c598e948 --- /dev/null +++ b/src/styles/fonts.css @@ -0,0 +1,54 @@ +.font-3xl { + font-size: 32px; + line-height: 42px; +} + +.font-2xl { + font-size: 24px; + line-height: 32px; +} + +.font-xl { + font-size: 20px; + line-height: 32px; +} +.font-2lg { + font-size: 18px; + line-height: 26px; +} + +.font-lg { + font-size: 16px; + line-height: 26px; +} + +.font-md { + font-size: 14px; + line-height: 24px; +} + +.font-sm { + font-size: 13px; + line-height: 22px; +} + +.font-xs { + font-size: 12px; + line-height: 18px; +} + +.font-bold { + font-weight: 700; +} + +.font-semibold { + font-weight: 600; +} + +.font-medium { + font-weight: 500; +} + +.font-regular { + font-weight: 400; +} diff --git a/src/styles/index.css b/src/styles/index.css index 3f85b1f0..9d34b298 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -17,40 +17,6 @@ /* Error */ --error: #f74747; - - /* 3xl */ - --font-3xl-size: 32px; - --font-3xl-line-height: 42px; - - /* 2xl */ - --font-2xl-size: 28px; - --font-2xl-line-height: 38px; - - /* xl */ - --font-xl-size: 24px; - --font-xl-line-height: 34px; - - /* lg */ - --font-lg-size: 20px; - --font-lg-line-height: 30px; - - /* md */ - --font-md-size: 18px; - --font-md-line-height: 28px; - - /* sm */ - --font-sm-size: 16px; - --font-sm-line-height: 26px; - - /* xs */ - --font-xs-size: 14px; - --font-xs-line-height: 24px; - - /* font-weight */ - --weight-bold: 700; - --weight-semibold: 600; - --weight-medium: 500; - --weight-regular: 400; } * { box-sizing: border-box; From e8607dfab415bbf2f3ad242c2366be58891d2dae Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 15 Apr 2025 22:10:52 +0900 Subject: [PATCH 27/46] =?UTF-8?q?:bug:=20=ED=99=88=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index 918925ab..19d36b15 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import Home from "@/pages/home.tsx"; +import Home from "@/pages/home/home"; import { BrowserRouter, Route, Routes } from "react-router-dom"; function App() { From 46b01b65789e8b7fd4fe3947edb646b2159b03f2 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Tue, 15 Apr 2025 22:23:30 +0900 Subject: [PATCH 28/46] =?UTF-8?q?:sparkles:=20=EB=A1=9C=EA=B3=A0=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A5=BC=20=EA=B3=B5?= =?UTF-8?q?=ED=86=B5=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A1=9C=20?= =?UTF-8?q?=EB=B9=BC=EA=B3=A0=20=EB=B0=8F=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/logo.tsx | 25 +++++++++++++++++++ src/pages/home/home-header/home-header.tsx | 23 +++-------------- .../home/home-header/home-login-button.tsx | 13 ++++++++++ 3 files changed, 42 insertions(+), 19 deletions(-) create mode 100644 src/components/logo.tsx create mode 100644 src/pages/home/home-header/home-login-button.tsx diff --git a/src/components/logo.tsx b/src/components/logo.tsx new file mode 100644 index 00000000..98351489 --- /dev/null +++ b/src/components/logo.tsx @@ -0,0 +1,25 @@ +import logoIcon from "@assets/images/logo-icon.svg"; +import logoTypo from "@assets/images/logo-typo.svg"; +import { Link } from "react-router-dom"; +import styles from "@/pages/home/styles/home-header.module.css"; + +interface LogoProps { + isMobile?: boolean; +} + +export default function Logo({ isMobile = false }: LogoProps) { + return ( + <> + + {!isMobile && ( + 판다마켓 아이콘 + )} + 판다마켓 + + + ); +} diff --git a/src/pages/home/home-header/home-header.tsx b/src/pages/home/home-header/home-header.tsx index 87ef21be..fcce11a2 100644 --- a/src/pages/home/home-header/home-header.tsx +++ b/src/pages/home/home-header/home-header.tsx @@ -1,7 +1,6 @@ -import logoIcon from "@assets/images/logo-icon.svg"; -import logoTypo from "@assets/images/logo-typo.svg"; +import Logo from "@/components/logo"; import styles from "../styles/home-header.module.css"; -import { Link } from "react-router-dom"; +import HomeLoginButton from "./home-login-button"; interface HomeHeaderProps { isMobile: boolean; @@ -10,22 +9,8 @@ interface HomeHeaderProps { export default function HomeHeader({ isMobile }: HomeHeaderProps) { return (
- - {isMobile || ( - 판다마켓 아이콘 - )} - 판다마켓 - - - 로그인 - + +
); } diff --git a/src/pages/home/home-header/home-login-button.tsx b/src/pages/home/home-header/home-login-button.tsx new file mode 100644 index 00000000..183d3630 --- /dev/null +++ b/src/pages/home/home-header/home-login-button.tsx @@ -0,0 +1,13 @@ +import styles from "../styles/home-header.module.css"; +import { Link } from "react-router-dom"; + +export default function HomeLoginButton() { + return ( + + 로그인 + + ); +} From 89330d67cc1d314c124e63d487a08e27ca668959 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Wed, 16 Apr 2025 22:00:43 +0900 Subject: [PATCH 29/46] =?UTF-8?q?:sparkles:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EB=B0=8F=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 19d36b15..468a3cb6 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,7 @@ import Home from "@/pages/home/home"; import { BrowserRouter, Route, Routes } from "react-router-dom"; +import Login from "./pages/login/login"; +import SignUp from "./pages/sign-up/sign-up"; function App() { return ( @@ -7,8 +9,8 @@ function App() { } /> - 로그인 페이지} /> - 회원가입 페이지} /> + } /> + } /> From 7f5ccaed2aa60272cafb44ea5cc4f0e0d98b5a33 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Wed, 16 Apr 2025 22:01:24 +0900 Subject: [PATCH 30/46] =?UTF-8?q?:sparkles:=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B7=B8=EB=A3=B9,=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EB=B8=94=20=EB=B0=8F=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80(=EB=B3=B5=ED=95=A9=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=ED=8C=A8=ED=84=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/input.module.css | 27 +++++++++++ src/components/input.tsx | 79 +++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/components/input.module.css create mode 100644 src/components/input.tsx diff --git a/src/components/input.module.css b/src/components/input.module.css new file mode 100644 index 00000000..99c3dd9c --- /dev/null +++ b/src/components/input.module.css @@ -0,0 +1,27 @@ +.input__group { + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; + text-align: left; +} + +.input__label { + color: var(--gray-800); +} + +.input__field { + width: 100%; + height: 56px; + padding: 16px 24px; + background-color: var(--gray-100); + border: none; + border-radius: 12px; +} + +.input__field::placeholder { + color: var(--gray-400); + font-weight: 400; + font-size: 16px; + line-height: 26px; +} diff --git a/src/components/input.tsx b/src/components/input.tsx new file mode 100644 index 00000000..01d6b0e6 --- /dev/null +++ b/src/components/input.tsx @@ -0,0 +1,79 @@ +import { createContext, useContext, useState } from "react"; +import styles from "./input.module.css"; + +type inputType = "email" | "username" | "password"; + +interface InputProps { + type: inputType; + children: React.ReactNode; +} + +interface InputLabelProps { + label: string; +} + +interface InputFieldProps { + placeholder: string; +} + +interface InputContextProps { + value: string; + handleChange: (e: React.ChangeEvent) => void; + type: inputType; +} + +const InputContext = createContext(undefined); + +const useInputContext = (): InputContextProps => { + const context = useContext(InputContext); + if (!context) { + throw new Error("Input.Group으로 감싸져야 합니다."); + } + return context; +}; + +function InputGroup({ type, children }: InputProps) { + const [value, setValue] = useState(""); + + const handleChange = (e: React.ChangeEvent) => { + setValue(e.target.value); + }; + + return ( + +
{children}
+
+ ); +} + +function InputLabel({ label }: InputLabelProps) { + return ( + + ); +} + +function InputField({ placeholder }: InputFieldProps) { + const { value, handleChange, type } = useInputContext(); + + const inputType = type === "username" ? "text" : type; + + return ( + + ); +} + +const Input = { + Group: InputGroup, + Label: InputLabel, + Field: InputField, +}; + +export default Input; From 245f5d71d7effe932412714b5bd2028401500139 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Wed, 16 Apr 2025 22:01:35 +0900 Subject: [PATCH 31/46] =?UTF-8?q?:sparkles:=20=EA=B0=84=ED=8E=B8=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/simple-auth.module.css | 19 +++++++++++++++++++ src/components/simple-auth.tsx | 15 +++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/components/simple-auth.module.css create mode 100644 src/components/simple-auth.tsx diff --git a/src/components/simple-auth.module.css b/src/components/simple-auth.module.css new file mode 100644 index 00000000..c64c66bf --- /dev/null +++ b/src/components/simple-auth.module.css @@ -0,0 +1,19 @@ +.simple-auth { + width: 100%; + max-width: 640px; + height: 74px; + padding: 16px 23px; + display: flex; + gap: 16px; + background-color: #e6f2ff; + align-items: center; + border-radius: 8px; +} + +.simple-auth__span { + flex-grow: 1; +} + +.simple-auth__image { + width: 42px; +} diff --git a/src/components/simple-auth.tsx b/src/components/simple-auth.tsx new file mode 100644 index 00000000..af4a38cc --- /dev/null +++ b/src/components/simple-auth.tsx @@ -0,0 +1,15 @@ +import googleAuth from "@assets/images/google-auth.png"; +import kakaoAuth from "@assets/images/kakao-auth.png"; +import styles from "./simple-auth.module.css"; + +export default function SimpleAuth() { + return ( +
+ + 간편 로그인하기 + + + +
+ ); +} From 982dc46ef78e9ee5d62eb1e0b6b6f2d6017a0597 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Wed, 16 Apr 2025 22:01:45 +0900 Subject: [PATCH 32/46] =?UTF-8?q?:sparkles:=20=EC=A0=9C=EC=B6=9C=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=8F=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/submit-button.module.css | 12 ++++++++++++ src/components/submit-button.tsx | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/components/submit-button.module.css create mode 100644 src/components/submit-button.tsx diff --git a/src/components/submit-button.module.css b/src/components/submit-button.module.css new file mode 100644 index 00000000..14db0396 --- /dev/null +++ b/src/components/submit-button.module.css @@ -0,0 +1,12 @@ +.submit-button { + width: 100%; + padding: 12px 124px; + background-color: var(--gray-400); + border: none; + border-radius: 40px; + color: var(--gray-100); +} + +.submit-button:hover { + cursor: pointer; +} diff --git a/src/components/submit-button.tsx b/src/components/submit-button.tsx new file mode 100644 index 00000000..d18472de --- /dev/null +++ b/src/components/submit-button.tsx @@ -0,0 +1,16 @@ +import styles from "./submit-button.module.css"; + +interface SubmitButtonProps { + children: string; +} + +export default function SubmitButton({ children }: SubmitButtonProps) { + return ( + + ); +} From 4b85a9a491c275908f989be36284e0feaed03654 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Wed, 16 Apr 2025 22:01:52 +0900 Subject: [PATCH 33/46] =?UTF-8?q?:sparkles:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=8F=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/login/login.module.css | 15 +++++++++++++++ src/pages/login/login.tsx | 21 +++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/pages/login/login.module.css create mode 100644 src/pages/login/login.tsx diff --git a/src/pages/login/login.module.css b/src/pages/login/login.module.css new file mode 100644 index 00000000..ebaf910c --- /dev/null +++ b/src/pages/login/login.module.css @@ -0,0 +1,15 @@ +.login__form { + max-width: 640px; + padding: 80px 16px 0px; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; +} + +@media (min-width: 768px) { + .login__form { + padding: 190px 52px 0px; + } +} diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx new file mode 100644 index 00000000..89d15166 --- /dev/null +++ b/src/pages/login/login.tsx @@ -0,0 +1,21 @@ +import Input from "@/components/input"; +import Logo from "@/components/logo"; +import SubmitButton from "@/components/submit-button"; +import styles from "./login.module.css"; + +export default function Login() { + return ( +
+ + + + + + + + + + 로그인 + + ); +} From 97317c5b329e9a93a5c7e84658a278c1cf848c55 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Wed, 16 Apr 2025 22:02:13 +0900 Subject: [PATCH 34/46] =?UTF-8?q?:sparkles:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EB=B0=8F=20=EC=8A=A4=ED=83=80=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/google-auth.png | Bin 0 -> 3351 bytes src/assets/images/kakao-auth.png | Bin 0 -> 2702 bytes src/assets/images/password-toggle_off.png | Bin 0 -> 847 bytes src/assets/images/password-toggle_on.png | Bin 0 -> 709 bytes src/pages/sign-up/sign-up.module.css | 15 ++++++++++ src/pages/sign-up/sign-up.tsx | 33 ++++++++++++++++++++++ 6 files changed, 48 insertions(+) create mode 100644 src/assets/images/google-auth.png create mode 100644 src/assets/images/kakao-auth.png create mode 100644 src/assets/images/password-toggle_off.png create mode 100644 src/assets/images/password-toggle_on.png create mode 100644 src/pages/sign-up/sign-up.module.css create mode 100644 src/pages/sign-up/sign-up.tsx diff --git a/src/assets/images/google-auth.png b/src/assets/images/google-auth.png new file mode 100644 index 0000000000000000000000000000000000000000..53575dc086d8d4cb039401ba685e7d9971e256b9 GIT binary patch literal 3351 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/kakao-auth.png b/src/assets/images/kakao-auth.png new file mode 100644 index 0000000000000000000000000000000000000000..000d07e3360427044d6008fd0765583cb0b18478 GIT binary patch literal 2702 zcmV;93UT#`P)(8+jK<5h$F`x!GlePc(a%V+ z%cqLM@0Ww%pB~%T#$l-qTQsE716yC+g|UV zD74bm<@fW=H42c;jSM9cX~`7fU}J5w28haeI1BQA|Gj4P#=i@$CHI zk>&Xd{I|E1a4?vzq*S}r%4>_t6YbS^t0s9)9@gpm0_ z*q)wN>goNZFT$dT(s=e+cg`~B8^5e`>90T1-Mg;?6EYv$VtaZ|k#6#>w9dIwig}AP z0;`;Q@K0KpFS!b)6$H7vcV5e&w@qVL+pVCc3o|4x%cn*A{egw*w$9DX3|$@jhjlX5 z1g!PJ)Nge*0jXUx9JOnw2YIMLyK&M)wTcOFOxCe&s$~@pTHoWD5&O+yVjp6cNdwg^ zrj2${8C^VlN&4Kq7Q}P{_y1zLQ%jpF-ToBZ-m*|#?mqp+ziUQJfMdNmzD_!@-QE(E zhxkQOWMTe|^;c^w%ifxf;}#_1c(w%9Q9PcW{twkEQx7(*x`7((Q#|tY+JGF^P%F{l z3fGdW=L0ckAAL`Xv|{3Lof$GBAwf#GS!cU!@GlLWrk0k%4gQwwIX#wL(T)9!(bd%~ zdo!&C-SC{ODh&;vwt8MDsucRp)zzPld>-pMI~(M_)2`My`{+9wz49TcU}TJVT}TL} zfj3l)+^qA`&@J6C%Q82mcdNApfLoytYZ`o&uEJoQz!g=*YGZ z6CllLcCmbC`h%1RIK>3T#(WY5&c!R7iHN{h1v zMf>M$CWfS|+Q3R|afgOKur5qFps$`U=5d{l71{QxfM2f2w23K2cpcFlfyn00?bioZ z>7@-W1TJ7HVp`j2I2TS89@Ru-w@=(kzvNib^2@AM!=k%13};L|_*YPAT|{}pttuCK z4zK5n7ui(k@$7ep>opXGb=N?Pp)9B!P0Im6!&yZ?FVmqLH_upYr*m03Vjx$wn+|xu z?YkYven#b7Y?K8(x1Y+CLw;mO{)s>2nKlr!oS_R?yR-0tro(xm+-PspBWRKoK<}em zoYB1)PJwN3A<_QYe{LYlKo7_Uu3xN8)-e2>sv||pJqW8S=&J{m2Q2f^0lmmpcM?(FqhjP=1+7_BKK9^qW zn_--^%)%=~?}fkn-lGaiNDD?YO=q8t+HZ5JO>)$3hLP}1Pz=ENB_>2fEfszJSb!Z2 zZWuXtf5;KECHizR{cYbO^XZ4OC}4O2GeiKIiLJbO`F7@jI&52e*s6=hV$Ig;z>(Hz zySmMhdZ;kiB;(ncWV%^CW+DNs>`&uotY};dW-AA zR>X9(PT*Rx=f>W3lh?&{M*QWM?lVkal_R4cDUHEb0ypclmb)#4@+Q%J(#TgX?Wb*( zwI(K+Y|_m-LD6YV+v|PWZgAyHmul52ffOv+*zqh{XnoN^I+?HzO4najb$w^L1gjjs z`D^XnzhGb~X6|(t+oI^WJj_~{Lit8}=yJj;$FBa$m%>C)K#M}IZsTbtoDAq~`eu-b1g2g`ABmwoA@_L=~eGEKVQ;vr%8yhqXutks~=~pYW{)HNThk8WpBpw7~Nk%M5LabvJc8DtTAHMSWKkMngfRvxW0{{R307*qo IM6N<$g2S^u?*IS* literal 0 HcmV?d00001 diff --git a/src/assets/images/password-toggle_off.png b/src/assets/images/password-toggle_off.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4eeaf42441f38906f05f0ecd133f9bafcc4c93 GIT binary patch literal 847 zcmV-V1F-ywP)8Crv3#sQ4pcx7B1c>Hv*b85eV@@3z~Q<+`P5Dd6V8Sq0rt4)}%&2J-OaI z(RwHv@UZ>|)suF+^L(##m+evlF`SHFvhB=!GxNP4-weQioEM3?Cy~jSg(O@sG-uGX zn{feRV{&%k+V0kR&bw&x;bR>vTbDvcc#c9fgpjrE%{AjJ0^yxZO)nP7GLHhYq2`r* zGxRepQ7j=q_>}!7eMT@4%vCm5%`*wSB;;rut&oPWRVfe*)|^AQoVI1@NYouPvh?K;FyfSp=5cbzX>QWEK|UP?R6^Lmm;+-U@W~ z8d8Z&B9RQc1c@1vAwon6>}t})Tr%P)h)c&MbOW-nMt@;$xOb0KkY{^K)AZvEEX(Bj zN`$V6-fb35S51BrAvmLkU!F<=`%SIYs<{N*D4|4(hH-C{orCgSQzDs~U3g9nO`?L5 z*VoyrlL&H7^W7#>lT4?nebE>k)~g@cKG-*0Lro6QaKJ;uGXAw&E{uB*XL2IV@0Qn} zxhug3S8f1B?+v~GU@>7!k}9<83@9PpzVR|tvTSREv!_0m=zb)-GKL;#OO{ndjb|dd zv9B-5?wf2W>jV3p9@z>~Z&_VF^dw-gg0z;FM2YhqqSN8KT<0S2g31=hfYJrZwqzA5 zQk*nN_lEa@?DZC12)J)kGmCgafzacz`x_iT6QsbQ*mrtnYK~9B1%aOl(tkIz1a)>z+N!Qv5b6d4snlJ#0dRtrU8O)Fn+icAxhf&uh1|e5sE=T^ zs|Nc`XB>LI%}DT`$20TI&o>5mkbf<>kJ0hlcSTr)MTM#$&xG1XRPJ=to8RZV z6Tq^X`P{G#Ux!w{d1e^y(Q2Q|&dZK?`IWbAYOSx;Ho2zl(k^9q% zT`&Tp&5^2HO?x)}+}R1R3QpLWe(kkm{j*Zznh%q$J$~mCP>~Rv+-+EMoS`2j@aCk= z0If}sRf{CU)Zpd%2hO6%`oqg{|6n@lJ(l(;0yD^Enz5buh_A$8FmnrlG!3{QHyJ!C zk0FtMa~( z)N^%RJ_-@FV*qDz=1PCL?6r(!z}z0+04%~50zTn?f0LeCL5mM>_T|i70Yvs1YkZh8 z=#4;8D~`$yD^^8}Lb91v=SkD0ugt5qa!(qhF~PFze2_B+L?8ezzsqxgg3y=;ewYlN zMv|>Ph(Y)|QzluhWwLzfxwqRCLr&ETm3Q8v7lh}e?B3y?Y3F|GOCrKX|00000NkvXXu0mjf=FdQ` literal 0 HcmV?d00001 diff --git a/src/pages/sign-up/sign-up.module.css b/src/pages/sign-up/sign-up.module.css new file mode 100644 index 00000000..e09ef375 --- /dev/null +++ b/src/pages/sign-up/sign-up.module.css @@ -0,0 +1,15 @@ +.sign-up__form { + max-width: 640px; + padding: 24px 16px 0px; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; +} + +@media (min-width: 768px) { + .sign-up__form { + padding: 48px 52px 0px; + } +} diff --git a/src/pages/sign-up/sign-up.tsx b/src/pages/sign-up/sign-up.tsx new file mode 100644 index 00000000..8a2d0056 --- /dev/null +++ b/src/pages/sign-up/sign-up.tsx @@ -0,0 +1,33 @@ +import Input from "@/components/input"; +import Logo from "@/components/logo"; +import SimpleAuth from "@/components/simple-auth"; +import SubmitButton from "@/components/submit-button"; +import styles from "./sign-up.module.css"; + +export default function SignUp() { + return ( + <> +
+ + + + + + + + + + + + + + + + + + 회원가입 + + + + ); +} From 3a775f7e39cde4e683b7bd3028e34f6e381cd831 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:51:06 +0900 Subject: [PATCH 35/46] =?UTF-8?q?:sparkles:=20SVG=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EC=B6=94=EA=B0=80:=20=ED=99=94=EC=82=B4=ED=91=9C,?= =?UTF-8?q?=20=EB=B9=88=20=ED=95=98=ED=8A=B8,=20=EA=BD=89=20=EC=B0=AC=20?= =?UTF-8?q?=ED=95=98=ED=8A=B8,=20=ED=94=84=EB=A1=9C=ED=95=84,=20=EA=B2=80?= =?UTF-8?q?=EC=83=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/ic_arrow_down.svg | 3 +++ src/assets/images/ic_heart-blank.svg | 3 +++ src/assets/images/ic_heart-full.svg | 3 +++ src/assets/images/ic_profile.svg | 24 ++++++++++++++++++++++++ src/assets/images/ic_search.svg | 3 +++ 5 files changed, 36 insertions(+) create mode 100644 src/assets/images/ic_arrow_down.svg create mode 100644 src/assets/images/ic_heart-blank.svg create mode 100644 src/assets/images/ic_heart-full.svg create mode 100644 src/assets/images/ic_profile.svg create mode 100644 src/assets/images/ic_search.svg diff --git a/src/assets/images/ic_arrow_down.svg b/src/assets/images/ic_arrow_down.svg new file mode 100644 index 00000000..8308690f --- /dev/null +++ b/src/assets/images/ic_arrow_down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/ic_heart-blank.svg b/src/assets/images/ic_heart-blank.svg new file mode 100644 index 00000000..86d4af77 --- /dev/null +++ b/src/assets/images/ic_heart-blank.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/ic_heart-full.svg b/src/assets/images/ic_heart-full.svg new file mode 100644 index 00000000..557bade0 --- /dev/null +++ b/src/assets/images/ic_heart-full.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/ic_profile.svg b/src/assets/images/ic_profile.svg new file mode 100644 index 00000000..0480454d --- /dev/null +++ b/src/assets/images/ic_profile.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/ic_search.svg b/src/assets/images/ic_search.svg new file mode 100644 index 00000000..52241e6d --- /dev/null +++ b/src/assets/images/ic_search.svg @@ -0,0 +1,3 @@ + + + From bf6007e2e9d7f947324ddd0da6b2f111e187cb89 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:51:20 +0900 Subject: [PATCH 36/46] =?UTF-8?q?:sparkles:=20=EC=A0=9C=ED=92=88=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EA=B8=B0=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/getProducts.ts | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/api/getProducts.ts diff --git a/src/api/getProducts.ts b/src/api/getProducts.ts new file mode 100644 index 00000000..62485b21 --- /dev/null +++ b/src/api/getProducts.ts @@ -0,0 +1,48 @@ +import SERVER_URL from "@/constants/server-url"; + +export interface Product { + id: number; + name: string; + description: string; + price: number; + tags: string[]; + images: string[]; + ownerId: number; + favoriteCount: number; + createdAt: string; + updatedAt: string; +} + +export type Products = Product[]; + +export interface Query { + page: number; + pageSize: number; + orderBy: "recent" | "favorite"; + keyword?: string; +} + +export interface ProductsData { + list: Products; + totalCount: number; +} + +const getProducts = async (query: Query): Promise => { + const params = new URLSearchParams(); + Object.entries(query).forEach(([key, value]) => { + params.append(key, String(value)); + }); + + const url = `${SERVER_URL}/products?${params.toString()}`; + + const response = await fetch(url); + if (!response.ok) { + throw new Error( + `상품 데이터를 불러오는 데 실패했습니다. ${response.status}` + ); + } + const data = await response.json(); + return data; +}; + +export default getProducts; From 683b762b6cf1f0c86c77ce9ba5b78b1e4c3d298f Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:51:30 +0900 Subject: [PATCH 37/46] =?UTF-8?q?:sparkles:=20=EC=84=9C=EB=B2=84=20URL=20?= =?UTF-8?q?=EC=83=81=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/server-url.ts | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/constants/server-url.ts diff --git a/src/constants/server-url.ts b/src/constants/server-url.ts new file mode 100644 index 00000000..551c3d80 --- /dev/null +++ b/src/constants/server-url.ts @@ -0,0 +1,3 @@ +const SERVER_URL = "https://panda-market-api.vercel.app"; + +export default SERVER_URL; From 14b4be8c50b07ad2598f5b37c611173cd149f1c1 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:51:38 +0900 Subject: [PATCH 38/46] =?UTF-8?q?:sparkles:=20=EC=A0=9C=ED=92=88=20?= =?UTF-8?q?=EC=9A=94=EC=86=8C=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=8F=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/product.module.css | 38 +++++++++++++++++++++++++++++++ src/components/product.tsx | 33 +++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/components/product.module.css create mode 100644 src/components/product.tsx diff --git a/src/components/product.module.css b/src/components/product.module.css new file mode 100644 index 00000000..3c0c7c0e --- /dev/null +++ b/src/components/product.module.css @@ -0,0 +1,38 @@ +.card { + width: 100%; + height: 100%; +} + +.image { + width: 100%; + aspect-ratio: 1 / 1; + border-radius: 16px; + object-fit: cover; + object-position: center; +} + +.name { + margin-top: 16px; + composes: font-md font-medium from global; +} + +.price { + margin-top: 6px; + composes: font-lg font-bold from global; +} + +.likeButton { + background: none; + border: none; + padding: 0; + margin: 0; + display: flex; + align-items: center; + gap: 4px; + cursor: pointer; + line-height: 0; +} + +.favoriteCount { + composes: font-xs font-medium from global; +} diff --git a/src/components/product.tsx b/src/components/product.tsx new file mode 100644 index 00000000..44345622 --- /dev/null +++ b/src/components/product.tsx @@ -0,0 +1,33 @@ +import { Product } from "@/api/getProducts"; +import heartBlank from "@assets/images/ic_heart-blank.svg"; +import heartFull from "@assets/images/ic_heart-full.svg"; +import { useState } from "react"; +import styles from "./product.module.css"; + +interface ProductElementProps { + product: Product; +} + +export default function ProductElement({ + product +}: ProductElementProps) { + const { name, price, images, favoriteCount } = product; + const [isLiked, setIsLiked] = useState(false); + + const handleClick: () => void = () => { + setIsLiked((prev) => !prev); + //좋아요를 서버에 요청 보내야 함 + }; + + return ( +
+ +

{name}

+

{price}원

+ +
+ ); +} From 801c0be1519b34e5e571b317da6fb13598883955 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:51:48 +0900 Subject: [PATCH 39/46] =?UTF-8?q?:sparkles:=20=EB=B2=A0=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=83=81=ED=92=88=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=8F=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/items/items-best-products.tsx | 36 +++++++++++++++++++ .../styles/items-best-products.module.css | 20 +++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/pages/items/items-best-products.tsx create mode 100644 src/pages/items/styles/items-best-products.module.css diff --git a/src/pages/items/items-best-products.tsx b/src/pages/items/items-best-products.tsx new file mode 100644 index 00000000..1e5fd0e8 --- /dev/null +++ b/src/pages/items/items-best-products.tsx @@ -0,0 +1,36 @@ +import getProducts, { Products, Query } from "@/api/getProducts"; +import ProductElement from "@/components/product"; +import { useState, useEffect } from "react"; +import styles from "./styles/items-best-products.module.css"; + +export default function BestProducts() { + const [products, setProducts] = useState([]); + + useEffect(() => { + const query: Query = { page: 1, pageSize: 4, orderBy: "favorite" }; + getProducts(query) + .then((data) => setProducts(data.list)) + .catch((error) => { + console.error("상품 데이터를 불러오는 데 실패했습니다.", error); + }) + .finally(() => { + console.log("상품 데이터 로딩 완료"); + }); + return () => { + console.log("상품 데이터 로딩 취소"); + }; + }, []); + + return ( +
+

베스트 상품

+
    + {products.map((product) => ( +
  • + +
  • + ))} +
+
+ ); +} diff --git a/src/pages/items/styles/items-best-products.module.css b/src/pages/items/styles/items-best-products.module.css new file mode 100644 index 00000000..5575eda3 --- /dev/null +++ b/src/pages/items/styles/items-best-products.module.css @@ -0,0 +1,20 @@ +.bestProducts { + margin: 0 auto; + margin-top: 24px; + max-width: 1200px; +} + +.bestProductsTitle { + composes: font-xl font-bold from global; +} + +.bestProductsList { + margin-top: 16px; + display: flex; + gap: 24px; +} + +.bestProductElement { + width: 282px; + height: 378px; +} From 10d7d0579818ea5678df61973ece57b941d307bb Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:52:03 +0900 Subject: [PATCH 40/46] =?UTF-8?q?:sparkles:=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=83=81=ED=92=88=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=B0=8F=20=EC=8A=A4=ED=83=80?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/items/items-products.tsx | 84 +++++++++++++++++++ .../items/styles/items-products.module.css | 66 +++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 src/pages/items/items-products.tsx create mode 100644 src/pages/items/styles/items-products.module.css diff --git a/src/pages/items/items-products.tsx b/src/pages/items/items-products.tsx new file mode 100644 index 00000000..822f2542 --- /dev/null +++ b/src/pages/items/items-products.tsx @@ -0,0 +1,84 @@ +import getProducts, { Products, ProductsData, Query } from "@/api/getProducts"; +import ProductElement from "@/components/product"; +import { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import styles from "./styles/items-products.module.css"; +import DropDown, { OrderBy } from "@/components/drop-down"; +import Pagination from "@/components/pagination"; + +enum PageSize { + PC = 10, + Tablet = 6, + Mobile = 4, +} + +export default function AllProducts() { + const [productsData, setProductsData] = useState({ + list: [], + totalCount: 0, + }); + const [orderBy, setOrderBy] = useState("recent"); + const [pageSize, setPageSize] = useState(10); + const [page, setPage] = useState(17); + + const products: Products = productsData.list; + const totalProductCount: number = productsData.totalCount; + const totalPage = Math.floor(totalProductCount / pageSize) + 1; + + const handleChangeOrderBy = (order: OrderBy) => { + setOrderBy(order); + }; + + const handleResize = () => { + if (window.innerWidth >= 1200) { + setPageSize(PageSize.PC); + } else if (window.innerWidth >= 768) { + setPageSize(PageSize.Tablet); + } else { + setPageSize(PageSize.Mobile); + } + }; + + useEffect(() => { + window.addEventListener("resize", handleResize); + return () => { + window.removeEventListener("resize", handleResize); + }; + }); + + useEffect(() => { + const query: Query = { page, pageSize, orderBy }; + getProducts(query) + .then((data) => setProductsData(data)) + .catch((error) => { + console.error("상품 데이터를 불러오는 데 실패했습니다.", error); + }) + .finally(() => { + console.log("상품 데이터 로딩 완료"); + }); + return () => { + console.log("상품 데이터 로딩 취소"); + }; + }, [page, orderBy, pageSize]); + + return ( +
+
+

전체 상품

+ + + 상품 등록하기 + + +
+
    + {products.map((product) => ( +
  • + +
  • + ))} +
+ +
+ ); +} diff --git a/src/pages/items/styles/items-products.module.css b/src/pages/items/styles/items-products.module.css new file mode 100644 index 00000000..0df3831d --- /dev/null +++ b/src/pages/items/styles/items-products.module.css @@ -0,0 +1,66 @@ +.allProducts { + margin: 0 auto; + margin-top: 40px; + max-width: 1200px; +} +.allProductsNav { + display: flex; + align-items: center; + gap: 12px; +} +.allProductsTitle { + flex-grow: 1; + composes: font-xl font-bold from global; +} +.allProductsSearchInput { + width: 325px; + height: 42px; + padding: 9px 20px; + padding-left: 16px; + border: none; + border-radius: 12px; + background-color: var(--gray-100); + composes: font-lg font-regular from global; +} + +.allProductsSearchInput::placeholder { + color: var(--gray-400); +} + +.addProduct { + width: auto; + height: 42px; + padding: 12px 23px; + border: none; + border-radius: 8px; + background-color: var(--primary-100); + text-decoration: none; + display: flex; + align-items: center; + color: var(--gray-100); + composes: font-lg font-semibold from global; +} + +.filter { + appearance: none; /* 표준 */ + -webkit-appearance: none; /* 사파리/크롬 */ + -moz-appearance: none; /* 파이어폭스 */ + + width: 130px; + height: 42px; + padding: 12px 20px; + border: 1px solid var(--gray-200); + border-radius: 12px; +} +.filterOption { + width: 130px; + height: 42px; + border-radius: 12px 12px 0 0; +} +.allProductsList { + margin-top: 24px; + display: grid; + grid-template-columns: repeat(5, 1fr); + grid-template-rows: repeat(2, 1fr); + gap: 24px; +} From b45405c4353c994b757b795af51d9aa951da66fc Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:52:19 +0900 Subject: [PATCH 41/46] =?UTF-8?q?:sparkles:=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EC=85=98=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=8F=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/pagination.module.css | 27 +++++++++++++++++ src/components/pagination.tsx | 43 ++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/components/pagination.module.css create mode 100644 src/components/pagination.tsx diff --git a/src/components/pagination.module.css b/src/components/pagination.module.css new file mode 100644 index 00000000..ce0b4ce9 --- /dev/null +++ b/src/components/pagination.module.css @@ -0,0 +1,27 @@ +.pagesList { + margin-top: 43px; + display: flex; + align-items: center; + justify-content: center; + gap: 4px; +} + +.el { + width: 40px; + height: 40px; +} + +.pageBtn { + width: 100%; + height: 100%; + border: 1px solid var(--gray-200); + border-radius: 20px; + color: var(--gray-500); + background-color: #ffffff; + composes: font-lg font-semibold from global; +} + +.active { + color: var(--gray-100); + background-color: #2f80ed; +} diff --git a/src/components/pagination.tsx b/src/components/pagination.tsx new file mode 100644 index 00000000..0c962947 --- /dev/null +++ b/src/components/pagination.tsx @@ -0,0 +1,43 @@ +import { SetStateAction } from "react"; +import styles from "./pagination.module.css"; + +export interface PaginationProps { + currentPage: number; + totalPage: number; + setPage: React.Dispatch>; +} + +export default function Pagination({ + currentPage, + totalPage, + setPage, +}: PaginationProps) { + let pages; + if (currentPage <= 3) { + pages = Array.from({ length: 5 }, (_, i) => i + 1); + } else if (currentPage >= totalPage - 3) { + pages = Array.from({ length: 5 }, (_, i) => i + totalPage - 4); + } else { + pages = Array.from({ length: 5 }, (_, i) => i + currentPage - 2); + } + + const handleClick = (page: number) => { + setPage(page); + }; + return ( +
    + {pages.map((page) => ( +
  • + +
  • + ))} +
+ ); +} From b14981b9523baab6fd1ee17e484c689acb23d0ce Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:52:35 +0900 Subject: [PATCH 42/46] =?UTF-8?q?:sparkles:=20=EB=93=9C=EB=A1=AD=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=B0=8F=20?= =?UTF-8?q?=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/drop-down.module.css | 53 ++++++++++++ src/components/drop-down.tsx | 120 ++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 src/components/drop-down.module.css create mode 100644 src/components/drop-down.tsx diff --git a/src/components/drop-down.module.css b/src/components/drop-down.module.css new file mode 100644 index 00000000..f11abd64 --- /dev/null +++ b/src/components/drop-down.module.css @@ -0,0 +1,53 @@ +.container { + position: relative; + width: 130px; + height: auto; +} + +.border { + border: 1px solid var(--gray-200); + border-radius: 12px; +} + +.button { + width: 100%; + height: 42px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 20px; + background-color: #ffffff; + composes: border; + composes: font-lg font-regular from global; +} + +.list { + position: absolute; + top: 100%; + left: 0; + margin-top: 8px; + width: 100%; +} + +.option { + display: flex; + width: 130px; + height: 42px; + justify-content: center; + align-items: center; + background-color: #ffffff; + composes: border; + composes: font-lg font-regular from global; +} + +.option:hover { + cursor: pointer; +} + +.list > .option:first-child { + border-radius: 12px 12px 0 0; +} + +.list > .option:last-child { + border-radius: 0 0 12px 12px; +} diff --git a/src/components/drop-down.tsx b/src/components/drop-down.tsx new file mode 100644 index 00000000..8597cc39 --- /dev/null +++ b/src/components/drop-down.tsx @@ -0,0 +1,120 @@ +import { useState, useContext, createContext, useCallback } from "react"; +import arrowDown from "@assets/images/ic_arrow_down.svg"; +import styles from "./drop-down.module.css"; + +export type OrderBy = "favorite" | "recent"; + +interface DropDownContextType { + orderBy: "favorite" | "recent"; + isOpen: boolean; + setIsOpen: React.Dispatch>; + handleClick: () => void; + handleChangeOrderBy: (order: OrderBy) => void; +} + +interface DropDownContainerProps { + orderBy: OrderBy; + handleChangeOrderBy: (order: OrderBy) => void; + children: React.ReactNode; +} + +const DropDownContext = createContext( + undefined +); + +const useDropDownContext = () => { + const context = useContext(DropDownContext); + if (!context) { + throw new Error("DropDown에 감싸져 있어야 합니다."); + } + return context; +}; + +function DropDownContainer({ + orderBy = "recent", + handleChangeOrderBy, + children, +}: DropDownContainerProps) { + const [isOpen, setIsOpen] = useState(false); + + const handleClick: () => void = useCallback(() => { + setIsOpen(!isOpen); + }, [isOpen]); + + return ( + +
{children}
+
+ ); +} + +function DropDownButton() { + const { orderBy, handleClick } = useDropDownContext(); + + return ( + + ); +} + +interface DropDownListProps { + children: React.ReactNode; +} + +function DropDownList({ children }: DropDownListProps) { + const { isOpen } = useDropDownContext(); + + if (!isOpen) return null; + return
    {children}
; +} + +interface DropDownOptionProps { + option: OrderBy; +} + +const dict = { favorite: "좋아요순", recent: "최신순" }; + +function DropDownOption({ option }: DropDownOptionProps) { + const { handleChangeOrderBy, setIsOpen } = useDropDownContext(); + + const handleClick = () => { + handleChangeOrderBy(option); + setIsOpen((prev) => !prev); + }; + + return ( +
  • + {dict[option]} +
  • + ); +} + +interface DropDownProps { + /** 현재 정렬 기준 값 */ + orderBy: OrderBy; + /** 정렬 기준 변경 콜백 */ + handleChangeOrderBy: (order: OrderBy) => void; +} + +/** DropDown 컴포넌트를 한 번에 사용하기 위한 래퍼 */ +export default function DropDown({ + orderBy, + handleChangeOrderBy, +}: DropDownProps) { + return ( + + + + + + + + ); +} From 00a6931787b283c74c5c253fdc63b4a8af082c31 Mon Sep 17 00:00:00 2001 From: Circle0616 Date: Sat, 19 Apr 2025 23:52:59 +0900 Subject: [PATCH 43/46] =?UTF-8?q?:sparkles:=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=98=A4=EB=A5=98=20=EC=83=81=ED=83=9C=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=EB=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/input.module.css | 4 ++++ src/components/input.tsx | 31 ++++++++++++++++++++++++++----- src/utils/input-validate.ts | 28 ++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 src/utils/input-validate.ts diff --git a/src/components/input.module.css b/src/components/input.module.css index 99c3dd9c..e2b6de8a 100644 --- a/src/components/input.module.css +++ b/src/components/input.module.css @@ -19,6 +19,10 @@ border-radius: 12px; } +.input__field--error { + border: 1px solid #f74747; +} + .input__field::placeholder { color: var(--gray-400); font-weight: 400; diff --git a/src/components/input.tsx b/src/components/input.tsx index 01d6b0e6..d88adc98 100644 --- a/src/components/input.tsx +++ b/src/components/input.tsx @@ -1,7 +1,9 @@ import { createContext, useContext, useState } from "react"; import styles from "./input.module.css"; +import inputValidate from "@/utils/input-validate"; -type inputType = "email" | "username" | "password"; +// type, interface 선언 +export type inputType = "email" | "username" | "password"; interface InputProps { type: inputType; @@ -18,10 +20,13 @@ interface InputFieldProps { interface InputContextProps { value: string; - handleChange: (e: React.ChangeEvent) => void; type: inputType; + error: boolean; + handleChange: (e: React.ChangeEvent) => void; + handleBlur: (e: React.FocusEvent) => void; } +//input 컴포넌트 들에서 사용할 컨텍스트 생성, 커스텀 훅 생성 const InputContext = createContext(undefined); const useInputContext = (): InputContextProps => { @@ -32,20 +37,33 @@ const useInputContext = (): InputContextProps => { return context; }; +//Input요소들을 감싸는 컨테이너 역할을 할 Input.Group컴포넌트 작성 +//상태관리, 이벤트 리스너 생성해서 내려줍니다. function InputGroup({ type, children }: InputProps) { const [value, setValue] = useState(""); + const [error, setError] = useState(false); const handleChange = (e: React.ChangeEvent) => { setValue(e.target.value); }; + const handleBlur = (e: React.FocusEvent) => { + const value = e.target.value; + const isValid = inputValidate(type, value); + console.log(isValid); + setError(!isValid); + }; + return ( - +
    {children}
    ); } +//단순히 라벨 렌더링만 하는 Input.Label 컴포넌트 입니다. function InputLabel({ label }: InputLabelProps) { return (