From 9b5f53e7aa821e3734f4d9a3ac31676dd7e6f03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Mon, 8 Jul 2024 20:26:44 +0900 Subject: [PATCH 01/10] feat :: sign password_check --- package-lock.json | 1017 +++++++++++++++++++++------ package.json | 3 +- src/assets/icons/sign/CloseEye.svg | 4 + src/assets/icons/sign/OpenEye.svg | 6 + src/components/auth/Login/index.tsx | 10 +- src/components/auth/style.ts | 14 + src/hooks/auth/useLogin.ts | 20 +- src/types/login/login.type.ts | 5 + webpack.common.js | 13 +- webpack.development.js | 2 +- 10 files changed, 877 insertions(+), 217 deletions(-) create mode 100644 src/assets/icons/sign/CloseEye.svg create mode 100644 src/assets/icons/sign/OpenEye.svg diff --git a/package-lock.json b/package-lock.json index fd8dc85..835932b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,6 +49,7 @@ "@babel/preset-env": "^7.18.10", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", + "@svgr/webpack": "^8.1.0", "@types/gtag.js": "^0.0.11", "@types/js-cookie": "^3.0.2", "@types/jsonwebtoken": "^8.5.8", @@ -59,7 +60,7 @@ "@types/styled-components": "^5.1.26", "babel-loader": "^8.2.5", "css-loader": "^6.7.1", - "dotenv-webpack": "^8.0.1", + "dotenv-webpack": "^8.1.0", "esbuild-loader": "^2.19.0", "fork-ts-checker-webpack-plugin": "^7.2.13", "html-webpack-plugin": "^5.5.0", @@ -4705,206 +4706,356 @@ } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "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": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "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": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "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": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "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": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "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": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "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": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "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": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "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==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + "@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": ">=10" + "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@svgr/core/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 + }, + "node_modules/@svgr/core/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==", + "dev": true, + "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/@svgr/core/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "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==", + "dev": true, "dependencies": { - "@babel/types": "^7.12.6" + "@babel/types": "^7.21.3", + "entities": "^4.4.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" + "@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": ">=10" + "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" } }, "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo/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 + }, + "node_modules/@svgr/plugin-svgo/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==", + "dev": true, + "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/@svgr/plugin-svgo/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -6208,14 +6359,16 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", - "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "is-string": "^1.0.7" }, "engines": { @@ -7855,15 +8008,16 @@ } }, "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, "node_modules/css-what": { @@ -8049,12 +8203,60 @@ "node": ">=10" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dependencies": { - "@babel/runtime": "^7.21.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" }, "engines": { "node": ">=0.11" @@ -8438,9 +8640,9 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, "node_modules/dotenv-webpack": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.0.1.tgz", - "integrity": "sha512-CdrgfhZOnx4uB18SgaoP9XHRN2v48BbjuXQsZY5ixs5A8579NxQkmMxRtI7aTwSiSQcM2ao12Fdu+L3ZS3bG4w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.1.0.tgz", + "integrity": "sha512-owK1JcsPkIobeqjVrk6h7jPED/W6ZpdFsMPR+5ursB7/SdgDyO+VzAU+szK8C8u3qUhtENyYnj8eyXMR5kkGag==", "dev": true, "dependencies": { "dotenv-defaults": "^2.0.2" @@ -8599,16 +8801,20 @@ } }, "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", @@ -8619,10 +8825,11 @@ "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", @@ -8633,17 +8840,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -8706,6 +8913,17 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", @@ -11491,6 +11709,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -14445,9 +14677,10 @@ } }, "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", @@ -14941,15 +15174,17 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", - "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", "dependencies": { "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "safe-array-concat": "^1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" }, "engines": { "node": ">= 0.8" @@ -16804,6 +17039,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -17418,6 +17654,270 @@ } } }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-scripts/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/react-scripts/node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/react-scripts/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/react-scripts/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/react-scripts/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/react-scripts/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, "node_modules/react-scripts/node_modules/dotenv": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", @@ -17437,6 +17937,19 @@ "node": ">=10" } }, + "node_modules/react-scripts/node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/react-scripts/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, "node_modules/react-scripts/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -17451,6 +17964,33 @@ "node": ">=10" } }, + "node_modules/react-scripts/node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/react-scripts/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -18405,6 +18945,16 @@ "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==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -18739,13 +19289,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -18755,26 +19306,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19089,85 +19643,143 @@ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dev": true, "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=4.0.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" } }, "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "node_modules/svgo/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "dependencies": { + "css-tree": "~2.2.0" + }, "engines": { - "node": ">= 6" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/svgo/node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/svgo/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/svgo/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, "dependencies": { - "boolbase": "~1.0.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/svgo/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/svgo/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -19629,9 +20241,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -19659,7 +20271,6 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -20569,15 +21180,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index a5fb50e..67adbdb 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "@babel/preset-env": "^7.18.10", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", + "@svgr/webpack": "^8.1.0", "@types/gtag.js": "^0.0.11", "@types/js-cookie": "^3.0.2", "@types/jsonwebtoken": "^8.5.8", @@ -59,7 +60,7 @@ "@types/styled-components": "^5.1.26", "babel-loader": "^8.2.5", "css-loader": "^6.7.1", - "dotenv-webpack": "^8.0.1", + "dotenv-webpack": "^8.1.0", "esbuild-loader": "^2.19.0", "fork-ts-checker-webpack-plugin": "^7.2.13", "html-webpack-plugin": "^5.5.0", diff --git a/src/assets/icons/sign/CloseEye.svg b/src/assets/icons/sign/CloseEye.svg new file mode 100644 index 0000000..58b83f2 --- /dev/null +++ b/src/assets/icons/sign/CloseEye.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/sign/OpenEye.svg b/src/assets/icons/sign/OpenEye.svg new file mode 100644 index 0000000..8f96b65 --- /dev/null +++ b/src/assets/icons/sign/OpenEye.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/auth/Login/index.tsx b/src/components/auth/Login/index.tsx index ee862cd..013c596 100644 --- a/src/components/auth/Login/index.tsx +++ b/src/components/auth/Login/index.tsx @@ -1,7 +1,8 @@ import { Dispatch, SetStateAction } from "react"; import useLogin from "@src/hooks/auth/useLogin"; import * as S from "./style"; - +import OpenEye from "@src/assets/icons/sign/OpenEye.svg" +import CloseEye from "@src/assets/icons/sign/CloseEye.svg" import { FiCheck } from "@react-icons/all-files/fi/FiCheck"; import * as AuthS from "../style"; @@ -11,6 +12,8 @@ interface Props { const Login = ({ setIsLogin }: Props) => { const { + passwordType, + handlePasswordView, loginData, handleLoginData, loginKeep, @@ -36,8 +39,11 @@ const Login = ({ setIsLogin }: Props) => { name="pw" value={loginData.pw} onChange={handleLoginData} - type="password" + type={passwordType.type} /> + + error + diff --git a/src/components/auth/style.ts b/src/components/auth/style.ts index 8466e85..b7f59dd 100644 --- a/src/components/auth/style.ts +++ b/src/components/auth/style.ts @@ -76,6 +76,7 @@ export const AuthWrap = styled.div` `; export const AuthInputWrap = styled.div` + position: relative; height: 56px; display: flex; flex-direction: column; @@ -105,6 +106,19 @@ export const AuthInput = styled.input` } `; +export const AuthPasswordBtn = styled.div` + position: absolute; + right: 10px; + bottom: 5px; + cursor: pointer; + img { + width: 100%; + height: 100%; + } + width: 25px; + height: 25px; +`; + export const AuthOppositePartWrap = styled.div` display: flex; align-items: center; diff --git a/src/hooks/auth/useLogin.ts b/src/hooks/auth/useLogin.ts index a39cc2c..0161318 100644 --- a/src/hooks/auth/useLogin.ts +++ b/src/hooks/auth/useLogin.ts @@ -1,4 +1,4 @@ -import { FormEvent, useCallback, useState } from "react"; +import React, { FormEvent, useCallback, useState } from "react"; import { useNavigate } from "react-router-dom"; import authRepository from "@src/repository/auth/auth.repository"; import { Login } from "@src/types/login/login.type"; @@ -12,15 +12,19 @@ import { useQueryClient } from "react-query"; import * as Sentry from "@sentry/react"; import { QUERY_KEYS } from "@src/queries/queryKey"; import { AxiosError } from "axios"; -import errorResponseHandler from "@src/lib/axios/errorResponseHandler"; import ErrorHandler from "@src/util/error/ErrorHandler"; import { useRecoilValue } from "recoil"; import { pointViewTypeAtom } from "@src/store/point/pointStore"; +import { PasswordParm } from "@src/types/login/login.type"; const useLogin = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); const type = useRecoilValue(pointViewTypeAtom); + const [passwordType, setPasswordType] = useState({ + type: "password", + visible: false, + }); const [loginData, setLoginData] = useState({ id: "", @@ -30,6 +34,7 @@ const useLogin = () => { const handleLoginKeep = () => setLoginKeep((prev) => !prev); + const handleLoginData = useCallback( (e: React.ChangeEvent): void => { const { value, name } = e.target; @@ -82,12 +87,23 @@ const useLogin = () => { [loginData, navigate] ); + const handlePasswordView = () => { + setPasswordType(() => { + if (!passwordType.visible) { + return { type: "text", visible: true }; + } + return { type: "password", visible: false }; + }); + }; + return { loginData, handleLoginData, loginKeep, handleLoginKeep, submitLoginData, + handlePasswordView, + passwordType, }; }; diff --git a/src/types/login/login.type.ts b/src/types/login/login.type.ts index 96a82c7..341bd13 100644 --- a/src/types/login/login.type.ts +++ b/src/types/login/login.type.ts @@ -12,3 +12,8 @@ export interface LoginResponse extends Response { accessToken: string; }; } + +export interface PasswordParm { + type: string; + visible: boolean; +} diff --git a/webpack.common.js b/webpack.common.js index 4e01a91..8327364 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -1,7 +1,6 @@ const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const webpack = require("webpack"); -const svgToMiniDataURI = require("mini-svg-data-uri"); const DotEnv = require("dotenv-webpack"); module.exports = { @@ -30,14 +29,12 @@ module.exports = { type: "asset", }, { - test: /\.svg/, - type: "asset", - generator: { - dataUrl: (content) => { - content = content.toString(); - return svgToMiniDataURI(content); + test: /\.(svg)$/, + use: [ + { + loader: 'file-loader', }, - }, + ], }, { test: /\.css$/, diff --git a/webpack.development.js b/webpack.development.js index a785c46..6c5b5ae 100644 --- a/webpack.development.js +++ b/webpack.development.js @@ -7,7 +7,7 @@ module.exports = merge(webpackCommon, { devtool: "source-map", devServer: { hot: true, - port: 3000, + port: 3400, historyApiFallback: true, }, plugins: [new ForkTsCheckerWebpackPlugin()], From 09bbca94a69ba4e17a0f76d167237dbb3845f3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:22:45 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=EB=B0=B1=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/Signup/SignupFirst/index.tsx | 8 ++++---- .../auth/Signup/SignupSecond/index.tsx | 10 +++++++--- .../auth/signup/signupSecond/style.ts | 4 +++- src/hooks/auth/useLogin.ts | 1 + src/lib/axios/customAxios.ts | 2 +- src/store/password/passwordStore.ts | 6 ++++++ src/store/theme/themeStore.ts | 2 +- src/util/check/passwordCheck.ts | 20 +++++++++++++++++++ src/util/check/patternCheck.ts | 2 +- webpack.development.js | 2 +- 10 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 src/store/password/passwordStore.ts create mode 100644 src/util/check/passwordCheck.ts diff --git a/src/components/auth/Signup/SignupFirst/index.tsx b/src/components/auth/Signup/SignupFirst/index.tsx index cca8d1f..355bdc9 100644 --- a/src/components/auth/Signup/SignupFirst/index.tsx +++ b/src/components/auth/Signup/SignupFirst/index.tsx @@ -23,7 +23,7 @@ const SignupFirst = ({ ID @@ -43,20 +43,20 @@ const SignupFirst = ({ { - //회원가입쪽과 같은 로직으로, map을 돌리기 위해 object인 agrees를 배열로 만들어 리턴함. + const agreesList = useMemo(() => { const { first, second } = agrees; return [first, second]; }, [agrees]); - + const navigate = useNavigate(); return ( <> @@ -82,7 +83,10 @@ const SignupSecond = ({ {agree.title} - 상세 내용 보기 + + + 상세 내용 보기 + ))} diff --git a/src/components/auth/signup/signupSecond/style.ts b/src/components/auth/signup/signupSecond/style.ts index e49619f..aacdff7 100644 --- a/src/components/auth/signup/signupSecond/style.ts +++ b/src/components/auth/signup/signupSecond/style.ts @@ -52,7 +52,9 @@ export const SignupAgreeDetail = styled.p` font-size: 14px; color: #7c7c7c; cursor: pointer; - + a{ + color: #7c7c7c; + } &:hover { text-decoration: underline; } diff --git a/src/hooks/auth/useLogin.ts b/src/hooks/auth/useLogin.ts index 0161318..6369c1d 100644 --- a/src/hooks/auth/useLogin.ts +++ b/src/hooks/auth/useLogin.ts @@ -17,6 +17,7 @@ import { useRecoilValue } from "recoil"; import { pointViewTypeAtom } from "@src/store/point/pointStore"; import { PasswordParm } from "@src/types/login/login.type"; + const useLogin = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); diff --git a/src/lib/axios/customAxios.ts b/src/lib/axios/customAxios.ts index 2307a41..82bf14c 100644 --- a/src/lib/axios/customAxios.ts +++ b/src/lib/axios/customAxios.ts @@ -31,6 +31,6 @@ export const dodamAxiosSetAccessToken = (token: string) => { dodamAxios.defaults.headers.common[REQUEST_TOKEN_KEY] = `Bearer ${token}`; }; -dodamAxios.interceptors.request.use(requestHandler, (res) => res); +dodamAxios.interceptors.request.use(requestHandler , (res) => res); dodamAxios.interceptors.response.use((res) => res, errorResponseHandler); diff --git a/src/store/password/passwordStore.ts b/src/store/password/passwordStore.ts new file mode 100644 index 0000000..7c7e3aa --- /dev/null +++ b/src/store/password/passwordStore.ts @@ -0,0 +1,6 @@ +import { atom } from "recoil"; + +export const passwordAtom = atom({ + key: "passwordCheck", + default: false, +}) \ No newline at end of file diff --git a/src/store/theme/themeStore.ts b/src/store/theme/themeStore.ts index 9a2a4f5..9f4a6ef 100644 --- a/src/store/theme/themeStore.ts +++ b/src/store/theme/themeStore.ts @@ -5,4 +5,4 @@ import { getTheme } from "@src/util/theme/getTheme"; export const themeModeAtom = atom({ key: "theme/themeModeAtom", default: getTheme(), -}); +}); \ No newline at end of file diff --git a/src/util/check/passwordCheck.ts b/src/util/check/passwordCheck.ts new file mode 100644 index 0000000..77cf1c9 --- /dev/null +++ b/src/util/check/passwordCheck.ts @@ -0,0 +1,20 @@ +import { PasswordParm } from "@src/types/login/login.type"; +import React,{useState} from "react"; + +const passwordCheck = ()=>{ + const [passwordType, setPasswordType] = useState({ + type: "password", + visible: false, + });//이부분을 리코일로 + + + const handlePasswordView = () => { + setPasswordType(() => { + if (!passwordType.visible) { + return { type: "text", visible: true }; + } + return { type: "password", visible: false }; + }); + }; +} +export default passwordCheck diff --git a/src/util/check/patternCheck.ts b/src/util/check/patternCheck.ts index 9d3d281..dcd90f1 100644 --- a/src/util/check/patternCheck.ts +++ b/src/util/check/patternCheck.ts @@ -7,7 +7,7 @@ class PatternCheck { } public pwCheck(value: string): boolean { - if (/^[a-zA-Z0-9!@#$%^*+=-]{7,20}$/.test(value)) { + if (/^[a-zA-Z0-9!@#$%^*+=-]{7,20}$/.test(value) && !/[ㄱ-ㅎㅏ-ㅣ가-힣]/.test(value)) { return true; } return false; diff --git a/webpack.development.js b/webpack.development.js index 6c5b5ae..a785c46 100644 --- a/webpack.development.js +++ b/webpack.development.js @@ -7,7 +7,7 @@ module.exports = merge(webpackCommon, { devtool: "source-map", devServer: { hot: true, - port: 3400, + port: 3000, historyApiFallback: true, }, plugins: [new ForkTsCheckerWebpackPlugin()], From e1fc17b379d8a3cd6648162f3a4c78ab56a91139 Mon Sep 17 00:00:00 2001 From: ftery0 Date: Fri, 16 Aug 2024 00:24:17 +0900 Subject: [PATCH 03/10] feat :: passwrodCheck --- .../auth/Signup/SignupFirst/index.tsx | 13 ++++++- src/components/auth/Signup/index.tsx | 32 ++++++++--------- src/hooks/auth/useLogin.ts | 24 ++++++------- src/hooks/auth/useSignup.ts | 4 +++ src/store/password/passwordStore.ts | 6 ---- src/util/check/passwordCheck.ts | 34 +++++++++---------- 6 files changed, 57 insertions(+), 56 deletions(-) delete mode 100644 src/store/password/passwordStore.ts diff --git a/src/components/auth/Signup/SignupFirst/index.tsx b/src/components/auth/Signup/SignupFirst/index.tsx index 355bdc9..26dfca0 100644 --- a/src/components/auth/Signup/SignupFirst/index.tsx +++ b/src/components/auth/Signup/SignupFirst/index.tsx @@ -2,19 +2,27 @@ import React from "react"; import { Signup } from "@src/types/signup/signup.type"; import { AuthInput, AuthInputTitle, AuthInputWrap } from "../../style"; import * as SignupS from "../style"; +import * as AuthS from "../../style"; import * as S from "./style"; import { FiChevronRight } from "@react-icons/all-files/fi/FiChevronRight"; +import { PasswordParm } from "@src/types/login/login.type"; +import OpenEye from "@src/assets/icons/sign/OpenEye.svg"; +import CloseEye from "@src/assets/icons/sign/CloseEye.svg" interface Props { signupData: Signup; + passwordType:PasswordParm; handleSignupData: (e: React.ChangeEvent) => void; submitSignupDataFirst: () => void; + handlePasswordView:()=>void; } const SignupFirst = ({ signupData, + passwordType, handleSignupData, submitSignupDataFirst, + handlePasswordView }: Props) => { return ( <> @@ -34,9 +42,12 @@ const SignupFirst = ({ name="pw" value={signupData.pw} onChange={handleSignupData} - type="password" + type={passwordType.type} placeholder="abcdefg1234" /> + + error + 학번 diff --git a/src/components/auth/Signup/index.tsx b/src/components/auth/Signup/index.tsx index 6bcf598..8552c46 100644 --- a/src/components/auth/Signup/index.tsx +++ b/src/components/auth/Signup/index.tsx @@ -6,36 +6,32 @@ import SignupFirst from "./SignupFirst"; import SignupSecond from "./SignupSecond"; import * as AuthS from "../style"; + interface Props { setIsLogin: Dispatch>; } const Signup = ({ setIsLogin }: Props) => { const { - section, - setSection, - signupData, - handleSignupData, - submitSignupDataFirst, - agrees, - handleSignupAgree, - submitSignupDataSecond, + ...sign } = useSignup(); const signupComponents: ReactNode[] = [ , , ]; @@ -44,7 +40,7 @@ const Signup = ({ setIsLogin }: Props) => { {signupComponents.map((component, idx) => { - return section === SIGNUP_SECTION_NAME[idx].title && component; + return sign.section === SIGNUP_SECTION_NAME[idx].title && component; // 회원가입 섹션이 2개가 있는데, 일일이 &&연산자로 하면 코드가 더러울거 같아서 배열에 담아서 map을 돌렸음. })} diff --git a/src/hooks/auth/useLogin.ts b/src/hooks/auth/useLogin.ts index 6369c1d..288c7c1 100644 --- a/src/hooks/auth/useLogin.ts +++ b/src/hooks/auth/useLogin.ts @@ -16,16 +16,13 @@ import ErrorHandler from "@src/util/error/ErrorHandler"; import { useRecoilValue } from "recoil"; import { pointViewTypeAtom } from "@src/store/point/pointStore"; import { PasswordParm } from "@src/types/login/login.type"; - +import usePasswordCheck from "@src/util/check/passwordCheck"; const useLogin = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); const type = useRecoilValue(pointViewTypeAtom); - const [passwordType, setPasswordType] = useState({ - type: "password", - visible: false, - }); + const { passwordType, handlePasswordView } = usePasswordCheck(); const [loginData, setLoginData] = useState({ id: "", @@ -87,15 +84,14 @@ const useLogin = () => { }, [loginData, navigate] ); - - const handlePasswordView = () => { - setPasswordType(() => { - if (!passwordType.visible) { - return { type: "text", visible: true }; - } - return { type: "password", visible: false }; - }); - }; + // const handlePasswordView = () => { + // setPasswordType(() => { + // if (!passwordType.visible) { + // return { type: "text", visible: true }; + // } + // return { type: "password", visible: false }; + // }); + // }; return { loginData, diff --git a/src/hooks/auth/useSignup.ts b/src/hooks/auth/useSignup.ts index c1ef437..84af8f1 100644 --- a/src/hooks/auth/useSignup.ts +++ b/src/hooks/auth/useSignup.ts @@ -6,9 +6,11 @@ import * as Sentry from "@sentry/react"; import memberRepository from "@src/repository/member/member.repository"; import ErrorHandler from "@src/util/error/ErrorHandler"; import { AxiosError } from "axios"; +import usePasswordCheck from "@src/util/check/passwordCheck"; const useSignup = () => { const [section, setSection] = useState("first"); +const {passwordType, handlePasswordView} =usePasswordCheck() const [signupData, setSignupData] = useState({ id: "", @@ -118,6 +120,7 @@ const useSignup = () => { }, [agrees, signupData]); return { + passwordType, section, setSection, signupData, @@ -126,6 +129,7 @@ const useSignup = () => { agrees, handleSignupAgree, submitSignupDataSecond, + handlePasswordView }; }; diff --git a/src/store/password/passwordStore.ts b/src/store/password/passwordStore.ts deleted file mode 100644 index 7c7e3aa..0000000 --- a/src/store/password/passwordStore.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { atom } from "recoil"; - -export const passwordAtom = atom({ - key: "passwordCheck", - default: false, -}) \ No newline at end of file diff --git a/src/util/check/passwordCheck.ts b/src/util/check/passwordCheck.ts index 77cf1c9..0ebd6c7 100644 --- a/src/util/check/passwordCheck.ts +++ b/src/util/check/passwordCheck.ts @@ -1,20 +1,20 @@ import { PasswordParm } from "@src/types/login/login.type"; import React,{useState} from "react"; -const passwordCheck = ()=>{ - const [passwordType, setPasswordType] = useState({ - type: "password", - visible: false, - });//이부분을 리코일로 - - - const handlePasswordView = () => { - setPasswordType(() => { - if (!passwordType.visible) { - return { type: "text", visible: true }; - } - return { type: "password", visible: false }; - }); - }; -} -export default passwordCheck +const usePasswordCheck = () => { + const [passwordType, setPasswordType] = useState({ + type: "password", + visible: false, + }); + + + const handlePasswordView = () => { + setPasswordType((prev) => ({ + type: prev.visible ? 'password' : 'text', + visible: !prev.visible, + })); + }; + + return { passwordType, handlePasswordView }; +}; +export default usePasswordCheck \ No newline at end of file From b499b6908344ea32d1da189d0dc75462dac87dbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:37:58 +0900 Subject: [PATCH 04/10] =?UTF-8?q?fix=20::=20=EB=A6=AC=ED=94=84=EB=A0=88?= =?UTF-8?q?=EC=89=AC=20=EC=97=90=EB=9F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/axios/errorResponseHandler.ts | 21 +++------------------ src/lib/axios/requestHandler.ts | 1 - 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/lib/axios/errorResponseHandler.ts b/src/lib/axios/errorResponseHandler.ts index 7a442ff..24fa430 100644 --- a/src/lib/axios/errorResponseHandler.ts +++ b/src/lib/axios/errorResponseHandler.ts @@ -11,15 +11,6 @@ import authRepository from "@src/repository/auth/auth.repository"; //리프레쉬 작업중인지 아닌지를 구분하는 변수 let isRefreshing = false; -let refreshSubscribers: ((accessToken: string) => void)[] = []; - -const onTokenRefreshed = (accessToken: string) => { - refreshSubscribers.map((callback) => callback(accessToken)); -}; - -const addRefreshSubscriber = (callback: (accessToken: string) => void) => { - refreshSubscribers.push(callback); -}; const errorResponseHandler = async (error: AxiosError) => { if (error.response) { @@ -32,7 +23,6 @@ const errorResponseHandler = async (error: AxiosError) => { const usingRefreshToken = token.getToken(REFRESH_TOKEN_KEY); if ( - usingAccessToken !== undefined && usingRefreshToken !== undefined && status === 401 ) { @@ -58,7 +48,7 @@ const errorResponseHandler = async (error: AxiosError) => { isRefreshing = false; //새로 받은 accessToken을 기반으로 이때까지 밀려있던 요청을 모두 처리 - onTokenRefreshed(newAccessToken); + } catch (error) { //리프레쉬 하다가 오류난거면 리프레쉬도 만료된 것이므로 다시 로그인 window.alert("세션이 만료되었습니다."); @@ -67,13 +57,8 @@ const errorResponseHandler = async (error: AxiosError) => { } } - //어떤 요청이 리프레쉬 작업중이라면 여기로 와서 그 후에 요청된 다른 API Promise를 refreshSubscribers에 넣어줌 - return new Promise((resolve) => { - addRefreshSubscriber((accessToken: string) => { - originalRequest.headers![REQUEST_TOKEN_KEY] = `Bearer ${accessToken}`; - resolve(dodamAxios(originalRequest)); - }); - }); + + } } diff --git a/src/lib/axios/requestHandler.ts b/src/lib/axios/requestHandler.ts index e429b3e..2e8f763 100644 --- a/src/lib/axios/requestHandler.ts +++ b/src/lib/axios/requestHandler.ts @@ -8,7 +8,6 @@ import token from "../token/token"; const requestHandler = (config: AxiosRequestConfig) => { if ( - token.getToken(ACCESS_TOKEN_KEY) === undefined || token.getToken(REFRESH_TOKEN_KEY) === undefined ) { window.location.href = "/sign"; From 4ac950ee531472098d7821e54f11ed9eb175aa80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:47:15 +0900 Subject: [PATCH 05/10] =?UTF-8?q?refactor=20::=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/auth/useLogin.ts | 8 -------- src/hooks/auth/useSignup.ts | 2 +- src/hooks/auth/useTokenCheck.ts | 22 ---------------------- src/pages/homePage.tsx | 6 ++---- 4 files changed, 3 insertions(+), 35 deletions(-) delete mode 100644 src/hooks/auth/useTokenCheck.ts diff --git a/src/hooks/auth/useLogin.ts b/src/hooks/auth/useLogin.ts index 288c7c1..b1e8797 100644 --- a/src/hooks/auth/useLogin.ts +++ b/src/hooks/auth/useLogin.ts @@ -84,14 +84,6 @@ const useLogin = () => { }, [loginData, navigate] ); - // const handlePasswordView = () => { - // setPasswordType(() => { - // if (!passwordType.visible) { - // return { type: "text", visible: true }; - // } - // return { type: "password", visible: false }; - // }); - // }; return { loginData, diff --git a/src/hooks/auth/useSignup.ts b/src/hooks/auth/useSignup.ts index 84af8f1..224f562 100644 --- a/src/hooks/auth/useSignup.ts +++ b/src/hooks/auth/useSignup.ts @@ -9,7 +9,7 @@ import { AxiosError } from "axios"; import usePasswordCheck from "@src/util/check/passwordCheck"; const useSignup = () => { - const [section, setSection] = useState("first"); +const [section, setSection] = useState("first"); const {passwordType, handlePasswordView} =usePasswordCheck() const [signupData, setSignupData] = useState({ diff --git a/src/hooks/auth/useTokenCheck.ts b/src/hooks/auth/useTokenCheck.ts deleted file mode 100644 index 32a72f1..0000000 --- a/src/hooks/auth/useTokenCheck.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - ACCESS_TOKEN_KEY, - REFRESH_TOKEN_KEY, -} from "@src/constants/token/token.constant"; -import token from "@src/lib/token/token"; -import { useEffect } from "react"; -import { useNavigate } from "react-router-dom"; - -const useTokenCheck = () => { - const navigate = useNavigate(); - - useEffect(() => { - if ( - token.getToken(ACCESS_TOKEN_KEY) === undefined || - token.getToken(REFRESH_TOKEN_KEY) === undefined - ) { - navigate("/sign"); - } - }, []); -}; - -export default useTokenCheck; diff --git a/src/pages/homePage.tsx b/src/pages/homePage.tsx index 65d7b84..d4c62e7 100644 --- a/src/pages/homePage.tsx +++ b/src/pages/homePage.tsx @@ -1,12 +1,10 @@ import { useLogGA } from "@src/hooks/ga/useLogGA"; import PageTemplate from "../components/common/PageTemplate"; import Home from "../components/home"; -import useTokenCheck from "../hooks/auth/useTokenCheck"; -const HomePage = () => { - useTokenCheck(); - const { handleGALogEvent } = useLogGA(); +const HomePage = () => { + return ( From a073cf14aad40ef8367244f2d761261a0e01f3d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:32:05 +0900 Subject: [PATCH 06/10] =?UTF-8?q?feat=20::=20=EC=A0=80=EB=85=81=20?= =?UTF-8?q?=EA=B8=89=EC=8B=9D=20=EC=88=98=EC=9A=94=EC=A1=B0=EC=82=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 1 + src/components/common/Modal/index.tsx | 83 ++++++++++++++ src/components/common/Modal/type.ts | 11 ++ src/components/common/modalPortal/index.tsx | 7 ++ .../Apply/ApplyPass/ApplyPassForm/index.tsx | 12 ++ .../Apply/ApplyPass/ApplyPassModal/index.tsx | 108 ++++++++++++++++++ .../Apply/ApplyPass/ApplyPassModal/style.ts | 72 ++++++++++++ src/hooks/pass/useApplyPass.ts | 23 +++- src/hooks/pass/useApplyPassModal.ts | 5 + src/types/pass/pass.type.ts | 1 + 10 files changed, 321 insertions(+), 2 deletions(-) create mode 100644 src/components/common/Modal/index.tsx create mode 100644 src/components/common/Modal/type.ts create mode 100644 src/components/common/modalPortal/index.tsx create mode 100644 src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx create mode 100644 src/components/home/Apply/ApplyPass/ApplyPassModal/style.ts create mode 100644 src/hooks/pass/useApplyPassModal.ts diff --git a/public/index.html b/public/index.html index fcc95b2..e18af9b 100644 --- a/public/index.html +++ b/public/index.html @@ -11,5 +11,6 @@
+ diff --git a/src/components/common/Modal/index.tsx b/src/components/common/Modal/index.tsx new file mode 100644 index 0000000..5d34b5b --- /dev/null +++ b/src/components/common/Modal/index.tsx @@ -0,0 +1,83 @@ +import { ModalProps } from "./type" +import styled, { CSSObject } from "styled-components"; + +import { Portal } from "../modalPortal"; + +const Modal = ({width, + height, + zIndex, + isOpen, + close, + children, + customStyle,}:ModalProps)=>{ + return( + + { + isOpen && ( + + + {children} + + + ) + } + + ) +} + +export default Modal; + + + + const Background = styled.div<{ customStyle?: CSSObject }>` + width: 100%; + min-height: 100%; + position: fixed; + top: 0; + left: 0; + + background-color: rgba(0, 0, 0, 0.4); + z-index: 3; + + display: flex; + align-items: center; + justify-content: center; + + padding: 20px 0; + overflow: auto; + + ${({ customStyle }) => customStyle} +`; + + const ModalHeaderWrap = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + + width: 100%; + height: 53px; + + border-bottom: 1px solid rgb(221, 221, 221); +`; + + const Title = styled.h1` + font-size: 17px; + font-weight: bold; +`; + +// export const CloseIcon = styled(CgClose)` +// cursor: pointer; +// padding: 5px; +// border-radius: 5px; + +// transform: scale(1); +// transition: all 0.2s ease-in-out; + +// &:hover { +// background-color: #ddd; +// transform: scale(0.96); +// } +// &:active { +// background-color: #eee; +// } +// `; \ No newline at end of file diff --git a/src/components/common/Modal/type.ts b/src/components/common/Modal/type.ts new file mode 100644 index 0000000..60dca4a --- /dev/null +++ b/src/components/common/Modal/type.ts @@ -0,0 +1,11 @@ +import { CSSObject } from "styled-components"; + +export interface ModalProps { + width?: number; + height?: number; + zIndex?: number; + isOpen: boolean; + close: () => void; + children: React.ReactNode; + customStyle?: CSSObject; +} \ No newline at end of file diff --git a/src/components/common/modalPortal/index.tsx b/src/components/common/modalPortal/index.tsx new file mode 100644 index 0000000..f8a5987 --- /dev/null +++ b/src/components/common/modalPortal/index.tsx @@ -0,0 +1,7 @@ +import { ReactNode } from "react"; +import ReactDom from "react-dom"; + +export const Portal = ({ children }: { children: ReactNode }) => { + const element = document.getElementById("modal") as HTMLElement; + return ReactDom.createPortal(children, element); +}; \ No newline at end of file diff --git a/src/components/home/Apply/ApplyPass/ApplyPassForm/index.tsx b/src/components/home/Apply/ApplyPass/ApplyPassForm/index.tsx index c8c4c45..fa4ca13 100644 --- a/src/components/home/Apply/ApplyPass/ApplyPassForm/index.tsx +++ b/src/components/home/Apply/ApplyPass/ApplyPassForm/index.tsx @@ -6,9 +6,12 @@ import { } from "@team-b1nd/dodamdodam_web_component_library"; import useApplyPass from "@src/hooks/pass/useApplyPass"; import ApplyNotApproveList from "../../ApplyNotApproveList"; +import ApplyPassModal from "../ApplyPassModal"; const ApplyPassForm = () => { const { + closeModal, + isOpen, isFold, setIsFold, notApprovedPasses, @@ -125,6 +128,15 @@ const ApplyPassForm = () => { {isFold ? "신청" : "수정"} )} + ); }; diff --git a/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx b/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx new file mode 100644 index 0000000..14a322f --- /dev/null +++ b/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx @@ -0,0 +1,108 @@ +import * as S from "./style"; +import Modal from "@src/components/common/Modal"; +import dayjs from "dayjs"; +import { useQueryClient } from "react-query"; +import { + useDeleteMyPassMutation, + useGetMyPassesQuery, + usePostApplyPassMutation, + usePutApplyPassMutation, + } from "@src/queries/pass/pass.query"; +import { + Button, + } from "@team-b1nd/dodamdodam_web_component_library"; + import {ApplyPass } from "@src/types/pass/pass.type"; +import showToast from "@src/lib/toast/toast"; +import { useState } from "react"; +interface ApplyPassModalProps { + width:string; + height:string; + zIndex:number; + isOpen:boolean; + close:()=>void; + submitData:ApplyPass; + passDataDate:string; +} + + +const ApplyPassModal = ({ + width, + height, + zIndex, + isOpen, + close, + submitData, + passDataDate, + }:ApplyPassModalProps)=>{ + const queryClient = useQueryClient(); + + const postApplyPassMutation = usePostApplyPassMutation(); + const { + startTimeHour, + startTimeMinute, + endTimeHour, + endTimeMinute, + reason, + } = submitData; + + const submitPassData = (id:number)=>{ + let dinnerCheck = false; + + if(id===1){ + dinnerCheck=false; + }else{ + dinnerCheck=true; + } + const validApplyPassDinner ={ + reason, + startAt: dayjs( + `${passDataDate} ${startTimeHour}:${startTimeMinute}` + ).format("YYYY-MM-DDTHH:mm:ss"), + endAt: dayjs(`${passDataDate} ${endTimeHour}:${endTimeMinute}`).format( + "YYYY-MM-DDTHH:mm:ss" + ), + dinnerOrNot:dinnerCheck, + } + postApplyPassMutation.mutateAsync(validApplyPassDinner,{ + onSuccess:()=>{ + queryClient.invalidateQueries("pass/getMyPasses"); + showToast("외출 신청 성공", "SUCCESS"); + }, + onError: () => { + showToast("외출 신청 실패", "ERROR"); + }, + }) + } + + return( + + +

오늘 저녁 급식을 드시나요? 🥺

+ + 급식 수요조사를 위해
+ 알려주시면 감사드리겠습니다
+ + + + + +
+
+ +
+ ) +} + +export default ApplyPassModal; \ No newline at end of file diff --git a/src/components/home/Apply/ApplyPass/ApplyPassModal/style.ts b/src/components/home/Apply/ApplyPass/ApplyPassModal/style.ts new file mode 100644 index 0000000..a19efc7 --- /dev/null +++ b/src/components/home/Apply/ApplyPass/ApplyPassModal/style.ts @@ -0,0 +1,72 @@ +import styled from "styled-components"; + + +export const Container = styled.div` +min-width: 300px; + width: 25%; + height: 24%; + overflow: auto; + z-index: 5; + background-color: ${({ theme }) => theme.backgroundColor2}; + position: fixed; + padding: 1.5rem; + border-radius: 10px; + + display: flex; + flex-direction: column; + + gap: 30px; +`; +export const Header = styled.header` + + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + height: 10%; + h1{ + color: ${({ theme }) => theme.contrast}; + font-size: 20px; + font-weight: bold; + + display: flex; + align-items: center; + column-gap: 10px; + } + +` +// export const CloseIcon = styled(CgClose)` +// cursor: pointer; +// padding: 5px; +// border-radius: 5px; + +// transform: scale(1); +// transition: all 0.2s ease-in-out; + +// &:hover { +// background-color: #ddd; +// transform: scale(0.96); +// } +// &:active { +// background-color: #eee; +// } +// `; +export const Content = styled.div` +display: flex; +flex-direction: column; +justify-content: space-between; +width: 100%; +height: 100%; +span{ +color: ${({ theme }) => theme.contrast2}; +font-feature-settings: 'ss10' on; +font-size: 18px; +font-weight: 500; +} +` +export const ButtonContainer = styled.div` +display: flex; +width: 100%; +justify-content: space-between; +` + \ No newline at end of file diff --git a/src/hooks/pass/useApplyPass.ts b/src/hooks/pass/useApplyPass.ts index 3a5c76b..fdbc71f 100644 --- a/src/hooks/pass/useApplyPass.ts +++ b/src/hooks/pass/useApplyPass.ts @@ -12,6 +12,7 @@ import dataCheck from "@src/util/check/dataCheck"; import { useQueryClient } from "react-query"; import showToast from "@src/lib/toast/toast"; import { captureException, withScope } from "@sentry/react"; +import ApplyPassModal from "@src/components/home/Apply/ApplyPass/ApplyPassModal"; const useApplyPass = () => { const queryClient = useQueryClient(); @@ -28,6 +29,7 @@ const useApplyPass = () => { endTimeHour: "", endTimeMinute: "", reason: "", + dinnerOrNot:false, idx: 0, }); @@ -42,7 +44,7 @@ const useApplyPass = () => { ); const [notApprovedPasses, setNotApprovedPasses] = useState([]); - + //승인되지 않은 외출들을 담아주는 부분 useEffect(() => { if (appliedPasses) { @@ -69,6 +71,7 @@ const useApplyPass = () => { startTimeMinute: validStartTime[1], endTimeHour: validEndTime[0], endTimeMinute: validEndTime[1], + dinnerOrNot:false, ...notApprovedPass, }; }; @@ -82,6 +85,7 @@ const useApplyPass = () => { reason: "", startTimeHour: "", startTimeMinute: "", + dinnerOrNot:false, idx: 0, }); setPassDataDate(dateTransform.hyphen()); @@ -156,6 +160,10 @@ const useApplyPass = () => { }, [] ); + //모달 닫기 + const closeModal = useCallback(() => { + setOpen(false); + }, []); // 외출 데이터 사유 핸들링 함수 const handlePassDataReason = useCallback( @@ -167,6 +175,8 @@ const useApplyPass = () => { [] ); + + const [isOpen, setOpen] = useState(false); const submitPassData = useCallback(async () => { const { startTimeHour, @@ -174,6 +184,7 @@ const useApplyPass = () => { endTimeHour, endTimeMinute, reason, + dinnerOrNot, } = passData; const validApplyPass = { @@ -184,6 +195,7 @@ const useApplyPass = () => { endAt: dayjs(`${passDataDate} ${endTimeHour}:${endTimeMinute}`).format( "YYYY-MM-DDTHH:mm:ss" ), + dinnerOrNot:true }; if (validApplyPass.reason.trim() === "") { @@ -230,9 +242,12 @@ const useApplyPass = () => { showToast("사유의 길이를 50자 이내로 적어주세요!", "INFO"); return; } - + const Now = new Date() //외출 수정인지 외출 신청인지 구분하는 함수 if (isFold) { + if(Now.getDay() === 3){ + setOpen(true); + }else{ postApplyPassMutation.mutateAsync(validApplyPass, { onSuccess: () => { queryClient.invalidateQueries("pass/getMyPasses"); @@ -245,6 +260,8 @@ const useApplyPass = () => { showToast("외출 신청 실패", "ERROR"); }, }); + + } } else { const passIdx = notApprovedPasses.find( (notApprovePass) => notApprovePass.id === passData.idx @@ -288,6 +305,8 @@ const useApplyPass = () => { passDataDate, handlePassDataDate, submitPassData, + isOpen, + closeModal, }; }; diff --git a/src/hooks/pass/useApplyPassModal.ts b/src/hooks/pass/useApplyPassModal.ts new file mode 100644 index 0000000..8243ad1 --- /dev/null +++ b/src/hooks/pass/useApplyPassModal.ts @@ -0,0 +1,5 @@ +import React,{useState} from "react"; +const useApplyPassModal = ()=>{ + +} +export default useApplyPassModal; \ No newline at end of file diff --git a/src/types/pass/pass.type.ts b/src/types/pass/pass.type.ts index 32c6a76..37d2045 100644 --- a/src/types/pass/pass.type.ts +++ b/src/types/pass/pass.type.ts @@ -23,6 +23,7 @@ export interface ApplyPass { startTimeMinute: string; endTimeHour: string; endTimeMinute: string; + dinnerOrNot:boolean; idx: number; } From db15c39b0b9afbb5cb729568548fb8b1385a9fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:33:39 +0900 Subject: [PATCH 07/10] =?UTF-8?q?refactor=20::=20=EC=9E=98=EB=AA=BB?= =?UTF-8?q?=ED=95=9C=EB=90=9C=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/axios/errorResponseHandler.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/axios/errorResponseHandler.ts b/src/lib/axios/errorResponseHandler.ts index 24fa430..3d71957 100644 --- a/src/lib/axios/errorResponseHandler.ts +++ b/src/lib/axios/errorResponseHandler.ts @@ -23,6 +23,7 @@ const errorResponseHandler = async (error: AxiosError) => { const usingRefreshToken = token.getToken(REFRESH_TOKEN_KEY); if ( + usingAccessToken !==undefined && usingRefreshToken !== undefined && status === 401 ) { From 1efece7d396b528475d62ffe53a5b2c59e8f95cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:43:40 +0900 Subject: [PATCH 08/10] =?UTF-8?q?remove=20::=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/pass/useApplyPassModal.ts | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/hooks/pass/useApplyPassModal.ts diff --git a/src/hooks/pass/useApplyPassModal.ts b/src/hooks/pass/useApplyPassModal.ts deleted file mode 100644 index 8243ad1..0000000 --- a/src/hooks/pass/useApplyPassModal.ts +++ /dev/null @@ -1,5 +0,0 @@ -import React,{useState} from "react"; -const useApplyPassModal = ()=>{ - -} -export default useApplyPassModal; \ No newline at end of file From 3fb4c8d15f9ba3b9d453884df334894d50b31f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:26:33 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix=20::=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx b/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx index 14a322f..3f9da52 100644 --- a/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx +++ b/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx @@ -79,8 +79,7 @@ const ApplyPassModal = ({

오늘 저녁 급식을 드시나요? 🥺

- 급식 수요조사를 위해
- 알려주시면 감사드리겠습니다
+ 급식 수요 조사를 위해 설문 조사를 합니다.
응답해 주시기 바랍니다.
+ >네 먹습니다
From 7e63dccee892617122ff47d34bb3e43c5bf6a668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=A4=80?= <127281057+ftery0@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:27:47 +0900 Subject: [PATCH 10/10] =?UTF-8?q?fix=20::=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx b/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx index 3f9da52..0bdc475 100644 --- a/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx +++ b/src/components/home/Apply/ApplyPass/ApplyPassModal/index.tsx @@ -79,7 +79,7 @@ const ApplyPassModal = ({

오늘 저녁 급식을 드시나요? 🥺

- 급식 수요 조사를 위해 설문 조사를 합니다.
응답해 주시기 바랍니다.
+ 저녁 급식 수요 조사를 위해 설문 조사를 합니다.
응답해 주시기 바랍니다.