diff --git a/.gitignore b/.gitignore
index 496ee2ca..a547bf36 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,24 @@
-.DS_Store
\ No newline at end of file
+# 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/assets/imgs/Img_home_01.svg b/assets/imgs/Img_home_01.svg
deleted file mode 100644
index e2feec12..00000000
--- a/assets/imgs/Img_home_01.svg
+++ /dev/null
@@ -1,67 +0,0 @@
-
diff --git a/assets/imgs/Img_home_02.svg b/assets/imgs/Img_home_02.svg
deleted file mode 100644
index a34b2ef6..00000000
--- a/assets/imgs/Img_home_02.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
diff --git a/assets/imgs/Img_home_03.svg b/assets/imgs/Img_home_03.svg
deleted file mode 100644
index 29422cc1..00000000
--- a/assets/imgs/Img_home_03.svg
+++ /dev/null
@@ -1,53 +0,0 @@
-
diff --git a/assets/imgs/Img_home_bottom.svg b/assets/imgs/Img_home_bottom.svg
deleted file mode 100644
index 035f529f..00000000
--- a/assets/imgs/Img_home_bottom.svg
+++ /dev/null
@@ -1,111 +0,0 @@
-
diff --git a/assets/imgs/Img_home_top.svg b/assets/imgs/Img_home_top.svg
deleted file mode 100644
index 321b90f9..00000000
--- a/assets/imgs/Img_home_top.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 00000000..cee1e2c7
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,29 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import { defineConfig, globalIgnores } from 'eslint/config'
+
+export default defineConfig([
+ globalIgnores(['dist']),
+ {
+ files: ['**/*.{js,jsx}'],
+ extends: [
+ js.configs.recommended,
+ reactHooks.configs['recommended-latest'],
+ reactRefresh.configs.vite,
+ ],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ parserOptions: {
+ ecmaVersion: 'latest',
+ ecmaFeatures: { jsx: true },
+ sourceType: 'module',
+ },
+ },
+ rules: {
+ 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
+ },
+ },
+])
diff --git a/index.html b/index.html
index fb09ebf8..78a172ea 100644
--- a/index.html
+++ b/index.html
@@ -2,11 +2,8 @@
+
-
- 판다마켓
-
-
판다마켓
@@ -38,158 +35,7 @@
/>
-
-
-
-
-

-
-
-
-
-

-
-
Hot item
-
인기 상품을 확인해 보세요
-
- 가장 HOT한 중고거래 물품을
판다 마켓에서 확인해 보세요
-
-
-
-
-
-
-
-
Search
-
구매를 원하는 상품을 검색하세요
-
- 구매하고 싶은 물품은 검색해서
쉽게 찾아보세요
-
-
-

-
-
-
-
-

-
-
Register
-
판매를 원하는 상품을 등록하세요
-
- 어떤 물건이든 판매하고 싶은 상품을
쉽게 등록하세요
-
-
-
-
-
-
-
-
믿을 수 있는 판다마켓 중고 거래
-
-

