From cb36c38a16e23e1ef2f32b963ca82733ff98413f Mon Sep 17 00:00:00 2001 From: JunYoungKr Date: Mon, 12 Aug 2024 00:22:31 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[61]=20=EB=8C=93=EA=B8=80=20=EC=88=98?= =?UTF-8?q?=EC=A7=91,=20=ED=81=AC=EB=A1=A4=EB=A7=81,=20=EB=8B=B9=EC=B2=A8?= =?UTF-8?q?=EC=9E=90=20=EC=84=A0=EC=A0=95=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/package-lock.json | 540 ++++++++++++++++-- web/package.json | 3 + web/src/App.tsx | 27 +- web/src/assets/commentComplete.png | Bin 0 -> 15267 bytes web/src/components/auth/change-pwd.tsx | 22 +- web/src/components/common/Ask_Popup.tsx | 92 +++ web/src/components/common/Popup.tsx | 20 +- .../components/common/SingleDatePicker.tsx | 2 +- web/src/components/common/SurveyTimeInput.tsx | 2 +- web/src/components/common/Winner.tsx | 91 ++- web/src/components/winner/Comment.tsx | 64 ++- web/src/components/winner/Winner.tsx | 268 ++++----- web/src/components/winner/WinnerResult.tsx | 177 ++++++ web/src/lib/timeUtil.ts | 28 + web/src/main.tsx | 6 +- web/src/pages/collect-comments-page.tsx | 221 ++++--- web/src/pages/crawling-result-page.tsx | 120 ++-- web/src/pages/create-survey-page.tsx | 2 +- web/src/services/apis/crawling.service.ts | 96 ++++ web/src/store/comment/index.ts | 6 +- web/src/store/index.ts | 2 + web/src/store/winner/index.ts | 69 ++- web/src/types/comment.d.ts | 5 + web/src/types/winner.d.ts | 13 +- 24 files changed, 1476 insertions(+), 400 deletions(-) create mode 100644 web/src/assets/commentComplete.png create mode 100644 web/src/components/common/Ask_Popup.tsx create mode 100644 web/src/components/winner/WinnerResult.tsx create mode 100644 web/src/lib/timeUtil.ts create mode 100644 web/src/services/apis/crawling.service.ts create mode 100644 web/src/types/comment.d.ts diff --git a/web/package-lock.json b/web/package-lock.json index 44be65f..1c34e40 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -8,7 +8,10 @@ "name": "web", "version": "0.0.0", "dependencies": { + "@emotion/react": "^11.13.0", + "@emotion/styled": "^11.13.0", "@hookform/resolvers": "^3.9.0", + "@mui/material": "^5.16.7", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-tabs": "^1.1.0", "@reduxjs/toolkit": "^2.2.6", @@ -94,7 +97,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, "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.7", @@ -159,7 +161,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.8.tgz", "integrity": "sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.24.8", @@ -308,7 +309,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, "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" @@ -321,7 +321,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, "license": "MIT", "dependencies": { "@babel/template": "^7.24.7", @@ -335,7 +334,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, "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" @@ -362,7 +360,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, "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", @@ -483,7 +480,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, "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" @@ -496,7 +492,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -506,7 +501,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, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -556,7 +550,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", @@ -572,7 +565,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", - "dev": true, "license": "MIT", "bin": { "parser": "bin/babel-parser.js" @@ -2170,7 +2162,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", @@ -2185,7 +2176,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", @@ -2207,7 +2197,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.8.tgz", "integrity": "sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -2272,6 +2261,85 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/cache": { + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/cache/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, "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", @@ -2287,12 +2355,115 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", "license": "MIT" }, + "node_modules/@emotion/react": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.0.tgz", + "integrity": "sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.0.tgz", + "integrity": "sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.9.0", + "@emotion/utils": "^1.4.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/serialize/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/serialize/node_modules/@emotion/unitless": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.9.0.tgz", + "integrity": "sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==" + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + }, + "node_modules/@emotion/styled": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz", + "integrity": "sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/styled/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, "node_modules/@emotion/unitless": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", "license": "MIT" }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz", + "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -2960,7 +3131,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, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -2975,7 +3145,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, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2985,7 +3154,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, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2995,14 +3163,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3027,6 +3193,207 @@ "react": ">=16" } }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz", + "integrity": "sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/material": { + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.7.tgz", + "integrity": "sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/core-downloads-tracker": "^5.16.7", + "@mui/system": "^5.16.7", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.6", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.3.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/@mui/private-theming": { + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.6.tgz", + "integrity": "sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.16.6", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.6.tgz", + "integrity": "sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.7.tgz", + "integrity": "sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.16.6", + "@mui/styled-engine": "^5.16.6", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.6", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.15.tgz", + "integrity": "sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz", + "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/types": "^7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.3.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3072,6 +3439,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@radix-ui/primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", @@ -5069,11 +5445,15 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true, "license": "MIT" }, "node_modules/@types/qs": { @@ -5094,7 +5474,6 @@ "version": "18.3.3", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "devOptional": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -5115,7 +5494,6 @@ "version": "4.4.10", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", - "dev": true, "dependencies": { "@types/react": "*" } @@ -5761,7 +6139,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, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -6010,6 +6387,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", @@ -6320,7 +6711,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6379,7 +6769,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, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -6562,7 +6951,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, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -6572,7 +6960,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -6689,6 +7076,21 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6871,7 +7273,6 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.1.2" @@ -7121,6 +7522,14 @@ "node": ">=4" } }, + "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/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -7346,7 +7755,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, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -8445,6 +8853,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -8657,7 +9070,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8890,7 +9302,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, "license": "MIT", "engines": { "node": ">=4" @@ -8977,7 +9388,6 @@ "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, "license": "MIT", "engines": { "node": ">=4" @@ -9042,7 +9452,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -9093,6 +9502,19 @@ "url": "https://opencollective.com/unified" } }, + "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==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/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==" + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", @@ -9232,7 +9654,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, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -9358,6 +9779,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -9437,7 +9863,6 @@ "version": "2.14.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -9930,7 +10355,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -9946,6 +10370,11 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -10040,6 +10469,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", @@ -10500,7 +10934,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -11109,7 +11542,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, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -11118,6 +11550,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/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -11175,7 +11624,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-to-regexp": { @@ -11189,7 +11637,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, "license": "MIT", "engines": { "node": ">=8" @@ -12078,7 +12525,6 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -12096,7 +12542,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, "license": "MIT", "engines": { "node": ">=4" @@ -12947,7 +13392,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -12960,7 +13404,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -13154,7 +13597,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, "license": "MIT", "engines": { "node": ">=4" @@ -14467,6 +14909,14 @@ "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/web/package.json b/web/package.json index 268c11e..cd3de56 100644 --- a/web/package.json +++ b/web/package.json @@ -18,7 +18,10 @@ "test:ui": "vitest --ui" }, "dependencies": { + "@emotion/react": "^11.13.0", + "@emotion/styled": "^11.13.0", "@hookform/resolvers": "^3.9.0", + "@mui/material": "^5.16.7", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-tabs": "^1.1.0", "@reduxjs/toolkit": "^2.2.6", diff --git a/web/src/App.tsx b/web/src/App.tsx index 8f41f61..1d5683e 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -48,6 +48,17 @@ const router = createBrowserRouter([ }; }, }, + { + path: 'collect', + lazy: async () => { + const { CollectCommentsPage } = await import( + '@/pages/collect-comments-page' + ); + return { + Component: CollectCommentsPage, + }; + }, + }, { path: 'survey', @@ -65,21 +76,13 @@ const router = createBrowserRouter([ }, ], }, - { - path: 'collect', - lazy: async () => { - const { CollectCommentsPage } = await import( - '@/pages/collect-comments-page' - ); - return { - Component: CollectCommentsPage, - }; - }, - }, + { path: 'crawling', lazy: async () => { - const { CrawlingPage } = await import('@/pages/crawling-result-page'); + const { default: CrawlingPage } = await import( + '@/pages/crawling-result-page' + ); return { Component: CrawlingPage, }; diff --git a/web/src/assets/commentComplete.png b/web/src/assets/commentComplete.png new file mode 100644 index 0000000000000000000000000000000000000000..2289dabcbe117a57b205d8ea3e022bd9ee4829df GIT binary patch literal 15267 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 literal 0 HcmV?d00001 diff --git a/web/src/components/auth/change-pwd.tsx b/web/src/components/auth/change-pwd.tsx index 9570fa8..8faea5f 100644 --- a/web/src/components/auth/change-pwd.tsx +++ b/web/src/components/auth/change-pwd.tsx @@ -15,6 +15,7 @@ import { useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom'; import { toast } from 'sonner'; import styled from 'styled-components'; +import { Input } from '../common/input'; const ChangePwd = ({ onClose }: { onClose: () => void }) => { const { @@ -244,23 +245,34 @@ const CurrentPasswordContainer = styled.div` width: 100%; `; -const CheckButton = styled(Button)` +const BaseButton = styled.button` + display: inline-flex; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: background-color 0.3s ease; + &:disabled { + cursor: not-allowed; + opacity: 0.5; + } +`; + +const CheckButton = styled(BaseButton)` width: 63px; height: 46px; border-radius: 10px; background-color: transparent; color: ${COLORS.Main}; border: 1px solid ${COLORS.Main}; - font-size: 14px; - font-weight: 600; `; -const ChangeButton = styled(Button)` +const ChangeButton = styled(BaseButton)` width: 100%; height: 46px; border-radius: 10px; font-size: 16px; - font-weight: 600; margin-top: 200px; background-color: ${COLORS.Main}; border: none; diff --git a/web/src/components/common/Ask_Popup.tsx b/web/src/components/common/Ask_Popup.tsx new file mode 100644 index 0000000..4500169 --- /dev/null +++ b/web/src/components/common/Ask_Popup.tsx @@ -0,0 +1,92 @@ +import styled from 'styled-components'; +import { body4Style } from '@/styles/global-styles'; +import { COLORS } from '@/theme'; + +interface textProps { + comment: string; + text1: string; + text2: string; + onConfirm: () => void; + onCancel: () => void; +} + +export const AskPopup = ({ + comment, + text1, + text2, + onConfirm, + onCancel, +}: textProps) => { + return ( + + + {comment} + + {text1} + {text2} + + + + ); +}; + +const Overlay = styled.div` + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #333; + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; +`; + +const Container = styled.div` + width: 350px; + height: 151px; + border-radius: 10px; + padding: 16px; + background-color: white; + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; +`; + +const Comment = styled.div` + color: ${COLORS.Gray1}; + ${body4Style} + margin-bottom: 23px; + text-align: center; + white-space: pre-line; +`; + +const BtnContainer = styled.div` + display: flex; + justify-content: center; + gap: 10px; +`; + +const Btn1 = styled.button` + width: 155px; + height: 46px; + border-radius: 10px; + border: none; + background-color: ${COLORS.Main}; + color: white; + font-weight: 600; + cursor: pointer; +`; + +const Btn2 = styled.button` + width: 155px; + height: 46px; + border-radius: 10px; + border: none; + background-color: ${COLORS.Sub2}; + color: ${COLORS.Main}; + font-weight: 600; + cursor: pointer; +`; diff --git a/web/src/components/common/Popup.tsx b/web/src/components/common/Popup.tsx index 8aa6702..868a4f3 100644 --- a/web/src/components/common/Popup.tsx +++ b/web/src/components/common/Popup.tsx @@ -6,13 +6,22 @@ interface PopupProps { title: string; message: string; onClose: () => void; + imgSrc: string; // 이미지 소스를 받아올 수 있음 + width: string; + height: string; } -export const Popup = ({ message, onClose }: PopupProps) => { +export const Popup = ({ + message, + onClose, + imgSrc, + width, + height, +}: PopupProps) => { return ( - + {message} @@ -45,10 +54,9 @@ const Container = styled.div` border: 1px solid ${COLORS.Gray4}; `; -const Container2 = styled.div` - border: 1px solid ${COLORS.Gray4}; - width: 200px; - height: 150px; +const Container2 = styled.img` + width: 100px; + height: auto; margin-bottom: 20px; `; diff --git a/web/src/components/common/SingleDatePicker.tsx b/web/src/components/common/SingleDatePicker.tsx index 15a7bad..08f0d5e 100644 --- a/web/src/components/common/SingleDatePicker.tsx +++ b/web/src/components/common/SingleDatePicker.tsx @@ -26,7 +26,7 @@ export const SingleDatePicker = ({ const handleDateChange = (date: Date | null) => { if (date) { const year = date.getFullYear(); - const month = String(date.getMonth() + 1).padStart(2, '0'); // 월은 0부터 시작하므로 1을 더합니다. + const month = String(date.getMonth() + 1).padStart(2, '0'); // 월은 0부터 시작하므로 1을 더함 const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); diff --git a/web/src/components/common/SurveyTimeInput.tsx b/web/src/components/common/SurveyTimeInput.tsx index 49bd525..0f2372e 100644 --- a/web/src/components/common/SurveyTimeInput.tsx +++ b/web/src/components/common/SurveyTimeInput.tsx @@ -4,11 +4,11 @@ import 'react-datepicker/dist/react-datepicker.css'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; -import { handleEndDateChange, handleStartDateChange } from '@/lib/timeUtils'; import { body4Style } from '@/styles/global-styles'; import { COLORS } from '@/theme'; import { CSSProperties } from 'react'; import calendarIcon from '../../assets/calander.png'; +import { handleEndDateChange, handleStartDateChange } from '@/lib/timeUtil'; interface SurveyTimeInputProps { placeholderStart: string; diff --git a/web/src/components/common/Winner.tsx b/web/src/components/common/Winner.tsx index 299eed8..718870e 100644 --- a/web/src/components/common/Winner.tsx +++ b/web/src/components/common/Winner.tsx @@ -1,7 +1,8 @@ -// 당첨자 선정 시 컴포넌트 - import { COLORS } from '@/theme'; import styled from 'styled-components'; +import Accordion from '@mui/material/Accordion'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import btn_open from '@/assets/btn_open.png'; interface CommentBoxProps { title: string; @@ -11,35 +12,91 @@ interface CommentBoxProps { export const Winner = ({ title, comment }: CommentBoxProps) => { return ( - - {title} - {comment} - + + + {title} + + + + + {comment} + + + ); }; const Container = styled.div` - width: 350px; - min-height: 120px; + margin: 10px 0; + width: 100%; +`; + +const CustomAccordion = styled(Accordion)` + border: 1px solid ${COLORS.Gray5}; + border-radius: 10px !important; + box-shadow: none; + + &:before { + display: none; // MUI에서 기본적으로 추가되는 border 제거 + } +`; + +const CustomAccordionSummary = styled(AccordionSummary)` + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px; + background-color: ${COLORS.Gray6}; + border-bottom: 1px solid ${COLORS.Gray4}; + border-radius: 10px !important; + + & .MuiAccordionSummary-content { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + margin: 10px 0px; + } + + &.Mui-expanded { + div { + margin: 0px; + } + } +`; + +const Container2 = styled.div` + display: flex; + justify-content: center; + margin-bottom: 20px; +`; +const CommentContainer = styled.div` + width: 90%; + background-color: ${COLORS.Gray6}; + padding: 20px; border: 1px solid ${COLORS.Gray5}; - padding: 19px; border-radius: 10px; `; -const Container2 = styled.div``; + const Title = styled.p` font-size: 16px; - font-weight: 600; color: ${COLORS.Gray1}; - padding-bottom: 13px; - border-bottom: 1px solid ${COLORS.Gray4}; `; + const Comment = styled.div` - margin-top: 8px; color: ${COLORS.Gray2}; font-size: 14px; - word-wrap: break-word; /* 긴 단어를 줄바꿈 */ - overflow-wrap: break-word; /* 긴 단어가 있을 때 줄바꿈 */ - white-space: pre-wrap; /* 연속된 공백을 유지하고 줄바꿈을 허용 */ + word-wrap: break-word; + overflow-wrap: break-word; + white-space: pre-wrap; +`; + +const Open = styled.img` + width: 45px; + height: 45px; `; diff --git a/web/src/components/winner/Comment.tsx b/web/src/components/winner/Comment.tsx index ed7d863..32a0bd1 100644 --- a/web/src/components/winner/Comment.tsx +++ b/web/src/components/winner/Comment.tsx @@ -2,34 +2,63 @@ import { CrawlingTime } from '@/components/common/CrawlingTime'; import { Winner } from '@/components/common/Winner'; +import { getCommentsList } from '@/services/apis/crawling.service'; import { body3Style } from '@/styles/global-styles'; import { COLORS } from '@/theme'; +import { useEffect, useState } from 'react'; import styled from 'styled-components'; const Comment = () => { - // 임시 데이터 - const comments = [ - { - title: 'Suppin2024', - comment: '평상시에 스윗미임 영상을 열심히 보다...', - }, - { - title: 'CMC 23', - comment: - '이벤트를 한다는 소식을 듣고 학교 친구들과 함께.asdadasdasldalsdklasdjlasjdlasjasdajsdjlasjdlajsdlajsdlajsdljalsdjalsjdlasjdasdadasdasldalsdklasdjlasjdlasjasdajsdjlasjdlajsdlajsdlajsdljalsdjalsjdlasjdasdadasdasldalsdklasdjlasjdlasjasdajsdjlasjdlajsdlajsdlajsdljalsdjalsjdlasjd', - }, - ]; + const [comments, setComments] = useState([]); // 상태로 댓글 데이터를 관리 + const [loading, setLoading] = useState(true); // 로딩 상태 관리 + const [participantCount, setParticipantCount] = useState(0); // 참여자 수 상태 관리 + const eventId = 1; // 이벤트 ID를 할당 + const url = 'https://www.youtube.com/watch?v=xnK3b1CTAh0'; // 임시 유튜브 URL + + useEffect(() => { + const fetchComments = async () => { + try { + const response = await getCommentsList({ + eventId, + url, + page: 1, + size: 10, + }); + + if (response.data.comments) { + setComments(response.data.comments); // API로 가져온 댓글 데이터를 상태에 저장 + } + setParticipantCount(response.data.totalCommentCount); // 참여자 수 설정 + console.log(response); + } catch (error) { + console.error('Failed to fetch comments:', error); + } finally { + setLoading(false); // 로딩 완료 + } + }; + + fetchComments(); + }, [eventId, url]); // 이벤트 ID와 URL이 변경될 때마다 다시 호출 + return ( <> - 참여자 300 + 참여자 {participantCount}{' '} + {/* 참여자 수 표시 */} - - {comments.map((item, index) => ( - - ))} + {comments.length > 0 ? ( + comments.map((item, index) => ( + + )) + ) : ( +
댓글이 없습니다.
+ )}
); @@ -50,6 +79,7 @@ const Container2 = styled.div` align-items: center; flex-direction: column; gap: 12px; + padding: 0px 20px; `; const WinnerCount = styled.p` diff --git a/web/src/components/winner/Winner.tsx b/web/src/components/winner/Winner.tsx index c67bc67..c3dd3c5 100644 --- a/web/src/components/winner/Winner.tsx +++ b/web/src/components/winner/Winner.tsx @@ -1,56 +1,111 @@ -import { Button } from '@/components/common/button'; -import { body1Style, body3Style, head4Style } from '@/styles/global-styles'; -import { COLORS } from '@/theme'; -import React, { useState } from 'react'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; -import { SurveyTimeInput } from '../common/surveyTimeInput'; -<<<<<<< Updated upstream -======= -<<<<<<< Updated upstream +import { RootState } from '@/store'; +import { COLORS } from '@/theme'; +import { Button } from '../common/button'; +import { SurveyTimeInput } from '../common/SurveyTimeInput'; import { head4Style, body3Style, body1Style } from '@/styles/global-styles'; -======= -import { - head4Style, - body3Style, - body1Style, - body6Style, -} from '@/styles/global-styles'; -import { useDispatch, useSelector } from 'react-redux'; -import { AppDispatch, RootState } from '@/store'; import { - toggleKeywordChecked, - toggleMinLengthChecked, - togglePeriodChecked, + setParticipantCount, + setMinCharacterCount, + addKeyword, + removeKeyword, + setWinners, + setWinnerCount, } from '@/store/winner'; ->>>>>>> Stashed changes ->>>>>>> Stashed changes +import { setStartDate, setEndDate } from '@/store/comment'; +import { draftWinners } from '@/services/apis/crawling.service'; +import { toast } from 'sonner'; -export const WinnerContent = () => { - const [hashtags, setHashtags] = useState([]); - const [inputValue, setInputValue] = useState(''); -<<<<<<< Updated upstream -======= - const dispatch = useDispatch(); - const { isPeriodChecked, isKeywordChecked, isMinLengthChecked } = useSelector( +interface WinnerContentProps { + onWinnerSelected: () => void; // 콜백 프로퍼티 추가 +} + +export const WinnerContent = ({ onWinnerSelected }: WinnerContentProps) => { + const dispatch = useDispatch(); + + // Redux 상태에서 startDate와 endDate를 가져옴 + const startDate = useSelector((state: RootState) => state.dates.startDate); + const endDate = useSelector((state: RootState) => state.dates.endDate); + + const { participantCount, minCharacterCount, keywords } = useSelector( (state: RootState) => state.winner ); ->>>>>>> Stashed changes - const handleAddHashtag = () => { + const [inputValue, setInputValue] = useState(''); + const [isButtonEnabled, setIsButtonEnabled] = useState(false); + + useEffect(() => { + if ( + participantCount.trim() !== '' && + minCharacterCount.trim() !== '' && + startDate.trim() !== '' && + endDate.trim() !== '' && + keywords.length > 0 + ) { + setIsButtonEnabled(true); + } else { + setIsButtonEnabled(false); + } + }, [participantCount, minCharacterCount, startDate, endDate, keywords]); + + const handleAddKeyword = () => { if (inputValue.trim() !== '') { - setHashtags([...hashtags, inputValue.trim()]); + dispatch(addKeyword(inputValue.trim())); setInputValue(''); } }; - const handleRemoveHashtag = (index: number) => { - setHashtags(hashtags.filter((_, i) => i !== index)); + const handleRemoveKeyword = (index: number) => { + dispatch(removeKeyword(index)); }; const handleInputChange = (e: React.ChangeEvent) => { setInputValue(e.target.value); }; + const handleSubmit = async () => { + if (!isButtonEnabled) { + toast.error('모든 필드를 입력해주세요.'); + return; + } + + const payload = { + eventId: 1, // 실제 이벤트 ID를 여기에 설정 + winnerCount: parseInt(participantCount, 10), + minLength: parseInt(minCharacterCount, 10), + startDate, + endDate, + keywords, + }; + + console.log(payload); + + try { + const response = await draftWinners(payload); + console.log(response); + + if (response.data.winners.length > 0) { + dispatch(setWinners(response.data.winners)); // 당첨자 데이터를 Redux에 저장 + dispatch(setWinnerCount(response.data.winners.length)); // 당첨자 데이터를 Redux에 저장 + dispatch(setStartDate(startDate)); + dispatch(setEndDate(endDate)); + toast.success( + // `당첨자 ${response.data.winners.length}명이 추첨되었습니다!` + `당첨자 선정이 완료되었습니다` + ); + onWinnerSelected(); // 콜백 호출 + } else { + toast.error( + '키워드가 포함된 댓글이 조회되지 않았습니다! 키워드 설정을 다시 해주세요!' + ); + } + } catch (error) { + toast.error('당첨자 추첨에 실패했습니다.'); + } + }; + return ( <> @@ -58,28 +113,20 @@ export const WinnerContent = () => { 참여자 300 - + { + dispatch(setParticipantCount(e.target.value)); + }} + />
- -<<<<<<< Updated upstream - - 기간 설정 -======= - dispatch(togglePeriodChecked())} - /> - - 기간 설정 - - 특정 날짜에 응답한 참여자 중 당첨자를 선정할 수 있어요. - - ->>>>>>> Stashed changes - + 기간 설정 + + 특정 날짜에 응답한 참여자 중 당첨자를 선정할 수 있어요. + {
- -<<<<<<< Updated upstream - - 최소 글자수 -======= - dispatch(toggleMinLengthChecked())} - /> - 최소 글자수 ->>>>>>> Stashed changes - - + 최소 글자수 + + 정성어린 응답의 기준이 되는 최소 글자수를 입력해 주세요. + + { + dispatch(setMinCharacterCount(e.target.value)); + }} + />
- -<<<<<<< Updated upstream - - 키워드 설정 -======= - dispatch(toggleKeywordChecked())} - /> - - 키워드 설정 - - 정성어린 응답의 기준이 되는 최소 글자수를 입력해 주세요. - - ->>>>>>> Stashed changes - + 키워드 설정 + 주관식에서 포함되길 바라는 키워드를 입력해 주세요. - 추가 + 추가 - {hashtags.map((tag, index) => ( + {keywords.map((tag, index) => ( -<<<<<<< Updated upstream - #{tag} -======= # {tag} ->>>>>>> Stashed changes