diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index d6c9537..51d359b 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -9,10 +9,25 @@ module.exports = {
ignorePatterns: ['dist', '.eslintrc.cjs'],
parser: '@typescript-eslint/parser',
plugins: ['react-refresh'],
- rules: {
- 'react-refresh/only-export-components': [
- 'warn',
- { allowConstantExport: true },
+ "rules": {
+ "@typescript-eslint/naming-convention": [
+ "warn",
+ // 변수명
+ {
+ "selector": "variable",
+ "format": ["camelCase", "PascalCase"]
+ },
+ // 함수명
+ {
+ "selector": "function",
+ "format": ["camelCase", "PascalCase"]
+ },
],
+ "quotes": ["error", "single"],
+ "semi": ["error", "always"],
+ "no-duplicate-imports": "error",
+ "no-console": ["warn", { "allow": ["warn", "error", "info"] }],
+ "no-unused-vars": "warn",
+ "no-multiple-empty-lines": "error"
},
}
diff --git a/.github/workflow/deploy.yml b/.github/workflow/deploy.yml
new file mode 100644
index 0000000..f111c32
--- /dev/null
+++ b/.github/workflow/deploy.yml
@@ -0,0 +1,48 @@
+name: CI/CD Pipeline
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v2
+ with:
+ node-version: '16'
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Build project
+ run: npm run build
+
+ - name: Prepare deployment package
+ run: |
+ mkdir -p build/deployment
+ cp -r dist/* build/deployment/
+
+ - name: Deploy to Home Server
+ uses: appleboy/scp-action@v0.0.1
+ with:
+ host: ${{ secrets.SSH_HOST }}
+ username: ${{ secrets.SSH_USER }}
+ key: ${{ secrets.SSH_PRIVATE_KEY }}
+ source: "build/deployment/*"
+ target: "/home/anhye0n/web/tutorial_sejong/frontend/dist"
+
+ - name: Restart Nginx
+ uses: appleboy/ssh-action@master
+ with:
+ host: ${{ secrets.SSH_HOST }}
+ username: ${{ secrets.SSH_USER }}
+ key: ${{ secrets.SSH_PRIVATE_KEY }}
+ script: |
+ sudo systemctl restart nginx
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..9d21683
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,19 @@
+{
+ "arrowParens": "avoid",
+ "bracketSpacing": false,
+ "endOfLine": "auto",
+ "htmlWhitespaceSensitivity": "css",
+ "jsxBracketSameLine": false,
+ "jsxSingleQuote": true,
+ "printWidth": 80,
+ "proseWrap": "preserve",
+ "quoteProps": "consistent",
+ "semi": true,
+ "singleQuote": true,
+ "tabWidth": 2,
+ "trailingComma": "all",
+ "useTabs": false,
+ "vueIndentScriptAndStyle": true,
+ "requirePragma": false,
+ "insertPragma": false
+}
diff --git a/index.html b/index.html
index e4b78ea..b0d4a23 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
-
Vite + React + TS
+ 수강신청
diff --git a/package-lock.json b/package-lock.json
index 2557a78..c897eae 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,32 +9,38 @@
"version": "0.0.0",
"dependencies": {
"@reduxjs/toolkit": "^2.2.6",
- "@types/node": "^20.14.9",
"axios": "^1.7.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-redux": "^9.1.2",
"react-router-dom": "^6.24.0",
- "redux-persist": "^6.0.0"
+ "redux-persist": "^6.0.0",
+ "styled-components": "^6.1.11",
+ "styled-reset": "^4.5.2",
+ "vite-plugin-svgr": "^4.2.0"
},
"devDependencies": {
+ "@types/node": "^20.14.9",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
+ "@types/styled-components": "^5.1.34",
"@typescript-eslint/eslint-plugin": "^7.13.1",
"@typescript-eslint/parser": "^7.13.1",
"@vitejs/plugin-react": "^4.3.1",
"eslint": "^8.57.0",
+ "eslint-config-prettier": "^9.1.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.7",
+ "prettier": "^3.3.2",
"typescript": "^5.2.2",
- "vite": "^5.3.1"
+ "vite": "^5.3.1",
+ "vite-tsconfig-paths": "^4.3.2"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -47,7 +53,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
"integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
- "dev": true,
"dependencies": {
"@babel/highlight": "^7.24.7",
"picocolors": "^1.0.0"
@@ -60,7 +65,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
"integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -69,7 +73,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
"integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
- "dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.24.7",
@@ -99,7 +102,6 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -108,7 +110,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
"integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.24.7",
"@jridgewell/gen-mapping": "^0.3.5",
@@ -123,7 +124,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
"integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
- "dev": true,
"dependencies": {
"@babel/compat-data": "^7.24.7",
"@babel/helper-validator-option": "^7.24.7",
@@ -139,7 +139,6 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -148,7 +147,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.24.7"
},
@@ -160,7 +158,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
- "dev": true,
"dependencies": {
"@babel/template": "^7.24.7",
"@babel/types": "^7.24.7"
@@ -173,7 +170,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
"integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.24.7"
},
@@ -185,7 +181,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
"integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
- "dev": true,
"dependencies": {
"@babel/traverse": "^7.24.7",
"@babel/types": "^7.24.7"
@@ -198,7 +193,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
"integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
- "dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-module-imports": "^7.24.7",
@@ -226,7 +220,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
"integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
- "dev": true,
"dependencies": {
"@babel/traverse": "^7.24.7",
"@babel/types": "^7.24.7"
@@ -239,7 +232,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.24.7"
},
@@ -251,7 +243,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
"integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -260,7 +251,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -269,7 +259,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
"integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -278,7 +267,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz",
"integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==",
- "dev": true,
"dependencies": {
"@babel/template": "^7.24.7",
"@babel/types": "^7.24.7"
@@ -291,7 +279,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
"integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
- "dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
@@ -306,7 +293,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
"integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
- "dev": true,
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -348,7 +334,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
"integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
- "dev": true,
"dependencies": {
"@babel/code-frame": "^7.24.7",
"@babel/parser": "^7.24.7",
@@ -362,7 +347,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
"integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
- "dev": true,
"dependencies": {
"@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.24.7",
@@ -383,7 +367,6 @@
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
"integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
- "dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.24.7",
"@babel/helper-validator-identifier": "^7.24.7",
@@ -393,6 +376,24 @@
"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==",
+ "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=="
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
@@ -400,7 +401,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"aix"
@@ -416,7 +416,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -432,7 +431,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -448,7 +446,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -464,7 +461,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -480,7 +476,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -496,7 +491,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -512,7 +506,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -528,7 +521,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -544,7 +536,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -560,7 +551,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -576,7 +566,6 @@
"cpu": [
"loong64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -592,7 +581,6 @@
"cpu": [
"mips64el"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -608,7 +596,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -624,7 +611,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -640,7 +626,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -656,7 +641,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -672,7 +656,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"netbsd"
@@ -688,7 +671,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"openbsd"
@@ -704,7 +686,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"sunos"
@@ -720,7 +701,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -736,7 +716,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -752,7 +731,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -915,7 +893,6 @@
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -929,7 +906,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
"engines": {
"node": ">=6.0.0"
}
@@ -938,7 +914,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true,
"engines": {
"node": ">=6.0.0"
}
@@ -946,14 +921,12 @@
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
"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==",
- "dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -1025,6 +998,27 @@
"node": ">=14.0.0"
}
},
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+ "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "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.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
@@ -1032,7 +1026,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -1045,7 +1038,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -1058,7 +1050,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -1071,7 +1062,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -1084,7 +1074,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1097,7 +1086,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1110,7 +1098,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1123,7 +1110,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1136,7 +1122,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1149,7 +1134,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1162,7 +1146,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1175,7 +1158,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1188,7 +1170,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1201,7 +1182,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -1214,7 +1194,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -1227,12 +1206,212 @@
"cpu": [
"x64"
],
- "dev": true,
"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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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==",
+ "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",
@@ -1277,13 +1456,23 @@
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
+ },
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
+ "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
},
"node_modules/@types/node": {
"version": "20.14.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
"integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
+ "devOptional": true,
"dependencies": {
"undici-types": "~5.26.4"
}
@@ -1313,6 +1502,22 @@
"@types/react": "*"
}
},
+ "node_modules/@types/styled-components": {
+ "version": "5.1.34",
+ "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz",
+ "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==",
+ "dev": true,
+ "dependencies": {
+ "@types/hoist-non-react-statics": "*",
+ "@types/react": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "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=="
+ },
"node_modules/@types/use-sync-external-store": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
@@ -1578,7 +1783,6 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -1589,8 +1793,7 @@
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"node_modules/array-union": {
"version": "2.1.0",
@@ -1647,7 +1850,6 @@
"version": "4.23.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz",
"integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -1679,16 +1881,33 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
"engines": {
"node": ">=6"
}
},
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "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==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/caniuse-lite": {
"version": "1.0.30001639",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz",
"integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -1708,7 +1927,6 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -1722,7 +1940,6 @@
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
"dependencies": {
"color-name": "1.1.3"
}
@@ -1730,8 +1947,7 @@
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
@@ -1753,8 +1969,32 @@
"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==",
- "dev": true
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+ },
+ "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==",
+ "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.3",
@@ -1770,17 +2010,33 @@
"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==",
+ "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==",
+ "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==",
- "devOptional": true
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/debug": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
- "dev": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -1831,17 +2087,43 @@
"node": ">=6.0.0"
}
},
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/electron-to-chromium": {
"version": "1.4.815",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.815.tgz",
- "integrity": "sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==",
- "dev": true
+ "integrity": "sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg=="
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "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==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
},
"node_modules/esbuild": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
- "dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -1879,7 +2161,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -1888,7 +2169,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
"engines": {
"node": ">=0.8.0"
}
@@ -1948,6 +2228,18 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint-config-prettier": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
"node_modules/eslint-plugin-react-hooks": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
@@ -2166,6 +2458,11 @@
"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=="
+ },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -2332,7 +2629,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -2346,7 +2642,6 @@
"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==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -2410,7 +2705,6 @@
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
"engines": {
"node": ">=4"
}
@@ -2435,6 +2729,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
"node_modules/graphemer": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -2445,11 +2745,19 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
"engines": {
"node": ">=4"
}
},
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dev": true,
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
@@ -2472,7 +2780,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -2510,6 +2817,11 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "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=="
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2564,7 +2876,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
"dependencies": {
"argparse": "^2.0.1"
},
@@ -2576,7 +2887,6 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
"bin": {
"jsesc": "bin/jsesc"
},
@@ -2590,6 +2900,11 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true
},
+ "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=="
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -2606,7 +2921,6 @@
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
"bin": {
"json5": "lib/cli.js"
},
@@ -2636,6 +2950,11 @@
"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=="
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -2668,11 +2987,18 @@
"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==",
+ "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==",
- "dev": true,
"dependencies": {
"yallist": "^3.0.2"
}
@@ -2736,14 +3062,12 @@
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -2763,11 +3087,19 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "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==",
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
},
"node_modules/once": {
"version": "1.4.0",
@@ -2829,7 +3161,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
"dependencies": {
"callsites": "^3.0.0"
},
@@ -2837,6 +3168,23 @@
"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==",
+ "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",
@@ -2868,7 +3216,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -2876,14 +3223,12 @@
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
- "dev": true
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -2895,7 +3240,6 @@
"version": "8.4.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
"integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -2919,6 +3263,11 @@
"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=="
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -2928,6 +3277,21 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/prettier": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
+ "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -2985,6 +3349,12 @@
"react": "^18.3.1"
}
},
+ "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==",
+ "dev": true
+ },
"node_modules/react-redux": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
@@ -3076,7 +3446,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
"engines": {
"node": ">=4"
}
@@ -3111,7 +3480,6 @@
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
"integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
- "dev": true,
"dependencies": {
"@types/estree": "1.0.5"
},
@@ -3185,6 +3553,11 @@
"node": ">=10"
}
},
+ "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=="
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -3215,11 +3588,19 @@
"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==",
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3248,11 +3629,85 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/styled-components": {
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.11.tgz",
+ "integrity": "sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA==",
+ "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.38",
+ "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.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/styled-components/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/styled-reset": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/styled-reset/-/styled-reset-4.5.2.tgz",
+ "integrity": "sha512-dbAaaVEhweBs2FGfqGBdW6oMcMK8238C2X5KCxBhUQJX92m/QyUfzRADOXhdXiXNkIPELtMCd72YY9eCdORfIw==",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "styled-components": ">=4.0.0 || >=5.0.0 || >=6.0.0"
+ }
+ },
+ "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=="
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -3260,6 +3715,11 @@
"node": ">=4"
}
},
+ "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=="
+ },
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -3270,7 +3730,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
"engines": {
"node": ">=4"
}
@@ -3299,6 +3758,31 @@
"typescript": ">=4.2.0"
}
},
+ "node_modules/tsconfck": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz",
+ "integrity": "sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==",
+ "dev": true,
+ "bin": {
+ "tsconfck": "bin/tsconfck.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -3327,7 +3811,7 @@
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz",
"integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==",
- "dev": true,
+ "devOptional": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -3339,13 +3823,13 @@
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "devOptional": true
},
"node_modules/update-browserslist-db": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
"integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -3392,7 +3876,6 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz",
"integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==",
- "dev": true,
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.38",
@@ -3443,6 +3926,38 @@
}
}
},
+ "node_modules/vite-plugin-svgr": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz",
+ "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.5",
+ "@svgr/core": "^8.1.0",
+ "@svgr/plugin-jsx": "^8.1.0"
+ },
+ "peerDependencies": {
+ "vite": "^2.6.0 || 3 || 4 || 5"
+ }
+ },
+ "node_modules/vite-tsconfig-paths": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz",
+ "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "globrex": "^0.1.2",
+ "tsconfck": "^3.0.3"
+ },
+ "peerDependencies": {
+ "vite": "*"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -3476,8 +3991,7 @@
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"node_modules/yocto-queue": {
"version": "0.1.0",
diff --git a/package.json b/package.json
index ee3da0c..5d24f9e 100644
--- a/package.json
+++ b/package.json
@@ -6,29 +6,37 @@
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
- "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
+ "format": "prettier --write --cache .",
+ "lint": "eslint src/**/*.{ts,tsx} --fix",
"preview": "vite preview"
},
"dependencies": {
"@reduxjs/toolkit": "^2.2.6",
- "@types/node": "^20.14.9",
"axios": "^1.7.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-redux": "^9.1.2",
"react-router-dom": "^6.24.0",
- "redux-persist": "^6.0.0"
+ "redux-persist": "^6.0.0",
+ "styled-components": "^6.1.11",
+ "styled-reset": "^4.5.2",
+ "vite-plugin-svgr": "^4.2.0"
},
"devDependencies": {
+ "@types/node": "^20.14.9",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
+ "@types/styled-components": "^5.1.34",
"@typescript-eslint/eslint-plugin": "^7.13.1",
"@typescript-eslint/parser": "^7.13.1",
"@vitejs/plugin-react": "^4.3.1",
"eslint": "^8.57.0",
+ "eslint-config-prettier": "^9.1.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.7",
+ "prettier": "^3.3.2",
"typescript": "^5.2.2",
- "vite": "^5.3.1"
+ "vite": "^5.3.1",
+ "vite-tsconfig-paths": "^4.3.2"
}
}
diff --git a/src/App.tsx b/src/App.tsx
index 39d0631..41be489 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,18 +1,20 @@
-import {Route, Routes} from "react-router-dom"
-import Home from "@pages/index/Home.tsx";
+import {Route, Routes} from 'react-router-dom';
+import {ThemeProvider} from 'styled-components';
+import GlobalStyle from './styles/GlobalStyle';
+import {theme} from './styles/theme/Theme';
+import Home from '@pages/index/Home';
+import Login from '@pages/index/Login';
function App() {
-
- return (
- <>
-
-
-
- }/>
-
-
- >
- )
+ return (
+
+
+
+ } />
+ } />
+
+
+ );
}
-export default App
\ No newline at end of file
+export default App;
diff --git a/src/assets/img/arrow_right.png b/src/assets/img/arrow_right.png
new file mode 100644
index 0000000..7bf786a
Binary files /dev/null and b/src/assets/img/arrow_right.png differ
diff --git a/src/assets/img/arrow_up.png b/src/assets/img/arrow_up.png
new file mode 100644
index 0000000..72c2308
Binary files /dev/null and b/src/assets/img/arrow_up.png differ
diff --git a/src/assets/img/btn_main_top_right.png b/src/assets/img/btn_main_top_right.png
new file mode 100644
index 0000000..d21d608
Binary files /dev/null and b/src/assets/img/btn_main_top_right.png differ
diff --git a/src/assets/img/fav_gray.png b/src/assets/img/fav_gray.png
new file mode 100644
index 0000000..06e191f
Binary files /dev/null and b/src/assets/img/fav_gray.png differ
diff --git a/src/assets/img/fav_white.png b/src/assets/img/fav_white.png
new file mode 100644
index 0000000..2ac1240
Binary files /dev/null and b/src/assets/img/fav_white.png differ
diff --git a/src/assets/img/home.png b/src/assets/img/home.png
new file mode 100644
index 0000000..a1bbcb0
Binary files /dev/null and b/src/assets/img/home.png differ
diff --git a/src/assets/img/login_bg.png b/src/assets/img/login_bg.png
new file mode 100644
index 0000000..24d0538
Binary files /dev/null and b/src/assets/img/login_bg.png differ
diff --git a/src/assets/img/logo.png b/src/assets/img/logo.png
new file mode 100644
index 0000000..455c810
Binary files /dev/null and b/src/assets/img/logo.png differ
diff --git a/src/assets/img/logout.png b/src/assets/img/logout.png
new file mode 100644
index 0000000..0432683
Binary files /dev/null and b/src/assets/img/logout.png differ
diff --git a/src/assets/img/main_logo.png b/src/assets/img/main_logo.png
new file mode 100644
index 0000000..16c8225
Binary files /dev/null and b/src/assets/img/main_logo.png differ
diff --git a/src/assets/img/menu.png b/src/assets/img/menu.png
new file mode 100644
index 0000000..03a4e13
Binary files /dev/null and b/src/assets/img/menu.png differ
diff --git a/src/assets/img/menu2_close.png b/src/assets/img/menu2_close.png
new file mode 100644
index 0000000..18fe207
Binary files /dev/null and b/src/assets/img/menu2_close.png differ
diff --git a/src/assets/img/menu_close.png b/src/assets/img/menu_close.png
new file mode 100644
index 0000000..f3fbbdf
Binary files /dev/null and b/src/assets/img/menu_close.png differ
diff --git a/src/assets/img/notice.png b/src/assets/img/notice.png
new file mode 100644
index 0000000..0dfb387
Binary files /dev/null and b/src/assets/img/notice.png differ
diff --git a/src/assets/img/search.png b/src/assets/img/search.png
new file mode 100644
index 0000000..78880d7
Binary files /dev/null and b/src/assets/img/search.png differ
diff --git a/src/assets/img/setitng.png b/src/assets/img/setitng.png
new file mode 100644
index 0000000..757ae28
Binary files /dev/null and b/src/assets/img/setitng.png differ
diff --git a/src/assets/img/study.svg b/src/assets/img/study.svg
new file mode 100644
index 0000000..dff3c4c
--- /dev/null
+++ b/src/assets/img/study.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/src/assets/img/tab_close.png b/src/assets/img/tab_close.png
new file mode 100644
index 0000000..d63a65c
Binary files /dev/null and b/src/assets/img/tab_close.png differ
diff --git a/src/assets/img/tab_close_all.png b/src/assets/img/tab_close_all.png
new file mode 100644
index 0000000..8658dd6
Binary files /dev/null and b/src/assets/img/tab_close_all.png differ
diff --git a/src/assets/img/to_top.png b/src/assets/img/to_top.png
new file mode 100644
index 0000000..e19d388
Binary files /dev/null and b/src/assets/img/to_top.png differ
diff --git a/src/assets/img/view.svg b/src/assets/img/view.svg
new file mode 100644
index 0000000..942915f
--- /dev/null
+++ b/src/assets/img/view.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/src/assets/react.svg b/src/assets/react.svg
deleted file mode 100644
index 6c87de9..0000000
--- a/src/assets/react.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/components/LoginForm/FormInput.tsx b/src/components/LoginForm/FormInput.tsx
new file mode 100644
index 0000000..16977d3
--- /dev/null
+++ b/src/components/LoginForm/FormInput.tsx
@@ -0,0 +1,29 @@
+import styled from 'styled-components';
+import {setType} from '.';
+
+interface InputProps {
+ value: string | number;
+ setValue: React.Dispatch>;
+ type: string;
+}
+
+function FormInput({value, setValue, type}: InputProps) {
+ const handleInput = (e: React.ChangeEvent) => {
+ setValue(e.target.value);
+ };
+
+ return (
+ <>
+
+ >
+ );
+}
+
+const InputWrap = styled.input`
+ background-color: #a9d0f5;
+ height: 4rem;
+ width: 38rem;
+ font-size: 1.9rem;
+`;
+
+export default FormInput;
diff --git a/src/components/LoginForm/index.tsx b/src/components/LoginForm/index.tsx
new file mode 100644
index 0000000..94e64ca
--- /dev/null
+++ b/src/components/LoginForm/index.tsx
@@ -0,0 +1,82 @@
+import styled from 'styled-components';
+import FormInput from './FormInput';
+import {useState} from 'react';
+
+export type setType = string | number;
+
+function LoginForm() {
+ const [id, setId] = useState(0);
+ const [name, setName] = useState('');
+
+ return (
+
+
+
+ 학번
+
+
+
+ 이름
+
+
+
+
+
+
+
+ 아이디 찾기 | 비밀번호 찾기
+ 로그인
+
+ );
+}
+
+const FormContainer = styled.div`
+ padding: 1.5rem 4rem;
+ background-color: ${props => props.theme.colors.white};
+ border-radius: 0.3rem;
+ margin-bottom: 2rem;
+`;
+
+const InputContainer = styled.div`
+ margin-bottom: 2.5rem;
+`;
+
+const InputBox = styled.div`
+ margin-top: 2rem;
+`;
+
+const LabelWrap = styled.div`
+ ${props => props.theme.texts.loginContent};
+ margin-bottom: 0.7rem;
+`;
+
+const CheckboxWrap = styled.div`
+ margin-left: -0.5rem;
+ margin-top: 1rem;
+`;
+
+const FindWrap = styled.div`
+ ${props => props.theme.texts.tableTitle};
+ color: #777;
+ float: inline-end;
+ margin-bottom: 2.5rem;
+`;
+
+const LoginBtnWrap = styled.button`
+ width: 100%;
+ height: 5rem;
+ background-color: #c3002f;
+ border: none;
+ border-radius: 5rem;
+ color: ${props => props.theme.colors.white};
+ font-size: 1.7rem;
+ font-weight: 700;
+ box-shadow: 0px 4px 5px lightgray;
+ margin-bottom: 2rem;
+
+ &:hover {
+ background-color: #c3002fc7;
+ }
+`;
+
+export default LoginForm;
diff --git a/src/components/Menubar/BarTitle.tsx b/src/components/Menubar/BarTitle.tsx
new file mode 100644
index 0000000..90a0e27
--- /dev/null
+++ b/src/components/Menubar/BarTitle.tsx
@@ -0,0 +1,55 @@
+import styled from 'styled-components';
+import Star from '@assets/img/fav_white.png';
+import Search from '@assets/img/search.png';
+import Close from '@assets/img/menu_close.png';
+
+interface OpenProps {
+ setIsOpen: React.Dispatch>;
+}
+
+function BarTitle({setIsOpen}: OpenProps) {
+ return (
+
+ 학부생수강시스템
+
+
+
+ setIsOpen(false)}>
+
+
+
+
+ );
+}
+
+const BarTitleContainer = styled.div`
+ background: rgb(163, 20, 50);
+ background: linear-gradient(
+ 90deg,
+ rgba(163, 20, 50, 1) 0%,
+ rgba(51, 77, 97, 1) 100%
+ );
+ height: 4rem;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+`;
+
+const BarTitleWrap = styled.div`
+ ${props => props.theme.texts.subtitle};
+ font-size: 1.5rem;
+ color: ${props => props.theme.colors.white};
+`;
+
+const IconBox = styled.div`
+ display: flex;
+ align-items: center;
+ column-gap: 0.5rem;
+`;
+
+const CloseBtn = styled.button`
+ display: flex;
+ align-items: center;
+`;
+
+export default BarTitle;
diff --git a/src/components/Menubar/Menu.tsx b/src/components/Menubar/Menu.tsx
new file mode 100644
index 0000000..f5cdfdb
--- /dev/null
+++ b/src/components/Menubar/Menu.tsx
@@ -0,0 +1,78 @@
+import styled from 'styled-components';
+import arrow from '@assets/img/arrow_up.png';
+import hyphen from '@assets/img/menu2_close.png';
+import MenuItem from './MenuItem';
+import {useState} from 'react';
+
+interface ItemProps {
+ id: number;
+ name: string;
+ type: string;
+}
+
+const menuItems: ItemProps[] = [
+ {id: 0, name: '수강신청', type: 'study'},
+ {id: 1, name: '관심과목 담기', type: 'study'},
+ {id: 2, name: '강의시간표 조회', type: 'view'},
+];
+
+function Menu() {
+ const [focused, setFocused] = useState(null);
+
+ const handleClick = (id: number) => {
+ setFocused(id);
+ };
+
+ return (
+
+
+ 수강 및 변동신청
+
+
+
+
+ 수강신청 및 기타
+
+
+ {menuItems.map(item => (
+
+ ))}
+
+
+ );
+}
+
+const MenuContainer = styled.div``;
+const MenuTitleBox = styled.div`
+ height: 4rem;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 15px;
+ border-bottom: 1px solid ${props => props.theme.colors.neutral4};
+`;
+const MenuTitleWrap = styled.div`
+ ${props => props.theme.texts.menuTitle};
+`;
+
+const MenuSubtitleBox = styled(MenuTitleBox)`
+ ${props => props.theme.texts.menuTitle};
+ justify-content: flex-start;
+ column-gap: 1rem;
+`;
+
+const DetailBox = styled.div`
+ background-color: ${props => props.theme.colors.neutral5};
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+`;
+
+export default Menu;
diff --git a/src/components/Menubar/MenuItem.tsx b/src/components/Menubar/MenuItem.tsx
new file mode 100644
index 0000000..80fd08a
--- /dev/null
+++ b/src/components/Menubar/MenuItem.tsx
@@ -0,0 +1,36 @@
+import styled from 'styled-components';
+import View from '@assets/img/view.svg?react';
+import Study from '@assets/img/study.svg?react';
+
+interface DetailProps {
+ id: number;
+ type: string;
+ name: string;
+ isActive: boolean;
+ onClick: (id: number) => void;
+}
+
+function MenuItem({id, type, name, isActive, onClick}: DetailProps) {
+ return (
+ onClick(id)}>
+ {type === 'view' ? : }
+ {name}
+
+ );
+}
+
+const DetailWrap = styled.button<{isactive: boolean}>`
+ ${props => props.theme.texts.tableTitle};
+ width: 17.5rem;
+ height: 2.8rem;
+ display: flex;
+ align-items: center;
+ column-gap: 1rem;
+ padding-left: 10px;
+
+ background-color: ${props =>
+ props.isactive ? props.theme.colors.primary : 'transparent'};
+ color: ${props => props.isactive && props.theme.colors.white};
+`;
+
+export default MenuItem;
diff --git a/src/components/Menubar/Menubar.tsx b/src/components/Menubar/Menubar.tsx
deleted file mode 100644
index 43b746e..0000000
--- a/src/components/Menubar/Menubar.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import styles from "@assets/css/menubar/Menubar.module.css"
-
-function Menubar() {
- return (
-
- );
-}
-
-export default Menubar;
\ No newline at end of file
diff --git a/src/components/Menubar/index.tsx b/src/components/Menubar/index.tsx
new file mode 100644
index 0000000..e08516d
--- /dev/null
+++ b/src/components/Menubar/index.tsx
@@ -0,0 +1,51 @@
+import styled from 'styled-components';
+import {useState} from 'react';
+import BarTitle from './BarTitle';
+import Menu from './Menu';
+import close from '@assets/img/menu_close.png';
+
+function Menubar() {
+ const [isOpen, setIsOpen] = useState(true);
+
+ return (
+
+ {isOpen ? (
+
+
+
+
+ ) : (
+
+ setIsOpen(true)}>
+
+
+
+ )}
+
+ );
+}
+
+const BarContainer = styled.div`
+ height: 100vh;
+`;
+
+const OpendBar = styled.div`
+ width: 23rem;
+`;
+
+const ClosedBar = styled.div`
+ width: 2rem;
+ height: 100%;
+ background-color: ${props => props.theme.colors.neutral4};
+`;
+
+const OpenBtn = styled.button`
+ width: 100%;
+ height: 4rem;
+ background-color: ${props => props.theme.colors.primary};
+ > img {
+ transform: rotate(180deg);
+ }
+`;
+
+export default Menubar;
diff --git a/src/custom.d.ts b/src/custom.d.ts
new file mode 100644
index 0000000..7458a9b
--- /dev/null
+++ b/src/custom.d.ts
@@ -0,0 +1,7 @@
+declare module '*.svg' {
+ import React = require('react');
+
+ export const ReactComponent: React.FC>;
+ const src: string;
+ export default src;
+}
diff --git a/src/main.tsx b/src/main.tsx
index 1fd226a..3e0d1d7 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,19 +1,19 @@
// css
-import "@assets/css/default.css"
-import "@assets/fonts/fonts.css"
+import '@assets/css/default.css';
+import '@assets/fonts/fonts.css';
-import React from "react"
-import ReactDOM from "react-dom/client"
-import App from "./App.tsx"
-import { BrowserRouter } from "react-router-dom"
-import { Provider } from "react-redux"
-import store from "@store/store.ts"
-import { PersistGate } from "redux-persist/integration/react"
-import { persistStore } from "redux-persist"
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from './App.tsx';
+import { BrowserRouter } from 'react-router-dom';
+import { Provider } from 'react-redux';
+import store from '@store/store.ts';
+import { PersistGate } from 'redux-persist/integration/react';
+import { persistStore } from 'redux-persist';
-export const persist = persistStore(store)
+export const persist = persistStore(store);
-ReactDOM.createRoot(document.getElementById("root")!).render(
+ReactDOM.createRoot(document.getElementById('root')!).render(
@@ -23,4 +23,4 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
-)
\ No newline at end of file
+);
\ No newline at end of file
diff --git a/src/pages/index/Home.tsx b/src/pages/index/Home.tsx
index 69b4910..6dc66f2 100644
--- a/src/pages/index/Home.tsx
+++ b/src/pages/index/Home.tsx
@@ -1,9 +1,18 @@
+import styled from 'styled-components';
+import Menubar from '@components/Menubar';
+
function Home() {
- return (
-
- Home
-
- );
+ return (
+
+
+ 강의시간표/수업계획서조회
+
+ );
}
-export default Home;
\ No newline at end of file
+const Container = styled.div`
+ ${props => props.theme.texts.title};
+ display: flex;
+`;
+
+export default Home;
diff --git a/src/pages/index/Login.tsx b/src/pages/index/Login.tsx
new file mode 100644
index 0000000..25892a3
--- /dev/null
+++ b/src/pages/index/Login.tsx
@@ -0,0 +1,107 @@
+import styled from 'styled-components';
+import Bg from '@assets/img/login_bg.png';
+import Logo from '@assets/img/logo.png';
+import LoginForm from '@components/LoginForm/index';
+
+function Login() {
+ return (
+
+
+
+
+
+
+ 통합 로그인
+
+ 서비스 이용을 끝낸 후에는 개인정보보호를 위하여 꼭 로그아웃
+ 을 해주시기 바랍니다.
+
아이디는 학생은 학번, 교수/직원은{' '}
+ 포털 아이디(이메일아이디)
+ 또는 직번입니다.
+
+
+
+
+
+ 동일한 학번과 이름으로 로그인하면 이전의 데이터를 불러옵니다.
+
+ [장애 문의]
+
+
+ 세종대학교 05006 서울특별시 광진구 능동로 209 (군자동) |{' '}
+ TEL
+ 02.3408.3114 | E-MAIL itservice@sejong.ac.kr
+
+ COPYRIGHT 2012 SEJONG UNIVERSITY. ALL RIGHTS RESVERED.
+
+
+
+ );
+}
+
+const Container = styled.div`
+ background-image: url(${Bg});
+ background-repeat: no-repeat;
+ background-color: #fafafa;
+ width: 100%;
+`;
+
+const Box = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+`;
+
+const LogoWrap = styled.div`
+ margin: 3rem 0;
+`;
+
+const TitleWrap = styled.div`
+ color: ${props => props.theme.colors.white};
+ text-align: center;
+ margin-bottom: 2.5rem;
+ > p {
+ line-height: 2.5rem;
+ font-weight: 600;
+ font-size: 1.35rem;
+ }
+ > p > em {
+ color: #ffea9b;
+ }
+`;
+
+const Title = styled.h1`
+ font-size: 3.5rem;
+ font-weight: 700;
+ margin-bottom: 2rem;
+`;
+
+const FormWrap = styled.div`
+ margin-bottom: 2.5rem;
+`;
+
+const WarningWrap = styled.p`
+ ${props => props.theme.texts.loginContent};
+ margin-bottom: 2.5rem;
+`;
+
+const FaqWrap = styled.div`
+ ${props => props.theme.texts.loginContent};
+`;
+
+const FooterWrap = styled.div`
+ ${props => props.theme.texts.loginContent};
+ letter-spacing: 0;
+ > em {
+ color: ${props => props.theme.colors.black};
+ }
+ > p {
+ color: gray;
+ text-align: center;
+ font-weight: 500;
+ font-size: 1.2rem;
+ margin: 0.7rem 0 3rem 0;
+ }
+`;
+
+export default Login;
diff --git a/src/store/store.ts b/src/store/store.ts
index fe8da76..2f5a661 100644
--- a/src/store/store.ts
+++ b/src/store/store.ts
@@ -1,8 +1,8 @@
-import { combineReducers, configureStore } from "@reduxjs/toolkit"
-import { persistReducer } from "redux-persist"
-import storage from "redux-persist/lib/storage"
+import { combineReducers, configureStore } from '@reduxjs/toolkit';
+import { persistReducer } from 'redux-persist';
+import storage from 'redux-persist/lib/storage';
-import userSlice, { UserInfo } from "@store/userSlice.ts"
+import userSlice, { UserInfo } from '@store/userSlice.ts';
export interface RootState {
userInfo: UserInfo
@@ -10,17 +10,17 @@ export interface RootState {
const reducers = combineReducers({
userInfo: userSlice.reducer
-})
+});
const persistConfig = {
- key: "root", // localStorage key
+ key: 'root', // localStorage key
storage, // localStorage
- whitelist: ["userInfo"] // target (reducer name)
-}
+ whitelist: ['userInfo'] // target (reducer name)
+};
-const persistStore = persistReducer(persistConfig, reducers)
+const persistStore = persistReducer(persistConfig, reducers);
export default configureStore({
reducer: persistStore,
middleware: getDefaultMiddleware => getDefaultMiddleware({ serializableCheck: false })
-})
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/src/store/userSlice.ts b/src/store/userSlice.ts
index 82001ed..e3bb8d4 100644
--- a/src/store/userSlice.ts
+++ b/src/store/userSlice.ts
@@ -1,4 +1,4 @@
-import { createSlice } from "@reduxjs/toolkit"
+import { createSlice } from '@reduxjs/toolkit';
export interface UserInfo {
userName: string,
@@ -6,24 +6,24 @@ export interface UserInfo {
}
const userInfo = createSlice({
- name: "userInfo",
+ name: 'userInfo',
initialState: {
- userName: "",
- accessToken: ""
+ userName: '',
+ accessToken: ''
},
reducers: {
setUserName(state: UserInfo, { payload }: { payload: string }) {
- state.userName = payload
+ state.userName = payload;
},
setAccessToken(state: UserInfo, { payload }: { payload: string }) {
- state.accessToken = payload
+ state.accessToken = payload;
}
}
-})
+});
export const {
setUserName,
setAccessToken
-} = userInfo.actions
+} = userInfo.actions;
-export default userInfo
\ No newline at end of file
+export default userInfo;
\ No newline at end of file
diff --git a/src/styles/GlobalStyle.tsx b/src/styles/GlobalStyle.tsx
new file mode 100644
index 0000000..e37b293
--- /dev/null
+++ b/src/styles/GlobalStyle.tsx
@@ -0,0 +1,40 @@
+import {createGlobalStyle} from 'styled-components';
+import reset from 'styled-reset';
+
+const GlobalStyle = createGlobalStyle`
+ ${reset};
+ /* Chrome, Safari, Edge, Opera */
+ input::-webkit-outer-spin-button,
+ input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+ }
+
+ /* Firefox */
+ input[type='number'] {
+ -moz-appearance: textfield;
+ }
+
+ html {
+ font-size: 62.5%;
+ }
+ body {
+ font-family: 'MalgunGothicWeb', '맑은 고딕', 'NanumGothic', sans-serif;
+ font-size: 1.2rem;
+ color: ${props => props.theme.colors.neutral3};
+ letter-spacing: -0.1rem;
+ }
+ input {
+ border-radius: 2px;
+ }
+ button {
+ cursor: pointer;
+ outline: none;
+ border-radius: 2px;
+ background:transparent;
+ border:none;
+ padding:0;
+ }
+`;
+
+export default GlobalStyle;
diff --git a/src/styles/theme/Theme.ts b/src/styles/theme/Theme.ts
new file mode 100644
index 0000000..062f09e
--- /dev/null
+++ b/src/styles/theme/Theme.ts
@@ -0,0 +1,70 @@
+import {DefaultTheme} from 'styled-components';
+
+const colors = {
+ primary: '#a31432',
+ secondary: '#334D61',
+ neutral1: '#222',
+ neutral2: '#333',
+ neutral3: '#444',
+ neutral4: '#E8E8E8',
+ neutral5: '#F7F7F7',
+ blue: '#A9D0F5',
+ black: '#000',
+ white: '#FFF',
+};
+
+const texts = {
+ title: {
+ fontSize: '2rem',
+ fontWeight: '700',
+ color: '#222',
+ },
+ subtitle: {
+ fontSize: '1.4rem',
+ fontWeight: '600',
+ color: '#333',
+ },
+ menuTitle: {
+ fontSize: '1.3rem',
+ fontWeight: '600',
+ color: '#333',
+ },
+ content: {
+ fontSize: '1.2rem',
+ fontWeight: '400',
+ color: '#444',
+ },
+ warning: {
+ fontSize: '1.2rem',
+ fontWeight: '600',
+ color: '#FAEBEE',
+ },
+ tapTitle: {
+ fontSize: '1.3rem',
+ fontWeight: '400',
+ color: '#444',
+ },
+ tapTitleFocus: {
+ fontSize: '1.3rem',
+ fontWeight: '600',
+ color: '#a31432',
+ },
+ tableTitle: {
+ fontSize: '1.2rem',
+ fontWeight: '600',
+ color: '#444',
+ },
+ loginContent: {
+ fontSize: '1.35rem',
+ fontWeight: '600',
+ color: '#777',
+ },
+};
+
+export type ColorsType = typeof colors;
+export type TextsType = typeof texts;
+
+export const theme: DefaultTheme = {
+ colors,
+ texts,
+};
diff --git a/src/styles/theme/style.d.ts b/src/styles/theme/style.d.ts
new file mode 100644
index 0000000..8dffb0f
--- /dev/null
+++ b/src/styles/theme/style.d.ts
@@ -0,0 +1,9 @@
+import 'styled-components';
+import { ColorsType, TextsType } from './Theme';
+
+declare module 'styled-components' {
+ export interface DefaultTheme {
+ colors: ColorsType;
+ texts: TextsType;
+ }
+}
\ No newline at end of file
diff --git a/src/utils/api-setting.ts b/src/utils/api-setting.ts
index e8b361d..2db0dfb 100644
--- a/src/utils/api-setting.ts
+++ b/src/utils/api-setting.ts
@@ -1,7 +1,7 @@
-import axios from "axios"
+import axios from 'axios';
-console.log(import.meta.env.VITE_BASE_URL)
+console.log(import.meta.env.VITE_BASE_URL);
export const requestApi = axios.create({
baseURL: import.meta.env.VITE_BASE_URL,
withCredentials: true,
-})
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/tsconfig.app.json b/tsconfig.app.json
index f560900..5fb7ab2 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -5,11 +5,12 @@
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "types": ["vite/client", "vite-plugin-svgr/client"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
- "moduleResolution": "bundler",
+ "moduleResolution": "node",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
@@ -22,27 +23,16 @@
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
+ "baseUrl": ".",
"paths": {
- "@src/*": [
- "src/*"
- ],
- "@components/*": [
- "src/components/*"
- ],
- "@pages/*": [
- "src/pages/*"
- ],
- "@assets/*": [
- "src/assets/*"
- ],
- "@store/*": [
- "src/store/*"
- ],
- "@plugins/*": [
- "src/plugins/*"
- ]
+ "@components/*": ["src/components/*"],
+ "@pages/*": ["src/pages/*"],
+ "@assets/*": ["src/assets/*"],
+ "@store/*": ["src/store/*"],
+ "@plugins/*": ["src/plugins/*"],
+ "@/*": ["./src/*"]
},
"allowSyntheticDefaultImports": true
},
- "include": ["src"]
+ "include": ["src", "src/custom.d.ts"]
}
diff --git a/vite.config.ts b/vite.config.ts
index 9e65dce..9dd4100 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,30 +1,40 @@
-import { defineConfig } from 'vite'
-import react from '@vitejs/plugin-react'
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react';
import { resolve } from 'node:path';
+import svgr from 'vite-plugin-svgr';
// https://vitejs.dev/config/
export default defineConfig({
- plugins: [react()],
+ plugins: [react(), svgr()],
+ server: {
+ port: 3000,
+ },
resolve: {
alias: [
{
- find: "@src", replacement: resolve(__dirname, "./src")
+ find: '@src',
+ replacement: resolve(__dirname, './src'),
},
{
- find: "@components", replacement: resolve(__dirname, "./src/components")
+ find: '@components',
+ replacement: resolve(__dirname, './src/components'),
},
{
- find: "@pages", replacement: resolve(__dirname, "./src/pages")
+ find: '@pages',
+ replacement: resolve(__dirname, './src/pages'),
},
{
- find: "@assets", replacement: resolve(__dirname, "./src/assets")
+ find: '@assets',
+ replacement: resolve(__dirname, './src/assets'),
},
{
- find: "@store", replacement: resolve(__dirname, "./src/store")
+ find: '@store',
+ replacement: resolve(__dirname, './src/store'),
},
{
- find: "@plugins", replacement: resolve(__dirname, "./src/plugins")
- }
- ]
- }
-})
\ No newline at end of file
+ find: '@plugins',
+ replacement: resolve(__dirname, './src/plugins'),
+ },
+ ],
+ },
+});