-
-
-
+
+
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 00000000..30deb393
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "checkJs": true,
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": [
+ "src/**/*.d.ts",
+ "src/**/*.js",
+ "src/**/*.jsx",
+ "src/**/*.ts",
+ "src/**/*.tsx",
+ "src/**/*.svg"
+ ],
+ "exclude": ["node_modules", "**/node_modules", "dist"]
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..187fe1c3
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3434 @@
+{
+ "name": "17-sprint-mission",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "17-sprint-mission",
+ "version": "0.0.0",
+ "dependencies": {
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
+ "react-helmet": "^6.1.0",
+ "react-router-dom": "^7.6.2",
+ "styled-components": "^6.1.19",
+ "vite-plugin-svgr": "^4.3.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.29.0",
+ "@types/react": "^19.1.8",
+ "@types/react-dom": "^19.1.6",
+ "@vitejs/plugin-react": "^4.5.2",
+ "eslint": "^9.29.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.20",
+ "globals": "^16.2.0",
+ "terser": "^5.43.1",
+ "vite": "^7.0.0"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz",
+ "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.27.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
+ "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.3",
+ "@babel/helper-compilation-targets": "^7.27.2",
+ "@babel/helper-module-transforms": "^7.27.3",
+ "@babel/helpers": "^7.27.4",
+ "@babel/parser": "^7.27.4",
+ "@babel/template": "^7.27.2",
+ "@babel/traverse": "^7.27.4",
+ "@babel/types": "^7.27.3",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
+ "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.27.5",
+ "@babel/types": "^7.27.3",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+ "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.27.2",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+ "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
+ "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/traverse": "^7.27.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+ "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
+ "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.27.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
+ "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.3"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+ "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/parser": "^7.27.2",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.27.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
+ "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.3",
+ "@babel/parser": "^7.27.4",
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.27.3",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
+ "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
+ "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==",
+ "license": "MIT"
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
+ "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
+ "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
+ "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
+ "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
+ "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
+ "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
+ "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
+ "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
+ "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
+ "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
+ "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
+ "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
+ "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
+ "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
+ "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
+ "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
+ "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
+ "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
+ "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
+ "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+ "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz",
+ "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz",
+ "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
+ "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.29.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
+ "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz",
+ "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.15.1",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
+ "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.10",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz",
+ "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.19",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz",
+ "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz",
+ "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz",
+ "integrity": "sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz",
+ "integrity": "sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz",
+ "integrity": "sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz",
+ "integrity": "sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz",
+ "integrity": "sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz",
+ "integrity": "sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz",
+ "integrity": "sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz",
+ "integrity": "sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz",
+ "integrity": "sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz",
+ "integrity": "sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz",
+ "integrity": "sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz",
+ "integrity": "sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz",
+ "integrity": "sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz",
+ "integrity": "sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz",
+ "integrity": "sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz",
+ "integrity": "sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz",
+ "integrity": "sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz",
+ "integrity": "sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz",
+ "integrity": "sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz",
+ "integrity": "sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
+ "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
+ "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
+ "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
+ "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz",
+ "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-svg-component": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
+ "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-preset": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz",
+ "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==",
+ "license": "MIT",
+ "dependencies": {
+ "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "8.1.0",
+ "@svgr/babel-plugin-transform-svg-component": "8.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/core": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
+ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
+ "camelcase": "^6.2.0",
+ "cosmiconfig": "^8.1.3",
+ "snake-case": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/hast-util-to-babel-ast": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
+ "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.21.3",
+ "entities": "^4.4.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/plugin-jsx": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz",
+ "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
+ "@svgr/hast-util-to-babel-ast": "8.0.0",
+ "svg-parser": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
+ "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "19.1.8",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
+ "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "19.1.6",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz",
+ "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.0.0"
+ }
+ },
+ "node_modules/@types/stylis": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
+ "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==",
+ "license": "MIT"
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.6.0.tgz",
+ "integrity": "sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@rolldown/pluginutils": "1.0.0-beta.19",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.17.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "devOptional": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.25.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
+ "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001726",
+ "electron-to-chromium": "^1.5.173",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001726",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz",
+ "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "license": "MIT"
+ },
+ "node_modules/cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "license": "MIT",
+ "dependencies": {
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/css-to-react-native": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
+ "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "license": "MIT",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.176",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.176.tgz",
+ "integrity": "sha512-2nDK9orkm7M9ZZkjO3PjbEd3VUulQLyg5T9O3enJdFvUg46Hzd4DUvTvAuEgbdHYXyFsiG4A5sO9IzToMH1cDg==",
+ "license": "ISC"
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
+ "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.5",
+ "@esbuild/android-arm": "0.25.5",
+ "@esbuild/android-arm64": "0.25.5",
+ "@esbuild/android-x64": "0.25.5",
+ "@esbuild/darwin-arm64": "0.25.5",
+ "@esbuild/darwin-x64": "0.25.5",
+ "@esbuild/freebsd-arm64": "0.25.5",
+ "@esbuild/freebsd-x64": "0.25.5",
+ "@esbuild/linux-arm": "0.25.5",
+ "@esbuild/linux-arm64": "0.25.5",
+ "@esbuild/linux-ia32": "0.25.5",
+ "@esbuild/linux-loong64": "0.25.5",
+ "@esbuild/linux-mips64el": "0.25.5",
+ "@esbuild/linux-ppc64": "0.25.5",
+ "@esbuild/linux-riscv64": "0.25.5",
+ "@esbuild/linux-s390x": "0.25.5",
+ "@esbuild/linux-x64": "0.25.5",
+ "@esbuild/netbsd-arm64": "0.25.5",
+ "@esbuild/netbsd-x64": "0.25.5",
+ "@esbuild/openbsd-arm64": "0.25.5",
+ "@esbuild/openbsd-x64": "0.25.5",
+ "@esbuild/sunos-x64": "0.25.5",
+ "@esbuild/win32-arm64": "0.25.5",
+ "@esbuild/win32-ia32": "0.25.5",
+ "@esbuild/win32-x64": "0.25.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.29.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz",
+ "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.1",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.14.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.29.0",
+ "@eslint/plugin-kit": "^0.3.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.20",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz",
+ "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=8.40"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fdir": {
+ "version": "6.4.6",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz",
+ "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "license": "MIT"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "license": "MIT",
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "license": "MIT"
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "license": "MIT"
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
+ "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
+ "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.26.0"
+ },
+ "peerDependencies": {
+ "react": "^19.1.0"
+ }
+ },
+ "node_modules/react-fast-compare": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
+ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==",
+ "license": "MIT"
+ },
+ "node_modules/react-helmet": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz",
+ "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.7.2",
+ "react-fast-compare": "^3.1.1",
+ "react-side-effect": "^2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.3.0"
+ }
+ },
+ "node_modules/react-helmet/node_modules/react-side-effect": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz",
+ "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.3.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/react-refresh": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.2.tgz",
+ "integrity": "sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==",
+ "license": "MIT",
+ "dependencies": {
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.2.tgz",
+ "integrity": "sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.6.2"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.1.tgz",
+ "integrity": "sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.44.1",
+ "@rollup/rollup-android-arm64": "4.44.1",
+ "@rollup/rollup-darwin-arm64": "4.44.1",
+ "@rollup/rollup-darwin-x64": "4.44.1",
+ "@rollup/rollup-freebsd-arm64": "4.44.1",
+ "@rollup/rollup-freebsd-x64": "4.44.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.44.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.44.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.44.1",
+ "@rollup/rollup-linux-arm64-musl": "4.44.1",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.44.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.44.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.44.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.44.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.44.1",
+ "@rollup/rollup-linux-x64-gnu": "4.44.1",
+ "@rollup/rollup-linux-x64-musl": "4.44.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.44.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.44.1",
+ "@rollup/rollup-win32-x64-msvc": "4.44.1",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
+ "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
+ "license": "MIT"
+ },
+ "node_modules/shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
+ "license": "MIT"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "license": "MIT",
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "devOptional": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/styled-components": {
+ "version": "6.1.19",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz",
+ "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/is-prop-valid": "1.2.2",
+ "@emotion/unitless": "0.8.1",
+ "@types/stylis": "4.2.5",
+ "css-to-react-native": "3.2.0",
+ "csstype": "3.1.3",
+ "postcss": "8.4.49",
+ "shallowequal": "1.1.0",
+ "stylis": "4.3.2",
+ "tslib": "2.6.2"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/styled-components"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0",
+ "react-dom": ">= 16.8.0"
+ }
+ },
+ "node_modules/styled-components/node_modules/postcss": {
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/stylis": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz",
+ "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==",
+ "license": "MIT"
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "license": "MIT"
+ },
+ "node_modules/terser": {
+ "version": "5.43.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz",
+ "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==",
+ "devOptional": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.14.0",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz",
+ "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==",
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "fdir": "^6.4.6",
+ "picomatch": "^4.0.2",
+ "postcss": "^8.5.6",
+ "rollup": "^4.40.0",
+ "tinyglobby": "^0.2.14"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-svgr": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.3.0.tgz",
+ "integrity": "sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==",
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.1.3",
+ "@svgr/core": "^8.1.0",
+ "@svgr/plugin-jsx": "^8.1.0"
+ },
+ "peerDependencies": {
+ "vite": ">=2.6.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "license": "ISC"
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..ce68d3a6
--- /dev/null
+++ b/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "17-sprint-mission",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "lint": "eslint .",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
+ "react-helmet": "^6.1.0",
+ "react-router-dom": "^7.6.2",
+ "styled-components": "^6.1.19",
+ "vite-plugin-svgr": "^4.3.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.29.0",
+ "@types/react": "^19.1.8",
+ "@types/react-dom": "^19.1.6",
+ "@vitejs/plugin-react": "^4.5.2",
+ "eslint": "^9.29.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.20",
+ "globals": "^16.2.0",
+ "terser": "^5.43.1",
+ "vite": "^7.0.0"
+ }
+}
diff --git a/pages/login.html b/pages/login.html
deleted file mode 100644
index 75c6198d..00000000
--- a/pages/login.html
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
- 판다마켓
-
-
-
-
-
-
-
diff --git a/pages/signup.html b/pages/signup.html
deleted file mode 100644
index 6a19328f..00000000
--- a/pages/signup.html
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
-
-
- 판다마켓
-
-
-
-
-
-
-
diff --git a/public/_redirects b/public/_redirects
new file mode 100644
index 00000000..c7ccf35d
--- /dev/null
+++ b/public/_redirects
@@ -0,0 +1 @@
+/* /index.html 200
diff --git a/assets/icons/favicon.png b/public/favicon.png
similarity index 100%
rename from assets/icons/favicon.png
rename to public/favicon.png
diff --git a/scripts/pages/login.js b/scripts/pages/login.js
deleted file mode 100644
index 696ced6d..00000000
--- a/scripts/pages/login.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Validate, passwordToggleHandler } from "../signFormValidation.js";
-
-const emailInput = document.querySelector("#email");
-const passwordInput = document.querySelector("#password");
-const passwordVisibilityBtn = document.querySelector(
- "#password-visibility-btn"
-);
-function emailInputHandler(event) {
- const validate = new Validate(
- event.target,
- document.querySelector("#email-error")
- );
- validate.validateEmailInput();
- validate.validateForm();
-}
-function passwordInputHandler(event) {
- const validate = new Validate(
- event.target,
- document.querySelector("#password-error")
- );
- validate.validatePasswordInput();
- validate.validateForm();
-}
-emailInput.addEventListener("focusout", emailInputHandler);
-passwordInput.addEventListener("focusout", passwordInputHandler);
-passwordVisibilityBtn.addEventListener("click", passwordToggleHandler);
diff --git a/scripts/pages/signup.js b/scripts/pages/signup.js
deleted file mode 100644
index e484cb6e..00000000
--- a/scripts/pages/signup.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import { Validate, passwordToggleHandler } from "../signFormValidation.js";
-
-const emailInput = document.querySelector("#email");
-const nicknameInput = document.querySelector("#nickname");
-const confirmPasswordInput = document.querySelector("#confirm-password");
-const passwordInput = document.querySelector("#password");
-const passwordVisibilityBtn = document.querySelectorAll(
- ".sign__visibility-icon"
-);
-function emailInputHandler(event) {
- const validate = new Validate(
- event.target,
- document.querySelector("#email-error")
- );
- validate.validateEmailInput();
- validate.validateForm();
-}
-function nicknameInputHandler(event) {
- const validate = new Validate(
- event.target,
- document.querySelector("#nickname-error")
- );
- validate.validateNicknameInput();
- validate.validateForm();
-}
-function confirmPasswordInputHandler(event) {
- const validate = new Validate(
- event.target,
- document.querySelector("#confirm-password-error")
- );
- validate.validateConfirmPasswordInput();
- validate.validateForm();
-}
-function passwordInputHandler(event) {
- const validate = new Validate(
- event.target,
- document.querySelector("#password-error")
- );
- const validateForConfirmPassword = new Validate(
- confirmPasswordInput,
- document.querySelector("#confirm-password-error")
- );
- validateForConfirmPassword.validateConfirmPasswordInput();
- validate.validatePasswordInput();
- validate.validateForm();
-}
-emailInput.addEventListener("focusout", emailInputHandler);
-nicknameInput.addEventListener("focusout", nicknameInputHandler);
-confirmPasswordInput.addEventListener("focusout", confirmPasswordInputHandler);
-passwordInput.addEventListener("focusout", passwordInputHandler);
-
-passwordVisibilityBtn[0].addEventListener("click", passwordToggleHandler);
-passwordVisibilityBtn[1].addEventListener("click", passwordToggleHandler);
diff --git a/scripts/signFormValidation.js b/scripts/signFormValidation.js
deleted file mode 100644
index f312a6c1..00000000
--- a/scripts/signFormValidation.js
+++ /dev/null
@@ -1,109 +0,0 @@
-export class Validate {
- constructor(inputElement, errorElement) {
- this.inputElement = inputElement;
- this.errorElement = errorElement;
- }
- errorMessage = {
- blank: {
- EMAIL: "이메일을 입력해주세요.",
- PASSWORD: "비밀번호를 입력해주세요.",
- NICKNAME: "닉네임을 입력해주세요.",
- CONFIRM_PASSWORD: "비밀번호를 입력해주세요.",
- },
- invalid: {
- EMAIL: "잘못된 이메일입니다.",
- PASSWORD: "비밀번호를 8자 이상 입력해주세요",
- CONFIRM_PASSWORD: "비밀번호가 일치하지 않습니다",
- },
- };
- showErrorMessage(message) {
- this.inputElement.classList.add("sign__input__error");
- this.inputElement.dataset.valid = "false";
- this.errorElement.textContent = message;
- this.errorElement.style.display = "block";
- }
- hideErrorMessage() {
- this.inputElement.classList.remove("sign__input__error");
- this.inputElement.dataset.valid = "true";
- this.errorElement.textContent = "";
- this.errorElement.style.display = "none";
- }
- isEmptyString() {
- const string = this.inputElement.value;
- return string === null || string === undefined || string.trim() === "";
- }
- isValidEmail() {
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
- const email = this.inputElement.value;
- return emailRegex.test(email);
- }
- isValidPassword() {
- const password = this.inputElement.value;
- return password.length >= 8;
- }
- validateEmailInput() {
- if (this.isEmptyString()) {
- this.showErrorMessage(this.errorMessage.blank.EMAIL);
- return;
- }
- if (!this.isValidEmail()) {
- this.showErrorMessage(this.errorMessage.invalid.EMAIL);
- return;
- }
- this.hideErrorMessage();
- }
- validatePasswordInput() {
- if (this.isEmptyString()) {
- this.showErrorMessage(this.errorMessage.blank.PASSWORD);
- return;
- }
- if (!this.isValidPassword()) {
- this.showErrorMessage(this.errorMessage.invalid.PASSWORD);
- return;
- }
- this.hideErrorMessage();
- }
- validateNicknameInput() {
- if (this.isEmptyString()) {
- this.showErrorMessage(this.errorMessage.blank.NICKNAME);
- return;
- }
- this.hideErrorMessage();
- }
- validateConfirmPasswordInput() {
- const password = document.querySelector("#password").value;
- const confirmPassword = document.querySelector("#confirm-password").value;
- if (this.isEmptyString()) {
- this.showErrorMessage(this.errorMessage.blank.CONFIRM_PASSWORD);
- return;
- }
- if (password !== confirmPassword) {
- this.showErrorMessage(this.errorMessage.invalid.CONFIRM_PASSWORD);
- return;
- }
- this.hideErrorMessage();
- }
- validateForm() {
- const formBtnElement = document.querySelector("#form-btn");
- const formElement = document.querySelector("form");
- const isValid = [...formElement.querySelectorAll("input")].every(
- (inputElement) => inputElement.dataset.valid === "true"
- );
- if (isValid) {
- formBtnElement.disabled = false;
- } else {
- formBtnElement.disabled = true;
- }
- }
-}
-
-export function passwordToggleHandler(event) {
- const toggleBtnElement = event.target;
- const passwordInputElement =
- toggleBtnElement.parentElement.querySelector("input");
- passwordInputElement.type =
- passwordInputElement.type === "password" ? "text" : "password";
- toggleBtnElement.ariaPressed =
- toggleBtnElement.ariaPressed === "true" ? "false" : "true";
- toggleBtnElement.classList.toggle("sign__visibility-icon__visible");
-}
diff --git a/sprint1-4/scripts/form/dom.js b/sprint1-4/scripts/form/dom.js
new file mode 100644
index 00000000..f4c468b0
--- /dev/null
+++ b/sprint1-4/scripts/form/dom.js
@@ -0,0 +1,36 @@
+export function showErrorMessage(inputEl, message) {
+ const errorEl =
+ inputEl.parentElement.parentElement.querySelector(".sign__input-error");
+ inputEl.classList.add("sign__input__error");
+ inputEl.dataset.valid = "false";
+ errorEl.textContent = message;
+ errorEl.style.display = "block";
+}
+export function hideErrorMessage(inputEl) {
+ const errorEl =
+ inputEl.parentElement.parentElement.querySelector(".sign__input-error");
+ inputEl.classList.remove("sign__input__error");
+ inputEl.dataset.valid = "true";
+ errorEl.textContent = "";
+ errorEl.style.display = "none";
+}
+export function passwordToggleHandler(event) {
+ const toggleBtnElement = event.target;
+ const passwordInputElement =
+ toggleBtnElement.parentElement.querySelector("input");
+ passwordInputElement.type =
+ passwordInputElement.type === "password" ? "text" : "password";
+ toggleBtnElement.ariaPressed =
+ toggleBtnElement.ariaPressed === "true" ? "false" : "true";
+ toggleBtnElement.classList.toggle("sign__visibility-icon__visible");
+}
+export function validateAndToggleFormButton(formEl, formBtnEl) {
+ const isValid = [...formEl.querySelectorAll("input")].every(
+ (inputEl) => inputEl.dataset.valid === "true"
+ );
+ if (isValid) {
+ formBtnEl.disabled = false;
+ } else {
+ formBtnEl.disabled = true;
+ }
+}
diff --git a/sprint1-4/scripts/form/validations.js b/sprint1-4/scripts/form/validations.js
new file mode 100644
index 00000000..28781864
--- /dev/null
+++ b/sprint1-4/scripts/form/validations.js
@@ -0,0 +1,35 @@
+// validations.js
+const errorMessage = {
+ blank: {
+ EMAIL: "이메일을 입력해주세요.",
+ PASSWORD: "비밀번호를 입력해주세요.",
+ NICKNAME: "닉네임을 입력해주세요.",
+ },
+ invalid: {
+ EMAIL: "잘못된 이메일입니다.",
+ PASSWORD: "비밀번호를 8자 이상 입력해주세요",
+ CONFIRM_PASSWORD: "비밀번호가 일치하지 않습니다",
+ },
+};
+export function validatePassword(value) {
+ if (!value.trim()) return errorMessage.blank.PASSWORD;
+ if (!(value.length >= 8)) return errorMessage.invalid.PASSWORD;
+ return null;
+}
+export function validateEmail(value) {
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+ if (!value.trim()) return errorMessage.blank.EMAIL;
+ if (!emailRegex.test(value)) return errorMessage.invalid.EMAIL;
+ return null;
+}
+export function validateNickName(value) {
+ if (!value.trim()) return errorMessage.blank.NICKNAME;
+ return null;
+}
+export function validateConfirmPassword(passwordValue, confirmPasswordValue) {
+ if (!confirmPasswordValue.trim()) return errorMessage.blank.PASSWORD;
+ if (!(confirmPasswordValue.length >= 8)) return errorMessage.invalid.PASSWORD;
+ if (passwordValue !== confirmPasswordValue)
+ return errorMessage.invalid.CONFIRM_PASSWORD;
+ return null;
+}
diff --git a/src/apis/Items.js b/src/apis/Items.js
new file mode 100644
index 00000000..a12b7678
--- /dev/null
+++ b/src/apis/Items.js
@@ -0,0 +1,15 @@
+import { customFetch } from "@/apis/customFetch";
+import { BASE_API_URL } from "./constants";
+import { DEFAULT_VALUES } from "@/components/Items/constants";
+
+export const getProducts = async ({
+ page = DEFAULT_VALUES.page,
+ pageSize = DEFAULT_VALUES.pageSize,
+ orderBy = DEFAULT_VALUES.orderBy,
+ keyword = DEFAULT_VALUES.keyword,
+}) => {
+ const data = await customFetch(
+ `${BASE_API_URL}/products?page=${page}&pageSize=${pageSize}&orderBy=${orderBy}&keyword=${keyword}`
+ );
+ return data;
+};
diff --git a/src/apis/constants.js b/src/apis/constants.js
new file mode 100644
index 00000000..acfcc36a
--- /dev/null
+++ b/src/apis/constants.js
@@ -0,0 +1 @@
+export const BASE_API_URL = "https://panda-market-api.vercel.app";
diff --git a/src/apis/customFetch.js b/src/apis/customFetch.js
new file mode 100644
index 00000000..2ed04640
--- /dev/null
+++ b/src/apis/customFetch.js
@@ -0,0 +1,16 @@
+export async function customFetch(input, init) {
+ const res = await fetch(input, {
+ ...init,
+ headers: {
+ "Content-Type": "application/json",
+ ...(init?.headers || {}),
+ },
+ });
+
+ if (!res.ok) {
+ const errorText = await res.text();
+ throw new Error(`[${res.status}] ${errorText}`);
+ }
+
+ return res.json();
+}
diff --git a/assets/fonts/Pretendard/Pretendard-Bold.woff2 b/src/assets/fonts/Pretendard/Pretendard-Bold.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-Bold.woff2
rename to src/assets/fonts/Pretendard/Pretendard-Bold.woff2
diff --git a/assets/fonts/Pretendard/Pretendard-ExtraBold.woff2 b/src/assets/fonts/Pretendard/Pretendard-ExtraBold.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-ExtraBold.woff2
rename to src/assets/fonts/Pretendard/Pretendard-ExtraBold.woff2
diff --git a/assets/fonts/Pretendard/Pretendard-ExtraLight.woff2 b/src/assets/fonts/Pretendard/Pretendard-ExtraLight.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-ExtraLight.woff2
rename to src/assets/fonts/Pretendard/Pretendard-ExtraLight.woff2
diff --git a/assets/fonts/Pretendard/Pretendard-Light.woff2 b/src/assets/fonts/Pretendard/Pretendard-Light.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-Light.woff2
rename to src/assets/fonts/Pretendard/Pretendard-Light.woff2
diff --git a/assets/fonts/Pretendard/Pretendard-Medium.woff2 b/src/assets/fonts/Pretendard/Pretendard-Medium.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-Medium.woff2
rename to src/assets/fonts/Pretendard/Pretendard-Medium.woff2
diff --git a/assets/fonts/Pretendard/Pretendard-Regular.woff2 b/src/assets/fonts/Pretendard/Pretendard-Regular.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-Regular.woff2
rename to src/assets/fonts/Pretendard/Pretendard-Regular.woff2
diff --git a/assets/fonts/Pretendard/Pretendard-SemiBold.woff2 b/src/assets/fonts/Pretendard/Pretendard-SemiBold.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-SemiBold.woff2
rename to src/assets/fonts/Pretendard/Pretendard-SemiBold.woff2
diff --git a/assets/fonts/Pretendard/Pretendard-Thin.woff2 b/src/assets/fonts/Pretendard/Pretendard-Thin.woff2
similarity index 100%
rename from assets/fonts/Pretendard/Pretendard-Thin.woff2
rename to src/assets/fonts/Pretendard/Pretendard-Thin.woff2
diff --git a/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.otf b/src/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.otf
similarity index 100%
rename from assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.otf
rename to src/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.otf
diff --git a/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.ttf b/src/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.ttf
similarity index 100%
rename from assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.ttf
rename to src/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.ttf
diff --git a/src/assets/icons/ic_arrow_down.svg b/src/assets/icons/ic_arrow_down.svg
new file mode 100644
index 00000000..8308690f
--- /dev/null
+++ b/src/assets/icons/ic_arrow_down.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/ic_arrow_left.svg b/src/assets/icons/ic_arrow_left.svg
new file mode 100644
index 00000000..b3c3eb77
--- /dev/null
+++ b/src/assets/icons/ic_arrow_left.svg
@@ -0,0 +1,15 @@
+
diff --git a/src/assets/icons/ic_arrow_right.svg b/src/assets/icons/ic_arrow_right.svg
new file mode 100644
index 00000000..f41c2c4a
--- /dev/null
+++ b/src/assets/icons/ic_arrow_right.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/icons/ic_facebook.svg b/src/assets/icons/ic_facebook.svg
similarity index 100%
rename from assets/icons/ic_facebook.svg
rename to src/assets/icons/ic_facebook.svg
diff --git a/assets/icons/ic_google.svg b/src/assets/icons/ic_google.svg
similarity index 100%
rename from assets/icons/ic_google.svg
rename to src/assets/icons/ic_google.svg
diff --git a/src/assets/icons/ic_heart.svg b/src/assets/icons/ic_heart.svg
new file mode 100644
index 00000000..c394fe24
--- /dev/null
+++ b/src/assets/icons/ic_heart.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/ic_instagram.svg b/src/assets/icons/ic_instagram.svg
similarity index 100%
rename from assets/icons/ic_instagram.svg
rename to src/assets/icons/ic_instagram.svg
diff --git a/assets/icons/ic_kakao.svg b/src/assets/icons/ic_kakao.svg
similarity index 100%
rename from assets/icons/ic_kakao.svg
rename to src/assets/icons/ic_kakao.svg
diff --git a/src/assets/icons/ic_search.svg b/src/assets/icons/ic_search.svg
new file mode 100644
index 00000000..52241e6d
--- /dev/null
+++ b/src/assets/icons/ic_search.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/ic_sort.svg b/src/assets/icons/ic_sort.svg
new file mode 100644
index 00000000..657b44f9
--- /dev/null
+++ b/src/assets/icons/ic_sort.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/ic_twitter.svg b/src/assets/icons/ic_twitter.svg
similarity index 100%
rename from assets/icons/ic_twitter.svg
rename to src/assets/icons/ic_twitter.svg
diff --git a/assets/icons/ic_visibility_off.svg b/src/assets/icons/ic_visibility_off.svg
similarity index 100%
rename from assets/icons/ic_visibility_off.svg
rename to src/assets/icons/ic_visibility_off.svg
diff --git a/assets/icons/ic_visibility_on.svg b/src/assets/icons/ic_visibility_on.svg
similarity index 100%
rename from assets/icons/ic_visibility_on.svg
rename to src/assets/icons/ic_visibility_on.svg
diff --git a/assets/icons/ic_youtube.svg b/src/assets/icons/ic_youtube.svg
similarity index 100%
rename from assets/icons/ic_youtube.svg
rename to src/assets/icons/ic_youtube.svg
diff --git a/assets/imgs/panda_icon_small.svg b/src/assets/icons/panda_icon_small.svg
similarity index 100%
rename from assets/imgs/panda_icon_small.svg
rename to src/assets/icons/panda_icon_small.svg
diff --git a/src/assets/imgs/Img_home_01.png b/src/assets/imgs/Img_home_01.png
new file mode 100644
index 00000000..7cf03641
Binary files /dev/null and b/src/assets/imgs/Img_home_01.png differ
diff --git a/src/assets/imgs/Img_home_02.png b/src/assets/imgs/Img_home_02.png
new file mode 100644
index 00000000..d3101fd5
Binary files /dev/null and b/src/assets/imgs/Img_home_02.png differ
diff --git a/src/assets/imgs/Img_home_03.png b/src/assets/imgs/Img_home_03.png
new file mode 100644
index 00000000..4005ee3d
Binary files /dev/null and b/src/assets/imgs/Img_home_03.png differ
diff --git a/src/assets/imgs/Img_home_bottom.png b/src/assets/imgs/Img_home_bottom.png
new file mode 100644
index 00000000..cfda6180
Binary files /dev/null and b/src/assets/imgs/Img_home_bottom.png differ
diff --git a/src/assets/imgs/Img_home_top.png b/src/assets/imgs/Img_home_top.png
new file mode 100644
index 00000000..10e6efd8
Binary files /dev/null and b/src/assets/imgs/Img_home_top.png differ
diff --git a/assets/imgs/Img_og.png b/src/assets/imgs/Img_og.png
similarity index 100%
rename from assets/imgs/Img_og.png
rename to src/assets/imgs/Img_og.png
diff --git a/src/assets/imgs/default_box.png b/src/assets/imgs/default_box.png
new file mode 100644
index 00000000..ed08868a
Binary files /dev/null and b/src/assets/imgs/default_box.png differ
diff --git a/src/assets/imgs/default_profile.png b/src/assets/imgs/default_profile.png
new file mode 100644
index 00000000..ae27943e
Binary files /dev/null and b/src/assets/imgs/default_profile.png differ
diff --git a/src/components/Items/AllItemsSection.jsx b/src/components/Items/AllItemsSection.jsx
new file mode 100644
index 00000000..d58e0343
--- /dev/null
+++ b/src/components/Items/AllItemsSection.jsx
@@ -0,0 +1,132 @@
+import { useState, useEffect, useCallback } from "react";
+import styled from "styled-components";
+import ItemBox from "./ItemBox";
+import Button from "../common/Button";
+import { getProducts } from "@/apis/Items";
+import useAsync from "@/hooks/useAsync";
+import { DEFAULT_VALUES, ORDER_BY } from "./constants";
+import DropdownButton from "./DropdownButton";
+import Pagination from "./PaginationBar";
+import Search from "./Search";
+import { device, screenSizeNumber } from "@/styles/media";
+import useResizeEffect from "@/hooks/useResizeEffect";
+import useIsMobile from "@/hooks/useIsMobile";
+
+const getItemDisplayLimit = () => {
+ const width = window.innerWidth;
+ if (width > screenSizeNumber.desktop) return 10;
+ if (width > screenSizeNumber.tablet) return 6;
+ return 4;
+};
+export default function AllItemsSection() {
+ const [items, setItems] = useState([]);
+ const [totalCount, setTotalCount] = useState(1);
+ const [page, setPage] = useState(1);
+ const [orderBy, setOrderBy] = useState(ORDER_BY.RECENT);
+ const [pageSize, setPageSize] = useState(getItemDisplayLimit());
+ const [isLoading, loadingError, getProductsAsync] = useAsync(getProducts);
+ const isMobile = useIsMobile();
+
+ const handleLoad = useCallback(
+ async (options) => {
+ const result = await getProductsAsync(options);
+ if (!result) return; //error
+ setItems(result?.list);
+ setTotalCount(result?.totalCount);
+ },
+ [getProductsAsync]
+ );
+ const handleSearchSubmit = (value) => {
+ handleLoad({ ...DEFAULT_VALUES, orderBy, page, keyword: value });
+ };
+ useEffect(() => {
+ handleLoad({ ...DEFAULT_VALUES, orderBy, page, pageSize });
+ }, [handleLoad, orderBy, page, pageSize]);
+
+ useResizeEffect(() => {
+ setPageSize(getItemDisplayLimit());
+ });
+
+ return (
+
+
+
+ 전체 상품
+ {isMobile ? (
+
+ ) : (
+
+ )}
+
+
+ {isMobile ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ {items.map((item) => (
+
+ ))}
+
+
+
+ );
+}
+const Container = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ gap: var(--spacing-lg);
+`;
+const Head = styled.div`
+ display: grid;
+ grid-template-rows: 1fr 1fr;
+ gap: var(--spacing-sm);
+ @media ${device.tablet} {
+ display: flex;
+ & > div:first-child {
+ flex-grow: 1;
+ }
+ & > div:last-child {
+ justify-content: flex-end;
+ }
+ }
+ @media ${device.desktop} {
+ }
+`;
+const Title = styled.h2`
+ font-size: var(--font-size-500);
+ font-weight: 700;
+`;
+const Control = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: var(--spacing-sm);
+ & > form {
+ flex: 1 1;
+ }
+`;
+
+const Items = styled.ul`
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: var(--spacing-xxl) var(--spacing-lg);
+ @media ${device.tablet} {
+ grid-template-columns: repeat(3, 1fr);
+ }
+ @media ${device.desktop} {
+ grid-template-columns: repeat(5, 1fr);
+ }
+`;
diff --git a/src/components/Items/BestItemsSection.jsx b/src/components/Items/BestItemsSection.jsx
new file mode 100644
index 00000000..24847698
--- /dev/null
+++ b/src/components/Items/BestItemsSection.jsx
@@ -0,0 +1,75 @@
+import styled from "styled-components";
+import ItemBox from "./ItemBox";
+import { useState } from "react";
+import { useEffect } from "react";
+import { getProducts } from "@/apis/Items";
+import useAsync from "@/hooks/useAsync";
+import { useCallback } from "react";
+import { BEST_ITEMS_DEFAULT_VALUES } from "./constants";
+import useResizeEffect from "@/hooks/useResizeEffect";
+import { device, screenSizeNumber } from "@/styles/media";
+
+const getItemDisplayLimit = () => {
+ const width = window.innerWidth;
+ if (width > screenSizeNumber.desktop) return 4;
+ if (width > screenSizeNumber.tablet) return 2;
+ return 1;
+};
+export default function BestItemsSection() {
+ const [items, setItems] = useState([]);
+ const [pageSize, setPageSize] = useState(getItemDisplayLimit());
+ const [isLoading, loadingError, getProductsAsync] = useAsync(getProducts);
+ const handleLoad = useCallback(
+ async (options) => {
+ const result = await getProductsAsync(options);
+ if (!result) return; //error
+ setItems(result?.list);
+ },
+ [getProductsAsync]
+ );
+ useEffect(() => {
+ handleLoad({ ...BEST_ITEMS_DEFAULT_VALUES, pageSize });
+ }, [handleLoad, pageSize]);
+
+ useResizeEffect(() => {
+ setPageSize(getItemDisplayLimit());
+ });
+
+ return (
+
+ 베스트 상품
+
+ {items.map((item) => (
+
+ ))}
+
+
+ );
+}
+const Container = styled.div`
+ width: 100%;
+`;
+const Title = styled.h2`
+ margin-bottom: var(--spacing-lg);
+ font-size: var(--font-size-500);
+ font-weight: 700;
+`;
+
+const Items = styled.ul`
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 15px;
+ @media ${device.tablet} {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ @media ${device.desktop} {
+ grid-template-columns: repeat(4, 1fr);
+ }
+`;
diff --git a/src/components/Items/DropdownButton.jsx b/src/components/Items/DropdownButton.jsx
new file mode 100644
index 00000000..9bbf70b9
--- /dev/null
+++ b/src/components/Items/DropdownButton.jsx
@@ -0,0 +1,88 @@
+import styled from "styled-components";
+import ArrowDownIcon from "@/assets/icons/ic_arrow_down.svg";
+import SortIcon from "@/assets/icons/ic_sort.svg";
+
+import { useState } from "react";
+import { ORDER_BY } from "./constants";
+import useIsMobile from "@/hooks/useIsMobile";
+import { device } from "@/styles/media";
+
+const ORDER_BY_ENG_TO_KOR = {
+ favorite: "인기순",
+ recent: "최신순",
+};
+
+export default function DropdownButton({ orderBy, setOrderBy }) {
+ const [isClicked, setIsClicked] = useState(false);
+ const isMobile = useIsMobile();
+ const handleClick = () => {
+ setIsClicked((prev) => !prev);
+ };
+ const handleOptionClick = (e) => {
+ setOrderBy(e.target.name);
+ };
+
+ return (
+
+
+ {isMobile ? (
+
+ ) : (
+ <>
+ {ORDER_BY_ENG_TO_KOR[orderBy]}
+
+ >
+ )}
+
+ {isClicked && (
+
+
+
+
+ )}
+
+ );
+}
+const Container = styled.div`
+ font-weight: 400;
+ font-size: var(--font-size-400);
+ position: relative;
+`;
+const Options = styled.div`
+ position: absolute;
+ top: 50px;
+ right: 0px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ & > button:first-child {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ & > button:last-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+`;
+const Option = styled.button`
+ background-color: var(--white-color);
+ border: 1px solid var(--gray-200-color);
+ border-radius: var(--border-radius-sm);
+ padding: var(--spacing-xs) var(--spacing-sm);
+ width: 8rem;
+ padding: 12px 20px;
+`;
+const CurrentOption = styled(Option)`
+ width: auto;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ @media ${device.tablet} {
+ width: 8rem;
+ }
+`;
diff --git a/src/components/Items/ItemBox.jsx b/src/components/Items/ItemBox.jsx
new file mode 100644
index 00000000..a82857e2
--- /dev/null
+++ b/src/components/Items/ItemBox.jsx
@@ -0,0 +1,50 @@
+import styled from "styled-components";
+import ItemImg from "../common/ItemImg";
+import LikeIcon from "@/assets/icons/ic_heart.svg";
+
+export default function ItemBox({ title, price, like, imgUrl, imgAlt }) {
+ const localePriceString = Number(price).toLocaleString("ko-KR");
+ return (
+
+
+ {title}
+ {localePriceString}원
+
+
+ {like}
+
+
+ );
+}
+const Container = styled.li`
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+ gap: var(--spacing-sm);
+ width: 100%;
+ color: var(--gray-800-color);
+`;
+const Title = styled.span`
+ margin-top: var(--spacing-xs);
+ font-size: var(--font-size-350);
+ font-weight: 500;
+`;
+const Price = styled.span`
+ font-size: var(--font-size-400);
+ font-weight: 700;
+`;
+const LikeWrapper = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 4px;
+ & > img {
+ width: var(--font-size-400);
+ }
+`;
+const Like = styled.div`
+ font-size: var(--font-size-300);
+ font-weight: 500;
+ color: var(--gray-600-color);
+`;
diff --git a/src/components/Items/PaginationBar.jsx b/src/components/Items/PaginationBar.jsx
new file mode 100644
index 00000000..3f948150
--- /dev/null
+++ b/src/components/Items/PaginationBar.jsx
@@ -0,0 +1,84 @@
+import styled from "styled-components";
+import LeftArrowIcon from "@/assets/icons/ic_arrow_left.svg";
+import RightArrowIcon from "@/assets/icons/ic_arrow_right.svg";
+
+export default function PaginationBar({ totalCount = 1, page, setPage }) {
+ const pagesCount = Math.ceil(totalCount / 10);
+ const pageGroup = Math.ceil(page / 5);
+ const firstPage = (pageGroup - 1) * 5 + 1;
+ const lastPage = pageGroup * 5;
+ const countArray = Array.from({ length: pagesCount }, (v, i) => i + 1).slice(
+ firstPage - 1,
+ lastPage
+ );
+ const handleClick = (e) => {
+ setPage(Number(e.target.value));
+ };
+ const handleLeftArrowClick = () => {
+ setPage((prev) => {
+ const next = prev - 1;
+ return next >= 1 ? next : 1;
+ });
+ };
+ const handleRightArrowClick = () => {
+ setPage((prev) => {
+ const next = prev + 1;
+ return pagesCount >= next ? next : pagesCount;
+ });
+ };
+ return (
+
+
+
+
+
+
+ {countArray.map((count) => {
+ return (
+
+ {count}
+
+ );
+ })}
+
+
+
+
+
+
+ );
+}
+const Container = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: var(--spacing-xs);
+ margin: var(--spacing-lg) 0;
+`;
+const Counter = styled.button`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: ${({ $isactive }) =>
+ $isactive === "true" ? "var(--primary-color)" : "var(--white-color)"};
+ color: ${({ $isactive }) =>
+ $isactive === "true" ? "var(--gray-50-color)" : "var(--gray-500-color)"};
+ border-radius: var(--border-radius-lg);
+ border: 1px solid var(--gray-200-color);
+ width: 2.5rem;
+ height: 2.5rem;
+ padding: 12.5px;
+ font-weight: 600;
+ font-size: var(--font-size-400);
+`;
+
+const IconWrapper = styled.div`
+ width: 16px;
+ height: 16px;
+`;
diff --git a/src/components/Items/Search.tsx b/src/components/Items/Search.tsx
new file mode 100644
index 00000000..2a6a0da0
--- /dev/null
+++ b/src/components/Items/Search.tsx
@@ -0,0 +1,46 @@
+import styled from "styled-components";
+import SearchIcon from "@/assets/icons/ic_search.svg";
+import { useState } from "react";
+
+export default function Search({ onSubmit }) {
+ const [value, setValue] = useState("");
+ const handleChange = (e) => {
+ setValue(e.target.value);
+ };
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ onSubmit(value);
+ };
+ return (
+
+ );
+}
+const Form = styled.form`
+ position: relative;
+ max-width: 24rem;
+ height: 2.625rem;
+ & > svg {
+ position: absolute;
+ left: 7px;
+ top: 7px;
+ width: var(--font-size-600);
+ height: var(--font-size-600);
+ }
+`;
+const Input = styled.input`
+ width: 100%;
+ border-radius: var(--border-radius-sm);
+ background-color: var(--gray-100-color);
+ padding: var(--spacing-sm) 40px;
+ &::placeholder {
+ color: var(--gray-400-color);
+ }
+`;
diff --git a/src/components/Items/constants.js b/src/components/Items/constants.js
new file mode 100644
index 00000000..8c183c6a
--- /dev/null
+++ b/src/components/Items/constants.js
@@ -0,0 +1,16 @@
+export const ORDER_BY = {
+ FAVORITE: "favorite",
+ RECENT: "recent",
+};
+export const DEFAULT_VALUES = {
+ page: 1,
+ pageSize: 10,
+ orderBy: ORDER_BY.FAVORITE,
+ keyword: "",
+};
+export const BEST_ITEMS_DEFAULT_VALUES = {
+ page: 1,
+ pageSize: 5,
+ orderBy: ORDER_BY.FAVORITE,
+ keyword: "",
+};
diff --git a/src/components/common/Button.jsx b/src/components/common/Button.jsx
new file mode 100644
index 00000000..b4da8354
--- /dev/null
+++ b/src/components/common/Button.jsx
@@ -0,0 +1,43 @@
+import { Link } from "react-router-dom";
+import styled from "styled-components";
+
+const commonStyles = `
+ height: auto;
+ padding: var(--spacing-sm) var(--spacing-lg);
+ background-color: var(--primary-color);
+ border-radius: var(--border-radius-xs);
+ border: none;
+ text-align: center;
+ font-weight: 600;
+ font-size: var(--font-size-400);
+ color: var(--gray-100-color);
+`;
+const StyledButton = styled.button`
+ ${commonStyles}
+`;
+const StyledLink = styled(Link)`
+ ${commonStyles}
+`;
+export default function Button({
+ text,
+ onClick = () => {},
+ as = "button",
+ link = "",
+}) {
+ switch (as) {
+ case "button":
+ return {text};
+ case "a":
+ return (
+
+ {text}
+
+ );
+ case "div":
+ return (
+
+ {text}
+
+ );
+ }
+}
diff --git a/src/components/common/ItemImg.jsx b/src/components/common/ItemImg.jsx
new file mode 100644
index 00000000..5b18949d
--- /dev/null
+++ b/src/components/common/ItemImg.jsx
@@ -0,0 +1,26 @@
+import styled from "styled-components";
+import defaultBox from "@/assets/imgs/default_box.png";
+
+export default function ItemImg({ imgUrl = "", alt = "" }) {
+ const onErrorImg = (e) => {
+ e.target.src = defaultBox;
+ };
+ if (imgUrl === "") {
+ return ;
+ }
+ return ;
+}
+
+const Image = styled.img`
+ border-radius: var(--border-radius-md);
+ width: 100%;
+ height: auto;
+ aspect-ratio: 1;
+`;
+const ImageSkeleton = styled.div`
+ border-radius: var(--border-radius-md);
+ width: 100%;
+ height: auto;
+ aspect-ratio: 1;
+ background-color: var(--gray-100-color);
+`;
diff --git a/src/components/layout/Footer.jsx b/src/components/layout/Footer.jsx
new file mode 100644
index 00000000..75933ec8
--- /dev/null
+++ b/src/components/layout/Footer.jsx
@@ -0,0 +1,112 @@
+import { Link } from "react-router-dom";
+import FacebookIcon from "@/assets/icons/ic_facebook.svg";
+import TwitterIcon from "@/assets/icons/ic_twitter.svg";
+import InstagramIcon from "@/assets/icons/ic_instagram.svg";
+import YoutubeIcon from "@/assets/icons/ic_youtube.svg";
+import styled from "styled-components";
+import { device } from "@/styles/media";
+
+export default function Footer() {
+ return (
+
+
+ ©codeit - 2024
+
+
+ Privacy Policy
+
+
+ FAQ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+const StyledFooter = styled.footer`
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ width: 100%;
+ background-color: #111827;
+`;
+const Container = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ width: 100%;
+ padding: var(--spacing-xl);
+ font-size: var(--font-size-400);
+ font-weight: 400;
+ @media ${device.tablet} {
+ flex-wrap: nowrap;
+ }
+ @media ${device.desktop} {
+ padding: 2rem 6.5rem 6.75rem;
+ }
+`;
+const Copyright = styled.span`
+ color: var(--gray-400-color);
+ padding-top: 36px;
+ order: 3;
+ width: 100%;
+ @media ${device.tablet} {
+ padding-top: 0;
+ order: 1;
+ width: auto;
+ }
+`;
+const Info = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: var(--spacing-xl);
+ color: var(--gray-200-color);
+`;
+const Icons = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: var(--spacing-sm);
+ & svg {
+ width: var(--font-size-500);
+ height: var(--font-size-500);
+ }
+`;
diff --git a/src/components/layout/Header.jsx b/src/components/layout/Header.jsx
new file mode 100644
index 00000000..fe325175
--- /dev/null
+++ b/src/components/layout/Header.jsx
@@ -0,0 +1,134 @@
+import { Link, NavLink } from "react-router-dom";
+import styled from "styled-components";
+import PandaLogo from "@/assets/icons/panda_icon_small.svg";
+import defaultProfileImg from "@/assets/imgs/default_profile.png";
+import { device } from "@/styles/media";
+
+function getLinkStyle({ isActive }) {
+ return {
+ color: isActive ? "#3692FF" : "#4b5563",
+ };
+}
+export default function Header() {
+ return (
+
+
+
+
+
+
+ 판다마켓
+
+
+
+
+
+
+ 자유게시판
+
+
+
+
+ 중고마켓
+
+
+
+
+
+
+
+
+
+
+ );
+}
+const StyledHeader = styled.header`
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: #ffffff;
+ border-bottom: 1px solid #dfdfdf;
+ padding: var(--spacing-sm) 0;
+`;
+const NavBar = styled.nav`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-grow: 1;
+ margin: 0 var(--spacing-md);
+
+ @media ${device.tablet} {
+ margin: 0 var(--spacing-lg);
+ }
+ @media ${device.desktop} {
+ margin: 0 200px;
+ }
+`;
+const LogoWrapper = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 10px;
+`;
+const Logo = styled(PandaLogo)`
+ width: 3.125rem;
+ height: 3.125rem;
+ display: none;
+ @media ${device.desktop} {
+ display: block;
+ }
+`;
+const Title = styled.h1`
+ font-size: var(--font-size-600);
+ font-weight: 700;
+ font-family: var(--font-secondary);
+ color: var(--primary-color);
+`;
+const NavList = styled.ul`
+ flex: 1 1;
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ gap: var(--spacing-sm);
+ font-size: var(--font-size-400);
+ margin-left: var(--spacing-md);
+ color: var(--gray-600-color);
+ @media ${device.desktop} {
+ font-size: var(--font-size-450);
+ margin-left: var(--spacing-xxxl);
+ gap: var(--spacing-xl);
+ }
+`;
+const ProfileImgWrapper = styled.div`
+ border-radius: var(--border-radius-circle);
+ background-color: var(--gray-400-color);
+ width: 40px;
+ height: 40px;
+`;
+const LoginButton = styled.button`
+ font-weight: 600;
+ font-size: var(--font-size-400);
+ line-height: 26px;
+ text-align: center;
+ padding: var(--spacing-sm) var(--spacing-lg);
+ color: var(--gray-100-color);
+ background-color: var(--primary-color);
+ border-radius: var(--border-radius-xs);
+ border: none;
+ @media ${device.desktop} {
+ width: 8rem;
+ height: 3rem;
+ }
+`;
diff --git a/src/hooks/useAsync.js b/src/hooks/useAsync.js
new file mode 100644
index 00000000..3f7d809e
--- /dev/null
+++ b/src/hooks/useAsync.js
@@ -0,0 +1,23 @@
+import { useCallback } from "react";
+import { useState } from "react";
+
+export default function useAsync(asyncFunction) {
+ const [pending, setPending] = useState(false);
+ const [error, setError] = useState(null);
+ const wrappedFunction = useCallback(
+ async (...args) => {
+ setError(null);
+ setPending(true);
+ try {
+ return await asyncFunction(args[0]);
+ } catch (error) {
+ setError(error);
+ return;
+ } finally {
+ setPending(false);
+ }
+ },
+ [asyncFunction]
+ );
+ return [pending, error, wrappedFunction];
+}
diff --git a/src/hooks/useIsMobile.js b/src/hooks/useIsMobile.js
new file mode 100644
index 00000000..2f1dad55
--- /dev/null
+++ b/src/hooks/useIsMobile.js
@@ -0,0 +1,17 @@
+import { useState, useEffect } from "react";
+
+const useIsMobile = (breakPoint = 768) => {
+ const [isMobile, setIsMobile] = useState(window.innerWidth < breakPoint);
+
+ useEffect(() => {
+ const handleResize = () => {
+ setIsMobile(window.innerWidth < breakPoint);
+ };
+ window.addEventListener("resize", handleResize);
+ return () => window.removeEventListener("resize", handleResize);
+ }, [breakPoint]);
+
+ return isMobile;
+};
+
+export default useIsMobile;
diff --git a/src/hooks/useResizeEffect.js b/src/hooks/useResizeEffect.js
new file mode 100644
index 00000000..67d4c831
--- /dev/null
+++ b/src/hooks/useResizeEffect.js
@@ -0,0 +1,20 @@
+import { useEffect } from "react";
+
+const useResizeEffect = (callback, delay = 300) => {
+ let timer;
+ useEffect(() => {
+ const handleResize = () => {
+ clearTimeout(timer);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ timer = setTimeout(() => {
+ callback();
+ }, delay);
+ };
+ window.addEventListener("resize", handleResize);
+ return () => {
+ window.removeEventListener("resize", handleResize);
+ if (timer) clearTimeout(timer);
+ };
+ }, [callback, delay]);
+};
+export default useResizeEffect;
diff --git a/src/main.jsx b/src/main.jsx
new file mode 100644
index 00000000..7ee57b98
--- /dev/null
+++ b/src/main.jsx
@@ -0,0 +1,33 @@
+import { StrictMode } from "react";
+import { createRoot } from "react-dom/client";
+import { BrowserRouter, Routes, Route } from "react-router-dom";
+import MainTemplate from "@/templates/MainTemplate";
+import Items from "@/pages/Items.jsx";
+import AddItem from "@/pages/AddItem.jsx";
+import Login from "@/pages/Login.jsx";
+import Signup from "@/pages/Signup.jsx";
+import NotFound from "@/pages/NotFound.jsx";
+import Home from "@/pages/Home.jsx";
+import Privacy from "@/pages/Privacy.jsx";
+import Faq from "@/pages/Faq.jsx";
+import Community from "@/pages/Community";
+
+createRoot(document.getElementById("root")).render(
+
+
+
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
+
+
+);
diff --git a/src/pages/AddItem.jsx b/src/pages/AddItem.jsx
new file mode 100644
index 00000000..c64d57a7
--- /dev/null
+++ b/src/pages/AddItem.jsx
@@ -0,0 +1,3 @@
+export default function AddItem() {
+ return AddItem
;
+}
diff --git a/src/pages/Community.jsx b/src/pages/Community.jsx
new file mode 100644
index 00000000..ff0e10c8
--- /dev/null
+++ b/src/pages/Community.jsx
@@ -0,0 +1,3 @@
+export default function Community() {
+ return Community
;
+}
diff --git a/src/pages/Faq.tsx b/src/pages/Faq.tsx
new file mode 100644
index 00000000..a08735fe
--- /dev/null
+++ b/src/pages/Faq.tsx
@@ -0,0 +1,3 @@
+export default function Faq() {
+ return Faq
;
+}
diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx
new file mode 100644
index 00000000..4f1a1281
--- /dev/null
+++ b/src/pages/Home.jsx
@@ -0,0 +1,106 @@
+import { Link } from "react-router-dom";
+import HomeTopImg from "@/assets/imgs/Img_home_top.png";
+import MainSectionImg from "@/assets/imgs/Img_home_01.png";
+import MainSectionImg2 from "@/assets/imgs/Img_home_02.png";
+import MainSectionImg3 from "@/assets/imgs/Img_home_03.png";
+import HomeBottomImg from "@/assets/imgs/Img_home_bottom.png";
+
+export default function Home() {
+ return (
+ <>
+
+
+
+
+ 일상의 모든 물건을 거래해 보세요
+
+
+ 구경하러 가기
+
+
+

+
+
+
+
+

+
+
Hot item
+
인기 상품을 확인해 보세요
+
+ 가장 HOT한 중고거래 물품을
+
+ 판다 마켓에서 확인해 보세요
+
+
+
+
+
+
+
+
Search
+
+ 구매를 원하는 상품을 검색하세요
+
+
+ 구매하고 싶은 물품은 검색해서
+
+ 쉽게 찾아보세요
+
+
+

+
+
+
+
+

+
+
Register
+
+ 판매를 원하는 상품을 등록하세요
+
+
+ 어떤 물건이든 판매하고 싶은 상품을
+
+ 쉽게 등록하세요
+
+
+
+
+
+
+
+
+ 믿을 수 있는 판다마켓 중고 거래
+
+
+

+
+
+ >
+ );
+}
diff --git a/src/pages/Items.jsx b/src/pages/Items.jsx
new file mode 100644
index 00000000..972516a8
--- /dev/null
+++ b/src/pages/Items.jsx
@@ -0,0 +1,29 @@
+import AllItems from "@/components/Items/AllItemsSection";
+import BestItems from "@/components/Items/BestItemsSection";
+import { device } from "@/styles/media";
+import styled from "styled-components";
+
+export default function Items() {
+ return (
+
+
+
+
+ );
+}
+
+const Container = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ gap: var(--spacing-xxl);
+ padding: var(--spacing-xxl) var(--spacing-xl);
+ @media ${device.tablet} {
+ width: 100%;
+ }
+ @media ${device.desktop} {
+ margin: 0 auto;
+ padding: var(--spacing-xxl) 0;
+ max-width: 1200px;
+ }
+`;
diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx
new file mode 100644
index 00000000..c45190bd
--- /dev/null
+++ b/src/pages/Login.jsx
@@ -0,0 +1,106 @@
+import { Link } from "react-router-dom";
+import PandaLogo from "@/assets/icons/panda_icon_small.svg";
+import GoogleIcon from "@/assets/icons/ic_google.svg";
+import KakaoTalkIcon from "@/assets/icons/ic_kakao.svg";
+
+export default function Login() {
+ return (
+
+ );
+}
diff --git a/src/pages/NotFound.jsx b/src/pages/NotFound.jsx
new file mode 100644
index 00000000..4a6346e5
--- /dev/null
+++ b/src/pages/NotFound.jsx
@@ -0,0 +1,3 @@
+export default function NotFound() {
+ return NotFound
;
+}
diff --git a/src/pages/Privacy.jsx b/src/pages/Privacy.jsx
new file mode 100644
index 00000000..ec16606a
--- /dev/null
+++ b/src/pages/Privacy.jsx
@@ -0,0 +1,3 @@
+export default function Privacy() {
+ return Privacy
;
+}
diff --git a/src/pages/Signup.jsx b/src/pages/Signup.jsx
new file mode 100644
index 00000000..cc6b2648
--- /dev/null
+++ b/src/pages/Signup.jsx
@@ -0,0 +1,149 @@
+import { Link } from "react-router-dom";
+import PandaLogo from "@/assets/icons/panda_icon_small.svg";
+import GoogleIcon from "@/assets/icons/ic_google.svg";
+import KakaoTalkIcon from "@/assets/icons/ic_kakao.svg";
+
+export default function Signup() {
+ return (
+
+ );
+}
diff --git a/styles/common/fonts.css b/src/styles/fonts.css
similarity index 52%
rename from styles/common/fonts.css
rename to src/styles/fonts.css
index b570a3ae..f9064991 100644
--- a/styles/common/fonts.css
+++ b/src/styles/fonts.css
@@ -1,47 +1,48 @@
@font-face {
font-family: "ROKAF_Sans_Medium";
font-weight: 400;
- src: url("/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.ttf") format("truetype");
+ src: url("@/assets/fonts/ROKAF_Sans/ROKAF_Sans_Medium.ttf") format("truetype");
}
@font-face {
font-family: "pretendard";
font-weight: 800;
- src: url("/assets/fonts/Pretendard/Pretendard-ExtraBold.woff2")
+ src: url("@/assets/fonts/Pretendard/Pretendard-ExtraBold.woff2")
format("woff2");
}
@font-face {
font-family: "pretendard";
font-weight: 700;
- src: url("/assets/fonts/Pretendard/Pretendard-Bold.woff2") format("woff2");
+ src: url("@/assets/fonts/Pretendard/Pretendard-Bold.woff2") format("woff2");
}
@font-face {
font-family: "pretendard";
font-weight: 600;
- src: url("/assets/fonts/Pretendard/Pretendard-SemiBold.woff2") format("woff2");
+ src: url("@/assets/fonts/Pretendard/Pretendard-SemiBold.woff2")
+ format("woff2");
}
@font-face {
font-family: "pretendard";
font-weight: 500;
- src: url("/assets/fonts/Pretendard/Pretendard-Regular.woff2") format("woff2");
+ src: url("@/assets/fonts/Pretendard/Pretendard-Regular.woff2") format("woff2");
}
@font-face {
font-family: "pretendard";
font-weight: 400;
- src: url("/assets/fonts/Pretendard/Pretendard-Medium.woff2") format("woff2");
+ src: url("@/assets/fonts/Pretendard/Pretendard-Medium.woff2") format("woff2");
}
@font-face {
font-family: "pretendard";
font-weight: 300;
- src: url("/assets/fonts/Pretendard/Pretendard-Light.woff2") format("woff2");
+ src: url("@/assets/fonts/Pretendard/Pretendard-Light.woff2") format("woff2");
}
@font-face {
font-family: "pretendard";
font-weight: 200;
- src: url("/assets/fonts/Pretendard/Pretendard-ExtraLight.woff2")
+ src: url("@/assets/fonts/Pretendard/Pretendard-ExtraLight.woff2")
format("woff2");
}
@font-face {
font-weight: "pretendard";
font-family: 100;
- src: url("/assets/fonts/Pretendard/Pretendard-Thin.woff2") format("woff2");
+ src: url("@/assets/fonts/Pretendard/Pretendard-Thin.woff2") format("woff2");
}
diff --git a/src/styles/global.js b/src/styles/global.js
new file mode 100644
index 00000000..65a511a8
--- /dev/null
+++ b/src/styles/global.js
@@ -0,0 +1,77 @@
+import { createGlobalStyle } from "styled-components";
+import "./fonts.css";
+
+export const GlobalStyle = createGlobalStyle`
+ body {
+ font-family: "pretendard", sans-serif;
+ }
+ * {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ border: none;
+ font-size: inherit;
+ font-weight: inherit;
+ }
+ a {
+ text-decoration: none;
+ color: inherit;
+ }
+ button {
+ font-family: inherit;
+ cursor: pointer;
+ }
+ button:disabled {
+ cursor: not-allowed;
+ }
+ li {
+ list-style: none;
+ }
+ :root{
+ --primary-color: #3692ff;
+ --gray-900-color: #111827;
+ --gray-800-color: #1f2937;
+ --gray-700-color: #374151;
+ --gray-600-color: #4b5563;
+ --gray-500-color: #6b7280;
+ --gray-400-color: #9ca3af;
+ --gray-200-color: #e5e7eb;
+ --gray-100-color: #f3f4f6;
+ --gray-50-color: #f9fafb;
+ --white-color: #ffffff;
+ --error-red-color: #f74747;
+
+ /* Typography */
+ --font-primary: "pretendard", sans-serif;
+ --font-secondary: "ROKAF_Sans_Medium", sans-serif;
+
+ --font-size-300: 0.75rem; /* 12px */
+ --font-size-350: 0.875rem; /* 14px */
+ --font-size-400: 1rem; /* 16px, base */
+ --font-size-450: 1.125rem; /* 18px */
+ --font-size-500: 1.25rem; /* 20px,*/
+ --font-size-600: 1.5rem; /* 24px */
+ --font-size-700: 1.75rem; /* 28px */
+ --font-size-800: 2rem; /* 32px */
+ --font-size-900: 2.25rem; /* 36px */
+ --font-size-1000: 2.5rem; /* 40px */
+
+ /* spacing */
+ --spacing-xs: 5px;
+ --spacing-sm: 10px;
+ --spacing-md: 16px;
+ --spacing-lg: 24px;
+ --spacing-xl: 32px;
+ --spacing-xxl: 48px;
+ --spacing-xxxl: 64px;
+ --spacing-xxxxl: 128px;
+
+ /* border-radius */
+ --border-radius-xs: 8px;
+ --border-radius-sm: 12px;
+ --border-radius-md: 16px;
+ --border-radius-lg: 20px;
+ --border-radius-xl: 40px;
+ --border-radius-circle: 9999px;
+ }
+`;
diff --git a/src/styles/media.js b/src/styles/media.js
new file mode 100644
index 00000000..5d5e514a
--- /dev/null
+++ b/src/styles/media.js
@@ -0,0 +1,12 @@
+const screenSize = {
+ tablet: "48rem",
+ desktop: "80rem",
+};
+export const screenSizeNumber = {
+ tablet: 768,
+ desktop: 1280,
+};
+export const device = {
+ tablet: `(min-width: ${screenSize.tablet})`,
+ desktop: `(min-width: ${screenSize.desktop})`,
+};
diff --git a/src/templates/MainTemplate.jsx b/src/templates/MainTemplate.jsx
new file mode 100644
index 00000000..b130cb6c
--- /dev/null
+++ b/src/templates/MainTemplate.jsx
@@ -0,0 +1,19 @@
+import { Outlet } from "react-router-dom";
+import Header from "../components/layout/Header";
+import Footer from "../components/layout/Footer";
+import styled from "styled-components";
+import { GlobalStyle } from "@/styles/global";
+
+export default function MainTemplate() {
+ return (
+ <>
+
+
+ {}
+
+ >
+ );
+}
+const Container = styled.div`
+ margin-top: var(--spacing-xxxl);
+`;
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 00000000..b1f45c78
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/styles/common/global.css b/styles/common/global.css
deleted file mode 100644
index e9c59904..00000000
--- a/styles/common/global.css
+++ /dev/null
@@ -1,16 +0,0 @@
-@import url(./fonts.css);
-@import url(./tokens.css);
-
-body {
- font-family: var(--font-primary);
-}
-* {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- border: none;
-}
-a {
- text-decoration: none;
- color: inherit;
-}
diff --git a/styles/common/tokens.css b/styles/common/tokens.css
deleted file mode 100644
index acc91f0e..00000000
--- a/styles/common/tokens.css
+++ /dev/null
@@ -1,46 +0,0 @@
-@import url(./fonts.css);
-
-:root {
- /* color */
- --primary-color: #3692ff;
- --gray-900-color: #111827;
- --gray-800-color: #1f2937;
- --gray-700-color: #374151;
- --gray-600-color: #4b5563;
- --gray-500-color: #6b7280;
- --gray-400-color: #9ca3af;
- --gray-200-color: #e5e7eb;
- --gray-100-color: #f3f4f6;
- --gray-50-color: #f9fafb;
- --error-red-color: #f74747;
-
- /* Typography */
- --font-primary: "pretendard", sans-serif;
- --font-secondary: "ROKAF_Sans_Medium", sans-serif;
-
- --font-size-300: 0.75rem; /* 12px */
- --font-size-400: 1rem; /* 16px, base */
- --font-size-450: 1.125rem; /* 18px */
- --font-size-500: 1.25rem; /* 20px,*/
- --font-size-600: 1.5rem; /* 24px */
- --font-size-700: 1.75rem; /* 28px */
- --font-size-800: 2rem; /* 32px */
- --font-size-900: 2.25rem; /* 36px */
- --font-size-1000: 2.5rem; /* 40px */
-
- /* spacing */
- --spacing-xs: 5px;
- --spacing-sm: 10px;
- --spacing-md: 16px;
- --spacing-lg: 24px;
- --spacing-xl: 32px;
- --spacing-xxl: 48px;
- --spacing-xxxl: 64px;
- --spacing-xxxxl: 128px;
-
- /* border-radius */
- --border-radius-xs: 8px;
- --border-radius-sm: 12px;
- --border-radius-md: 20px;
- --border-radius-lg: 40px;
-}
diff --git a/styles/components/footer.css b/styles/components/footer.css
deleted file mode 100644
index 72a9e00d..00000000
--- a/styles/components/footer.css
+++ /dev/null
@@ -1,67 +0,0 @@
-@import url(/styles/common/tokens.css);
-
-:root {
- --footer-container-padding: var(--spacing-xl);
- --footer-copyright-padding-top: 36px;
-}
-@media screen and (min-width: 48rem) {
- :root {
- --footer-copyright-padding-top: 0;
- }
-}
-@media screen and (min-width: 75rem) {
- :root {
- --footer-container-padding: 2rem 6.5rem 6.75rem;
- }
-}
-
-.footer {
- display: flex;
- flex-direction: column;
- justify-content: flex-start;
- align-items: center;
- width: 100%;
- background-color: #111827;
-}
-.footer__container {
- display: flex;
- justify-content: space-between;
- align-items: center;
- flex-wrap: wrap;
- width: 100%;
- padding: var(--footer-container-padding);
- font-size: var(--font-size-400);
- font-weight: 400;
-}
-.footer__copyright {
- color: var(--gray-400-color);
- padding-top: var(--footer-copyright-padding-top);
- order: 3;
- width: 100%;
-}
-.footer__info {
- display: flex;
- justify-content: space-between;
- align-items: center;
- gap: var(--spacing-xl);
- color: var(--gray-200-color);
-}
-.footer__sns-icons {
- display: flex;
- justify-content: space-between;
- align-items: center;
- gap: var(--spacing-sm);
-}
-.footer__sns-icon {
- width: var(--font-size-500);
- height: var(--font-size-500);
-}
-@media screen and (min-width: 48rem) {
- .footer__container {
- flex-wrap: nowrap;
- }
- .footer__copyright {
- order: 1;
- width: auto;
- }
-}
diff --git a/styles/components/header.css b/styles/components/header.css
deleted file mode 100644
index 0da80a20..00000000
--- a/styles/components/header.css
+++ /dev/null
@@ -1,76 +0,0 @@
-@import url(/styles/common/tokens.css);
-
-:root {
- --navbar-btn-width: auto;
- --navbar-btn-height: auto;
- --navbar-margin: 0 var(--spacing-md);
- --header-padding: var(--spacing-sm) 0;
-}
-@media screen and (min-width: 48rem) {
- :root {
- --navbar-margin: 0 var(--spacing-lg);
- }
-}
-@media screen and (min-width: 75rem) {
- :root {
- --navbar-btn-width: 8rem;
- --navbar-btn-height: 3rem;
- --navbar-margin: 0 200px;
- }
-}
-
-.header {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- display: flex;
- justify-content: center;
- align-items: center;
- background-color: #ffffff;
- border-bottom: 1px solid #dfdfdf;
- padding: var(--header-padding);
-}
-.navbar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- flex-grow: 1;
- margin: var(--navbar-margin);
-}
-.navbar__logo-wrapper {
- display: flex;
- justify-content: space-between;
- align-items: center;
- gap: 10px;
-}
-.navbar__logo {
- width: 3.125rem;
- height: 3.125rem;
- display: none;
-}
-@media screen and (min-width: 75rem) {
- .navbar__logo {
- display: block;
- }
-}
-.navbar__title {
- font-size: var(--font-size-700);
- font-weight: 700;
- font-family: var(--font-secondary);
- color: var(--primary-color);
-}
-
-.navbar__login-btn {
- width: var(--navbar-btn-width);
- height: var(--navbar-btn-height);
- font-weight: 600;
- font-size: var(--font-size-400);
- line-height: 26px;
- text-align: center;
- padding: var(--spacing-sm) var(--spacing-lg);
- color: var(--gray-100-color);
- background-color: var(--primary-color);
- border-radius: var(--border-radius-xs);
- border: none;
-}
diff --git a/styles/pages/home.css b/styles/pages/home.css
deleted file mode 100644
index ecb64dce..00000000
--- a/styles/pages/home.css
+++ /dev/null
@@ -1,212 +0,0 @@
-@import url(/styles/common/global.css);
-@import url(/styles/common/tokens.css);
-@import url(/styles/components/header.css);
-@import url(/styles/components/footer.css);
-
-:root {
- --section-blue-container-width: 65rem;
- --section-blue-container-margin: 2.5rem 0 0;
- --section-blue-title-font-size: var(--font-size-800);
- --section-blue-height: 33.75rem;
- --section-blue-info-margin: 0 0 3rem;
- --section-blue-info-bottom-margin: 0 0 5rem;
- --section-blue-btn-padding: 12px;
- --section-blue-img-width: min(100%, 32rem);
- --section-blue-btn-font-size: var(--font-size-450);
- --section-blue-container-bottom-margin: 0;
- --section-main-height: 100%;
- --section-main-margin: 1.875rem 0;
- --section-main-img-width: 21.5rem;
- --section-main_wrapper-padding: var(--spacing-xl);
-}
-@media screen and (min-width: 48rem) {
- :root {
- --section-blue-height: 48rem;
- --section-blue-title-font-size: var(--font-size-1000);
- --section-blue-container-margin: 5rem 0 0;
- --section-blue-container-bottom-margin: 5rem 0 0;
- --section-blue-info-margin: 0 0 10rem;
- --section-blue-btn-font-size: var(--font-size-500);
- --section-blue-img-width: 42rem;
-
- --section-main-wrapper-width: auto;
- --section-main-img-width: 43.5rem;
- }
-}
-@media screen and (min-width: 75rem) {
- :root {
- --section-blue-height: 33.75rem;
- --section-blue-info-margin: 0 0 3.75rem;
- --section-blue-info-bottom-margin: 0 0 10rem;
-
- --section-main-wrapper-width: 62rem;
- --section-main-img-width: 35.625rem;
- --section-main-margin: 0;
- --section-main-height: 45rem;
- --section-main_wrapper-padding: 0;
- }
-}
-.section-blue {
- display: flex;
- justify-content: center;
- align-items: flex-end;
- background-color: #cfe5ff;
- height: var(--section-blue-height);
- width: 100%;
-}
-.section-blue__container {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: center;
- width: var(--section-blue-container-width);
- margin: 0 auto;
-}
-.section-blue__info {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- text-align: center;
- margin: var(--section-blue-info-margin);
- gap: var(--spacing-xl);
-}
-.section-blue__btn {
- font-size: var(--section-blue-btn-font-size);
- padding: var(--section-blue-btn-padding);
- width: 100%;
- background-color: var(--primary-color);
- color: var(--gray-100-color);
- border-radius: var(--border-radius-lg);
- border: none;
- font-weight: 600;
- line-height: 1.625rem;
-}
-.section-blue__title {
- font-size: var(--section-blue-title-font-size);
- color: var(--gray-700-color);
- text-align: left;
- font-weight: 700;
- line-height: 140%;
-}
-.section-blue__info__bottom {
- margin: var(--section-blue-info-bottom-margin);
- width: var(--section-blue-info-max-width);
-}
-.section-blue__img {
- width: var(--section-blue-img-width);
-}
-@media screen and (min-width: 48rem) {
- .section-blue__info__bottom {
- text-align: center;
- }
-}
-@media screen and (min-width: 75rem) {
- .section-blue__container {
- flex-direction: row;
- justify-content: center;
- align-items: flex-end;
- }
- .section-blue__info {
- align-items: flex-start;
- }
- .section-blue__title {
- font-size: var(--font-size-1000);
- word-break: keep-all;
- }
- .section-blue__btn {
- text-align: center;
- }
-}
-
-.section-main {
- display: flex;
- justify-content: center;
- align-items: center;
- width: 100%;
- height: var(--section-main-height);
- margin: var(--section-main-margin);
- background-color: #ffffff;
-}
-.section-main__wrapper {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: flex-start;
- background-color: #fcfcfc;
- gap: var(--spacing-xl);
- border-radius: var(--border-radius-sm);
- width: var(--section-main-wrapper-width);
- padding: var(--section-main_wrapper-padding);
-}
-.section-main__wrapper__reverse {
- flex-direction: column-reverse;
- align-items: flex-end;
- text-align: right;
- width: var(--section-main-wrapper-width);
- gap: var(--spacing-xl);
-}
-.section-main__wrapper__reverse > .section-main__container {
- text-align: right;
- align-items: flex-end;
-}
-.section-main__container {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: flex-start;
- gap: var(--spacing-lg);
-}
-.section-main__title {
- font-weight: 700;
- font-size: var(--font-size-600);
- word-break: keep-all;
- line-height: 140%;
- color: var(--gray-700-color);
-}
-.section-main__img {
- width: var(--section-main-img-width);
-}
-.section-main__hot-badge {
- font-size: var(--font-size-400);
- font-weight: 700;
- width: 100%;
- color: var(--primary-color);
-}
-.section-main-description {
- font-size: var(--font-size-450);
- font-weight: 400;
- color: var(--gray-700-color);
-}
-
-@media screen and (min-width: 48rem) {
- .section-main__title {
- font-size: var(--font-size-800);
- }
- .section-main-description {
- font-size: var(--font-size-500);
- line-height: 2rem;
- }
-}
-
-@media screen and (min-width: 75rem) {
- .section-main__wrapper {
- flex-direction: row;
- justify-content: center;
- align-items: center;
- gap: var(--spacing-xxl);
- }
- .section-main__wrapper__reverse {
- gap: var(--spacing-xxl);
- }
- .section-main__wrapper__reverse > .section-main__container {
- text-align: right;
- align-items: center;
- }
- .section-main__title {
- font-size: var(--font-size-1000);
- }
- .section-main-description {
- font-size: var(--font-size-600);
- }
-}
diff --git a/styles/pages/sign.css b/styles/pages/sign.css
deleted file mode 100644
index 796addd0..00000000
--- a/styles/pages/sign.css
+++ /dev/null
@@ -1,175 +0,0 @@
-@import url(/styles/common/global.css);
-@import url(/styles/common/tokens.css);
-@import url(/styles/components/header.css);
-@import url(/styles/components/footer.css);
-:root {
- --sign-form-padding: 0 var(--spacing-md);
- --sign-form-width: min(100%, 25rem);
- --sign-title-font-size: var(--font-size-900);
- --sign-label-font-size: var(--font-size-400);
- --sign-sns-icon-width: 2.625rem;
-
- --sign-header-gap: var(--spacing-sm);
- --sign-logo-width: 3.2rem;
- --sign-header-margin-bottom: 2.125rem;
- --sign-input-width: 100%;
- --sign-input-padding: 0 20px;
- --sign-input-height: 3.5rem;
-
- --sign-btn-padding: 1rem 7.75rem;
- --sign-sns-login-wrapper-padding: 1rem 1.5rem;
-}
-@media screen and (min-width: 48rem) {
- :root {
- --sign-title-font-size: 4.125rem;
- --sign-form-width: 100%;
- --sign-form-padding: 0 40px;
- }
-}
-@media screen and (min-width: 75rem) {
- :root {
- --sign-form-width: unset;
- --sign-logo-width: 6.25rem;
- --sign-input-width: 40rem;
- --sign-label-font-size: var(--font-size-500);
- --sign-form-padding: 0;
- --sign-header-gap: var(--spacing-lg);
- }
-}
-
-.sign {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- width: 100%;
- height: 100vh;
-}
-.sign__header {
- display: flex;
- justify-content: center;
- align-items: center;
- gap: var(--sign-header-gap);
- width: 100%;
- margin-bottom: var(--sign-header-margin-bottom);
-}
-.sign__logo {
- width: var(--sign-logo-width);
- height: var(--sign-logo-width);
-}
-.sign__title {
- font-size: var(--sign-title-font-size);
- font-weight: 700;
- font-family: "ROKAF_Sans_Medium";
- color: var(--primary-color);
-}
-.sign__form {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- width: var(--sign-form-width);
- gap: var(--spacing-lg);
- padding: var(--sign-form-padding);
-}
-.sign__input-container {
- display: flex;
- width: 100%;
- flex-direction: column;
- justify-content: center;
- align-items: flex-start;
- gap: var(--spacing-sm);
-}
-.sign__input-wrapper {
- position: relative;
- width: 100%;
-}
-.sign__label {
- font-size: var(--sign-label-font-size);
- font-weight: 700;
- line-height: 1.5rem;
-}
-.sign__input {
- width: var(--sign-input-width);
- height: var(--sign-input-height);
- padding: var(--sign-input-padding);
- border: none;
- border-radius: var(--border-radius-sm);
- font-size: var(--font-size-400);
- font-weight: 400;
- background-color: var(--gray-100-color);
-}
-.sign__input__error {
- border: 2px solid var(--error-red-color);
-}
-.sign__visibility-icon {
- position: absolute;
- background: url("/assets/icons/ic_visibility_off.svg") no-repeat center;
- top: 50%;
- transform: translateY(-50%);
- right: 24px;
- width: var(--font-size-600);
- height: var(--font-size-600);
- cursor: pointer;
-}
-.sign__visibility-icon__visible {
- background: url("/assets/icons/ic_visibility_on.svg") no-repeat center;
-}
-.sign__btn {
- width: 100%;
- padding: var(--sign-btn-padding);
- border-radius: var(--border-radius-lg);
- border: none;
- font-size: var(--font-size-500);
- font-weight: 600;
- line-height: 2rem;
- color: var(--gray-100-color);
- background-color: var(--primary-color);
- cursor: pointer;
-}
-.sign__btn:disabled {
- background-color: var(--gray-400-color);
- cursor: not-allowed;
-}
-.sign__btn > a {
- width: 100%;
-}
-.sign__sns-login-wrapper {
- display: flex;
- justify-content: space-between;
- align-items: center;
- width: 100%;
- padding: var(--sign-sns-login-wrapper-padding);
- gap: var(--spacing-lg);
- border-radius: var(--border-radius-xs);
- background-color: #e6f2ff;
-}
-.sign__sns-login-text {
- font-size: var(--font-size-400);
- font-weight: 500;
- color: var(--gray-800-color);
-}
-.sign__sns-icon {
- width: var(--sign-sns-icon-width);
- height: var(--sign-sns-icon-width);
- background-color: #e6f2ff;
- cursor: pointer;
-}
-.sign__signup-guide {
- width: 100%;
- color: var(--gray-800-color);
- font-size: var(--font-size-400);
- text-align: center;
-}
-.sign__signup-link {
- font-weight: 500;
- color: var(--primary-color);
- text-decoration: underline;
- margin-left: var(--spacing-xs);
-}
-.sign__input-error {
- display: none;
- color: var(--error-red-color);
- font-size: var(--font-size-400);
- margin-left: var(--spacing-md);
-}
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 00000000..3c1537df
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,34 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import svgr from "vite-plugin-svgr";
+
+// https://vite.dev/config/
+export default defineConfig({
+ plugins: [
+ react(),
+ svgr({
+ // svgr 옵션 : https://react-svgr.com/docs/options/
+ //svg import할때 ?react 접미사 생략가능
+ svgrOptions: {
+ exportType: "default",
+ ref: true,
+ svgo: false,
+ titleProp: true,
+ },
+ include: "**/*.svg",
+ }),
+ ],
+ build: {
+ minify: "terser",
+ terserOptions: {
+ compress: {
+ //build 시에 모든 console.log를 제거
+ drop_console: true,
+ drop_debugger: true,
+ },
+ },
+ },
+ resolve: {
+ alias: [{ find: "@", replacement: "/src" }],
+ },
+});