From 386df5f00ae6132ce8396a3d6870535196aaa9c1 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sat, 25 Mar 2023 11:17:30 +0900 Subject: [PATCH 01/72] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=A7=80=EC=9A=B0?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/global/globalModal/OkrModal.jsx | 4 ++-- .../global/globalModal/OkrPatchModal.jsx | 16 ++++++++-------- .../global/globalModal/ProgressPatchModal.jsx | 4 ++-- src/components/global/globalModal/TodoModal.jsx | 2 +- .../global/globalModal/TodoPathModal.jsx | 4 ++-- .../global/globaldropdown/PatchPriority.jsx | 2 +- .../global/globaldropdown/PriorityDropDown.jsx | 2 +- .../global/globaldropdown/TeamDropDown.jsx | 2 +- src/components/mainpage/OKR.jsx | 2 +- src/components/mainpage/ToDo.jsx | 2 +- src/components/mainpage/TodoItem.jsx | 2 +- src/components/todo/FinishTodo.jsx | 6 +++--- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index c800ea0..1b39c04 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -96,7 +96,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { } else if (objInfo.color === '') { toast('색상을 선택해 주세요.'); } else { - console.log('성공'); + // console.log('성공'); createObjectiveMutate(objInfo); } }; @@ -107,7 +107,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { queryClient.invalidateQueries(['OKR']); setObjectId(response.objectiveId); onCloseModal(); - console.log('rr', response); + // console.log('rr', response); }, onError: response => {}, }); diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index 23c3786..9975b04 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -41,7 +41,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { // console.log(modalOutSideClick); // console.log(onCloseModal); // console.log(modalRef); - console.log(objectiveInfo); + // console.log(objectiveInfo); const weekDays = ['일', '월', '화', '수', '목', '금', '토']; const format = 'YYYY-MM-DD'; @@ -76,10 +76,10 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const convertStart = (date, format = startDate.format) => { let object = { date, format }; setStartDate(new DateObject(object).format()); - console.log(startDate); - console.log(typeof startDate); - console.log(objectiveInfo.startData); - console.log(typeof objectiveInfo.startData); + // console.log(startDate); + // console.log(typeof startDate); + // console.log(objectiveInfo.startData); + // console.log(typeof objectiveInfo.startData); setObjInfo({ ...objInfo, startdate: new DateObject(object).format() }); }; @@ -112,7 +112,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { setObjInfo({ ...objInfo, color: '#9B9B9B' }); toast('색상을 선택하지 않으면 회색이 기본입니다.'); } else { - console.log('성공'); + // console.log('성공'); patchObjectivemutate({ value, id }); } }; @@ -120,7 +120,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchObjectivemutate } = useMutation(PatchObjective, { onSuccess: response => { queryClient.invalidateQueries(['OKR']); - console.log('rr', response); + // console.log('rr', response); onCloseModal(); }, onError: response => { @@ -131,7 +131,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: deleteObjective } = useMutation(DeleteObjective, { onSuccess: response => { queryClient.invalidateQueries(['OKR']); - console.log(response); + // console.log(response); onCloseModal(); }, onError: response => { diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index acd1e19..9c58641 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -14,7 +14,7 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); const progressInfo = useRecoilValue(patchProgressInfo); - console.log(progressInfo); + // console.log(progressInfo); const [rangeInfo, setRangeInfo] = useState({ progress: progressInfo.value }); @@ -67,7 +67,7 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { }; const onChangeProgress = e => { - console.log(e.target.value); + // console.log(e.target.value); setRangeInfo({ progress: e.target.value }); }; diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index d325cd6..b9874da 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -191,7 +191,7 @@ const TodoModal = ({ let Oid = oid; let Kid = kid; let Info = todoInfo; - console.log(Oid, Kid, Info); + // console.log(Oid, Kid, Info); createTodo({ Oid, Kid, Info }); onCloseTodoModal(); } diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index d3261b3..7badf12 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -190,8 +190,8 @@ const TodoPathModal = ({ onCloseModal }) => { onCloseModal(); } }; - console.log('title :', title); - console.log('todoInfo :', todoInfo); + // console.log('title :', title); + // console.log('todoInfo :', todoInfo); const { mutate: deleteTodo } = useMutation(DeleteTodo, { onSuccess: response => { diff --git a/src/components/global/globaldropdown/PatchPriority.jsx b/src/components/global/globaldropdown/PatchPriority.jsx index b7a9218..33f1653 100644 --- a/src/components/global/globaldropdown/PatchPriority.jsx +++ b/src/components/global/globaldropdown/PatchPriority.jsx @@ -33,7 +33,7 @@ const PatchPriority = ({ title, setTitle }) => { setTitle({ ...title, priority: Number(value) }); }; - console.log(title); + // console.log(title); return ( <> diff --git a/src/components/global/globaldropdown/PriorityDropDown.jsx b/src/components/global/globaldropdown/PriorityDropDown.jsx index 5dbaf23..4082c57 100644 --- a/src/components/global/globaldropdown/PriorityDropDown.jsx +++ b/src/components/global/globaldropdown/PriorityDropDown.jsx @@ -26,7 +26,7 @@ const PriorityDropDown = ({ todoInfo, setTodoInfo }) => { setTodoInfo({ ...todoInfo, priority: Number(value) }); }; - console.log(todoInfo); + // console.log(todoInfo); return ( <> diff --git a/src/components/global/globaldropdown/TeamDropDown.jsx b/src/components/global/globaldropdown/TeamDropDown.jsx index 0ccac76..76dca04 100644 --- a/src/components/global/globaldropdown/TeamDropDown.jsx +++ b/src/components/global/globaldropdown/TeamDropDown.jsx @@ -22,7 +22,7 @@ const TeamDropDown = ({ setUserInfo, userInfo }) => { setIsOpen(!isOpen); // console.log(isOpen); - console.log(value); + // console.log(value); // console.log('valueClick - finalValue :', finalValue); // setUserInfo({ ...userInfo, teamposition: value }); diff --git a/src/components/mainpage/OKR.jsx b/src/components/mainpage/OKR.jsx index ccb299f..1ead0c4 100644 --- a/src/components/mainpage/OKR.jsx +++ b/src/components/mainpage/OKR.jsx @@ -19,7 +19,7 @@ export default function OKR() { const { data: getOKRData } = useQuery(['OKR'], GetOKR, { onSuccess: response => { - console.log(response); + // console.log(response); }, onError: response => {}, }); diff --git a/src/components/mainpage/ToDo.jsx b/src/components/mainpage/ToDo.jsx index e005ed4..26dacd1 100644 --- a/src/components/mainpage/ToDo.jsx +++ b/src/components/mainpage/ToDo.jsx @@ -40,7 +40,7 @@ export default function ToDo() { // 임시 const { data: getTodo } = useQuery(['TODO'], GetTodo, { onSuccess: response => { - console.log('대시보드 todo :', response); + // console.log('대시보드 todo :', response); }, onError: response => {}, }); diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index bc8928b..e658ca6 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -39,7 +39,7 @@ const TodoItem = ({ getTodo }) => { return false; }); - console.log(filterArray); + // console.log(filterArray); // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index a322675..34ea400 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -108,7 +108,7 @@ const FinishTodo = ({ el }) => { -
+ {/*
<div className='krBox'> @@ -127,8 +127,8 @@ const FinishTodo = ({ el }) => { <Priority ct={ct} /> <div className='checkbg'></div> </div> - </div> - {/* <FilterMyTodo /> */} + </div> */} + <FilterMyTodo ct={ct} /> </TodoDetailItem> ))} </Finsh> From 73fd6859865128267299ae762be6a8c3281d7c06 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Mon, 27 Mar 2023 22:57:43 +0900 Subject: [PATCH 02/72] fix : GA update --- .env | 2 +- package-lock.json | 94 +++++++ package.json | 1 + public/index.html | 33 ++- src/App.js | 3 - src/index.js | 4 - src/router/RouteChangeTracker.js | 25 +- src/router/Router.js | 3 + yarn.lock | 466 +++++++++++++++++++------------ 9 files changed, 425 insertions(+), 206 deletions(-) diff --git a/.env b/.env index ec7ebce..e59e7c4 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ REACT_APP_API="https://slamdunkwokr.com" -REACT_APP_GOOGLE_ANALYTICS_TARCKING_ID="UA-249298042-1" \ No newline at end of file +REACT_APP_GOOGLE_ANALYTICS_ID="G-N3ZKHWT8S3" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d0a0629..1e5ef6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,10 +20,14 @@ "eslint-plugin-prettier": "^4.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-ga": "^3.3.1", + "react-ga4": "^2.1.0", "react-multi-date-picker": "^3.3.4", "react-query": "^3.39.3", "react-router-dom": "^6.8.2", "react-scripts": "5.0.1", + "react-scroll": "^1.8.9", + "react-toastify": "^9.1.1", "recoil": "^0.7.7", "styled-components": "^5.3.8", "web-vitals": "^2.1.0" @@ -5647,6 +5651,14 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -10814,6 +10826,11 @@ "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", "license": "MIT" }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -13458,6 +13475,20 @@ "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", "license": "MIT" }, + "node_modules/react-ga": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz", + "integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==", + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^15.6.2 || ^16.0 || ^17 || ^18" + } + }, + "node_modules/react-ga4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz", + "integrity": "sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ==" + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -13646,6 +13677,31 @@ "node": ">=10" } }, + "node_modules/react-scroll": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.8.9.tgz", + "integrity": "sha512-9m7ztraiX/l6L7erzYAD3fhnveNckei6/NkWfqwN2e0FRdoE2W6Pk4oi2Nah7mWpPCPAeIgegfaqZACTimPOwg==", + "dependencies": { + "lodash.throttle": "^4.1.1", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-toastify": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.2.tgz", + "integrity": "sha512-PBfzXO5jMGEtdYR5jxrORlNZZe/EuOkwvwKijMatsZZm8IZwLj01YvobeJYNjFcA6uy6CVrx2fzL9GWbhWPTDA==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -20371,6 +20427,11 @@ "wrap-ansi": "^7.0.0" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -23833,6 +23894,11 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -25416,6 +25482,17 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "react-ga": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz", + "integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==", + "requires": {} + }, + "react-ga4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz", + "integrity": "sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ==" + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -25537,6 +25614,23 @@ } } }, + "react-scroll": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.8.9.tgz", + "integrity": "sha512-9m7ztraiX/l6L7erzYAD3fhnveNckei6/NkWfqwN2e0FRdoE2W6Pk4oi2Nah7mWpPCPAeIgegfaqZACTimPOwg==", + "requires": { + "lodash.throttle": "^4.1.1", + "prop-types": "^15.7.2" + } + }, + "react-toastify": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.2.tgz", + "integrity": "sha512-PBfzXO5jMGEtdYR5jxrORlNZZe/EuOkwvwKijMatsZZm8IZwLj01YvobeJYNjFcA6uy6CVrx2fzL9GWbhWPTDA==", + "requires": { + "clsx": "^1.1.1" + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/package.json b/package.json index 4efe26c..0921d07 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-ga": "^3.3.1", + "react-ga4": "^2.1.0", "react-multi-date-picker": "^3.3.4", "react-query": "^3.39.3", "react-router-dom": "^6.8.2", diff --git a/public/index.html b/public/index.html index c0d8b8a..9dca502 100644 --- a/public/index.html +++ b/public/index.html @@ -1,22 +1,21 @@ <!DOCTYPE html> <html lang="en" style="font-size: 62.5%"> - <!-- 1rem = 10px --> +<!-- 1rem = 10px --> - <head> - <meta charset="utf-8" /> - <link rel="icon" href="%PUBLIC_URL%/projectFavicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <meta name="theme-color" content="#000000" /> - <meta - name="description" - content="Web site created using create-react-app" /> +<head> + <meta charset="utf-8" /> + <link rel="icon" href="%PUBLIC_URL%/projectFavicon.png" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="theme-color" content="#000000" /> + <meta name="description" content="Web site created using create-react-app" /> - <title>WOKR - + WOKR + - - -
-
- - + + +
+
+ + + \ No newline at end of file diff --git a/src/App.js b/src/App.js index 14c8f67..8e60fbd 100644 --- a/src/App.js +++ b/src/App.js @@ -1,9 +1,6 @@ import Router from './router/Router'; -import RouteChangeTracker from './router/RouteChangeTracker'; -import ReactGA from 'react-ga'; function App() { - RouteChangeTracker(); return ; } diff --git a/src/index.js b/src/index.js index 17a9aa9..3a7919e 100644 --- a/src/index.js +++ b/src/index.js @@ -7,13 +7,9 @@ import { BrowserRouter } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ThemeProvider } from 'styled-components'; import theme from './components/global/theme'; -import ReactGA from 'react-ga'; const queryClient = new QueryClient(); -const TRACKING_ID = process.env.REACT_APP_GOOGLE_ANALYTICS_TRACKING_ID; -ReactGA.initialize(TRACKING_ID); - const root = ReactDOM.createRoot(document.getElementById('root')); root.render( diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 0c6cdda..2d07647 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -1,24 +1,39 @@ import { useEffect, useState } from 'react'; import { useLocation } from 'react-router-dom'; -import ReactGA from 'react-ga'; +import ReactGA from 'react-ga4'; +/** + * uri 변경 추적 컴포넌트 + * uri가 변경될 때마다 pageview 이벤트 전송 + */ const RouteChangeTracker = () => { const location = useLocation(); const [initialized, setInitialized] = useState(false); + // localhost는 기록하지 않음 useEffect(() => { if (!window.location.href.includes('localhost')) { - // 환경 변수 사용 - ReactGA.initialize(process.env.REACT_APP_GOOGLE_ANALYTICS_TRACKING_ID); + ReactGA.initialize( + `${process.env.REACT_APP_GOOGLE_ANALYTICS_TRAKING_ID}` + ); + setInitialized(true); } - setInitialized(true); }, []); + // location 변경 감지시 pageview 이벤트 전송 useEffect(() => { if (initialized) { - ReactGA.pageview(location.pathname + location.search); + ReactGA.set({ page: location.pathname }); + ReactGA.send('pageview'); } }, [initialized, location]); + + // 개발용 + useEffect(() => { + ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_TRAKING_ID}`); + ReactGA.set({ page: location.pathname }); + ReactGA.send('pageview'); + }, [location]); }; export default RouteChangeTracker; diff --git a/src/router/Router.js b/src/router/Router.js index 06d53d3..ac52dd5 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -5,10 +5,13 @@ import SignUp from '../pages/SignUp'; import Mainpage from '../pages/Mainpage'; import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; +import RouteChangeTracker from './RouteChangeTracker'; + export default function Router() { return (
+ } /> } /> diff --git a/yarn.lock b/yarn.lock index 764455c..1bb6a1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,7 +36,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz" integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.11.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz" integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== @@ -499,7 +499,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.18.6": +"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz" integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== @@ -811,7 +811,7 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.18.6": +"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz" integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== @@ -1234,7 +1234,7 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz" integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== -"@fullcalendar/core@^6.1.4": +"@fullcalendar/core@^6.1.4", "@fullcalendar/core@~6.1.4": version "6.1.4" resolved "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.4.tgz" integrity sha512-ZDD0Owv0LezAk14nsRNaOc9nbowItGmT0mnjOhEw+L6B8P5eads8yYaNA9itn70MWoOjiAG8xqD7Yk1iJGxqgQ== @@ -1557,7 +1557,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== @@ -1590,7 +1590,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1815,7 +1815,7 @@ "@tanstack/query-core" "4.26.1" use-sync-external-store "^1.2.0" -"@testing-library/dom@^8.5.0": +"@testing-library/dom@^8.5.0", "@testing-library/dom@>=7.21.4": version "8.20.0" resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz" integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA== @@ -1875,7 +1875,7 @@ resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.9": version "7.20.0" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== @@ -1959,16 +1959,16 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" @@ -2187,7 +2187,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^4.0.0 || ^5.0.0", "@typescript-eslint/eslint-plugin@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz" integrity sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== @@ -2210,7 +2210,7 @@ dependencies: "@typescript-eslint/utils" "5.54.0" -"@typescript-eslint/parser@^5.5.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz" integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== @@ -2256,7 +2256,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.54.0", "@typescript-eslint/utils@^5.43.0": +"@typescript-eslint/utils@^5.43.0", "@typescript-eslint/utils@5.54.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz" integrity sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== @@ -2454,15 +2454,20 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.0.0, acorn@^7.1.1: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +acorn@^7.0.0: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2503,7 +2508,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2513,7 +2518,17 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.8.0, ajv@^8.8.2: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.6.0, ajv@>=8: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2596,16 +2611,16 @@ aria-query@^5.0.0, aria-query@^5.1.3: dependencies: deep-equal "^2.0.5" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -2993,7 +3008,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4", "browserslist@>= 4.21.0", browserslist@>=4: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3091,7 +3106,16 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3179,7 +3203,7 @@ cliui@^7.0.2: clsx@^1.1.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== co@^4.6.0: @@ -3215,16 +3239,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + colord@^2.9.1: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" @@ -3482,14 +3506,6 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css-tree@1.0.0-alpha.37: - 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" - css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" @@ -3498,6 +3514,14 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@1.0.0-alpha.37: + 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" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" @@ -3615,26 +3639,33 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@2.6.9, debug@^2.6.0: +debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - ms "^2.1.1" + ms "2.0.0" decimal.js@^10.2.1: version "10.4.3" @@ -3709,16 +3740,16 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -3816,14 +3847,6 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-serializer@0: - 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" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -3833,16 +3856,24 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +dom-serializer@0: + 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" domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" @@ -4236,7 +4267,7 @@ eslint-plugin-testing-library@^5.0.1: dependencies: "@typescript-eslint/utils" "^5.43.0" -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-scope@^5.1.1, eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4259,7 +4290,12 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== @@ -4280,7 +4316,7 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@^8.3.0, eslint@^8.34.0: +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.5.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.1.0, eslint@^8.3.0, eslint@^8.34.0, "eslint@>= 6", eslint@>=5, eslint@>=7.0.0, eslint@>=7.28.0: version "8.35.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz" integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== @@ -4582,7 +4618,15 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -4704,11 +4748,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -4771,7 +4810,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4785,6 +4824,13 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" @@ -5017,6 +5063,16 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -5028,16 +5084,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -5090,13 +5136,6 @@ husky@^8.0.3: resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -5104,6 +5143,13 @@ iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -5165,7 +5211,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5189,16 +5235,16 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - ipaddr.js@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -5798,7 +5844,7 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve@^27.4.2, jest-resolve@^27.5.1: +jest-resolve@*, jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== @@ -6020,7 +6066,7 @@ jest-worker@^28.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.4.3: +"jest@^27.0.0 || ^28.0.0", jest@^27.4.3: version "27.5.1" resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== @@ -6282,7 +6328,7 @@ lodash.sortby@^4.7.0: lodash.throttle@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + resolved "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== lodash.uniq@^4.5.0: @@ -6412,7 +6458,7 @@ microseconds@0.2.0: resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -6477,6 +6523,11 @@ mkdirp@~0.5.1: dependencies: minimist "^1.2.6" +ms@^2.1.1, ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -6487,11 +6538,6 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" @@ -7453,15 +7499,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^7.0.35: - version "7.0.39" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.1.4, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.3, postcss@^8.3.5, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.4, postcss@^8.4.6, "postcss@>= 8", postcss@>=8, postcss@>=8.0.9: version "8.4.21" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -7470,6 +7508,14 @@ postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^7.0.35: + version "7.0.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + preact@^10.0.5: version "10.13.0" resolved "https://registry.npmjs.org/preact/-/preact-10.13.0.tgz" @@ -7492,7 +7538,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.8.4: +prettier@^2.8.4, prettier@>=2.0.0: version "2.8.4" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz" integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== @@ -7558,7 +7604,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7693,7 +7739,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^18.2.0: +"react-dom@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.7.0 || ^17 || ^18", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 16.8.0", react-dom@>=16, react-dom@>=16.8, react-dom@>=16.8.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -7713,10 +7759,15 @@ react-error-overlay@^6.0.11: react-ga@^3.3.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.1.tgz#d8e1f4e05ec55ed6ff944dcb14b99011dfaf9504" + resolved "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz" integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== -react-is@^16.13.1, react-is@^16.7.0: +react-ga4@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz" + integrity sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ== + +react-is@^16.13.1, react-is@^16.7.0, "react-is@>= 16.8.0": version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -7748,7 +7799,7 @@ react-query@^3.39.3: broadcast-channel "^3.4.1" match-sorter "^6.0.2" -react-refresh@^0.11.0: +react-refresh@^0.11.0, "react-refresh@>=0.10.0 <1.0.0": version "0.11.0" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== @@ -7825,20 +7876,20 @@ react-scripts@5.0.1: react-scroll@^1.8.9: version "1.8.9" - resolved "https://registry.yarnpkg.com/react-scroll/-/react-scroll-1.8.9.tgz#96f8a82f882b187970c2338759225c7e619d915b" + resolved "https://registry.npmjs.org/react-scroll/-/react-scroll-1.8.9.tgz" integrity sha512-9m7ztraiX/l6L7erzYAD3fhnveNckei6/NkWfqwN2e0FRdoE2W6Pk4oi2Nah7mWpPCPAeIgegfaqZACTimPOwg== dependencies: lodash.throttle "^4.1.1" prop-types "^15.7.2" react-toastify@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.1.tgz#9280caea4a13dc1739c350d90660a630807bf10b" - integrity sha512-pkFCla1z3ve045qvjEmn2xOJOy4ZciwRXm1oMPULVkELi5aJdHCN/FHnuqXq8IwGDLB7PPk2/J6uP9D8ejuiRw== + version "9.1.2" + resolved "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.2.tgz" + integrity sha512-PBfzXO5jMGEtdYR5jxrORlNZZe/EuOkwvwKijMatsZZm8IZwLj01YvobeJYNjFcA6uy6CVrx2fzL9GWbhWPTDA== dependencies: clsx "^1.1.1" -react@^18.2.0: +"react@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.6.2 || ^16.0 || ^17 || ^18", "react@^16.7.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16", "react@>= 16.8.0", react@>=16, react@>=16.13.1, react@>=16.8, react@>=16.8.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -8062,7 +8113,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2, rimraf@3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8079,7 +8130,7 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup@^2.43.1: +"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: version "2.79.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -8093,15 +8144,20 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex-test@^1.0.0: version "1.0.0" @@ -8149,15 +8205,6 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -8167,7 +8214,25 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: +schema-utils@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -8186,6 +8251,15 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -8203,7 +8277,28 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.3.2: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.8: version "7.3.8" resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -8363,7 +8458,7 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -8430,16 +8525,16 @@ stackframe@^1.3.4: resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -8447,6 +8542,20 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -8509,20 +8618,6 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" @@ -8583,7 +8678,7 @@ style-loader@^3.3.1: resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== -styled-components@^5.3.8: +styled-components@^5.3.8, "styled-components@>= 2": version "5.3.8" resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.8.tgz" integrity sha512-6jQrlvaJQ16uWVVO0rBfApaTPItkqaG32l3746enNZzpMDxMvzmHzj8rHUg39bvVtom0Y8o8ZzWuchEXKGjVsg== @@ -8607,7 +8702,14 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -8868,7 +8970,7 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -type-check@^0.4.0, type-check@~0.4.0: +type-check@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== @@ -8882,6 +8984,13 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-detect@4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" @@ -8892,7 +9001,7 @@ type-fest@^0.16.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== -type-fest@^0.20.2: +type-fest@^0.20.2, "type-fest@>=0.17.0 <4.0.0": version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== @@ -8926,6 +9035,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +"typescript@^3.2.1 || ^4", "typescript@>= 2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -8984,7 +9098,7 @@ unload@2.2.0: "@babel/runtime" "^7.6.2" detect-node "^2.0.4" -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -9138,7 +9252,7 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0: +webpack-dev-server@^4.6.0, "webpack-dev-server@3.x || 4.x": version "4.11.1" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== @@ -9202,7 +9316,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.64.4: +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.4.0 || ^5.9.0", "webpack@^4.44.2 || ^5.47.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.64.4, "webpack@>= 4", webpack@>=2, "webpack@>=4.43.0 <6.0.0": version "5.75.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz" integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== @@ -9232,7 +9346,7 @@ webpack@^5.64.4: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== From f0b3b755ccf90b7bdd977bdc29e0f8e45e49bbcb Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Mon, 27 Mar 2023 22:58:58 +0900 Subject: [PATCH 03/72] fix : GA update --- public/index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/public/index.html b/public/index.html index 9dca502..6fe9eb9 100644 --- a/public/index.html +++ b/public/index.html @@ -13,7 +13,6 @@ -
From a65b4da5a148d0ac6e6bfb3966c3f7e1a25119b7 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 27 Mar 2023 23:12:02 +0900 Subject: [PATCH 04/72] =?UTF-8?q?docs=20:=20ReadMe=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=ED=99=94=20#28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5cabe65..be7177a 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,47 @@ -1. input range ui -2. okr 생성 시 obj에 입력한 내용이 kr 첫번째 입력란에 표시 -3. kr, input 모달 밖에 누르면 안닫힘 -4. 캘린더 style -5. - -map 에러 https://kangdanne.tistory.com/147
-Unknown event handler property it will be ignored https://cocoon1787.tistory.com/854 +## 🔥프로젝트 소개 + +### 프로젝트 소개에 관련한 글 ~~~~ + +- + +### 프로젝트 기간 + +- 📌 2023.03.02 - 2023.04.08 + +### WOKR 사이트 + +--- + +## 기술 정보 + +--- + +## 주요기능 + +--- + +## 아키텍처 + +--- + +## 기술적 의사결정 + +--- + +## 기능 + +--- + +## 트러블 슈팅 + +--- + +## 기본 설정 + +--- + +## 페이지별 기능구현 + +--- + +## 맴버 From 4228882e7ec6b55794487603d6ac89b01f987e8d Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Mon, 27 Mar 2023 23:53:36 +0900 Subject: [PATCH 05/72] fix : env --- .env | 2 +- public/index.html | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/.env b/.env index e59e7c4..cf3336b 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ REACT_APP_API="https://slamdunkwokr.com" -REACT_APP_GOOGLE_ANALYTICS_ID="G-N3ZKHWT8S3" \ No newline at end of file +REACT_APP_GOOGLE_ANALYTICS_ID="https://G-N3ZKHWT8S3" \ No newline at end of file diff --git a/public/index.html b/public/index.html index 6fe9eb9..2d3dfaf 100644 --- a/public/index.html +++ b/public/index.html @@ -1,20 +1,21 @@ - + - - - - - - + + + + + + - WOKR - + WOKR + - -
-
- - - \ No newline at end of file + +
+
+ + From 9c81b6730d1f3c3d36a6f33b8762b424c8654ba6 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 00:01:07 +0900 Subject: [PATCH 06/72] fix : GA code --- .env | 2 +- src/router/RouteChangeTracker.js | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.env b/.env index cf3336b..e59e7c4 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ REACT_APP_API="https://slamdunkwokr.com" -REACT_APP_GOOGLE_ANALYTICS_ID="https://G-N3ZKHWT8S3" \ No newline at end of file +REACT_APP_GOOGLE_ANALYTICS_ID="G-N3ZKHWT8S3" \ No newline at end of file diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 2d07647..41dbc18 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -13,9 +13,7 @@ const RouteChangeTracker = () => { // localhost는 기록하지 않음 useEffect(() => { if (!window.location.href.includes('localhost')) { - ReactGA.initialize( - `${process.env.REACT_APP_GOOGLE_ANALYTICS_TRAKING_ID}` - ); + ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); setInitialized(true); } }, []); @@ -30,7 +28,7 @@ const RouteChangeTracker = () => { // 개발용 useEffect(() => { - ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_TRAKING_ID}`); + ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); ReactGA.set({ page: location.pathname }); ReactGA.send('pageview'); }, [location]); From 43f9e4a0aab7d13b06886795d6438a92d6b3ec0e Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 00:26:50 +0900 Subject: [PATCH 07/72] =?UTF-8?q?feat=20:=20GA=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/global/globalModal/OkrModal.jsx | 7 ++++++- src/index.js | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index c800ea0..f727aa7 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -11,6 +11,7 @@ import calender from '../../../assets/calender.png'; import ColorDropDown from '../globaldropdown/ColorDropDown'; import { OnChange } from '../onChange'; +import ReactGA from 'react-ga4'; import { CreateObjective, CreateKR } from '../../../apis/apiPOST'; import { useMutation, useQueryClient } from '@tanstack/react-query'; @@ -107,7 +108,11 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { queryClient.invalidateQueries(['OKR']); setObjectId(response.objectiveId); onCloseModal(); - console.log('rr', response); + ReactGA.event({ + category: '버튼', + action: '생성', + label: 'Objective', + }); }, onError: response => {}, }); diff --git a/src/index.js b/src/index.js index 3a7919e..6912b31 100644 --- a/src/index.js +++ b/src/index.js @@ -7,9 +7,10 @@ import { BrowserRouter } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ThemeProvider } from 'styled-components'; import theme from './components/global/theme'; +import ReactGA from 'react-ga4'; const queryClient = new QueryClient(); - +ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); const root = ReactDOM.createRoot(document.getElementById('root')); root.render( From e7ade047da4332bea3d841d348f43f58fd08cdec Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 00:43:41 +0900 Subject: [PATCH 08/72] fix : GA setting --- src/components/global/globalModal/OkrModal.jsx | 4 ++-- src/index.js | 1 + src/router/RouteChangeTracker.js | 15 +++------------ 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index f727aa7..c41aec5 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -106,13 +106,13 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: createObjectiveMutate } = useMutation(CreateObjective, { onSuccess: response => { queryClient.invalidateQueries(['OKR']); - setObjectId(response.objectiveId); - onCloseModal(); ReactGA.event({ category: '버튼', action: '생성', label: 'Objective', }); + setObjectId(response.objectiveId); + onCloseModal(); }, onError: response => {}, }); diff --git a/src/index.js b/src/index.js index 6912b31..0b79d75 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,7 @@ import ReactGA from 'react-ga4'; const queryClient = new QueryClient(); ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); + const root = ReactDOM.createRoot(document.getElementById('root')); root.render( diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 41dbc18..de59dd4 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -2,17 +2,13 @@ import { useEffect, useState } from 'react'; import { useLocation } from 'react-router-dom'; import ReactGA from 'react-ga4'; -/** - * uri 변경 추적 컴포넌트 - * uri가 변경될 때마다 pageview 이벤트 전송 - */ const RouteChangeTracker = () => { const location = useLocation(); const [initialized, setInitialized] = useState(false); - // localhost는 기록하지 않음 + // 프로덕션 환경에서만 Google Analytics 이벤트 추적 useEffect(() => { - if (!window.location.href.includes('localhost')) { + if (process.env.NODE_ENV === 'production') { ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); setInitialized(true); } @@ -26,12 +22,7 @@ const RouteChangeTracker = () => { } }, [initialized, location]); - // 개발용 - useEffect(() => { - ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); - ReactGA.set({ page: location.pathname }); - ReactGA.send('pageview'); - }, [location]); + return null; }; export default RouteChangeTracker; From 4a75902e1ea69ffb123f137708fdf144ca4097fe Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 00:56:41 +0900 Subject: [PATCH 09/72] fix : GA setting --- src/components/global/globalModal/OkrModal.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index c41aec5..f187a2e 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -19,6 +19,7 @@ import Toast from '../Toast'; import { toast } from 'react-toastify'; const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { + ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); const queryClient = useQueryClient(); const months = [ '1월', From 6f4ad79c6b9283e5b0e2356609b789e89bd5da38 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 01:07:48 +0900 Subject: [PATCH 10/72] fix : GA setting --- .../global/globalModal/KrPatchModal.jsx | 16 ++++++++++++++++ src/components/global/globalModal/OkrModal.jsx | 1 - 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index e00465e..362812f 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -9,6 +9,7 @@ import { useRecoilValue } from 'recoil'; import { patchKRInfo } from '../../../store/store'; import { DeleteKR } from '../../../apis/apiDELETE'; import { CreateKR } from '../../../apis/apiPOST'; +import ReactGA from 'react-ga4'; const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -35,6 +36,11 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchKRMutate } = useMutation(PatchKR, { onSuccess: response => { + ReactGA.event({ + category: '버튼', + action: '수정', + label: 'KR', + }); queryClient.invalidateQueries(['OKR']); onCloseModal(); }, @@ -55,6 +61,11 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: deleteKR } = useMutation(DeleteKR, { onSuccess: response => { + ReactGA.event({ + category: '버튼', + action: '삭제', + label: 'KR', + }); queryClient.invalidateQueries(['OKR']); onCloseModal(); }, @@ -65,6 +76,11 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: postKR } = useMutation(CreateKR, { onSuccess: response => { + ReactGA.event({ + category: '버튼', + action: '생성', + label: 'KR', + }); queryClient.invalidateQueries(['OKR']); onCloseModal(); }, diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index f187a2e..c41aec5 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -19,7 +19,6 @@ import Toast from '../Toast'; import { toast } from 'react-toastify'; const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { - ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); const queryClient = useQueryClient(); const months = [ '1월', From 4369a15166a7fe1b4fc0d0d8c02de300ae2519ce Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 01:17:19 +0900 Subject: [PATCH 11/72] fix : ga setting --- src/router/RouteChangeTracker.js | 46 ++++++++++++++++---------------- src/router/Router.js | 4 +-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index de59dd4..d15f19f 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -1,28 +1,28 @@ -import { useEffect, useState } from 'react'; -import { useLocation } from 'react-router-dom'; -import ReactGA from 'react-ga4'; +// import { useEffect, useState } from 'react'; +// import { useLocation } from 'react-router-dom'; +// import ReactGA from 'react-ga4'; -const RouteChangeTracker = () => { - const location = useLocation(); - const [initialized, setInitialized] = useState(false); +// const RouteChangeTracker = () => { +// const location = useLocation(); +// const [initialized, setInitialized] = useState(false); - // 프로덕션 환경에서만 Google Analytics 이벤트 추적 - useEffect(() => { - if (process.env.NODE_ENV === 'production') { - ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); - setInitialized(true); - } - }, []); +// // 프로덕션 환경에서만 Google Analytics 이벤트 추적 +// useEffect(() => { +// if (process.env.NODE_ENV === 'production') { +// ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); +// setInitialized(true); +// } +// }, []); - // location 변경 감지시 pageview 이벤트 전송 - useEffect(() => { - if (initialized) { - ReactGA.set({ page: location.pathname }); - ReactGA.send('pageview'); - } - }, [initialized, location]); +// // location 변경 감지시 pageview 이벤트 전송 +// useEffect(() => { +// if (initialized) { +// ReactGA.set({ page: location.pathname }); +// ReactGA.send('pageview'); +// } +// }, [initialized, location]); - return null; -}; +// return null; +// }; -export default RouteChangeTracker; +// export default RouteChangeTracker; diff --git a/src/router/Router.js b/src/router/Router.js index ac52dd5..a35295d 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -5,13 +5,13 @@ import SignUp from '../pages/SignUp'; import Mainpage from '../pages/Mainpage'; import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; -import RouteChangeTracker from './RouteChangeTracker'; +// import RouteChangeTracker from './RouteChangeTracker'; export default function Router() { return (
- + {/* */} } /> } /> From d694aa41aca543e76f31764dd67d0e23f5625c98 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 01:25:30 +0900 Subject: [PATCH 12/72] fix : ga setting --- src/router/RouteChangeTracker.js | 46 ++++++++++++++++---------------- src/router/Router.js | 4 +-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index d15f19f..de59dd4 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -1,28 +1,28 @@ -// import { useEffect, useState } from 'react'; -// import { useLocation } from 'react-router-dom'; -// import ReactGA from 'react-ga4'; +import { useEffect, useState } from 'react'; +import { useLocation } from 'react-router-dom'; +import ReactGA from 'react-ga4'; -// const RouteChangeTracker = () => { -// const location = useLocation(); -// const [initialized, setInitialized] = useState(false); +const RouteChangeTracker = () => { + const location = useLocation(); + const [initialized, setInitialized] = useState(false); -// // 프로덕션 환경에서만 Google Analytics 이벤트 추적 -// useEffect(() => { -// if (process.env.NODE_ENV === 'production') { -// ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); -// setInitialized(true); -// } -// }, []); + // 프로덕션 환경에서만 Google Analytics 이벤트 추적 + useEffect(() => { + if (process.env.NODE_ENV === 'production') { + ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); + setInitialized(true); + } + }, []); -// // location 변경 감지시 pageview 이벤트 전송 -// useEffect(() => { -// if (initialized) { -// ReactGA.set({ page: location.pathname }); -// ReactGA.send('pageview'); -// } -// }, [initialized, location]); + // location 변경 감지시 pageview 이벤트 전송 + useEffect(() => { + if (initialized) { + ReactGA.set({ page: location.pathname }); + ReactGA.send('pageview'); + } + }, [initialized, location]); -// return null; -// }; + return null; +}; -// export default RouteChangeTracker; +export default RouteChangeTracker; diff --git a/src/router/Router.js b/src/router/Router.js index a35295d..ac52dd5 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -5,13 +5,13 @@ import SignUp from '../pages/SignUp'; import Mainpage from '../pages/Mainpage'; import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; -// import RouteChangeTracker from './RouteChangeTracker'; +import RouteChangeTracker from './RouteChangeTracker'; export default function Router() { return (
- {/* */} + } /> } /> From e29994ed8afe8bc9a6e825a4c2a190923a641dd7 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 01:42:25 +0900 Subject: [PATCH 13/72] fix : GA --- src/App.js | 9 +++++++-- .../global/globalModal/KrPatchModal.jsx | 9 +++------ src/components/global/globalModal/OkrModal.jsx | 10 +++++++--- .../global/globalModal/OkrPatchModal.jsx | 15 +++++++++++++-- .../global/globalModal/ProgressPatchModal.jsx | 9 +++++++++ src/components/global/header/Header.jsx | 5 +++++ src/components/signIn/Article.jsx | 5 +++++ src/components/signUp/Article.jsx | 10 +++++++++- src/router/RouteChangeTracker.js | 17 ++--------------- src/router/Router.js | 2 -- 10 files changed, 60 insertions(+), 31 deletions(-) diff --git a/src/App.js b/src/App.js index 8e60fbd..3af0d7d 100644 --- a/src/App.js +++ b/src/App.js @@ -1,7 +1,12 @@ import Router from './router/Router'; - +import RouteChangeTracker from './router/RouteChangeTracker'; function App() { - return ; + return ( + <> + + + + ); } export default App; diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index 362812f..9be301f 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -38,8 +38,7 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { onSuccess: response => { ReactGA.event({ category: '버튼', - action: '수정', - label: 'KR', + action: 'KR 수정', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); @@ -63,8 +62,7 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { onSuccess: response => { ReactGA.event({ category: '버튼', - action: '삭제', - label: 'KR', + action: 'KR 삭제', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); @@ -78,8 +76,7 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { onSuccess: response => { ReactGA.event({ category: '버튼', - action: '생성', - label: 'KR', + action: 'KR 생성', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index c41aec5..b0c7938 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -108,13 +108,17 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { queryClient.invalidateQueries(['OKR']); ReactGA.event({ category: '버튼', - action: '생성', - label: 'Objective', + action: 'Objective 생성', }); setObjectId(response.objectiveId); onCloseModal(); }, - onError: response => {}, + onError: response => { + ReactGA.event({ + category: '버튼', + action: 'Objective 생성 실패', + }); + }, }); return ( diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index d390819..a9cfe3e 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -18,6 +18,7 @@ import { PatchObjective } from '../../../apis/apiPATCH'; import { patchOKRInfo } from '../../../store/store'; import { useRecoilValue } from 'recoil'; import { DeleteObjective } from '../../../apis/apiDELETE'; +import ReactGA from 'react-ga4'; const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -119,19 +120,29 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchObjectivemutate } = useMutation(PatchObjective, { onSuccess: response => { + ReactGA.event({ + category: '버튼', + action: 'Objective 수정', + }); queryClient.invalidateQueries(['OKR']); - console.log('rr', response); onCloseModal(); }, onError: response => { + ReactGA.event({ + category: '버튼', + action: 'Objective 수정 실패', + }); alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); }, }); const { mutate: deleteObjective } = useMutation(DeleteObjective, { onSuccess: response => { + ReactGA.event({ + category: '버튼', + action: 'Objective 삭제', + }); queryClient.invalidateQueries(['OKR']); - console.log(response); onCloseModal(); }, onError: response => { diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index b1b3b2f..fd78238 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -10,6 +10,7 @@ import { import { useRecoilValue } from 'recoil'; import { patchProgressInfo } from '../../../store/store'; import { PatchPersentBox, PesentContainer } from '../../mainpage/OKR.styled'; +import ReactGA from 'react-ga4'; const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -38,6 +39,10 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchObjectMutate } = useMutation(PatchObjectiveProgress, { onSuccess: response => { + ReactGA.event({ + category: '버튼', + action: 'Objective 진척도 수정', + }); queryClient.invalidateQueries(['OKR']); }, onError: response => { @@ -47,6 +52,10 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchKRMutate } = useMutation(PatchKRProgress, { onSuccess: response => { + ReactGA.event({ + category: '버튼', + action: 'KR 진척도 수정', + }); queryClient.invalidateQueries(['OKR']); }, onError: response => { diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 2080f24..3aa685c 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -5,6 +5,7 @@ import logoutON from '../../../assets/logoutoff.png'; import { useNavigate } from 'react-router-dom'; import alarm from '../../../assets/alarm.png'; import user from '../../../assets/user.png'; +import ReactGA from 'react-ga4'; export default function Header() { const navigate = useNavigate(); @@ -33,6 +34,10 @@ export default function Header() { { + ReactGA.event({ + category: '버튼', + action: '로그아웃', + }); navigate('/'); }} /> diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 461e217..e367852 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -5,6 +5,7 @@ import { OnChange } from '../global/onChange'; import { useNavigate } from 'react-router-dom'; import { useMutation } from '@tanstack/react-query'; import { SignIn } from '../../apis/apiPOST'; +import ReactGA from 'react-ga4'; import { MainHeader, ArticleHeader, @@ -82,6 +83,10 @@ const Test = () => { const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { // console.log(response); + ReactGA.event({ + category: '버튼', + action: '로그인', + }); localStorage.setItem('accesstoken', response.accessToken); navigate('/mainpage'); }, diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 0267a59..48a7ec5 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -9,6 +9,7 @@ import { SignUpBtnMargin, SignWrap, } from '../../styles/sign.styled'; +import ReactGA from 'react-ga4'; import Eye from '../../assets/eye.png'; import CloseEye from '../../assets/closedEye.png'; import { OnChange } from '../global/onChange'; @@ -176,10 +177,17 @@ const Test = () => { const [signValidation, setSignValidation] = useState(''); const { mutate: signUpMutate } = useMutation(SignUp, { onSuccess: response => { - // navigate('/signUp'); + ReactGA.event({ + category: '버튼', + action: '회원가입', + }); navigate('/'); }, onError: () => { + ReactGA.event({ + category: '버튼', + action: '회원가입 실패', + }); setSignValidation('이미 존재하는 이메일입니다.'); alert(`${signValidation}`); }, diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index de59dd4..057b13a 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -4,23 +4,10 @@ import ReactGA from 'react-ga4'; const RouteChangeTracker = () => { const location = useLocation(); - const [initialized, setInitialized] = useState(false); - // 프로덕션 환경에서만 Google Analytics 이벤트 추적 useEffect(() => { - if (process.env.NODE_ENV === 'production') { - ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); - setInitialized(true); - } - }, []); - - // location 변경 감지시 pageview 이벤트 전송 - useEffect(() => { - if (initialized) { - ReactGA.set({ page: location.pathname }); - ReactGA.send('pageview'); - } - }, [initialized, location]); + ReactGA.pageview(location.pathname + location.search); + }, [location]); return null; }; diff --git a/src/router/Router.js b/src/router/Router.js index ac52dd5..18106bd 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -5,13 +5,11 @@ import SignUp from '../pages/SignUp'; import Mainpage from '../pages/Mainpage'; import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; -import RouteChangeTracker from './RouteChangeTracker'; export default function Router() { return (
- } /> } /> From ceeefc6e6794c81f8cdca1e813e35f9fa8696a0c Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 02:09:58 +0900 Subject: [PATCH 14/72] fix : ga code --- src/App.js | 3 +-- src/index.js | 12 ++++++++---- src/router/RouteChangeTracker.js | 8 +++++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/App.js b/src/App.js index 3af0d7d..62c7b02 100644 --- a/src/App.js +++ b/src/App.js @@ -1,9 +1,8 @@ import Router from './router/Router'; -import RouteChangeTracker from './router/RouteChangeTracker'; + function App() { return ( <> - ); diff --git a/src/index.js b/src/index.js index 0b79d75..98df41a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,25 +1,29 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import GlobalStyle from './components/global/GlobalStyle'; -import App from './App'; import { RecoilRoot } from 'recoil'; import { BrowserRouter } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ThemeProvider } from 'styled-components'; import theme from './components/global/theme'; -import ReactGA from 'react-ga4'; +import ReactGA4 from 'react-ga4'; +import Router from './router/Router'; +import RouteChangeTracker from './router/RouteChangeTracker'; const queryClient = new QueryClient(); -ReactGA.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); + +ReactGA4.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); const root = ReactDOM.createRoot(document.getElementById('root')); + root.render( - + + diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 057b13a..767c3e8 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -1,12 +1,14 @@ -import { useEffect, useState } from 'react'; +import { useEffect } from 'react'; import { useLocation } from 'react-router-dom'; -import ReactGA from 'react-ga4'; +import ReactGA4 from 'react-ga4'; const RouteChangeTracker = () => { const location = useLocation(); useEffect(() => { - ReactGA.pageview(location.pathname + location.search); + ReactGA4.send('page_view', { + page_path: location.pathname + location.search, + }); }, [location]); return null; From 9eaa4913bbd77f7583b555551e595c2d6874126b Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Tue, 28 Mar 2023 02:26:59 +0900 Subject: [PATCH 15/72] =?UTF-8?q?fix=20:=20=ED=8C=80=20=EC=84=A0=ED=83=9D,?= =?UTF-8?q?=20=ED=98=84=ED=99=A9,=20todo=EC=97=86=EC=9D=84=20=EB=95=8C,=20?= =?UTF-8?q?todo=20=EC=B2=B4=ED=81=AC=20=EB=B3=80=EA=B2=BD=20#87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/globalModal/modal.styled.js | 1 + src/components/mainpage/OKR.styled.js | 2 + src/components/mainpage/TodoItem.jsx | 2 +- src/components/signUp/Article.jsx | 17 +++- src/components/todo/DetailTodoItem.jsx | 58 +++++++------- src/components/todo/FinishTodo.jsx | 77 +++++++++++-------- src/components/todo/PastTodo.jsx | 11 ++- src/components/todo/TeamTodo.jsx | 8 +- src/components/todo/Todo.jsx | 36 +++++---- src/components/todo/TodoNavi.jsx | 18 +++-- src/components/todo/tododetail.styled.js | 16 ++++ 11 files changed, 160 insertions(+), 86 deletions(-) diff --git a/src/components/global/globalModal/modal.styled.js b/src/components/global/globalModal/modal.styled.js index 3fb03ea..73d042f 100644 --- a/src/components/global/globalModal/modal.styled.js +++ b/src/components/global/globalModal/modal.styled.js @@ -386,6 +386,7 @@ export const NotHave = styled.div` color: var(--main-color); font-size: 2rem; font-weight: 500; + /* background-color: pink; */ .btnFlex { ${props => props.theme.row_center} gap: 1rem; diff --git a/src/components/mainpage/OKR.styled.js b/src/components/mainpage/OKR.styled.js index 425ef85..d1199ff 100644 --- a/src/components/mainpage/OKR.styled.js +++ b/src/components/mainpage/OKR.styled.js @@ -37,6 +37,8 @@ export const Header = styled.p` export const OkrContainer = styled.div` margin: 0 auto; + max-height: 485px; + height: 100%; width: 100%; padding: 0 1.2rem; display: flex; diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index e658ca6..050a5c4 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -141,7 +141,7 @@ const TodoItem = ({ getTodo }) => { {todoModalOn ? : null} - {/* */} + ); }; diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 0267a59..2c3f988 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -126,7 +126,7 @@ const Test = () => { // 팀 확인 useEffect(() => { if (userInfo.team === '') { - setTeamMessage('팀을 선택해주세요.'); + setTeamMessage('팀을 입력해주세요.'); setTeamValidation(false); } else { setTeamMessage('팀이 선택되었습니다.'); @@ -179,9 +179,9 @@ const Test = () => { // navigate('/signUp'); navigate('/'); }, - onError: () => { + onError: response => { setSignValidation('이미 존재하는 이메일입니다.'); - alert(`${signValidation}`); + alert(response.response.data); }, }); @@ -270,7 +270,16 @@ const Test = () => { )} - + {/* */} + + { + OnChange(event, userInfo, setUserInfo); + }} + placeholder='팀이름를 입력하세요' + /> + {teamValidation ? null : (

diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index ac0ab4d..7666c33 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { DDay, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; import badgeS from '../../assets/badgeS.png'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; @@ -8,6 +8,7 @@ import yellow from '../../assets/todoYellow.png'; import blue from '../../assets/todoBlue.png'; import { PatchCheck } from '../../apis/apiPATCH'; import { toast } from 'react-toastify'; +import Toast from '../global/Toast'; const DetailTodoItem = ({ el, today, tomorrow }) => { // console.log(new Date('2023-03-14') < new Date('2023-03-15')); @@ -110,34 +111,31 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { }; const FilterMyTodo = ({ pt }) => { + // console.log(pt); // console.log(pt.startDate); - let date = new Date( - `2023-${el.targetDate.substr(0, 2)}-${el.targetDate.substr(4, 2)}` - ); + // let date = new Date( + // `2023-${el.targetDate.substr(0, 2)}-${el.targetDate.substr(4, 2)}` + // ); // console.log(date, ' :::', new Date(pt.startDate)); if (pt.myToDo === true) { -

-
- - <div className='krBox'> - <div className='krTitle'>{pt.toDo}</div> - <div className='krManager'> - <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> + return ( + <div className='item'> + <div className='flexLeft'> + <Title pt={pt} /> + <div className='krBox'> + <div className='krTitle'>{pt.toDo}</div> + <div className='krManager'> + <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> + </div> </div> </div> + <div className='flexRight'> + <Priority pt={pt} /> + <Check pt={pt} /> + </div> </div> - <div className='flexRight'> - <Priority pt={pt} /> - <Check pt={pt} /> - </div> - </div>; - } - // else if (date <= new Date(pt.startDate) === true) { - // return ( - // <div className='notHave'>To Do가 해당 날짜 보다 미래에 있습니다.</div> - // ); - // } - else { + ); + } else { return ( <div className='item'> <div className='flexLeft'> @@ -163,9 +161,9 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { //해당 날짜에 todo가 없을 때 const HavePt = () => { - let date = new Date( - `2023-${el.targetDate.substr(0, 2)}-${el.targetDate.substr(4, 2)}` - ); + // let date = new Date( + // `2023-${el.targetDate.substr(0, 2)}-${el.targetDate.substr(4, 2)}` + // ); if (el.progressTodo.length === 0) { return ( <TodoDetailItem> @@ -185,6 +183,14 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { } }; + // useEffect(() => { + // return ( + // <div className='title' id={el.targetDate}> + // {el.targetDate} + // </div> + // ); + // }, []); + return ( <DDay> <TodoDetailHeader> diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index 34ea400..cfbd931 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -1,11 +1,13 @@ import React, { useState } from 'react'; import { Finsh, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; import badgeS from '../../assets/badgeS.png'; -import { useQuery } from '@tanstack/react-query'; +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { GetPostTodo } from '../../apis/apiGET'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; import blue from '../../assets/todoBlue.png'; +import { PatchCheck } from '../../apis/apiPATCH'; +import { toast } from 'react-toastify'; const FinishTodo = ({ el }) => { const [show, setShow] = useState(true); @@ -25,6 +27,31 @@ const FinishTodo = ({ el }) => { } }; + const queryClient = useQueryClient(); + + const { mutate: patchCheckmutate } = useMutation(PatchCheck, { + onSuccess: response => { + queryClient.invalidateQueries(['ALLTODO']); + queryClient.invalidateQueries(['PASTTODO']); + }, + onError: response => {}, + }); + + const Check = ({ ct }) => { + const onClickCheck = () => { + const id = ct.toDoId; + patchCheckmutate({ id }); + toast('To Do를 수정했습니다.'); + }; + + return ( + <div + className={ct.completion === true ? 'checkbg' : 'check'} + onClick={onClickCheck} + /> + ); + }; + const Title = ({ ct }) => { // console.log(ct); if (ct.color === null) { @@ -42,7 +69,9 @@ const FinishTodo = ({ el }) => { }; const FilterMyTodo = ({ ct }) => { - if (ct.myTodo === true) { + // console.log('ct :', ct); + // console.log(ct.myTodo === true); + if (ct.myToDo === true) { return ( <div className='item'> <div className='flexLeft'> @@ -61,7 +90,7 @@ const FinishTodo = ({ el }) => { </div> <div className='flexRight'> <Priority ct={ct} /> - <div className='checkbg'></div> + <Check ct={ct} /> </div> </div> ); @@ -86,7 +115,7 @@ const FinishTodo = ({ el }) => { </div> <div className='flexRight'> <Priority ct={ct} /> - <div className='checkbg'></div> + <div className='another'></div> </div> </div> ); @@ -102,35 +131,17 @@ const FinishTodo = ({ el }) => { </div> </TodoDetailHeader> - {el.completionTodo.length === 0 - ? null - : el.completionTodo?.map(ct => ( - <TodoDetailItem - key={ct.toDoId} - style={show ? { display: 'flex' } : { display: 'none' }}> - {/* <div className='item'> - <div className='flexLeft'> - <Title ct={ct} /> - <div className='krBox'> - <div className='fKrTitle'>{ct.toDo}</div> - <div className='krManager'> - <div className='fDate'> - {ct.fstartDate} - {ct.startDateTime === '00:00' ? null : ct.startDateTime} - ~ {ct.fendDate} - {ct.endDateTime === '00:00' ? null : ct.endDateTime} - </div> - </div> - </div> - </div> - <div className='flexRight'> - <Priority ct={ct} /> - <div className='checkbg'></div> - </div> - </div> */} - <FilterMyTodo ct={ct} /> - </TodoDetailItem> - ))} + {el.completionTodo.length === 0 ? ( + <div>완료한 리스트가 없습니다.</div> + ) : ( + el.completionTodo?.map(ct => ( + <TodoDetailItem + key={ct.toDoId} + style={show ? { display: 'flex' } : { display: 'none' }}> + <FilterMyTodo ct={ct} /> + </TodoDetailItem> + )) + )} </Finsh> ); }; diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index e1daa22..e406e73 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -12,6 +12,7 @@ import yellow from '../../assets/todoYellow.png'; import blue from '../../assets/todoBlue.png'; import { PatchCheck } from '../../apis/apiPATCH'; import { styled } from 'styled-components'; +import { toast } from 'react-toastify'; const PastTodo = () => { const [show, setShow] = useState(true); @@ -67,13 +68,17 @@ const PastTodo = () => { onSuccess: response => { queryClient.invalidateQueries(['TODO']); queryClient.invalidateQueries(['PASTTODO']); + console.log(response); + }, + onError: response => { + toast(`${response.response.data}`); }, - onError: response => {}, }); const Check = ({ el }) => { const onClickCheck = () => { const id = el.toDoId; + console.log(id); patchCheckmutate({ id }); // toast('할 일을 완료했습니다.'); }; @@ -82,7 +87,7 @@ const PastTodo = () => { }; const FilterMyTodo = ({ el }) => { - // console.log(el); + // console.log(el.myToDo); if (el.myToDo === true) { return ( <div className='item'> @@ -92,7 +97,7 @@ const PastTodo = () => { <div className='krTitle'>{el.toDo}</div> <div className='krManager'> <div className='date'> - {el.fstartDate} {el.fendDate} + {el.fstartDate} ~ {el.fendDate} </div> </div> </div> diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index 4e86185..82a93c6 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -42,9 +42,15 @@ const TeamTodo = () => { <div>나의 팀 To - Do 현황</div> </div> <div className='today'>{today}</div> + {/* <div className='table'> + <div className='cansee'>보이는 사람</div> + <div className='userName'>이름</div> + <div className='haveTodo'>작성한 Todo 개수</div> + </div> */} {getMember?.map(el => ( <div className='member' key={el.userId}> - <div className={el.myInfo === true ? 'have' : 'none'}></div> + {/* <div className={el.myInfo === true ? 'have' : 'none'}></div> */} + <div className='have'></div> <div className='name'>{el.name}</div> <div className='number'>{el.createToDoCount}</div> </div> diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 5d26ad1..545c6d3 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -8,6 +8,7 @@ import PastTodo from './PastTodo'; import TeamTodo from './TeamTodo'; import { DetailTodoWrap, StTeam } from './tododetail.styled'; import TodoNavi from './TodoNavi'; +import Toast from './../global/Toast'; export default function Todo() { //todo 전부 가져오기 @@ -47,28 +48,37 @@ export default function Todo() { return ( <StSticky> - {/* <h2>설정된 To Do가 없습니다.</h2> */} - <TodoDashboard> - <TodoNavi /> - <PastTodo /> - {getAllTodo?.map(el => ( - <DetailTodoWrap key={el.targetDate}> - <DetailTodoItem el={el} today={today} tomorrow={tomorrow} /> - <FinishTodo el={el} /> - </DetailTodoWrap> - ))} - </TodoDashboard> - <TeamTodo /> + {getAllTodo?.length === 0 ? ( + <h2 className='notHave'>설정된 To Do가 없습니다.</h2> + ) : ( + <> + <TodoDashboard> + <TodoNavi todayFormat={today} /> + <PastTodo /> + {getAllTodo?.map(el => ( + <DetailTodoWrap key={el.targetDate}> + <DetailTodoItem el={el} today={today} tomorrow={tomorrow} /> + <FinishTodo el={el} /> + </DetailTodoWrap> + ))} + </TodoDashboard> + <TeamTodo /> + <Toast /> + </> + )} </StSticky> ); } const StSticky = styled.div` display: flex; - h2 { + position: relative; + .notHave { + width: 100%; font-size: 2.4rem; font-weight: 700; color: var(--main-color); + /* background-color: pink; */ } `; diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 244734f..51ff331 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -3,13 +3,15 @@ import React, { useEffect, useState } from 'react'; import { Link } from 'react-scroll'; import { DateNavi, StNavi, TodoHeader } from './tododetail.styled'; -const TodoNavi = () => { +const TodoNavi = ({ todayFormat }) => { + console.log(todayFormat); // console.log(dateId); // console.log(func); const today = new Date(); const yearMonth = `${today.getFullYear()}년 ${today.getMonth() + 1}월`; let date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); + // console.log(date); let makeWeekAll = date => { let day = date.getDay(); @@ -84,8 +86,6 @@ const TodoNavi = () => { const dateM = date.getMonth() + 1; const dateD = date.getDate(); - // console.log(state); - return ( <StNavi> <TodoHeader> @@ -96,8 +96,16 @@ const TodoNavi = () => { <div className='right'> <div className='prev' onClick={onPressArrowLeft} /> <div className='next' onClick={onPressArrowRight} /> - <div className='today'>오늘</div> - <div className='more' /> + {/* <div className='today'>오늘</div> */} + <Link + className='today' + to={todayFormat} + spy={true} + smooth={true} + offset={-500}> + 오늘 + </Link> + {/* <div className='more' /> */} </div> </TodoHeader> <DateNavi> diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 86d1376..5079e0b 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -68,6 +68,7 @@ export const TodoHeader = styled.div` color: #4b4b4b; font-size: 15px; margin-left: 35px; + cursor: pointer; } .more { width: 25px; @@ -299,6 +300,9 @@ export const StTeam = styled.div` margin-left: 28px; position: sticky; top: 0px; + /* position: fixed; + top: 0; + right: 0; */ padding: 24px 15px 15px 15px; box-sizing: border-box; background-color: #fff; @@ -338,6 +342,18 @@ export const StTeam = styled.div` margin-bottom: 10px; font-size: 2rem; } + .table { + width: 100%; + height: 37px; + display: flex; + align-items: center; + justify-content: space-between; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + margin-bottom: 10px; + font-size: 1.4rem; + } .member { width: 100%; height: 37px; From c9f7e21a08a55540d9827fca9315c2163f17dc61 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 02:32:04 +0900 Subject: [PATCH 16/72] fix : ga --- .../global/globalModal/KrPatchModal.jsx | 19 +++++++------- .../global/globalModal/OkrModal.jsx | 13 +++++----- .../global/globalModal/OkrPatchModal.jsx | 25 ++++++++----------- .../global/globalModal/ProgressPatchModal.jsx | 14 +++++------ src/components/signIn/Article.jsx | 11 +++++--- src/components/signUp/Article.jsx | 13 +++++----- src/router/RouteChangeTracker.js | 14 ++++++++--- 7 files changed, 61 insertions(+), 48 deletions(-) diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index 9be301f..8bb0ef9 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -10,6 +10,7 @@ import { patchKRInfo } from '../../../store/store'; import { DeleteKR } from '../../../apis/apiDELETE'; import { CreateKR } from '../../../apis/apiPOST'; import ReactGA from 'react-ga4'; +import { trackEvent } from '../../../router/RouteChangeTracker'; const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -36,9 +37,9 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchKRMutate } = useMutation(PatchKR, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 수정', + trackEvent('click', { + event_category: '버튼', + event_label: 'KR 수정', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); @@ -60,9 +61,9 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: deleteKR } = useMutation(DeleteKR, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 삭제', + trackEvent('click', { + event_category: '버튼', + event_label: 'KR 삭제', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); @@ -74,9 +75,9 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: postKR } = useMutation(CreateKR, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 생성', + trackEvent('click', { + event_category: '버튼', + event_label: 'KR 생성', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index b0c7938..ead3761 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -17,6 +17,7 @@ import { CreateObjective, CreateKR } from '../../../apis/apiPOST'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import Toast from '../Toast'; import { toast } from 'react-toastify'; +import { trackEvent } from '../../../router/RouteChangeTracker'; const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -106,17 +107,17 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: createObjectiveMutate } = useMutation(CreateObjective, { onSuccess: response => { queryClient.invalidateQueries(['OKR']); - ReactGA.event({ - category: '버튼', - action: 'Objective 생성', + trackEvent('click', { + event_category: '버튼', + event_label: 'Objective 생성', }); setObjectId(response.objectiveId); onCloseModal(); }, onError: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 생성 실패', + trackEvent('click', { + event_category: '버튼', + event_label: 'Objective 생성 실패', }); }, }); diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index a9cfe3e..239da37 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -8,7 +8,6 @@ import trash from '../../../assets/trash.png'; import close from '../../../assets/close.png'; import object from '../../../assets/object.png'; import calender from '../../../assets/calender.png'; - import ColorDropDown from '../globaldropdown/ColorDropDown'; import { OnChange } from '../onChange'; import { useMutation, useQueryClient } from '@tanstack/react-query'; @@ -19,6 +18,7 @@ import { patchOKRInfo } from '../../../store/store'; import { useRecoilValue } from 'recoil'; import { DeleteObjective } from '../../../apis/apiDELETE'; import ReactGA from 'react-ga4'; +import { trackEvent } from '../../../router/RouteChangeTracker'; const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -38,10 +38,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { ]; const objectiveInfo = useRecoilValue(patchOKRInfo); - // console.log(objectiveInfo); - // console.log(modalOutSideClick); - // console.log(onCloseModal); - // console.log(modalRef); + console.log(objectiveInfo); const weekDays = ['일', '월', '화', '수', '목', '금', '토']; const format = 'YYYY-MM-DD'; @@ -120,17 +117,17 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchObjectivemutate } = useMutation(PatchObjective, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 수정', + trackEvent('click', { + event_category: '버튼', + event_label: 'Objective 수정', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); }, onError: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 수정 실패', + trackEvent('click', { + event_category: '버튼', + event_label: 'Objective 수정 실패', }); alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); }, @@ -138,9 +135,9 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: deleteObjective } = useMutation(DeleteObjective, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 삭제', + trackEvent('click', { + event_category: '버튼', + event_label: 'Objective 삭제', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index fd78238..968bc79 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -11,7 +11,7 @@ import { useRecoilValue } from 'recoil'; import { patchProgressInfo } from '../../../store/store'; import { PatchPersentBox, PesentContainer } from '../../mainpage/OKR.styled'; import ReactGA from 'react-ga4'; - +import { trackEvent } from '../../../router/RouteChangeTracker'; const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -39,9 +39,9 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchObjectMutate } = useMutation(PatchObjectiveProgress, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 진척도 수정', + trackEvent('click', { + event_category: '버튼', + event_label: 'Objective 진척도 수정', }); queryClient.invalidateQueries(['OKR']); }, @@ -52,9 +52,9 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchKRMutate } = useMutation(PatchKRProgress, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 진척도 수정', + trackEvent('click', { + event_category: '버튼', + event_label: 'KR 진척도 수정', }); queryClient.invalidateQueries(['OKR']); }, diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index e367852..eaea8e7 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -16,6 +16,7 @@ import { HelpBox, SignWrap, } from '../../styles/sign.styled'; +import { trackEvent } from '../../router/RouteChangeTracker'; const Test = () => { const navigate = useNavigate(); @@ -83,14 +84,18 @@ const Test = () => { const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { // console.log(response); - ReactGA.event({ - category: '버튼', - action: '로그인', + trackEvent('click', { + event_category: '버튼', + event_label: '로그인', }); localStorage.setItem('accesstoken', response.accessToken); navigate('/mainpage'); }, onError: () => { + trackEvent('click', { + event_category: '버튼', + event_label: '로그인 실패', + }); setSignValidation('아이디 또는 비밀번호가 올바르지 않습니다.'); alert(`${signValidation}`); }, diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 48a7ec5..fe39630 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -18,6 +18,7 @@ import { useMutation } from '@tanstack/react-query'; import { SignUp } from '../../apis/apiPOST'; import TeamDropDown from '../../components/global/globaldropdown/TeamDropDown.jsx'; import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; +import { trackEvent } from '../../router/RouteChangeTracker'; const Test = () => { const navigate = useNavigate(); @@ -177,16 +178,16 @@ const Test = () => { const [signValidation, setSignValidation] = useState(''); const { mutate: signUpMutate } = useMutation(SignUp, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: '회원가입', + trackEvent('click', { + event_category: '버튼', + event_label: '회원가입', }); navigate('/'); }, onError: () => { - ReactGA.event({ - category: '버튼', - action: '회원가입 실패', + trackEvent('click', { + event_category: '버튼', + event_label: '회원가입 실패', }); setSignValidation('이미 존재하는 이메일입니다.'); alert(`${signValidation}`); diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 767c3e8..138fec1 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -6,12 +6,20 @@ const RouteChangeTracker = () => { const location = useLocation(); useEffect(() => { - ReactGA4.send('page_view', { - page_path: location.pathname + location.search, - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA4.send('page_view', { + page_path: location.pathname + location.search, + }); + } }, [location]); return null; }; +export const trackEvent = (eventName, eventData) => { + if (process.env.NODE_ENV !== 'development') { + ReactGA4.send(eventName, eventData); + } +}; + export default RouteChangeTracker; From c53237af428b87f01a1a045ebd2c4f9d7526aa94 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 02:38:56 +0900 Subject: [PATCH 17/72] fix : eslint error --- src/components/global/globalModal/OkrModal.jsx | 1 - src/components/signUp/Article.jsx | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index d67c808..1d930bc 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -113,7 +113,6 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { }); setObjectId(response.objectiveId); onCloseModal(); - }, onError: response => { trackEvent('click', { diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 77ae4cd..19da6a6 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -185,12 +185,11 @@ const Test = () => { navigate('/'); }, - onError: () => { + onError: response => { trackEvent('click', { event_category: '버튼', event_label: '회원가입 실패', }); - setSignValidation('이미 존재하는 이메일입니다.'); alert(response.response.data); }, From 76b87842f7e524b2dd228a212fc2a79a29df6e7b Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 02:50:35 +0900 Subject: [PATCH 18/72] fix : ga --- src/components/mainpage/OKR.jsx | 2 +- src/index.js | 2 +- src/router/RouteChangeTracker.js | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/mainpage/OKR.jsx b/src/components/mainpage/OKR.jsx index 1ead0c4..3921742 100644 --- a/src/components/mainpage/OKR.jsx +++ b/src/components/mainpage/OKR.jsx @@ -31,7 +31,7 @@ export default function OKR() { /** +버튼 누르면 OKR 생성하는 모달 띄움 */ const createOKR = () => { - if (getOKRData.length < 2) { + if (getOKRData.length < 6) { setOkrModalOn(!okrModalOn); } else { setAlertModalOn(!alertModalOn); diff --git a/src/index.js b/src/index.js index 98df41a..ef07e5e 100644 --- a/src/index.js +++ b/src/index.js @@ -8,7 +8,7 @@ import { ThemeProvider } from 'styled-components'; import theme from './components/global/theme'; import ReactGA4 from 'react-ga4'; import Router from './router/Router'; -import RouteChangeTracker from './router/RouteChangeTracker'; +import { RouteChangeTracker } from './router/RouteChangeTracker'; const queryClient = new QueryClient(); diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 138fec1..1c73ab7 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -2,7 +2,7 @@ import { useEffect } from 'react'; import { useLocation } from 'react-router-dom'; import ReactGA4 from 'react-ga4'; -const RouteChangeTracker = () => { +export const RouteChangeTracker = () => { const location = useLocation(); useEffect(() => { @@ -21,5 +21,3 @@ export const trackEvent = (eventName, eventData) => { ReactGA4.send(eventName, eventData); } }; - -export default RouteChangeTracker; From 63ee8207e4f8544b664f3e4e4117524c2232d6cf Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 03:01:05 +0900 Subject: [PATCH 19/72] fix : ga --- .../global/globalModal/KrPatchModal.jsx | 19 +++++++++--------- .../global/globalModal/OkrModal.jsx | 13 ++++++------ .../global/globalModal/OkrPatchModal.jsx | 20 +++++++++---------- .../global/globalModal/ProgressPatchModal.jsx | 13 ++++++------ src/components/signIn/Article.jsx | 13 ++++++------ src/components/signUp/Article.jsx | 12 +++++------ src/router/RouteChangeTracker.js | 6 ------ 7 files changed, 44 insertions(+), 52 deletions(-) diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index 8bb0ef9..9be301f 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -10,7 +10,6 @@ import { patchKRInfo } from '../../../store/store'; import { DeleteKR } from '../../../apis/apiDELETE'; import { CreateKR } from '../../../apis/apiPOST'; import ReactGA from 'react-ga4'; -import { trackEvent } from '../../../router/RouteChangeTracker'; const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -37,9 +36,9 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchKRMutate } = useMutation(PatchKR, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'KR 수정', + ReactGA.event({ + category: '버튼', + action: 'KR 수정', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); @@ -61,9 +60,9 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: deleteKR } = useMutation(DeleteKR, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'KR 삭제', + ReactGA.event({ + category: '버튼', + action: 'KR 삭제', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); @@ -75,9 +74,9 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: postKR } = useMutation(CreateKR, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'KR 생성', + ReactGA.event({ + category: '버튼', + action: 'KR 생성', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index 1d930bc..b28dfe4 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -17,7 +17,6 @@ import { CreateObjective, CreateKR } from '../../../apis/apiPOST'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import Toast from '../Toast'; import { toast } from 'react-toastify'; -import { trackEvent } from '../../../router/RouteChangeTracker'; const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -107,17 +106,17 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: createObjectiveMutate } = useMutation(CreateObjective, { onSuccess: response => { queryClient.invalidateQueries(['OKR']); - trackEvent('click', { - event_category: '버튼', - event_label: 'Objective 생성', + ReactGA.event({ + category: '버튼', + action: 'Objective 생성', }); setObjectId(response.objectiveId); onCloseModal(); }, onError: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'Objective 생성 실패', + ReactGA.event({ + category: '버튼', + action: 'Objective 생성 실패', }); }, }); diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index 803f91a..acee0e5 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -18,7 +18,6 @@ import { patchOKRInfo } from '../../../store/store'; import { useRecoilValue } from 'recoil'; import { DeleteObjective } from '../../../apis/apiDELETE'; import ReactGA from 'react-ga4'; -import { trackEvent } from '../../../router/RouteChangeTracker'; const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -116,18 +115,18 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchObjectivemutate } = useMutation(PatchObjective, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'Objective 수정', + ReactGA.event({ + category: '버튼', + action: 'Objective 수정', }); queryClient.invalidateQueries(['OKR']); onCloseModal(); }, onError: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'Objective 수정 실패', + ReactGA.event({ + category: '버튼', + action: 'Objective 수정 실패', }); alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); }, @@ -135,10 +134,11 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: deleteObjective } = useMutation(DeleteObjective, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'Objective 삭제', + ReactGA.event({ + category: '버튼', + action: 'Objective 삭제', }); + queryClient.invalidateQueries(['OKR']); onCloseModal(); diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index d0d6a05..0f85cf4 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -39,10 +39,11 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchObjectMutate } = useMutation(PatchObjectiveProgress, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'Objective 진척도 수정', + ReactGA.event({ + category: '버튼', + action: 'Objective 진척도 수정', }); + queryClient.invalidateQueries(['OKR']); }, onError: response => { @@ -52,9 +53,9 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchKRMutate } = useMutation(PatchKRProgress, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: 'KR 진척도 수정', + ReactGA.event({ + category: '버튼', + action: 'KR 진척도 수정', }); queryClient.invalidateQueries(['OKR']); }, diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index eaea8e7..1d7383b 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -16,7 +16,6 @@ import { HelpBox, SignWrap, } from '../../styles/sign.styled'; -import { trackEvent } from '../../router/RouteChangeTracker'; const Test = () => { const navigate = useNavigate(); @@ -84,17 +83,17 @@ const Test = () => { const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { // console.log(response); - trackEvent('click', { - event_category: '버튼', - event_label: '로그인', + ReactGA.event({ + category: '버튼', + action: '로그인', }); localStorage.setItem('accesstoken', response.accessToken); navigate('/mainpage'); }, onError: () => { - trackEvent('click', { - event_category: '버튼', - event_label: '로그인 실패', + ReactGA.event({ + category: '버튼', + action: '로그인 실패', }); setSignValidation('아이디 또는 비밀번호가 올바르지 않습니다.'); alert(`${signValidation}`); diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 19da6a6..9236e2f 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -178,17 +178,17 @@ const Test = () => { const [signValidation, setSignValidation] = useState(''); const { mutate: signUpMutate } = useMutation(SignUp, { onSuccess: response => { - trackEvent('click', { - event_category: '버튼', - event_label: '회원가입', + ReactGA.event({ + category: '버튼', + action: '회원가입', }); navigate('/'); }, onError: response => { - trackEvent('click', { - event_category: '버튼', - event_label: '회원가입 실패', + ReactGA.event({ + category: '버튼', + action: '회원가입 실패', }); setSignValidation('이미 존재하는 이메일입니다.'); alert(response.response.data); diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 1c73ab7..2705e9f 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -15,9 +15,3 @@ export const RouteChangeTracker = () => { return null; }; - -export const trackEvent = (eventName, eventData) => { - if (process.env.NODE_ENV !== 'development') { - ReactGA4.send(eventName, eventData); - } -}; From 1c994c684a2f07bfb53cacaf14747f1697ed596b Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 03:09:20 +0900 Subject: [PATCH 20/72] fix : ga --- .../global/globalModal/KrPatchModal.jsx | 30 +++++++++++-------- .../global/globalModal/OkrModal.jsx | 20 ++++++++----- .../global/globalModal/OkrPatchModal.jsx | 30 +++++++++++-------- .../global/globalModal/ProgressPatchModal.jsx | 20 ++++++++----- src/components/signIn/Article.jsx | 22 ++++++++------ src/components/signUp/Article.jsx | 20 ++++++++----- 6 files changed, 85 insertions(+), 57 deletions(-) diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index 9be301f..eb8347e 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -36,10 +36,12 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchKRMutate } = useMutation(PatchKR, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 수정', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'KR 수정', + }); + } queryClient.invalidateQueries(['OKR']); onCloseModal(); }, @@ -60,10 +62,12 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: deleteKR } = useMutation(DeleteKR, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 삭제', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'KR 삭제', + }); + } queryClient.invalidateQueries(['OKR']); onCloseModal(); }, @@ -74,10 +78,12 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: postKR } = useMutation(CreateKR, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 생성', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'KR 생성', + }); + } queryClient.invalidateQueries(['OKR']); onCloseModal(); }, diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index b28dfe4..254dbc2 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -106,18 +106,22 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: createObjectiveMutate } = useMutation(CreateObjective, { onSuccess: response => { queryClient.invalidateQueries(['OKR']); - ReactGA.event({ - category: '버튼', - action: 'Objective 생성', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'Objective 생성', + }); + } setObjectId(response.objectiveId); onCloseModal(); }, onError: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 생성 실패', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'Objective 생성 실패', + }); + } }, }); diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index acee0e5..d6673c9 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -115,29 +115,35 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: patchObjectivemutate } = useMutation(PatchObjective, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 수정', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'Objective 수정', + }); + } queryClient.invalidateQueries(['OKR']); onCloseModal(); }, onError: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 수정 실패', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'Objective 수정 실패', + }); + } alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); }, }); const { mutate: deleteObjective } = useMutation(DeleteObjective, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 삭제', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'Objective 삭제', + }); + } queryClient.invalidateQueries(['OKR']); diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index 0f85cf4..723888d 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -39,10 +39,12 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchObjectMutate } = useMutation(PatchObjectiveProgress, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'Objective 진척도 수정', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'Objective 진척도 수정', + }); + } queryClient.invalidateQueries(['OKR']); }, @@ -53,10 +55,12 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const { mutate: PatchKRMutate } = useMutation(PatchKRProgress, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: 'KR 진척도 수정', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'KR 진척도 수정', + }); + } queryClient.invalidateQueries(['OKR']); }, onError: response => { diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 1d7383b..54514cd 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -82,19 +82,23 @@ const Test = () => { const [signValidation, setSignValidation] = useState(''); const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { - // console.log(response); - ReactGA.event({ - category: '버튼', - action: '로그인', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: '로그인', + }); + } localStorage.setItem('accesstoken', response.accessToken); navigate('/mainpage'); }, onError: () => { - ReactGA.event({ - category: '버튼', - action: '로그인 실패', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: '로그인 실패', + }); + } + setSignValidation('아이디 또는 비밀번호가 올바르지 않습니다.'); alert(`${signValidation}`); }, diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 9236e2f..d00cd44 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -178,18 +178,22 @@ const Test = () => { const [signValidation, setSignValidation] = useState(''); const { mutate: signUpMutate } = useMutation(SignUp, { onSuccess: response => { - ReactGA.event({ - category: '버튼', - action: '회원가입', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: '회원가입', + }); + } navigate('/'); }, onError: response => { - ReactGA.event({ - category: '버튼', - action: '회원가입 실패', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: '회원가입 실패', + }); + } setSignValidation('이미 존재하는 이메일입니다.'); alert(response.response.data); }, From 1cad02e3c4ca126ee9355571b3042c868f52dd37 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 03:57:54 +0900 Subject: [PATCH 21/72] fix : GA, OKR Scroll, Tab menu --- .../global/globalModal/TodoModal.jsx | 16 ++++++++- .../global/globalModal/TodoPathModal.jsx | 34 +++++++++++++++---- .../global/globaldropdown/Emotion.jsx | 8 ++++- src/components/global/header/Header.jsx | 10 +++--- src/components/mainpage/OKR.jsx | 2 +- src/components/mainpage/OKR.styled.js | 1 + src/components/mainpage/TodoItem.jsx | 7 ++++ src/components/mainpage/menu.styled.js | 13 ++++++- src/components/todo/DetailTodoItem.jsx | 7 ++++ src/components/todo/PastTodo.jsx | 8 ++++- src/components/todo/TeamTodo.jsx | 14 ++------ src/components/todo/Todo.jsx | 8 ++--- src/components/todo/TodoNavi.jsx | 6 +--- src/pages/Mainpage.jsx | 1 + 14 files changed, 97 insertions(+), 38 deletions(-) diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index b9874da..c18906c 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -26,6 +26,7 @@ import { CreateTodo } from '../../../apis/apiPOST'; import { toast } from 'react-toastify'; import Toast from '../Toast'; import { GetOKR } from '../../../apis/apiGET'; +import ReactGA from 'react-ga4'; const TodoModal = ({ onCloseTodoModal, @@ -149,10 +150,23 @@ const TodoModal = ({ const { mutate: createTodo } = useMutation(CreateTodo, { onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 생성', + }); + } queryClient.invalidateQueries(['TODO']); console.log(response); }, - onError: response => {}, + onError: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 생성 실패', + }); + } + }, }); const { data: getOkrData } = useQuery(['getOkr'], GetOKR, { diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 7badf12..4a5cd69 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -24,12 +24,10 @@ import DatePicker, { DateObject } from 'react-multi-date-picker'; import TimePicker from 'react-multi-date-picker/plugins/time_picker'; import transition from 'react-element-popper/animations/transition'; import opacity from 'react-element-popper/animations/opacity'; -import { OnChange } from '../onChange'; -import PriorityDropDown from '../globaldropdown/PriorityDropDown'; -import Toast from '../Toast'; import { toast } from 'react-toastify'; import PatchPriority from './../globaldropdown/PatchPriority'; import { DeleteTodo } from '../../../apis/apiDELETE'; +import ReactGA from 'react-ga4'; const TodoPathModal = ({ onCloseModal }) => { useEffect(() => { @@ -151,15 +149,25 @@ const TodoPathModal = ({ onCloseModal }) => { const { mutate: patchTodo } = useMutation(PatchTodo, { onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 수정', + }); + } queryClient.invalidateQueries(['TODO']); console.log('response :', response); }, - onError: response => {}, + onError: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 수정 실패', + }); + } + }, }); - // const [oid, setOid] = useState(0); - // const [kid, setKid] = useState(0); - const patchT = () => { const startd = new Date(title.startDate); const endd = new Date(title.endDate); @@ -195,11 +203,23 @@ const TodoPathModal = ({ onCloseModal }) => { const { mutate: deleteTodo } = useMutation(DeleteTodo, { onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 삭제', + }); + } queryClient.invalidateQueries(['TODO']); onCloseModal(); toast('해당 To Do가 삭제가 완료되었습니다.'); }, onError: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 삭제 실패', + }); + } alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); }, }); diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index 26bd0d7..572d89d 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -3,7 +3,7 @@ import { emotion, useEmotionDropDown } from './dropdown'; import { EmotionSelect } from './dropDown.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { PatchEmotion } from '../../../apis/apiPATCH'; - +import ReactGA from 'react-ga4'; import normal from '../../../assets/normal2.png'; import good from '../../../assets/good.png'; import bad from '../../../assets/bad2.png'; @@ -20,6 +20,12 @@ const Emotion = ({ const { mutate: patchEmotionmutate } = useMutation(PatchEmotion, { onSuccess: response => { queryClient.invalidateQueries(['OKR']); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: '자신감 수정', + }); + } }, onError: response => { alert('팀장 및 자신이 작성한 OKR만 수정 가능합니다.'); diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 3aa685c..600cafb 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -34,10 +34,12 @@ export default function Header() { <Layout> <LogoImg onClick={() => { - ReactGA.event({ - category: '버튼', - action: '로그아웃', - }); + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: '로그아웃', + }); + } navigate('/'); }} /> diff --git a/src/components/mainpage/OKR.jsx b/src/components/mainpage/OKR.jsx index 3921742..cb47a81 100644 --- a/src/components/mainpage/OKR.jsx +++ b/src/components/mainpage/OKR.jsx @@ -31,7 +31,7 @@ export default function OKR() { /** +버튼 누르면 OKR 생성하는 모달 띄움 */ const createOKR = () => { - if (getOKRData.length < 6) { + if (getOKRData.length < 4) { setOkrModalOn(!okrModalOn); } else { setAlertModalOn(!alertModalOn); diff --git a/src/components/mainpage/OKR.styled.js b/src/components/mainpage/OKR.styled.js index d1199ff..9f2df6f 100644 --- a/src/components/mainpage/OKR.styled.js +++ b/src/components/mainpage/OKR.styled.js @@ -40,6 +40,7 @@ export const OkrContainer = styled.div` max-height: 485px; height: 100%; width: 100%; + overflow: auto; padding: 0 1.2rem; display: flex; flex-direction: column; diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index 050a5c4..3b2747d 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -12,6 +12,7 @@ import { useSetRecoilState } from 'recoil'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; import Todo from './../todo/Todo'; +import ReactGA from 'react-ga4'; const TodoItem = ({ getTodo }) => { const queryClient = useQueryClient(); @@ -44,6 +45,12 @@ const TodoItem = ({ getTodo }) => { // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 완료', + }); + } queryClient.invalidateQueries(['TODO']); }, onError: response => {}, diff --git a/src/components/mainpage/menu.styled.js b/src/components/mainpage/menu.styled.js index 7d5ce7a..2597eae 100644 --- a/src/components/mainpage/menu.styled.js +++ b/src/components/mainpage/menu.styled.js @@ -27,9 +27,20 @@ export const MenuItem = styled.button` border-radius: 0 7px 7px 0; padding: 0 2rem 0 0; line-height: 4.5rem; - color: #4b4b4b; + color: ${({ text }) => + `${ + text === 'All OKR' + ? '#DEDEDE' + : text === 'TEAM OKR' + ? '#DEDEDE' + : text === 'Calendar' + ? '#DEDEDE' + : '#4b4b4b' + }`}; &.active { color: #fff; background-color: var(--main-color); } `; +// #DEDEDE +// #4b4b4b; diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 7666c33..bb30095 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -9,6 +9,7 @@ import blue from '../../assets/todoBlue.png'; import { PatchCheck } from '../../apis/apiPATCH'; import { toast } from 'react-toastify'; import Toast from '../global/Toast'; +import ReactGA from 'react-ga4'; const DetailTodoItem = ({ el, today, tomorrow }) => { // console.log(new Date('2023-03-14') < new Date('2023-03-15')); @@ -45,6 +46,12 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { const { mutate: patchCheckmutate } = useMutation(PatchCheck, { onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 완료', + }); + } queryClient.invalidateQueries(['ALLTODO']); queryClient.invalidateQueries(['PASTTODO']); }, diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index e406e73..a59434f 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -13,6 +13,7 @@ import blue from '../../assets/todoBlue.png'; import { PatchCheck } from '../../apis/apiPATCH'; import { styled } from 'styled-components'; import { toast } from 'react-toastify'; +import ReactGA from 'react-ga4'; const PastTodo = () => { const [show, setShow] = useState(true); @@ -66,6 +67,12 @@ const PastTodo = () => { const { mutate: patchCheckmutate } = useMutation(PatchCheck, { onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 완료', + }); + } queryClient.invalidateQueries(['TODO']); queryClient.invalidateQueries(['PASTTODO']); console.log(response); @@ -80,7 +87,6 @@ const PastTodo = () => { const id = el.toDoId; console.log(id); patchCheckmutate({ id }); - // toast('할 일을 완료했습니다.'); }; return <div className='check' onClick={onClickCheck} />; diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index 82a93c6..eb72b3b 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -6,12 +6,8 @@ import { GetUser } from '../../apis/apiGET'; const TeamTodo = () => { const { data: getMember } = useQuery(['MEMBER'], GetUser, { - onSuccess: response => { - // console.log('user :', response); - }, - onError: response => { - // console.log(response); - }, + onSuccess: response => {}, + onError: response => {}, }); const defaultDay = new Date().getDay(); @@ -42,11 +38,7 @@ const TeamTodo = () => { <div>나의 팀 To - Do 현황</div> </div> <div className='today'>{today}</div> - {/* <div className='table'> - <div className='cansee'>보이는 사람</div> - <div className='userName'>이름</div> - <div className='haveTodo'>작성한 Todo 개수</div> - </div> */} + {getMember?.map(el => ( <div className='member' key={el.userId}> {/* <div className={el.myInfo === true ? 'have' : 'none'}></div> */} diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 545c6d3..b0801bb 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -13,12 +13,8 @@ import Toast from './../global/Toast'; export default function Todo() { //todo 전부 가져오기 const { data: getAllTodo } = useQuery(['ALLTODO'], GetAllTodo, { - onSuccess: response => { - console.log('todo :', response); - }, - onError: response => { - // console.log(response.response.data); - }, + onSuccess: response => {}, + onError: response => {}, }); const now = new Date(); diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 51ff331..89187c6 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -1,17 +1,13 @@ -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import { Link } from 'react-scroll'; import { DateNavi, StNavi, TodoHeader } from './tododetail.styled'; const TodoNavi = ({ todayFormat }) => { - console.log(todayFormat); - // console.log(dateId); - // console.log(func); const today = new Date(); const yearMonth = `${today.getFullYear()}년 ${today.getMonth() + 1}월`; let date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); - // console.log(date); let makeWeekAll = date => { let day = date.getDay(); diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 3ca6f5b..5c63c58 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -56,6 +56,7 @@ export default function Mainpage() { {menuList.map((text, i) => { return ( <MenuItem + text={text} key={i} onClick={clickNowPage} name={text} From aad5de89845ca9ee2c79a51d201798e329ff0eb4 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 04:00:10 +0900 Subject: [PATCH 22/72] fix : favicon --- public/favicon.png | Bin 0 -> 44178 bytes public/index.html | 31 +++++++++++++++---------------- public/projectFavicon.png | Bin 16196 -> 0 bytes 3 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 public/favicon.png delete mode 100644 public/projectFavicon.png diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3d076c2ade9a96c4a0b94aabfe2241e981c116aa GIT binary patch literal 44178 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 literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html index 2d3dfaf..f890e52 100644 --- a/public/index.html +++ b/public/index.html @@ -1,21 +1,20 @@ <!DOCTYPE html> <html lang="en" style="font-size: 62.5%"> - <!-- 1rem = 10px --> +<!-- 1rem = 10px --> - <head> - <meta charset="utf-8" /> - <link rel="icon" href="%PUBLIC_URL%/projectFavicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <meta name="theme-color" content="#000000" /> - <meta - name="description" - content="Web site created using create-react-app" /> +<head> + <meta charset="utf-8" /> + <link rel="icon" href="%PUBLIC_URL%/favicon.png" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="theme-color" content="#000000" /> + <meta name="description" content="Web site created using create-react-app" /> - <title>WOKR - + WOKR + - -
-
- - + +
+
+ + + \ No newline at end of file diff --git a/public/projectFavicon.png b/public/projectFavicon.png deleted file mode 100644 index 5316f431480d76fb333fda6ff4e1b1181e0f0a13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16196 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 Date: Tue, 28 Mar 2023 11:52:08 +0900 Subject: [PATCH 23/72] fix : GA add --- public/index.html | 31 +++++++++++++------------ src/components/global/header/Header.jsx | 17 ++++++++------ 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/public/index.html b/public/index.html index f890e52..ff199a2 100644 --- a/public/index.html +++ b/public/index.html @@ -1,20 +1,21 @@ - + - - - - - - + + + + + + - WOKR - + WOKR + - -
-
- - - \ No newline at end of file + +
+
+ + diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 600cafb..e12c074 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -30,17 +30,20 @@ export default function Header() { setLogoutImg(logoutON); }; + const logout = () => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: '로그아웃', + }); + } + navigate('/'); + }; return ( { - if (process.env.NODE_ENV !== 'development') { - ReactGA.event({ - category: '버튼', - action: '로그아웃', - }); - } - navigate('/'); + logout(); }} /> {userState !== null || undefined ? ( From 2ff3288d3747f7772ad173591fce312a0c3549fb Mon Sep 17 00:00:00 2001 From: Byeong Min Cho Date: Tue, 28 Mar 2023 18:18:41 +0900 Subject: [PATCH 24/72] =?UTF-8?q?feat=20:=20guide=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?cursor=20=EB=B3=80=EA=B2=BD,=20hover=20=EB=B3=80=EA=B2=BD=20#90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/globalModal/KrPatchModal.jsx | 11 +++++----- .../global/globalModal/OkrPatchModal.jsx | 7 +----- .../global/globalModal/ProgressPatchModal.jsx | 2 -- src/components/global/header/Header.jsx | 22 +++++++++++++------ src/components/global/header/header.styled.js | 15 +++++++++++++ src/components/mainpage/Calendar.styled.js | 1 + src/components/mainpage/OKR.styled.js | 1 + src/components/mainpage/menu.styled.js | 4 ++++ src/components/mainpage/todo.styled.js | 16 -------------- 9 files changed, 43 insertions(+), 36 deletions(-) diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index eb8347e..50b8524 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -15,7 +15,6 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); const krInfo = useRecoilValue(patchKRInfo); - // console.log(krInfo); // 모달 스크롤 방지 useEffect(() => { @@ -46,7 +45,11 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { onCloseModal(); }, onError: response => { - alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); + if (response.response.data === '입력된 핵심결과 없습니다.') { + alert('입력된 KR 내용이 없습니다.'); + } else { + alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); + } }, }); @@ -91,7 +94,6 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); }, }); - // console.log(krInfo); const createKr = () => { if (krInfo.state === 'patch') { @@ -110,11 +112,10 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const deleteKr = () => { const result = window.confirm(`|KR - 핵심결과]와 연동된 To-Do가 있다면 연동 해제됩니다. - \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0정말 삭제하시겠습니까?`); + 정말 삭제하시겠습니까?`); if (result) { deleteKR(krInfo.id); } else { - // 취소 버튼을 클릭한 경우, 여기에 로직을 작성합니다. } }; diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index d6673c9..434bb63 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -72,10 +72,6 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const convertStart = (date, format = startDate.format) => { let object = { date, format }; setStartDate(new DateObject(object).format()); - // console.log(startDate); - // console.log(typeof startDate); - // console.log(objectiveInfo.startData); - // console.log(typeof objectiveInfo.startData); setObjInfo({ ...objInfo, startdate: new DateObject(object).format() }); }; @@ -108,7 +104,6 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { setObjInfo({ ...objInfo, color: '#9B9B9B' }); toast('색상을 선택하지 않으면 회색이 기본입니다.'); } else { - // console.log('성공'); patchObjectivemutate({ value, id }); } }; @@ -157,7 +152,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const onDeleteObjective = () => { const result = window.confirm(`|KR - 핵심결과]와 연동된 To-Do가 있다면 연동 해제됩니다. - \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0정말 삭제하시겠습니까?`); + 정말 삭제하시겠습니까?`); if (result) { deleteObjective(objectiveInfo.id); } else { diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index 723888d..6a6550a 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -16,7 +16,6 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); const progressInfo = useRecoilValue(patchProgressInfo); - // console.log(progressInfo); const [rangeInfo, setRangeInfo] = useState({ progress: progressInfo.value }); @@ -82,7 +81,6 @@ const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { }; const onChangeProgress = e => { - // console.log(e.target.value); setRangeInfo({ progress: e.target.value }); }; diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index e12c074..8a9cf12 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react'; -import { Layout, LogoImg } from './header.styled'; +import { Guide, Layout, LogoImg } from './header.styled'; import logoutOFF from '../../../assets/logouton.png'; import logoutON from '../../../assets/logoutoff.png'; import { useNavigate } from 'react-router-dom'; @@ -46,9 +46,17 @@ export default function Header() { logout(); }} /> - {userState !== null || undefined ? ( - <> -
+
+ { + window.open( + 'https://wokrguide.notion.site/WOKR-efb64b5da5e842a3a10d7844023e60de' + ); + }}> + 사용 가이드 + + {userState !== null || undefined ? ( + <> -
- - ) : null} + + ) : null} +
); } diff --git a/src/components/global/header/header.styled.js b/src/components/global/header/header.styled.js index 2e4dbaa..030e9a9 100644 --- a/src/components/global/header/header.styled.js +++ b/src/components/global/header/header.styled.js @@ -19,6 +19,21 @@ export const Layout = styled.div` } `; +export const Guide = styled.div` + width: 130px; + height: 45px; + background-color: #fe8140; + align-items: center; + border-radius: 30px; + justify-content: center; + color: white; + font-size: 18px; + cursor: pointer; + :hover { + background-color: #fe6444; + } +`; + export const LogoImg = styled.div` width: 10.5rem; height: 4.5rem; diff --git a/src/components/mainpage/Calendar.styled.js b/src/components/mainpage/Calendar.styled.js index bb526b4..58e11d6 100644 --- a/src/components/mainpage/Calendar.styled.js +++ b/src/components/mainpage/Calendar.styled.js @@ -4,4 +4,5 @@ export const Container = styled.div` width: 100%; margin-top: 30px; /* margin-left: 20px; */ + cursor: default; `; diff --git a/src/components/mainpage/OKR.styled.js b/src/components/mainpage/OKR.styled.js index 9f2df6f..fa23158 100644 --- a/src/components/mainpage/OKR.styled.js +++ b/src/components/mainpage/OKR.styled.js @@ -93,6 +93,7 @@ export const Objective = styled.div` font-size: 12.5px; margin-left: 15px; color: #4b4b4b; + cursor: default; } } .Range { diff --git a/src/components/mainpage/menu.styled.js b/src/components/mainpage/menu.styled.js index 2597eae..0cdb137 100644 --- a/src/components/mainpage/menu.styled.js +++ b/src/components/mainpage/menu.styled.js @@ -41,6 +41,10 @@ export const MenuItem = styled.button` color: #fff; background-color: var(--main-color); } + &:hover { + background-color: var(--main-color); + color: white; + } `; // #DEDEDE // #4b4b4b; diff --git a/src/components/mainpage/todo.styled.js b/src/components/mainpage/todo.styled.js index 4a3b60e..bf0446f 100644 --- a/src/components/mainpage/todo.styled.js +++ b/src/components/mainpage/todo.styled.js @@ -37,29 +37,18 @@ export const Header = styled.p` export const TodoContainer = styled.div` margin: 0 auto; - /* width: 73.4rem; */ max-width: 68.2rem; - /* min-width: 45.2rem; */ width: 100%; max-height: 485px; height: 100%; overflow-y: auto; padding: 0 1.2rem; - /* height: 48.3rem; */ - /* display: flex; */ - /* flex-direction: column; */ - /* justify-content: space-between; */ box-sizing: border-box; - /* background-color: pink; */ `; export const StTodoItem = styled.div` width: 100%; height: 5.3rem; - - /* :nth-last-child(1) { - border-bottom: 1px solid #000; - } */ .todo { width: 100%; height: 100%; @@ -75,8 +64,6 @@ export const StTodoItem = styled.div` } .title { width: 43px; - /* height: 19px; */ - /* background-color: skyblue; */ text-align: center; color: #9b9b9b; font-size: 14px; @@ -84,15 +71,12 @@ export const StTodoItem = styled.div` margin-right: 31px; } .detail { - /* width: calc(100% - 80px); */ width: 100%; height: 100%; display: flex; justify-content: space-between; box-sizing: border-box; padding: 3px 0 5px 0; - /* background-color: pink; */ - /* background-color: #fff; */ .name_date { display: flex; flex-direction: column; From 7f09ec9daa45c695cc9670bb200da065300d4c0c Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Tue, 28 Mar 2023 18:38:54 +0900 Subject: [PATCH 25/72] =?UTF-8?q?fix=20:=20cursor=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?memo=20title=EB=A1=9C=20=EB=B3=B4=EC=97=AC=EC=A3=BC=EA=B8=B0,?= =?UTF-8?q?=20todo=20=EA=B8=B0=EA=B0=84=20=EB=A7=8C=EB=A3=8C=20=EB=B3=B4?= =?UTF-8?q?=EC=97=AC=EC=A3=BC=EA=B8=B0=20,=20todo=20toast=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC,=20=EC=A3=BC=EA=B0=84=EB=8B=AC=EB=A0=A5=20=EC=98=A4?= =?UTF-8?q?=EB=8A=98=20=ED=99=9C=EC=84=B1=ED=99=94=20#87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiGET.js | 5 +++ .../global/globalModal/TodoModal.jsx | 8 ++-- src/components/mainpage/TodoItem.jsx | 42 ++++++++++++++++--- src/components/mainpage/todo.styled.js | 31 +++++++++++++- src/components/todo/DetailTodoItem.jsx | 4 +- src/components/todo/FinishTodo.jsx | 6 +-- src/components/todo/PastTodo.jsx | 6 +-- src/components/todo/tododetail.styled.js | 9 +++- 8 files changed, 91 insertions(+), 20 deletions(-) diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 6ae557c..5bd0db7 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -52,3 +52,8 @@ export async function GetInfinityTodo(page) { const { data } = await api.get(`api/todo/progress?page=${page}`); return data; } + +export async function GetCompletionTodo() { + const { data } = await api.get(`api/todo/completion`); + return data; +} diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index c18906c..32f2af4 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -157,7 +157,8 @@ const TodoModal = ({ }); } queryClient.invalidateQueries(['TODO']); - console.log(response); + toast('TODO가 생성되었습니다.'); + // console.log(response); }, onError: response => { if (process.env.NODE_ENV !== 'development') { @@ -205,7 +206,6 @@ const TodoModal = ({ let Oid = oid; let Kid = kid; let Info = todoInfo; - // console.log(Oid, Kid, Info); createTodo({ Oid, Kid, Info }); onCloseTodoModal(); } @@ -247,7 +247,7 @@ const TodoModal = ({ { @@ -423,7 +423,7 @@ const TodoModal = ({ 저장
- + {/* */}
); diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index 3b2747d..3c9e3d3 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -1,6 +1,6 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import React, { useEffect, useRef, useState } from 'react'; -import { GetOKR, GetTodo } from '../../apis/apiGET'; +import { GetCompletionTodo, GetOKR, GetTodo } from '../../apis/apiGET'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; import blue from '../../assets/todoBlue.png'; @@ -52,6 +52,7 @@ const TodoItem = ({ getTodo }) => { }); } queryClient.invalidateQueries(['TODO']); + queryClient.invalidateQueries(['completionTodo']); }, onError: response => {}, }); @@ -110,17 +111,28 @@ const TodoItem = ({ getTodo }) => { }); setTodoModalOn(!todoModalOn); }; + console.log(filterArray); + const { data: getCompletionTodo } = useQuery( + ['completionTodo'], + GetCompletionTodo, + { + onSuccess: response => { + console.log('getCompletionTodo :', response); + }, + onError: response => {}, + } + ); return ( <> - {filterArray?.map((el, index) => ( -
+ {filterArray?.map(el => ( +
{el.keyResultId === null ? 'none' : `KR${el.krNumber}`}
{ patchTodo( el.toDoId, @@ -133,7 +145,7 @@ const TodoItem = ({ getTodo }) => { el.priority ); }}> -
{el.toDo}
+
{el.toDo}

{el.fstartDate}~{el.fendDate} 까지

@@ -145,6 +157,26 @@ const TodoItem = ({ getTodo }) => {
))} + {getCompletionTodo?.map(el => ( +
+
+ {el.keyResultId === null ? 'none' : `KR${el.krNumber}`} +
+
+
+
{el.toDo}
+

+ {/* {el.fstartDate}~{el.fendDate} 까지 */} + {el.fendDate} 완료 +

+
+
+ +
+
+
+
+ ))} {todoModalOn ? : null} diff --git a/src/components/mainpage/todo.styled.js b/src/components/mainpage/todo.styled.js index 4a3b60e..e09bdda 100644 --- a/src/components/mainpage/todo.styled.js +++ b/src/components/mainpage/todo.styled.js @@ -1,4 +1,5 @@ import styled from 'styled-components'; +import checkicon from '../../assets/checkFull.png'; export const Container = styled.div` width: 100%; @@ -33,6 +34,7 @@ export const Header = styled.p` font-weight: 500; color: #4b4b4b; margin: 0; + cursor: default; `; export const TodoContainer = styled.div` @@ -82,6 +84,7 @@ export const StTodoItem = styled.div` font-size: 14px; font-weight: 700; margin-right: 31px; + cursor: default; } .detail { /* width: calc(100% - 80px); */ @@ -93,7 +96,7 @@ export const StTodoItem = styled.div` padding: 3px 0 5px 0; /* background-color: pink; */ /* background-color: #fff; */ - .name_date { + .nameDate { display: flex; flex-direction: column; justify-content: space-between; @@ -101,6 +104,24 @@ export const StTodoItem = styled.div` font-weight: bold; color: #4b4b4b; font-weight: 500; + cursor: pointer; + div { + font-size: 19px; + } + p { + margin: 0; + font-size: 12.5px; + } + } + .nameDateComplitc { + display: flex; + flex-direction: column; + justify-content: space-between; + font-size: 15px; + font-weight: bold; + color: #4b4b4b; + font-weight: 500; + cursor: default; div { font-size: 19px; } @@ -126,6 +147,7 @@ export const StTodoItem = styled.div` border-radius: 50%; background-color: #ccc; position: relative; + cursor: pointer; img { position: absolute; top: 50%; @@ -133,6 +155,13 @@ export const StTodoItem = styled.div` transform: translate(-50%, -50%); } } + .completion { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #e8e8e8; + background: url(${checkicon}) no-repeat center / 100%; + } } } } diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index bb30095..20de63f 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -129,7 +129,7 @@ const DetailTodoItem = ({ el, today, tomorrow }) => {
- <div className='krBox'> + <div className='krBox' title={pt.memo}> <div className='krTitle'>{pt.toDo}</div> <div className='krManager'> <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> @@ -147,7 +147,7 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { <div className='item'> <div className='flexLeft'> <Title pt={pt} /> - <div className='krBox'> + <div className='krBox' title={pt.memo}> <div className='krTitle'>{pt.toDo}</div> <div className='krManager'> <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index cfbd931..49420fe 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -41,7 +41,7 @@ const FinishTodo = ({ el }) => { const onClickCheck = () => { const id = ct.toDoId; patchCheckmutate({ id }); - toast('To Do를 수정했습니다.'); + toast('To Do의 완료를 수정했습니다.'); }; return ( @@ -76,7 +76,7 @@ const FinishTodo = ({ el }) => { <div className='item'> <div className='flexLeft'> <Title ct={ct} /> - <div className='krBox'> + <div className='krBox' title={ct.memo}> <div className='fKrTitle'>{ct.toDo}</div> <div className='krManager'> <div className='fDate'> @@ -99,7 +99,7 @@ const FinishTodo = ({ el }) => { <div className='item'> <div className='flexLeft'> <Title ct={ct} /> - <div className='krBox'> + <div className='krBox' title={ct.memo}> <div className='fKrTitle'>{ct.toDo}</div> <div className='krManager'> <div className='fDate'> diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index a59434f..c5f6c0f 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -75,7 +75,7 @@ const PastTodo = () => { } queryClient.invalidateQueries(['TODO']); queryClient.invalidateQueries(['PASTTODO']); - console.log(response); + toast('TODO를 완료했습니다'); }, onError: response => { toast(`${response.response.data}`); @@ -99,7 +99,7 @@ const PastTodo = () => { <div className='item'> <div className='flexLeft'> <Title el={el} /> - <div className='krBox'> + <div className='krBox' title={el.memo}> <div className='krTitle'>{el.toDo}</div> <div className='krManager'> <div className='date'> @@ -119,7 +119,7 @@ const PastTodo = () => { <div className='item'> <div className='flexLeft'> <Title el={el} /> - <div className='krBox'> + <div className='krBox' title={el.memo}> <div className='krTitle'>{el.toDo}</div> <div className='krManager'> <div className='date'> diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 5079e0b..fdd7568 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -135,6 +135,7 @@ export const TodoDetailHeader = styled.div` /* margin-bottom: 10.5px; */ padding-bottom: 10.5px; box-sizing: content-box; + cursor: default; .down { width: 13px; height: 7px; @@ -162,6 +163,7 @@ export const TodoDetailItem = styled.div` display: flex; flex-direction: column; background-color: #fff; + cursor: default; /* background-color: pink; */ /* box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); */ @@ -179,14 +181,15 @@ export const TodoDetailItem = styled.div` .notHave { display: flex; align-items: center; - justify-content: center; + justify-content: start; margin-bottom: 10px; - background-color: #f8f8f8; + background-color: #e2e2e2; border-radius: 8px; padding: 0 19px 0 17px; margin-bottom: 10px; font-size: 2rem; height: 45px; + color: #9b9b9b !important; } .dayLine { /* border-bottom: 2px solid #e8e8e8; */ @@ -263,6 +266,7 @@ export const TodoDetailItem = styled.div` border-radius: 50%; background-color: #e8e8e8; margin-left: 21px; + cursor: pointer; } .checkbg { width: 30px; @@ -271,6 +275,7 @@ export const TodoDetailItem = styled.div` background-color: #e8e8e8; margin-left: 21px; background: url(${checkicon}) no-repeat center / 100%; + cursor: pointer; } .another { width: 30px; From 4df34b544c30e30de0ead0c8270d3d09f8dc10fa Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 20:21:03 +0900 Subject: [PATCH 26/72] =?UTF-8?q?fix=20:=20alltodo=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/globalModal/TodoPathModal.jsx | 3 + src/components/mainpage/Calendar.jsx | 22 ---- src/components/todo/DetailTodoItem.jsx | 120 +++++++++++------- src/components/todo/PastTodo.jsx | 57 ++++++++- src/components/todo/tododetail.styled.js | 1 + 5 files changed, 131 insertions(+), 72 deletions(-) diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 4a5cd69..b449fa4 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -156,6 +156,8 @@ const TodoPathModal = ({ onCloseModal }) => { }); } queryClient.invalidateQueries(['TODO']); + queryClient.invalidateQueries(['ALLTODO']); + queryClient.invalidateQueries(['PASTTODO']); console.log('response :', response); }, onError: response => { @@ -210,6 +212,7 @@ const TodoPathModal = ({ onCloseModal }) => { }); } queryClient.invalidateQueries(['TODO']); + queryClient.invalidateQueries(['ALLTODO']); onCloseModal(); toast('해당 To Do가 삭제가 완료되었습니다.'); }, diff --git a/src/components/mainpage/Calendar.jsx b/src/components/mainpage/Calendar.jsx index d974862..e84e192 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/mainpage/Calendar.jsx @@ -36,9 +36,6 @@ export default function Calendar() { initialView='dayGridMonth' dayMaxEvents={true} locale='ko' - // navLinks={true} - // showNonCurrentDates={false} - // allDaySlot={true} views={{ listDay: { buttonText: 'list day' }, listWeek: { buttonText: 'list week' }, @@ -48,26 +45,7 @@ export default function Calendar() { left: 'prev', center: 'title', right: 'next', - // ,'timeGridWeek','timeGridDay' - // end: 'listMonth,listWeek, listDay,listYear', }} - // headerToolbar={{ - // start: 'dayGridMonth,timeGridWeek,timeGridDay custom1', - // center: 'title', - // end: 'custom2 prevYear,prev,next,nextYear', - // }} - // buttonText={{ - // today: 'today', - // month: 'month', - // week: 'week', - // day: 'day', - // list: 'list', - // }} - // views={{ - // listDay: { buttonText: 'Day' }, - // listWeek: { buttonText: 'Week' }, - // listMonth: { buttonText: 'Month' }, - // }} events={calendarData} /> </Container> diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 20de63f..4943603 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -1,33 +1,19 @@ -import React, { useEffect } from 'react'; +import React, { useState } from 'react'; import { DDay, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; import badgeS from '../../assets/badgeS.png'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { GetAllTodo } from '../../apis/apiGET'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; import blue from '../../assets/todoBlue.png'; import { PatchCheck } from '../../apis/apiPATCH'; import { toast } from 'react-toastify'; -import Toast from '../global/Toast'; import ReactGA from 'react-ga4'; +import Potal from '../global/globalModal/Potal'; +import { useSetRecoilState } from 'recoil'; +import TodoPathModal from '../global/globalModal/TodoPathModal'; +import { patchTodoInfo } from '../../store/store'; const DetailTodoItem = ({ el, today, tomorrow }) => { - // console.log(new Date('2023-03-14') < new Date('2023-03-15')); - // console.log(new Date(el.progressTodo.startDate)); - // console.log(date > new Date(el.progressTodo.startDate)); - // console.log('---------------'); - // console.log(new Date(`2023-03-29`)); // 됨. - - // console.log(Number(date.substr(0, 2) - 1)); - // console.log('el:', el); - // const { data: getAllTodo } = useQuery(['ALLTODO'], GetAllTodo, { - // onSuccess: response => { - // console.log('todo :', response); - // }, - // onError: response => { - // // console.log(response.response.data); - // }, - // }); const queryClient = useQueryClient(); // 우선순위 @@ -117,17 +103,56 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { ); }; + const [todoModalOn, setTodoModalOn] = useState(false); + + const onTodoCloseModal = () => { + setTodoModalOn(!todoModalOn); + }; + + const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); + + const patchTodo = ( + id, + todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority + ) => { + console.log(todo); + setPatchTodoInfo({ + id, + toDo: todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority, + }); + setTodoModalOn(!todoModalOn); + }; + const FilterMyTodo = ({ pt }) => { - // console.log(pt); - // console.log(pt.startDate); - // let date = new Date( - // `2023-${el.targetDate.substr(0, 2)}-${el.targetDate.substr(4, 2)}` - // ); - // console.log(date, ' :::', new Date(pt.startDate)); if (pt.myToDo === true) { return ( <div className='item'> - <div className='flexLeft'> + <div + className='flexLeft' + onClick={() => { + patchTodo( + pt.toDoId, + pt.toDo, + pt.memo, + pt.startDate, + pt.startDateTime, + pt.endDate, + pt.endDateTime, + pt.priority + ); + }}> <Title pt={pt} /> <div className='krBox' title={pt.memo}> <div className='krTitle'>{pt.toDo}</div> @@ -145,7 +170,11 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { } else { return ( <div className='item'> - <div className='flexLeft'> + <div + className='flexLeft' + onClick={() => { + alert('본인이 작성한 TODO만 수정 가능합니다.'); + }}> <Title pt={pt} /> <div className='krBox' title={pt.memo}> <div className='krTitle'>{pt.toDo}</div> @@ -168,9 +197,6 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { //해당 날짜에 todo가 없을 때 const HavePt = () => { - // let date = new Date( - // `2023-${el.targetDate.substr(0, 2)}-${el.targetDate.substr(4, 2)}` - // ); if (el.progressTodo.length === 0) { return ( <TodoDetailItem> @@ -190,25 +216,23 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { } }; - // useEffect(() => { - // return ( - // <div className='title' id={el.targetDate}> - // {el.targetDate} - // </div> - // ); - // }, []); - return ( - <DDay> - <TodoDetailHeader> - <div className='header'> - <div className='title' id={el.targetDate}> - {el.targetDate} + <> + <DDay> + <TodoDetailHeader> + <div className='header'> + <div className='title' id={el.targetDate}> + {el.targetDate} + </div> </div> - </div> - </TodoDetailHeader> - <HavePt /> - </DDay> + </TodoDetailHeader> + <HavePt /> + </DDay> + <Potal> + {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} + </Potal> + ; + </> ); }; diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index c5f6c0f..6341cec 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -14,6 +14,10 @@ import { PatchCheck } from '../../apis/apiPATCH'; import { styled } from 'styled-components'; import { toast } from 'react-toastify'; import ReactGA from 'react-ga4'; +import Potal from '../global/globalModal/Potal'; +import { useSetRecoilState } from 'recoil'; +import TodoPathModal from '../global/globalModal/TodoPathModal'; +import { patchTodoInfo } from '../../store/store'; const PastTodo = () => { const [show, setShow] = useState(true); @@ -73,7 +77,8 @@ const PastTodo = () => { action: 'TODO 완료', }); } - queryClient.invalidateQueries(['TODO']); + + queryClient.invalidateQueries(['ALLTODO']); queryClient.invalidateQueries(['PASTTODO']); toast('TODO를 완료했습니다'); }, @@ -92,12 +97,57 @@ const PastTodo = () => { return <div className='check' onClick={onClickCheck} />; }; + const [todoModalOn, setTodoModalOn] = useState(false); + + const onTodoCloseModal = () => { + setTodoModalOn(!todoModalOn); + }; + + const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); + + const patchTodo = ( + id, + todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority + ) => { + console.log(todo); + setPatchTodoInfo({ + id, + toDo: todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority, + }); + setTodoModalOn(!todoModalOn); + }; + const FilterMyTodo = ({ el }) => { // console.log(el.myToDo); if (el.myToDo === true) { return ( <div className='item'> - <div className='flexLeft'> + <div + className='flexLeft' + onClick={() => { + patchTodo( + el.toDoId, + el.toDo, + el.memo, + el.startDate, + el.startDateTime, + el.endDate, + el.endDateTime, + el.priority + ); + }}> <Title el={el} /> <div className='krBox' title={el.memo}> <div className='krTitle'>{el.toDo}</div> @@ -159,6 +209,9 @@ const PastTodo = () => { <FilterMyTodo el={el} /> </TodoDetailItem> ))} + <Potal> + {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} + </Potal> </StPastTodo> ); }; diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index fdd7568..61cdc6c 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -197,6 +197,7 @@ export const TodoDetailItem = styled.div` .flexLeft { display: flex; align-items: center; + cursor: pointer; .kr { width: 50px; font-size: 2rem; From 3636e5fc57e6c1f57bf21e7cbdf52fa4aad3c205 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Tue, 28 Mar 2023 22:35:30 +0900 Subject: [PATCH 27/72] =?UTF-8?q?fix=20:=20object,=20kr,=20todo=20length,?= =?UTF-8?q?=20objective=20=EC=88=98=EC=A0=95=20=EA=B8=B0=EA=B0=84=20?= =?UTF-8?q?=EB=85=B8=EC=B6=9C,=20alltodo=20=ED=99=94=EB=A9=B4=20todo=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/globalModal/KrPatchModal.jsx | 1 + .../global/globalModal/OkrModal.jsx | 3 ++ .../global/globalModal/OkrPatchModal.jsx | 5 ++- .../global/globalModal/TodoModal.jsx | 14 +++++-- .../global/globalModal/TodoPathModal.jsx | 5 ++- .../global/globalModal/modal.styled.js | 1 + src/components/mainpage/OKR.styled.js | 7 ++-- src/components/mainpage/ToDo.jsx | 4 +- src/components/todo/TodoNavi.jsx | 39 +++++++++++++++++-- src/components/todo/tododetail.styled.js | 5 +++ 10 files changed, 67 insertions(+), 17 deletions(-) diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index 50b8524..68dc27c 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -135,6 +135,7 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { type='text' placeholder='핵심결과를 작성하세요.' name='first' + maxLength='19' value={title.keyResult} onChange={event => { onChangeKR(event); diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index 254dbc2..9d27019 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -142,6 +142,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { placeholder='목표' className='input' name='objective' + maxLength='17' onChange={event => { OnChange(event, objInfo, setObjInfo); }} @@ -152,6 +153,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { <img src={calender} alt='' /> <div className='dateBox'> <DatePicker + style={{ cursor: 'pointer' }} inputClass='start-input' containerClassName='start-container' months={months} @@ -172,6 +174,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { /> <DatePicker + style={{ cursor: 'pointer' }} inputClass='end-input' containerClassName='end-container' months={months} diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index 434bb63..0f28c28 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -175,6 +175,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { placeholder='목표' className='input' name='objective' + maxLength='17' value={objInfo.objective} onChange={event => { OnChange(event, objInfo, setObjInfo); @@ -192,7 +193,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { weekDays={weekDays} format={format} placeholder='시작일' - value={startDate.date} + value={objInfo.startdate} onChange={convertStart} animations={[ opacity(), @@ -211,7 +212,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { format={format} weekDays={weekDays} placeholder='종료일' - value={endDate.date} + value={objInfo.enddate} onChange={convertEnd} animations={[ opacity(), diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 32f2af4..650ddbc 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -157,6 +157,8 @@ const TodoModal = ({ }); } queryClient.invalidateQueries(['TODO']); + queryClient.invalidateQueries(['ALLTODO']); + queryClient.invalidateQueries(['PASTTODO']); toast('TODO가 생성되었습니다.'); // console.log(response); }, @@ -192,8 +194,8 @@ const TodoModal = ({ if (todoInfo.toDo === '') { return toast('To Do는 필수 입니다.'); - } else if (todoInfo.toDo.length > 30) { - return toast('To Do는 30글자 미만이어야합니다.'); + } else if (todoInfo.toDo.length > 25) { + return toast('To Do는 25글자 미만이어야합니다.'); } else if (todoInfo.memo.length > 30) { return toast('메모는 30글자 미만이어야합니다.'); } else if (todoInfo.startDate === '') { @@ -211,6 +213,11 @@ const TodoModal = ({ } }; + const onTodoOnchange = (event, state, setState) => { + const { name, value } = event.target; + setState({ ...state, [name]: value }); + }; + return ( <div> <ModalBackground ref={todoModalRef} onClick={todoModalOutSideClick} /> @@ -237,8 +244,9 @@ const TodoModal = ({ placeholder='To Do 내용을 작성하세요' className='input' name='toDo' + maxlength='25' onChange={event => { - OnChange(event, todoInfo, setTodoInfo); + onTodoOnchange(event, todoInfo, setTodoInfo); }} /> </div> diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index b449fa4..354ab33 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -180,8 +180,8 @@ const TodoPathModal = ({ onCloseModal }) => { if (title.toDo === '') { return toast('To Do는 필수 입니다.'); - } else if (title.toDo.length > 30) { - return toast('To Do는 30글자 미만이어야합니다.'); + } else if (title.toDo.length > 25) { + return toast('To Do는 25글자 미만이어야합니다.'); } else if (title.memo.length > 30) { return toast('메모는 30글자 미만이어야합니다.'); } else if (title.startDate === '') { @@ -248,6 +248,7 @@ const TodoPathModal = ({ onCloseModal }) => { placeholder='To Do 내용을 작성하세요' className='input' name='toDo' + maxLength='25' defaultValue={title.toDo} onChange={e => { setTitle({ ...title, toDo: e.target.value }); diff --git a/src/components/global/globalModal/modal.styled.js b/src/components/global/globalModal/modal.styled.js index 73d042f..2d73db4 100644 --- a/src/components/global/globalModal/modal.styled.js +++ b/src/components/global/globalModal/modal.styled.js @@ -193,6 +193,7 @@ export const OKRBox = styled.div` justify-content: start; margin-right: 2.1rem; position: relative; + .start-container { .start-input { width: 25rem; diff --git a/src/components/mainpage/OKR.styled.js b/src/components/mainpage/OKR.styled.js index fa23158..83faff7 100644 --- a/src/components/mainpage/OKR.styled.js +++ b/src/components/mainpage/OKR.styled.js @@ -75,12 +75,12 @@ export const Objective = styled.div` cursor: default; } .NameBox { - width: 300px; + width: 400px; .Name { margin-top: 16px; margin-left: 16px; font-weight: 500; - font-size: 24px; + font-size: 22px; line-height: 33px; letter-spacing: -0.01em; color: ${({ color }) => color}; @@ -251,8 +251,7 @@ export const PersentBox = styled.div` background-color: black; margin-top: ${({ state }) => `${state === 'Objective' ? '34px' : '15px'}`}; - margin-left: ${({ state }) => - `${state === 'Objective' ? '130px' : '12.5px'}`}; + margin-left: ${({ state }) => `${state === 'Objective' ? '29px' : '12.5px'}`}; cursor: pointer; input[type='range'] { width: 205px; diff --git a/src/components/mainpage/ToDo.jsx b/src/components/mainpage/ToDo.jsx index 26dacd1..5b00a7b 100644 --- a/src/components/mainpage/ToDo.jsx +++ b/src/components/mainpage/ToDo.jsx @@ -10,9 +10,7 @@ import { StTodoItem, } from './todo.styled'; import TodoItem from './TodoItem'; - import plus from '../../assets/plus.png'; -import more from '../../assets/more.png'; import { useQuery } from '@tanstack/react-query'; import { GetTodo } from '../../apis/apiGET'; @@ -47,7 +45,7 @@ export default function ToDo() { return ( <Container> <HeaderBox> - <Header>To-do</Header> + <Header>오늘의 To-do</Header> <div className='btnBox'> <div onClick={createTodo}> <img src={plus} alt='' /> diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 89187c6..ff4a273 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -1,7 +1,9 @@ -import React, { useState } from 'react'; - +import React, { useState, useRef } from 'react'; import { Link } from 'react-scroll'; -import { DateNavi, StNavi, TodoHeader } from './tododetail.styled'; +import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; +import Potal from '../global/globalModal/Potal'; +import TodoModal from '../global/globalModal/TodoModal'; +import plus from '../../assets/plus.png'; const TodoNavi = ({ todayFormat }) => { const today = new Date(); @@ -82,6 +84,25 @@ const TodoNavi = ({ todayFormat }) => { const dateM = date.getMonth() + 1; const dateD = date.getDate(); + const [todoModalOn, setTodoModalOn] = useState(false); + /**모달 닫는 함수 */ + const onCloseTodoModal = () => { + setTodoModalOn(!todoModalOn); + }; + + const createTodo = () => { + setTodoModalOn(!todoModalOn); + }; + + // 모달 외 클릭시 닫기위해 ref생성 + const todoModalRef = useRef(null); + /** 모달위에 있는 배경이랑 ref가 같으면 modalOn을 false로 바꾸는 함수 */ + const todoModalOutSideClick = e => { + if (todoModalRef.current === e.target) { + setTodoModalOn(!todoModalOn); + } + }; + return ( <StNavi> <TodoHeader> @@ -101,6 +122,9 @@ const TodoNavi = ({ todayFormat }) => { offset={-500}> 오늘 </Link> + <NaviPlus onClick={createTodo}> + <img src={plus} alt='' /> + </NaviPlus> {/* <div className='more' /> */} </div> </TodoHeader> @@ -134,6 +158,15 @@ const TodoNavi = ({ todayFormat }) => { </React.Fragment> ))} </DateNavi> + <Potal> + {todoModalOn && ( + <TodoModal + onCloseTodoModal={onCloseTodoModal} + todoModalRef={todoModalRef} + todoModalOutSideClick={todoModalOutSideClick} + /> + )} + </Potal> </StNavi> ); }; diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 61cdc6c..4a7d665 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -405,3 +405,8 @@ export const StTeam = styled.div` } } `; + +export const NaviPlus = styled.div` + margin-left: 2.8rem; + cursor: pointer; +`; From a060e1229176858b378ada303fe2fd31ae15c855 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Wed, 29 Mar 2023 13:24:37 +0900 Subject: [PATCH 28/72] fix : Calendar --- src/components/mainpage/Calendar.jsx | 6 +++++- src/components/todo/PastTodo.jsx | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/mainpage/Calendar.jsx b/src/components/mainpage/Calendar.jsx index e84e192..ce89149 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/mainpage/Calendar.jsx @@ -13,10 +13,14 @@ export default function Calendar() { onSuccess: response => { // console.log(response); response?.map(el => { + const endDate = new Date(el.endDate); + endDate.setDate(endDate.getDate() + 1); + const newEndDate = endDate.toISOString().split('T')[0]; + let obj = { title: el.toDo, start: `${el.startDate} ${el.startDateTime}`, - end: `${el.endDate} ${el.endDateTime}`, + end: `${newEndDate} ${el.endDateTime}`, backgroundColor: `${el.color === null ? '#9B9B9B' : el.color}`, borderColor: `${el.color === null ? '#9B9B9B' : el.color}`, textColr: '#fff', diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index 6341cec..4fdb60d 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -77,7 +77,6 @@ const PastTodo = () => { action: 'TODO 완료', }); } - queryClient.invalidateQueries(['ALLTODO']); queryClient.invalidateQueries(['PASTTODO']); toast('TODO를 완료했습니다'); From 5f9f1bbf79a820479b804424bfc937a2f486bb36 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Wed, 29 Mar 2023 18:08:28 +0900 Subject: [PATCH 29/72] =?UTF-8?q?pm=EC=9A=94=EC=B2=AD=EC=97=90=20=EC=9D=98?= =?UTF-8?q?=ED=95=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/globalModal/OkrPatchModal.jsx | 4 +- .../global/globalModal/TodoModal.jsx | 14 +- .../global/globalModal/TodoPathModal.jsx | 24 +- .../global/globaldropdown/OkrDropDown.jsx | 4 +- src/components/mainpage/OKR.styled.js | 2 +- src/components/mainpage/TodoItem.jsx | 9 +- src/components/todo/FinishTodo.jsx | 2 +- src/components/todo/PastTodo.jsx | 6 +- src/components/todo/tododetail.styled.js | 17 +- yarn.lock | 457 +++++++----------- 10 files changed, 224 insertions(+), 315 deletions(-) diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index 0f28c28..08653d7 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -151,8 +151,8 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const onDeleteObjective = () => { const result = - window.confirm(`|KR - 핵심결과]와 연동된 To-Do가 있다면 연동 해제됩니다. - 정말 삭제하시겠습니까?`); + window.confirm(`[KR - 핵심 결과] 와 연동된 [To-Do]가 있다면 함께 삭제됩니다. +정말 삭제하시겠습니까?`); if (result) { deleteObjective(objectiveInfo.id); } else { diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 650ddbc..4e452f9 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -183,6 +183,11 @@ const TodoModal = ({ const [oid, setOid] = useState(0); const [kid, setKid] = useState(0); + console.log('oid :', oid); + console.log(setOid); + + console.log('dddddddd'); + // 저장 버튼 누르면 생성 const createT = () => { const startd = new Date(todoInfo.startDate); @@ -229,12 +234,7 @@ const TodoModal = ({ <OKRBox> <div className='object itemBox'> <img src={todoOkr} alt='' /> - <OkrDropDown - todoInfo={todoInfo} - setTodoInfo={setTodoInfo} - setKid={setKid} - setOid={setOid} - /> + <OkrDropDown setKid={setKid} setOid={setOid} /> </div> <div className='object itemBox'> @@ -244,7 +244,7 @@ const TodoModal = ({ placeholder='To Do 내용을 작성하세요' className='input' name='toDo' - maxlength='25' + maxLength='25' onChange={event => { onTodoOnchange(event, todoInfo, setTodoInfo); }} diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 354ab33..3af21ef 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -66,7 +66,7 @@ const TodoPathModal = ({ onCloseModal }) => { const [defaultFormat, setDefaultFormat] = useState({ format: 'YYYY-MM-DD' }); const todoInfo = useRecoilValue(patchTodoInfo); - console.log(todoInfo); + // console.log(todoInfo); const [title, setTitle] = useState({ memo: todoInfo.memo, @@ -77,7 +77,6 @@ const TodoPathModal = ({ onCloseModal }) => { startDateTime: todoInfo.startDateTime, toDo: todoInfo.toDo, }); - // console.log(title); const [startWithTime, setStartWithTime] = useState(false); const [endWithTime, setEndWithTime] = useState(false); @@ -192,8 +191,9 @@ const TodoPathModal = ({ onCloseModal }) => { return toast('종료일은 시작일보다 빠르게 설정할 수 없습니다.'); } else { let id = todoInfo.id; + // console.log(id); let value = title; - console.log(id, value); + // console.log(id, value); patchTodo({ id, value }); // createTodo({ Oid, Kid, Info }); toast('해당 To Do가 수정되었습니다.'); @@ -227,6 +227,11 @@ const TodoPathModal = ({ onCloseModal }) => { }, }); + const [oid, setOid] = useState(0); + const [kid, setKid] = useState(0); + + console.log(title); + return ( <> <ModalBackground /> @@ -236,10 +241,10 @@ const TodoPathModal = ({ onCloseModal }) => { <img src={close} alt='' onClick={onCloseModal} /> </div> <OKRBox> - <div className='object itemBox'> + {/* <div className='object itemBox'> <img src={todoOkr} alt='' /> - <OkrDropDown title={title} /> - </div> + <OkrDropDown title={title} setKid={setKid} setOid={setOid} /> + </div> */} <div className='object itemBox'> <img src={todo} alt='' /> @@ -260,7 +265,7 @@ const TodoPathModal = ({ onCloseModal }) => { <img src={memo} alt='' /> <input type='text' - placeholder='Momo 내용을 작성하세요' + placeholder='Memo 내용을 작성하세요' className='input' name='memo' defaultValue={title.memo} @@ -282,8 +287,7 @@ const TodoPathModal = ({ onCloseModal }) => { weekDays={weekDays} format='YYYY-MM-DD' placeholder='시작일' - defaultValue={title.startDate} - // value={defaultFormat.date} + value={title.startDate} onChange={convertStart} animations={[ opacity(), @@ -357,7 +361,7 @@ const TodoPathModal = ({ onCloseModal }) => { weekDays={weekDays} format='YYYY-MM-DD' placeholder='종료일' - value={defaultFormat.date} + value={title.endDate} onChange={convertEnd} animations={[ opacity(), diff --git a/src/components/global/globaldropdown/OkrDropDown.jsx b/src/components/global/globaldropdown/OkrDropDown.jsx index 81202c3..e4a60d5 100644 --- a/src/components/global/globaldropdown/OkrDropDown.jsx +++ b/src/components/global/globaldropdown/OkrDropDown.jsx @@ -13,6 +13,8 @@ import { useQuery } from '@tanstack/react-query'; import { GetOKR } from '../../../apis/apiGET'; const OkrDropDown = ({ setKid, setOid, title }) => { + // console.log(setOid); + // console.log(title); const dropDownRef = useRef(null); const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); @@ -42,7 +44,7 @@ const OkrDropDown = ({ setKid, setOid, title }) => { setKid(0); setOid(0); } else { - // console.log('id가 있을때'); + console.log(e.target.attributes.name.value); setOid(Number(e.target.attributes.name.value)); setKid(Number(e.target.id)); } diff --git a/src/components/mainpage/OKR.styled.js b/src/components/mainpage/OKR.styled.js index 83faff7..f6e607d 100644 --- a/src/components/mainpage/OKR.styled.js +++ b/src/components/mainpage/OKR.styled.js @@ -137,7 +137,7 @@ export const KRBox = styled.div` width: 36px; height: 27px; font-weight: 500; - font-size: 18px; + font-size: 16px; line-height: 27px; text-align: center; letter-spacing: -0.02em; diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index 3c9e3d3..f266503 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -40,7 +40,7 @@ const TodoItem = ({ getTodo }) => { return false; }); - // console.log(filterArray); + console.log('filterArray :', filterArray); // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { @@ -98,7 +98,7 @@ const TodoItem = ({ getTodo }) => { endDateTime, priority ) => { - console.log(todo); + // console.log(todo); setPatchTodoInfo({ id, toDo: todo, @@ -112,14 +112,11 @@ const TodoItem = ({ getTodo }) => { setTodoModalOn(!todoModalOn); }; - console.log(filterArray); const { data: getCompletionTodo } = useQuery( ['completionTodo'], GetCompletionTodo, { - onSuccess: response => { - console.log('getCompletionTodo :', response); - }, + onSuccess: response => {}, onError: response => {}, } ); diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index 49420fe..c654cfe 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -132,7 +132,7 @@ const FinishTodo = ({ el }) => { </TodoDetailHeader> {el.completionTodo.length === 0 ? ( - <div>완료한 리스트가 없습니다.</div> + <div className='noCompl'>완료한 리스트가 없습니다.</div> ) : ( el.completionTodo?.map(ct => ( <TodoDetailItem diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index 4fdb60d..d284f36 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -24,16 +24,16 @@ const PastTodo = () => { const { data: getPastTodo } = useQuery(['PASTTODO'], GetPastTodo, { onSuccess: response => { - console.log('기한만료 :', response); + // console.log('기한만료 :', response); }, onError: response => { - console.log(response); + // console.log(response); }, }); const { data: getMember } = useQuery(['MEMBER'], GetUser, { onSuccess: response => { - console.log('user :', response); + // console.log('user :', response); }, onError: response => { // console.log(response); diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 4a7d665..db1f704 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -183,7 +183,8 @@ export const TodoDetailItem = styled.div` align-items: center; justify-content: start; margin-bottom: 10px; - background-color: #e2e2e2; + background-color: #fff; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); border-radius: 8px; padding: 0 19px 0 17px; margin-bottom: 10px; @@ -294,6 +295,20 @@ export const DDay = styled.div` export const Finsh = styled.div` margin-bottom: 50px; + .noCompl { + display: flex; + align-items: center; + justify-content: start; + margin-bottom: 10px; + background-color: #fff; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + padding: 0 19px 0 17px; + margin-bottom: 10px; + font-size: 2rem; + height: 45px; + color: #9b9b9b !important; + } `; export const StTeam = styled.div` diff --git a/yarn.lock b/yarn.lock index 1bb6a1e..0938a59 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,7 +36,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz" integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.11.0": +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz" integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== @@ -499,7 +499,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.18.6": +"@babel/plugin-syntax-flow@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz" integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== @@ -811,7 +811,7 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.18.6": +"@babel/plugin-transform-react-jsx@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz" integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== @@ -1234,7 +1234,7 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz" integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== -"@fullcalendar/core@^6.1.4", "@fullcalendar/core@~6.1.4": +"@fullcalendar/core@^6.1.4": version "6.1.4" resolved "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.4.tgz" integrity sha512-ZDD0Owv0LezAk14nsRNaOc9nbowItGmT0mnjOhEw+L6B8P5eads8yYaNA9itn70MWoOjiAG8xqD7Yk1iJGxqgQ== @@ -1557,7 +1557,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== @@ -1590,7 +1590,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1815,7 +1815,7 @@ "@tanstack/query-core" "4.26.1" use-sync-external-store "^1.2.0" -"@testing-library/dom@^8.5.0", "@testing-library/dom@>=7.21.4": +"@testing-library/dom@^8.5.0": version "8.20.0" resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz" integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA== @@ -1875,7 +1875,7 @@ resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.9": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.20.0" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== @@ -1959,16 +1959,16 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" @@ -2187,7 +2187,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.0.0 || ^5.0.0", "@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz" integrity sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== @@ -2210,7 +2210,7 @@ dependencies: "@typescript-eslint/utils" "5.54.0" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.5.0": +"@typescript-eslint/parser@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz" integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== @@ -2256,7 +2256,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.43.0", "@typescript-eslint/utils@5.54.0": +"@typescript-eslint/utils@5.54.0", "@typescript-eslint/utils@^5.43.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz" integrity sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== @@ -2454,20 +2454,15 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -acorn@^7.0.0: +acorn@^7.0.0, acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2508,7 +2503,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2518,17 +2513,7 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.8.0, ajv@^8.8.2: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.6.0, ajv@>=8: +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2611,16 +2596,16 @@ aria-query@^5.0.0, aria-query@^5.1.3: dependencies: deep-equal "^2.0.5" -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -3008,7 +2993,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4", "browserslist@>= 4.21.0", browserslist@>=4: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3106,16 +3091,7 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3239,16 +3215,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@^1.1.4, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@^1.1.4, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colord@^2.9.1: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" @@ -3506,14 +3482,6 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" @@ -3522,6 +3490,14 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" @@ -3639,33 +3615,26 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@^2.6.0: +debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" decimal.js@^10.2.1: version "10.4.3" @@ -3740,16 +3709,16 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -3847,6 +3816,14 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" +dom-serializer@0: + 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" + dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -3856,24 +3833,16 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@0: - 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" +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" @@ -4267,7 +4236,7 @@ eslint-plugin-testing-library@^5.0.1: dependencies: "@typescript-eslint/utils" "^5.43.0" -eslint-scope@^5.1.1, eslint-scope@5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4290,12 +4259,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== @@ -4316,7 +4280,7 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.5.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.1.0, eslint@^8.3.0, eslint@^8.34.0, "eslint@>= 6", eslint@>=5, eslint@>=7.0.0, eslint@>=7.28.0: +eslint@^8.3.0, eslint@^8.34.0: version "8.35.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz" integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== @@ -4618,15 +4582,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -4748,6 +4704,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -4810,7 +4771,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4824,13 +4785,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" @@ -5063,16 +5017,6 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -5084,6 +5028,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -5136,13 +5090,6 @@ husky@^8.0.3: resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -5150,6 +5097,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -5211,7 +5165,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5235,16 +5189,16 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -5844,7 +5798,7 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve@*, jest-resolve@^27.4.2, jest-resolve@^27.5.1: +jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== @@ -6066,7 +6020,7 @@ jest-worker@^28.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -"jest@^27.0.0 || ^28.0.0", jest@^27.4.3: +jest@^27.4.3: version "27.5.1" resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== @@ -6458,7 +6412,7 @@ microseconds@0.2.0: resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -6523,11 +6477,6 @@ mkdirp@~0.5.1: dependencies: minimist "^1.2.6" -ms@^2.1.1, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -6538,6 +6487,11 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" @@ -7499,15 +7453,6 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.1.4, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.3, postcss@^8.3.5, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.4, postcss@^8.4.6, "postcss@>= 8", postcss@>=8, postcss@>=8.0.9: - version "8.4.21" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - postcss@^7.0.35: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" @@ -7516,6 +7461,15 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: + version "8.4.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + preact@^10.0.5: version "10.13.0" resolved "https://registry.npmjs.org/preact/-/preact-10.13.0.tgz" @@ -7538,7 +7492,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.8.4, prettier@>=2.0.0: +prettier@^2.8.4: version "2.8.4" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz" integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== @@ -7604,7 +7558,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7739,7 +7693,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -"react-dom@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.7.0 || ^17 || ^18", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 16.8.0", react-dom@>=16, react-dom@>=16.8, react-dom@>=16.8.0: +react-dom@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -7757,17 +7711,17 @@ react-error-overlay@^6.0.11: resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-ga@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz" - integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== - react-ga4@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz" integrity sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ== -react-is@^16.13.1, react-is@^16.7.0, "react-is@>= 16.8.0": +react-ga@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz" + integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== + +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -7799,7 +7753,7 @@ react-query@^3.39.3: broadcast-channel "^3.4.1" match-sorter "^6.0.2" -react-refresh@^0.11.0, "react-refresh@>=0.10.0 <1.0.0": +react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== @@ -7889,7 +7843,7 @@ react-toastify@^9.1.1: dependencies: clsx "^1.1.1" -"react@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.6.2 || ^16.0 || ^17 || ^18", "react@^16.7.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16", "react@>= 16.8.0", react@>=16, react@>=16.13.1, react@>=16.8, react@>=16.8.0: +react@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -8113,7 +8067,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0, rimraf@^3.0.2, rimraf@3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8130,7 +8084,7 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: +rollup@^2.43.1: version "2.79.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -8144,20 +8098,15 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: version "1.0.0" @@ -8205,6 +8154,15 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -8214,25 +8172,7 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.1: +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -8251,15 +8191,6 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -8277,28 +8208,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.8: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -8458,7 +8368,7 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -8525,16 +8435,16 @@ stackframe@^1.3.4: resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -8542,20 +8452,6 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -8618,6 +8514,20 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" @@ -8678,7 +8588,7 @@ style-loader@^3.3.1: resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== -styled-components@^5.3.8, "styled-components@>= 2": +styled-components@^5.3.8: version "5.3.8" resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.8.tgz" integrity sha512-6jQrlvaJQ16uWVVO0rBfApaTPItkqaG32l3746enNZzpMDxMvzmHzj8rHUg39bvVtom0Y8o8ZzWuchEXKGjVsg== @@ -8702,14 +8612,7 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -8970,7 +8873,7 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -type-check@^0.4.0: +type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== @@ -8984,13 +8887,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - type-detect@4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" @@ -9001,7 +8897,7 @@ type-fest@^0.16.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== -type-fest@^0.20.2, "type-fest@>=0.17.0 <4.0.0": +type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== @@ -9035,11 +8931,6 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -"typescript@^3.2.1 || ^4", "typescript@>= 2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -9098,7 +8989,7 @@ unload@2.2.0: "@babel/runtime" "^7.6.2" detect-node "^2.0.4" -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -9252,7 +9143,7 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0, "webpack-dev-server@3.x || 4.x": +webpack-dev-server@^4.6.0: version "4.11.1" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== @@ -9316,7 +9207,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.4.0 || ^5.9.0", "webpack@^4.44.2 || ^5.47.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.64.4, "webpack@>= 4", webpack@>=2, "webpack@>=4.43.0 <6.0.0": +webpack@^5.64.4: version "5.75.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz" integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== @@ -9346,7 +9237,7 @@ webpack-sources@^3.2.3: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== From 0fbe9f0c0e9c036af3d958e00171dcdf0dff1fc3 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Thu, 30 Mar 2023 23:50:35 +0900 Subject: [PATCH 30/72] =?UTF-8?q?feat=20:=20=ED=9A=8C=EC=9B=90=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiGET.js | 8 ++++++++ src/components/global/header/Header.jsx | 8 ++++++++ src/components/signIn/Article.jsx | 1 + src/components/signUp/Article.jsx | 7 +------ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 5bd0db7..5748800 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -57,3 +57,11 @@ export async function GetCompletionTodo() { const { data } = await api.get(`api/todo/completion`); return data; } + +export async function GetUserInfo() { + const id = localStorage.getItem('Id'); + + console.log('id', id); + const { data } = await api.get(`api/user/${id}`); + return data; +} diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 8a9cf12..35aa1ad 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -6,6 +6,8 @@ import { useNavigate } from 'react-router-dom'; import alarm from '../../../assets/alarm.png'; import user from '../../../assets/user.png'; import ReactGA from 'react-ga4'; +import { useQuery } from '@tanstack/react-query'; +import { GetUserInfo } from '../../../apis/apiGET'; export default function Header() { const navigate = useNavigate(); @@ -30,6 +32,12 @@ export default function Header() { setLogoutImg(logoutON); }; + const { data } = useQuery(['userinfo'], GetUserInfo, { + onSuccess: response => { + console.log(response); + }, + }); + const logout = () => { if (process.env.NODE_ENV !== 'development') { ReactGA.event({ diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 54514cd..304e9a6 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -88,6 +88,7 @@ const Test = () => { action: '로그인', }); } + localStorage.setItem('Id', email); localStorage.setItem('accesstoken', response.accessToken); navigate('/mainpage'); }, diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index d00cd44..bdc32ce 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -284,7 +284,6 @@ const Test = () => { )} </ArticleHeader> <ArticleHeader>팀</ArticleHeader> - {/* <TeamDropDown setUserInfo={setUserInfo} userInfo={userInfo} /> */} <InputBox> <EmailInput name='team' @@ -302,11 +301,7 @@ const Test = () => { )} </ArticleHeader> <ArticleHeader>직급</ArticleHeader> - <TeamPosiDropDown - // OnChangeOptionValue={OnChangeOptionValue} - setUserInfo={setUserInfo} - userInfo={userInfo} - /> + <TeamPosiDropDown setUserInfo={setUserInfo} userInfo={userInfo} /> <ArticleHeader> {teamPosiValidation ? null : ( <p className='p1' style={{ color: 'red' }}> From 88efaf87bf18a18b25254288cdc15e3bb0391595 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Fri, 31 Mar 2023 01:09:28 +0900 Subject: [PATCH 31/72] =?UTF-8?q?fix=20:=20OKR=20Team=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiGET.js | 5 +++++ src/components/global/header/Header.jsx | 2 +- src/components/signIn/Article.jsx | 4 +++- src/pages/Mainpage.jsx | 18 ++++++++++++++++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 5748800..1c4626f 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -65,3 +65,8 @@ export async function GetUserInfo() { const { data } = await api.get(`api/user/${id}`); return data; } + +export async function GetTeamInfo() { + const { data } = await api.get(`api/user/team/member`); + return data; +} diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 35aa1ad..aa7e8ff 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -7,7 +7,7 @@ import alarm from '../../../assets/alarm.png'; import user from '../../../assets/user.png'; import ReactGA from 'react-ga4'; import { useQuery } from '@tanstack/react-query'; -import { GetUserInfo } from '../../../apis/apiGET'; +import { GetTeamInfo, GetUserInfo } from '../../../apis/apiGET'; export default function Header() { const navigate = useNavigate(); diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 304e9a6..5b970f6 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -3,7 +3,7 @@ import Eye from '../../assets/eye.png'; import CloseEye from '../../assets/closedEye.png'; import { OnChange } from '../global/onChange'; import { useNavigate } from 'react-router-dom'; -import { useMutation } from '@tanstack/react-query'; +import { useMutation, useQuery } from '@tanstack/react-query'; import { SignIn } from '../../apis/apiPOST'; import ReactGA from 'react-ga4'; import { @@ -16,6 +16,7 @@ import { HelpBox, SignWrap, } from '../../styles/sign.styled'; +import { GetTeamInfo } from '../../apis/apiGET'; const Test = () => { const navigate = useNavigate(); @@ -82,6 +83,7 @@ const Test = () => { const [signValidation, setSignValidation] = useState(''); const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { + console.log('login', response); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 5c63c58..23c4b75 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -14,17 +14,31 @@ import CompanyOKR from '../components/companyOKR/companyOKR'; // import { useNavigate } from 'react-router-dom'; import { MenuContainer, MenuItem } from './../components/mainpage/menu.styled'; import { useNavigate } from 'react-router-dom'; +import { useQuery } from '@tanstack/react-query'; +import { GetTeamInfo } from '../apis/apiGET'; export default function Mainpage() { const navigate = useNavigate(); - + const [teamName, setTeamName] = useState(''); useEffect(() => { if (localStorage.accesstoken === undefined) { navigate('/'); } }, []); - const menuList = ['Dashboard', 'All OKR', 'TEAM OKR', 'TO - DO', 'Calendar']; + const { data: teaminfo } = useQuery(['team'], GetTeamInfo, { + onSuccess: response => { + setTeamName(response[0].team); + }, + }); + + const menuList = [ + 'Dashboard', + 'All OKR', + teamName + ' OKR', + 'TO - DO', + 'Calendar', + ]; const selectComponent = { Dashboard: ( From f6371a6e3b9bf78dfa9df0a6c8578b1530f4d173 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Fri, 31 Mar 2023 01:12:23 +0900 Subject: [PATCH 32/72] =?UTF-8?q?fix=20:=20team=20name=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/mainpage/menu.styled.js | 4 ++-- src/pages/Mainpage.jsx | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/mainpage/menu.styled.js b/src/components/mainpage/menu.styled.js index 0cdb137..f38fc7b 100644 --- a/src/components/mainpage/menu.styled.js +++ b/src/components/mainpage/menu.styled.js @@ -27,11 +27,11 @@ export const MenuItem = styled.button` border-radius: 0 7px 7px 0; padding: 0 2rem 0 0; line-height: 4.5rem; - color: ${({ text }) => + color: ${({ text, teamName }) => `${ text === 'All OKR' ? '#DEDEDE' - : text === 'TEAM OKR' + : text === teamName + ' OKR' ? '#DEDEDE' : text === 'Calendar' ? '#DEDEDE' diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 23c4b75..4e58aa3 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -71,6 +71,7 @@ export default function Mainpage() { return ( <MenuItem text={text} + teamName={teamName} key={i} onClick={clickNowPage} name={text} From 56b014785b91bd808b733cf1618253fefbb229ed Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Fri, 31 Mar 2023 01:53:19 +0900 Subject: [PATCH 33/72] =?UTF-8?q?fix=20:=20team=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C,=20=EC=A3=BC=EC=84=9D=20=EC=A0=9C=EA=B1=B0,?= =?UTF-8?q?=20import=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 169 ++++++ package.json | 1 + src/apis/apiGET.js | 8 - src/components/global/Toast.jsx | 9 +- .../global/globalModal/AlertModal.jsx | 5 +- .../global/globalModal/KrPatchModal.jsx | 14 +- src/components/global/globalModal/Modal.jsx | 3 +- .../global/globalModal/OkrModal.jsx | 22 +- .../global/globalModal/OkrPatchModal.jsx | 27 +- src/components/global/globalModal/Potal.jsx | 1 + .../global/globalModal/ProgressPatchModal.jsx | 15 +- .../global/globalModal/TodoModal.jsx | 52 +- .../global/globalModal/TodoPathModal.jsx | 40 +- .../global/globalModal/modal.styled.js | 6 +- .../global/globaldropdown/ColorDropDown.jsx | 8 +- .../global/globaldropdown/Emotion.jsx | 11 +- .../global/globaldropdown/OkrDropDown.jsx | 34 +- .../global/globaldropdown/PatchPriority.jsx | 12 +- .../globaldropdown/PriorityDropDown.jsx | 10 +- .../global/globaldropdown/TeamDropDown.jsx | 12 +- .../globaldropdown/TeamPosiDropDown.jsx | 6 +- .../global/globaldropdown/dropdown.js | 24 +- src/components/global/header/Header.jsx | 18 +- src/components/global/header/header.styled.js | 2 +- src/components/global/onChange.js | 4 - src/components/global/theme.jsx | 7 - src/components/mainpage/Calendar.jsx | 9 +- src/components/mainpage/OKR.jsx | 29 +- src/components/mainpage/OkrItem.jsx | 44 +- src/components/mainpage/Test.jsx | 67 --- src/components/mainpage/ToDo.jsx | 14 +- src/components/mainpage/TodoItem.jsx | 27 +- src/components/mainpage/menu.styled.js | 4 +- src/components/mainpage/todo.styled.js | 2 +- src/components/signIn/Article.jsx | 16 +- src/components/signUp/Article.jsx | 26 +- src/components/teamOKR/TeamOKR.jsx | 14 - src/components/todo/DetailTodoItem.jsx | 18 +- src/components/todo/FinishTodo.jsx | 12 +- src/components/todo/PastTodo.jsx | 24 +- src/components/todo/TeamTodo.jsx | 6 +- src/components/todo/Todo.jsx | 10 +- src/components/todo/TodoNavi.jsx | 8 +- src/components/todo/tododetail.styled.js | 10 +- src/index.js | 14 +- src/pages/Mainpage.jsx | 38 +- src/pages/SignIn.jsx | 3 +- src/pages/SignUp.jsx | 5 +- src/router/RouteChangeTracker.js | 2 +- src/router/Router.js | 10 +- yarn.lock | 526 ++++++++++++------ 51 files changed, 763 insertions(+), 695 deletions(-) delete mode 100644 src/components/mainpage/Test.jsx diff --git a/package-lock.json b/package-lock.json index 1e5ef6a..8102921 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "web-vitals": "^2.1.0" }, "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.1.1", "eslint": "^8.34.0", "eslint-config-prettier": "^8.6.0", "husky": "^8.0.3", @@ -3527,6 +3528,95 @@ "node": ">= 6" } }, + "node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.1.1.tgz", + "integrity": "sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw==", + "dev": true, + "dependencies": { + "@babel/generator": "7.17.7", + "@babel/parser": "^7.20.5", + "@babel/traverse": "7.17.3", + "@babel/types": "7.17.0", + "javascript-natural-sort": "0.7.1", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + } + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -9610,6 +9700,12 @@ "node": ">=10" } }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true + }, "node_modules/jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", @@ -18921,6 +19017,73 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "@trivago/prettier-plugin-sort-imports": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.1.1.tgz", + "integrity": "sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw==", + "dev": true, + "requires": { + "@babel/generator": "7.17.7", + "@babel/parser": "^7.20.5", + "@babel/traverse": "7.17.3", + "@babel/types": "7.17.0", + "javascript-natural-sort": "0.7.1", + "lodash": "^4.17.21" + }, + "dependencies": { + "@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "globals": { + "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 + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -23045,6 +23208,12 @@ "minimatch": "^3.0.4" } }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true + }, "jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", diff --git a/package.json b/package.json index 0921d07..f226ef3 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ ] }, "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.1.1", "eslint": "^8.34.0", "eslint-config-prettier": "^8.6.0", "husky": "^8.0.3", diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 1c4626f..99b702f 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -58,14 +58,6 @@ export async function GetCompletionTodo() { return data; } -export async function GetUserInfo() { - const id = localStorage.getItem('Id'); - - console.log('id', id); - const { data } = await api.get(`api/user/${id}`); - return data; -} - export async function GetTeamInfo() { const { data } = await api.get(`api/user/team/member`); return data; diff --git a/src/components/global/Toast.jsx b/src/components/global/Toast.jsx index 2fc7562..84cec5c 100644 --- a/src/components/global/Toast.jsx +++ b/src/components/global/Toast.jsx @@ -1,16 +1,9 @@ import React from 'react'; -import { ToastContainer, toast } from 'react-toastify'; - +import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import styled from 'styled-components'; const Toast = () => { - // const contextClassName = { - // success : , - // error : , - // info : , - // warning : , - // } return ( <> <StToastContainer diff --git a/src/components/global/globalModal/AlertModal.jsx b/src/components/global/globalModal/AlertModal.jsx index 66ac010..1402cf4 100644 --- a/src/components/global/globalModal/AlertModal.jsx +++ b/src/components/global/globalModal/AlertModal.jsx @@ -1,6 +1,5 @@ -import React, { useEffect, useState } from 'react'; -import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; -import kr from '../../../assets/kr.png'; +import { ModalBackground, ModalBox } from './modal.styled'; +import React, { useEffect } from 'react'; const AlertModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { // 모달 스크롤 방지 diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index 68dc27c..ecb099b 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -1,15 +1,15 @@ -import React, { useEffect, useState } from 'react'; -import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; +import { DeleteKR } from '../../../apis/apiDELETE'; +import { PatchKR } from '../../../apis/apiPATCH'; +import { CreateKR } from '../../../apis/apiPOST'; import close from '../../../assets/close.png'; import kr from '../../../assets/kr.png'; import trash from '../../../assets/trash.png'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { PatchKR } from '../../../apis/apiPATCH'; -import { useRecoilValue } from 'recoil'; import { patchKRInfo } from '../../../store/store'; -import { DeleteKR } from '../../../apis/apiDELETE'; -import { CreateKR } from '../../../apis/apiPOST'; +import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; +import { useRecoilValue } from 'recoil'; const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); diff --git a/src/components/global/globalModal/Modal.jsx b/src/components/global/globalModal/Modal.jsx index a607863..245973c 100644 --- a/src/components/global/globalModal/Modal.jsx +++ b/src/components/global/globalModal/Modal.jsx @@ -1,8 +1,7 @@ -import React from 'react'; import { ModalBackground, ModalBox } from './modal.styled'; +import React from 'react'; const Modal = children => { - console.log(children); return ( <> <ModalBackground /> diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index 9d27019..754d742 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -1,21 +1,17 @@ -import React, { useEffect, useState } from 'react'; -import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; - -import DatePicker, { DateObject } from 'react-multi-date-picker'; -import transition from 'react-element-popper/animations/transition'; -import opacity from 'react-element-popper/animations/opacity'; - +import { CreateObjective } from '../../../apis/apiPOST'; +import calender from '../../../assets/calender.png'; import close from '../../../assets/close.png'; import object from '../../../assets/object.png'; -import calender from '../../../assets/calender.png'; - +import Toast from '../Toast'; import ColorDropDown from '../globaldropdown/ColorDropDown'; import { OnChange } from '../onChange'; -import ReactGA from 'react-ga4'; - -import { CreateObjective, CreateKR } from '../../../apis/apiPOST'; +import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; -import Toast from '../Toast'; +import React, { useEffect, useState } from 'react'; +import opacity from 'react-element-popper/animations/opacity'; +import transition from 'react-element-popper/animations/transition'; +import ReactGA from 'react-ga4'; +import DatePicker, { DateObject } from 'react-multi-date-picker'; import { toast } from 'react-toastify'; const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index 08653d7..7fa68b0 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -1,23 +1,22 @@ -import React, { useEffect, useState } from 'react'; -import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; - -import DatePicker, { DateObject } from 'react-multi-date-picker'; -import transition from 'react-element-popper/animations/transition'; -import opacity from 'react-element-popper/animations/opacity'; -import trash from '../../../assets/trash.png'; +import { DeleteObjective } from '../../../apis/apiDELETE'; +import { PatchObjective } from '../../../apis/apiPATCH'; +import calender from '../../../assets/calender.png'; import close from '../../../assets/close.png'; import object from '../../../assets/object.png'; -import calender from '../../../assets/calender.png'; +import trash from '../../../assets/trash.png'; +import { patchOKRInfo } from '../../../store/store'; +import Toast from '../Toast'; import ColorDropDown from '../globaldropdown/ColorDropDown'; import { OnChange } from '../onChange'; +import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; -import Toast from '../Toast'; +import React, { useEffect, useState } from 'react'; +import opacity from 'react-element-popper/animations/opacity'; +import transition from 'react-element-popper/animations/transition'; +import ReactGA from 'react-ga4'; +import DatePicker, { DateObject } from 'react-multi-date-picker'; import { toast } from 'react-toastify'; -import { PatchObjective } from '../../../apis/apiPATCH'; -import { patchOKRInfo } from '../../../store/store'; import { useRecoilValue } from 'recoil'; -import { DeleteObjective } from '../../../apis/apiDELETE'; -import ReactGA from 'react-ga4'; const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); @@ -82,8 +81,6 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { setObjInfo({ ...objInfo, enddate: new DateObject(object).format() }); }; - // Object가 있는지 여부----- 추후 수정 - const createO = () => { const startd = new Date(objInfo.startdate); const endd = new Date(objInfo.enddate); diff --git a/src/components/global/globalModal/Potal.jsx b/src/components/global/globalModal/Potal.jsx index c725d3d..a87df8d 100644 --- a/src/components/global/globalModal/Potal.jsx +++ b/src/components/global/globalModal/Potal.jsx @@ -1,4 +1,5 @@ import reactDom from 'react-dom'; + const Potal = ({ children }) => { const el = document.getElementById('portalsModal'); return reactDom.createPortal(children, el); diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index 6a6550a..71c63b6 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -1,17 +1,18 @@ -import React, { useEffect, useState } from 'react'; -import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; -import close from '../../../assets/close.png'; -import kr from '../../../assets/kr.png'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; import { PatchKRProgress, PatchObjectiveProgress, } from '../../../apis/apiPATCH'; -import { useRecoilValue } from 'recoil'; +import close from '../../../assets/close.png'; +import kr from '../../../assets/kr.png'; +import { trackEvent } from '../../../router/RouteChangeTracker'; import { patchProgressInfo } from '../../../store/store'; import { PatchPersentBox, PesentContainer } from '../../mainpage/OKR.styled'; +import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; -import { trackEvent } from '../../../router/RouteChangeTracker'; +import { useRecoilValue } from 'recoil'; + const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const queryClient = useQueryClient(); diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 4e452f9..fef7cbf 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -1,32 +1,29 @@ -import React, { useEffect, useState } from 'react'; +import { GetOKR } from '../../../apis/apiGET'; +import { CreateTodo } from '../../../apis/apiPOST'; +import calender from '../../../assets/calender.png'; +import close from '../../../assets/close.png'; +import memo from '../../../assets/memo.png'; +import todoOkr from '../../../assets/todoOKR.png'; +import todo from '../../../assets/todoTODO.png'; +import { ToggleEndState, ToggleStartState } from '../../../store/store'; +import OkrDropDown from '../globaldropdown/OkrDropDown'; +import PriorityDropDown from '../globaldropdown/PriorityDropDown'; +import { OnChange } from '../onChange'; import { ModalBackground, ModalBox, OKRBox, ToggleContainer, } from './modal.styled'; - +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import React, { useEffect, useState } from 'react'; +import opacity from 'react-element-popper/animations/opacity'; +import transition from 'react-element-popper/animations/transition'; +import ReactGA from 'react-ga4'; import DatePicker, { DateObject } from 'react-multi-date-picker'; import TimePicker from 'react-multi-date-picker/plugins/time_picker'; -import transition from 'react-element-popper/animations/transition'; -import opacity from 'react-element-popper/animations/opacity'; - -import close from '../../../assets/close.png'; -import todoOkr from '../../../assets/todoOKR.png'; -import todo from '../../../assets/todoTODO.png'; -import memo from '../../../assets/memo.png'; -import calender from '../../../assets/calender.png'; -import { OnChange } from '../onChange'; -import OkrDropDown from '../globaldropdown/OkrDropDown'; -import PriorityDropDown from '../globaldropdown/PriorityDropDown'; -import { useRecoilState } from 'recoil'; -import { ToggleEndState, ToggleStartState } from '../../../store/store'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { CreateTodo } from '../../../apis/apiPOST'; import { toast } from 'react-toastify'; -import Toast from '../Toast'; -import { GetOKR } from '../../../apis/apiGET'; -import ReactGA from 'react-ga4'; +import { useRecoilState } from 'recoil'; const TodoModal = ({ onCloseTodoModal, @@ -111,9 +108,7 @@ const TodoModal = ({ // startDateWithTime 변환 함수 년, 월 시:분 const convertStartWithTime = (date, format = timeFormat.format) => { let object = { date, format }; - console.log(new DateObject(object).format()); setTimeFormat(new DateObject(object).format()); - console.log('start :', new DateObject(object).format()); setTodoInfo({ ...todoInfo, @@ -125,9 +120,7 @@ const TodoModal = ({ // endDateWithTime 변환 함수 년, 월 시:분 const convertEndWithTime = (date, format = timeFormat.format) => { let object = { date, format }; - // console.log(object); setTimeFormat(new DateObject(object).format()); - console.log(new DateObject(object).format()); setTodoInfo({ ...todoInfo, endDate: new DateObject(object).format().split(' ')[0], @@ -160,7 +153,6 @@ const TodoModal = ({ queryClient.invalidateQueries(['ALLTODO']); queryClient.invalidateQueries(['PASTTODO']); toast('TODO가 생성되었습니다.'); - // console.log(response); }, onError: response => { if (process.env.NODE_ENV !== 'development') { @@ -173,21 +165,13 @@ const TodoModal = ({ }); const { data: getOkrData } = useQuery(['getOkr'], GetOKR, { - onSuccess: response => { - // console.log('df'); - console.log(response); - }, + onSuccess: response => {}, onError: response => {}, }); const [oid, setOid] = useState(0); const [kid, setKid] = useState(0); - console.log('oid :', oid); - console.log(setOid); - - console.log('dddddddd'); - // 저장 버튼 누르면 생성 const createT = () => { const startd = new Date(todoInfo.startDate); diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 3af21ef..6aa0501 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -1,33 +1,31 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import React, { useEffect, useState } from 'react'; -import { useRecoilState, useRecoilValue } from 'recoil'; +import { DeleteTodo } from '../../../apis/apiDELETE'; import { PatchTodo } from '../../../apis/apiPATCH'; +import calender from '../../../assets/calender.png'; +import close from '../../../assets/close.png'; +import memo from '../../../assets/memo.png'; +import todo from '../../../assets/todoTODO.png'; import trash from '../../../assets/trash.png'; import { patchTodoInfo, ToggleEndState, ToggleStartState, } from '../../../store/store'; +import PatchPriority from './../globaldropdown/PatchPriority'; import { ModalBackground, ModalBox, OKRBox, ToggleContainer, } from './modal.styled'; -import close from '../../../assets/close.png'; -import todoOkr from '../../../assets/todoOKR.png'; -import todo from '../../../assets/todoTODO.png'; -import memo from '../../../assets/memo.png'; -import calender from '../../../assets/calender.png'; -import OkrDropDown from './../globaldropdown/OkrDropDown'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import React, { useEffect, useState } from 'react'; +import opacity from 'react-element-popper/animations/opacity'; +import transition from 'react-element-popper/animations/transition'; +import ReactGA from 'react-ga4'; import DatePicker, { DateObject } from 'react-multi-date-picker'; import TimePicker from 'react-multi-date-picker/plugins/time_picker'; -import transition from 'react-element-popper/animations/transition'; -import opacity from 'react-element-popper/animations/opacity'; import { toast } from 'react-toastify'; -import PatchPriority from './../globaldropdown/PatchPriority'; -import { DeleteTodo } from '../../../apis/apiDELETE'; -import ReactGA from 'react-ga4'; +import { useRecoilState, useRecoilValue } from 'recoil'; const TodoPathModal = ({ onCloseModal }) => { useEffect(() => { @@ -66,7 +64,6 @@ const TodoPathModal = ({ onCloseModal }) => { const [defaultFormat, setDefaultFormat] = useState({ format: 'YYYY-MM-DD' }); const todoInfo = useRecoilValue(patchTodoInfo); - // console.log(todoInfo); const [title, setTitle] = useState({ memo: todoInfo.memo, @@ -107,10 +104,7 @@ const TodoPathModal = ({ onCloseModal }) => { // startDateWithTime 변환 함수 년, 월 시:분 const convertStartWithTime = (date, format = timeFormat.format) => { let object = { date, format }; - // console.log(new DateObject(object).format()); setTimeFormat(new DateObject(object).format()); - // console.log('start :', new DateObject(object).format()); - setTitle({ ...title, startDate: new DateObject(object).format().split(' ')[0], @@ -121,9 +115,7 @@ const TodoPathModal = ({ onCloseModal }) => { // endDateWithTime 변환 함수 년, 월 시:분 const convertEndWithTime = (date, format = timeFormat.format) => { let object = { date, format }; - // console.log(object); setTimeFormat(new DateObject(object).format()); - // console.log(new DateObject(object).format()); setTitle({ ...title, endDate: new DateObject(object).format().split(' ')[0], @@ -157,7 +149,6 @@ const TodoPathModal = ({ onCloseModal }) => { queryClient.invalidateQueries(['TODO']); queryClient.invalidateQueries(['ALLTODO']); queryClient.invalidateQueries(['PASTTODO']); - console.log('response :', response); }, onError: response => { if (process.env.NODE_ENV !== 'development') { @@ -191,17 +182,12 @@ const TodoPathModal = ({ onCloseModal }) => { return toast('종료일은 시작일보다 빠르게 설정할 수 없습니다.'); } else { let id = todoInfo.id; - // console.log(id); let value = title; - // console.log(id, value); patchTodo({ id, value }); - // createTodo({ Oid, Kid, Info }); toast('해당 To Do가 수정되었습니다.'); onCloseModal(); } }; - // console.log('title :', title); - // console.log('todoInfo :', todoInfo); const { mutate: deleteTodo } = useMutation(DeleteTodo, { onSuccess: response => { @@ -230,8 +216,6 @@ const TodoPathModal = ({ onCloseModal }) => { const [oid, setOid] = useState(0); const [kid, setKid] = useState(0); - console.log(title); - return ( <> <ModalBackground /> diff --git a/src/components/global/globalModal/modal.styled.js b/src/components/global/globalModal/modal.styled.js index 2d73db4..3bb05a0 100644 --- a/src/components/global/globalModal/modal.styled.js +++ b/src/components/global/globalModal/modal.styled.js @@ -1,8 +1,8 @@ -import styled from 'styled-components'; -import start from '../../../assets/start.png'; -import startHover from '../../../assets/startHover.png'; import end from '../../../assets/end.png'; import endHover from '../../../assets/endHover.png'; +import start from '../../../assets/start.png'; +import startHover from '../../../assets/startHover.png'; +import styled from 'styled-components'; export const ModalBackground = styled.div` height: 100%; diff --git a/src/components/global/globaldropdown/ColorDropDown.jsx b/src/components/global/globaldropdown/ColorDropDown.jsx index adbf6ed..a6bf1b7 100644 --- a/src/components/global/globaldropdown/ColorDropDown.jsx +++ b/src/components/global/globaldropdown/ColorDropDown.jsx @@ -1,9 +1,9 @@ -import { useState, useRef } from 'react'; -import { useDropDown, color } from './dropdown'; -import { ColorSelect, DropIcon } from './dropDown.styled'; +import { GetOKR } from '../../../apis/apiGET'; import Arrow from '../../../assets/dropdownArrow.png'; +import { ColorSelect, DropIcon } from './dropDown.styled'; +import { useDropDown, color } from './dropdown'; import { useQuery } from '@tanstack/react-query'; -import { GetOKR } from '../../../apis/apiGET'; +import { useState, useRef } from 'react'; const ColorDropDown = ({ setObjInfo, objInfo }) => { // 드롭다운 상태 diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index 572d89d..93a1cc5 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -1,12 +1,11 @@ -import { useState } from 'react'; -import { emotion, useEmotionDropDown } from './dropdown'; +import { PatchEmotion } from '../../../apis/apiPATCH'; +import bad from '../../../assets/bad2.png'; +import good from '../../../assets/good.png'; +import normal from '../../../assets/normal2.png'; import { EmotionSelect } from './dropDown.styled'; +import { emotion } from './dropdown'; import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { PatchEmotion } from '../../../apis/apiPATCH'; import ReactGA from 'react-ga4'; -import normal from '../../../assets/normal2.png'; -import good from '../../../assets/good.png'; -import bad from '../../../assets/bad2.png'; const Emotion = ({ keyResultId, diff --git a/src/components/global/globaldropdown/OkrDropDown.jsx b/src/components/global/globaldropdown/OkrDropDown.jsx index e4a60d5..cf5a6c0 100644 --- a/src/components/global/globaldropdown/OkrDropDown.jsx +++ b/src/components/global/globaldropdown/OkrDropDown.jsx @@ -1,37 +1,25 @@ -import { useState, useRef } from 'react'; -import { useDropDown } from './dropdown'; +import { GetOKR } from '../../../apis/apiGET'; +import Arrow from '../../../assets/dropdownArrow.png'; import { DropIcon, - KRTodoBox, - KRTodoDefault, OkrDropBox, OkrDropContainer, OkrItem, } from './dropDown.styled'; -import Arrow from '../../../assets/dropdownArrow.png'; +import { useDropDown } from './dropdown'; import { useQuery } from '@tanstack/react-query'; -import { GetOKR } from '../../../apis/apiGET'; +import { useState, useRef } from 'react'; const OkrDropDown = ({ setKid, setOid, title }) => { - // console.log(setOid); - // console.log(title); const dropDownRef = useRef(null); const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); - const [finalValueKR, setFinalValueKR] = - useState('선택하지 않으면 기존꺼와 동일'); - const [finalValueText, setFinalValueText] = useState(''); - - const [finalValueKRColor, setFinalValueKRColor] = useState(''); - // const [okrData, setOkrData] = useState(); const [valueState, setValueState] = useState(false); const [finalValue, setFinalValue] = useState(''); const { data: getOkrData } = useQuery(['getOkr'], GetOKR, { - onSuccess: response => { - // console.log(getOkrData); - }, + onSuccess: response => {}, onError: response => {}, }); @@ -40,11 +28,9 @@ const OkrDropDown = ({ setKid, setOid, title }) => { setFinalValue(e.target.outerText); if (e.target.id === '') { - // console.log('none일때'); setKid(0); setOid(0); } else { - console.log(e.target.attributes.name.value); setOid(Number(e.target.attributes.name.value)); setKid(Number(e.target.id)); } @@ -66,16 +52,6 @@ const OkrDropDown = ({ setKid, setOid, title }) => { : 'none 핵심결과 선택하지 않고 To Do 작성' } /> - {/* <KRTodoBox className='input-container' onClick={() => setIsOpen(!isOpen)}> - <div - style={{ - color: finalValueKR ? finalValueKRColor : 'black', - }}> - {finalValueKR} - </div> - - <div className='black'>{finalValueText}</div> - </KRTodoBox> */} <DropIcon src={Arrow} /> {isOpen && ( diff --git a/src/components/global/globaldropdown/PatchPriority.jsx b/src/components/global/globaldropdown/PatchPriority.jsx index 33f1653..d694fdd 100644 --- a/src/components/global/globaldropdown/PatchPriority.jsx +++ b/src/components/global/globaldropdown/PatchPriority.jsx @@ -1,12 +1,11 @@ -import { useState, useRef } from 'react'; -import { useDropDown, priority } from './dropdown'; -import { PrioritySelect, DropIcon } from './dropDown.styled'; +import { GetTodo } from '../../../apis/apiGET'; import Arrow from '../../../assets/dropdownArrow.png'; +import { PrioritySelect, DropIcon } from './dropDown.styled'; +import { useDropDown, priority } from './dropdown'; import { useQuery } from '@tanstack/react-query'; -import { GetTodo } from '../../../apis/apiGET'; +import { useState, useRef } from 'react'; const PatchPriority = ({ title, setTitle }) => { - // console.log(todoInfo, setTodoInfo); const dropDownRef = useRef(null); const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); const [finalValue, setFinalValue] = useState(`${title.priority}순위`); @@ -15,7 +14,6 @@ const PatchPriority = ({ title, setTitle }) => { onSuccess: response => {}, onError: response => {}, }); - // console.log(todoInfo); const DropDownItem = ({ value, setFinalValue, @@ -26,14 +24,12 @@ const PatchPriority = ({ title, setTitle }) => { name, el, }) => { - // console.log(el); const ValueClick = () => { setFinalValue(name); setIsOpen(!isOpen); setTitle({ ...title, priority: Number(value) }); }; - // console.log(title); return ( <> diff --git a/src/components/global/globaldropdown/PriorityDropDown.jsx b/src/components/global/globaldropdown/PriorityDropDown.jsx index 4082c57..b3221a5 100644 --- a/src/components/global/globaldropdown/PriorityDropDown.jsx +++ b/src/components/global/globaldropdown/PriorityDropDown.jsx @@ -1,14 +1,12 @@ -import { useState, useRef } from 'react'; -import { useDropDown, priority } from './dropdown'; -import { PrioritySelect, DropIcon } from './dropDown.styled'; import Arrow from '../../../assets/dropdownArrow.png'; +import { PrioritySelect, DropIcon } from './dropDown.styled'; +import { useDropDown, priority } from './dropdown'; +import { useState, useRef } from 'react'; const PriorityDropDown = ({ todoInfo, setTodoInfo }) => { - // console.log(todoInfo, setTodoInfo); const dropDownRef = useRef(null); const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); const [finalValue, setFinalValue] = useState(''); - // console.log(todoInfo); const DropDownItem = ({ value, setFinalValue, @@ -19,14 +17,12 @@ const PriorityDropDown = ({ todoInfo, setTodoInfo }) => { name, el, }) => { - // console.log(el); const ValueClick = () => { setFinalValue(name); setIsOpen(!isOpen); setTodoInfo({ ...todoInfo, priority: Number(value) }); }; - // console.log(todoInfo); return ( <> diff --git a/src/components/global/globaldropdown/TeamDropDown.jsx b/src/components/global/globaldropdown/TeamDropDown.jsx index 76dca04..2fda789 100644 --- a/src/components/global/globaldropdown/TeamDropDown.jsx +++ b/src/components/global/globaldropdown/TeamDropDown.jsx @@ -1,7 +1,7 @@ -import { useState, useRef } from 'react'; -import { useDropDown, team } from './dropdown'; -import { DropdownContainer, DropIcon } from './dropDown.styled'; import Arrow from '../../../assets/dropdownArrow.png'; +import { DropdownContainer, DropIcon } from './dropDown.styled'; +import { useDropDown, team } from './dropdown'; +import { useState, useRef } from 'react'; const TeamDropDown = ({ setUserInfo, userInfo }) => { // 드롭다운 상태 @@ -20,12 +20,6 @@ const TeamDropDown = ({ setUserInfo, userInfo }) => { const ValueClick = () => { setFinalValue(value); setIsOpen(!isOpen); - - // console.log(isOpen); - // console.log(value); - // console.log('valueClick - finalValue :', finalValue); - - // setUserInfo({ ...userInfo, teamposition: value }); setUserInfo({ ...userInfo, team: value }); }; diff --git a/src/components/global/globaldropdown/TeamPosiDropDown.jsx b/src/components/global/globaldropdown/TeamPosiDropDown.jsx index 8e525e7..6bc5930 100644 --- a/src/components/global/globaldropdown/TeamPosiDropDown.jsx +++ b/src/components/global/globaldropdown/TeamPosiDropDown.jsx @@ -1,7 +1,7 @@ -import { useState, useRef } from 'react'; -import { useDropDown, teamPosi } from './dropdown'; -import { DropdownContainer, DropIcon } from './dropDown.styled'; import Arrow from '../../../assets/dropdownArrow.png'; +import { DropdownContainer, DropIcon } from './dropDown.styled'; +import { useDropDown, teamPosi } from './dropdown'; +import { useState, useRef } from 'react'; const TeamPosiDropDown = ({ setUserInfo, userInfo }) => { // 드롭다운 상태 diff --git a/src/components/global/globaldropdown/dropdown.js b/src/components/global/globaldropdown/dropdown.js index fb65b21..e58dab3 100644 --- a/src/components/global/globaldropdown/dropdown.js +++ b/src/components/global/globaldropdown/dropdown.js @@ -1,17 +1,15 @@ -import { useState, useEffect } from 'react'; - -import redF from '../../../assets/red.png'; -import yellowF from '../../../assets/yellow.png'; +import bad from '../../../assets/bad2.png'; import blueF from '../../../assets/blue.png'; -import grayF from '../../../assets/gray.png'; -import one from '../../../assets/one.png'; -import two from '../../../assets/two.png'; -import three from '../../../assets/three.png'; import four from '../../../assets/four.png'; - import good from '../../../assets/good.png'; +import grayF from '../../../assets/gray.png'; import normal from '../../../assets/normal2.png'; -import bad from '../../../assets/bad2.png'; +import one from '../../../assets/one.png'; +import redF from '../../../assets/red.png'; +import three from '../../../assets/three.png'; +import two from '../../../assets/two.png'; +import yellowF from '../../../assets/yellow.png'; +import { useState, useEffect } from 'react'; export const useDropDown = (ref, initialState) => { const [isOpen, setIsOpen] = useState(initialState); @@ -19,10 +17,6 @@ export const useDropDown = (ref, initialState) => { // 밖에 누르면 닫히기 useEffect(() => { const clickOutside = e => { - // console.log(ref.current); - // console.log(e.target); - // console.log(ref.current.contains(e.target)); //true - // console.log(ref.current && !ref.current.contains(e.target)); // false if (ref.current && !ref.current.contains(e.target)) { setIsOpen(!isOpen); } @@ -42,7 +36,6 @@ export const useDropDown = (ref, initialState) => { }; export const team = { - // list: ['기획팀', '개발팀', '인사팀', '채운팀'], list: [ 'P01', 'P02', @@ -58,7 +51,6 @@ export const team = { 'P012', 'P013', ], - // list: ['팀슬램덩크1', '팀슬램덩크2', '팀슬램덩크3'], defaultValue: '부서를 선택해주세요', }; diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index aa7e8ff..aab107e 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -1,13 +1,9 @@ -import React, { useState, useEffect } from 'react'; -import { Guide, Layout, LogoImg } from './header.styled'; -import logoutOFF from '../../../assets/logouton.png'; import logoutON from '../../../assets/logoutoff.png'; -import { useNavigate } from 'react-router-dom'; -import alarm from '../../../assets/alarm.png'; -import user from '../../../assets/user.png'; +import logoutOFF from '../../../assets/logouton.png'; +import { Guide, Layout, LogoImg } from './header.styled'; +import React, { useState, useEffect } from 'react'; import ReactGA from 'react-ga4'; -import { useQuery } from '@tanstack/react-query'; -import { GetTeamInfo, GetUserInfo } from '../../../apis/apiGET'; +import { useNavigate } from 'react-router-dom'; export default function Header() { const navigate = useNavigate(); @@ -32,12 +28,6 @@ export default function Header() { setLogoutImg(logoutON); }; - const { data } = useQuery(['userinfo'], GetUserInfo, { - onSuccess: response => { - console.log(response); - }, - }); - const logout = () => { if (process.env.NODE_ENV !== 'development') { ReactGA.event({ diff --git a/src/components/global/header/header.styled.js b/src/components/global/header/header.styled.js index 030e9a9..3f529f0 100644 --- a/src/components/global/header/header.styled.js +++ b/src/components/global/header/header.styled.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import logo from '../../../assets/logo.png'; +import styled from 'styled-components'; export const Layout = styled.div` width: 100%; diff --git a/src/components/global/onChange.js b/src/components/global/onChange.js index db51f17..e4c3ffd 100644 --- a/src/components/global/onChange.js +++ b/src/components/global/onChange.js @@ -2,7 +2,3 @@ export const OnChange = (event, state, setState) => { const { name, value } = event.target; setState({ ...state, [name]: value }); }; - -// export const OnChangeArray = (event, state, setState) => { -// const -// } diff --git a/src/components/global/theme.jsx b/src/components/global/theme.jsx index 24cae7e..a8f34c6 100644 --- a/src/components/global/theme.jsx +++ b/src/components/global/theme.jsx @@ -12,13 +12,6 @@ const theme = { flex_row: 'display: flex; align-items: center;', row_center: 'display:flex; align-items : center; justify-content: center;', - // max_width: `max-width:768px`, - - // border_box: `box-sizing:border-box;`, - - // mobile: `(max-width: 639px)`, - // tablet: `(max-width: 767px)`, - // desktop: `(min-width: 1023px)`, }; export default theme; diff --git a/src/components/mainpage/Calendar.jsx b/src/components/mainpage/Calendar.jsx index ce89149..d95d645 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/mainpage/Calendar.jsx @@ -1,9 +1,9 @@ -import React, { useState } from 'react'; -import FullCalendar from '@fullcalendar/react'; -import dayGridPlugin from '@fullcalendar/daygrid'; +import { GetTodo } from '../../apis/apiGET'; import { Container } from './Calendar.styled'; +import dayGridPlugin from '@fullcalendar/daygrid'; +import FullCalendar from '@fullcalendar/react'; import { useQuery } from '@tanstack/react-query'; -import { GetTodo } from '../../apis/apiGET'; +import React, { useState } from 'react'; export default function Calendar() { const array = []; @@ -11,7 +11,6 @@ export default function Calendar() { const { data: getTodo } = useQuery(['TODO'], GetTodo, { onSuccess: response => { - // console.log(response); response?.map(el => { const endDate = new Date(el.endDate); endDate.setDate(endDate.getDate() + 1); diff --git a/src/components/mainpage/OKR.jsx b/src/components/mainpage/OKR.jsx index cb47a81..e1d22d9 100644 --- a/src/components/mainpage/OKR.jsx +++ b/src/components/mainpage/OKR.jsx @@ -1,27 +1,30 @@ -import React, { useEffect } from 'react'; -import Potal from '../global/globalModal/Potal.jsx'; -import { useState, useRef } from 'react'; -import Kr from './Kr'; -import OkrObject from './OkrItem'; -import { Container, Header, HeaderBox, OkrContainer } from './OKR.styled'; +import { GetOKR, GetTeamInfo } from '../../apis/apiGET.js'; +import plus from '../../assets/plus.png'; +import AlertModal from '../global/globalModal/AlertModal.jsx'; import OkrModal from '../global/globalModal/OkrModal.jsx'; +import Potal from '../global/globalModal/Potal.jsx'; import { NotHave } from '../global/globalModal/modal.styled'; +import { Container, Header, HeaderBox, OkrContainer } from './OKR.styled'; +import OkrObject from './OkrItem'; import { useQuery } from '@tanstack/react-query'; -import plus from '../../assets/plus.png'; -import more from '../../assets/more.png'; -import { GetOKR } from '../../apis/apiGET.js'; -import AlertModal from '../global/globalModal/AlertModal.jsx'; +import React from 'react'; +import { useState, useRef } from 'react'; export default function OKR() { //모달 상태관리 const [okrModalOn, setOkrModalOn] = useState(false); const [alertModalOn, setAlertModalOn] = useState(false); + const [teamName, setTeamName] = useState(''); const { data: getOKRData } = useQuery(['OKR'], GetOKR, { + onSuccess: response => {}, + onError: response => {}, + }); + + const { data: teaminfo } = useQuery(['team'], GetTeamInfo, { onSuccess: response => { - // console.log(response); + setTeamName(response[0].team); }, - onError: response => {}, }); /**모달 닫는 함수 */ @@ -65,7 +68,7 @@ export default function OKR() { return ( <Container> <HeaderBox> - <Header>Team OKR</Header> + <Header>{teamName} OKR</Header> <div className='btnBox'> <div onClick={createOKR}> <img src={plus} alt='' /> diff --git a/src/components/mainpage/OkrItem.jsx b/src/components/mainpage/OkrItem.jsx index 560bcd3..e8acee5 100644 --- a/src/components/mainpage/OkrItem.jsx +++ b/src/components/mainpage/OkrItem.jsx @@ -1,4 +1,15 @@ -import React, { useState, useRef, useEffect } from 'react'; +import { GetOKR } from '../../apis/apiGET.js'; +import kRAdd from '../../assets/KRAdd.png'; +import { + patchOKRInfo, + patchKRInfo, + patchProgressInfo, +} from '../../store/store'; +import KrPatchModal from '../global/globalModal/KrPatchModal'; +import OkrPatchModal from '../global/globalModal/OkrPatchModal'; +import Portal from '../global/globalModal/Potal'; +import ProgressPatchModal from '../global/globalModal/ProgressPatchModal'; +import Emotion from '../global/globaldropdown/Emotion'; import { OKRBox, Objective, @@ -7,25 +18,11 @@ import { EmptyKR, PersentBox, } from './OKR.styled'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import Portal from '../global/globalModal/Potal'; -import OkrPatchModal from '../global/globalModal/OkrPatchModal'; -import KrPatchModal from '../global/globalModal/KrPatchModal'; -import ProgressPatchModal from '../global/globalModal/ProgressPatchModal'; -import { GetKR, GetOKR } from '../../apis/apiGET.js'; -import { PatchObjectiveProgress } from '../../apis/apiPATCH'; -import { - patchOKRInfo, - patchKRInfo, - patchProgressInfo, - IsOpen, -} from '../../store/store'; -import { useSetRecoilState, useRecoilValue, useRecoilState } from 'recoil'; -import kRAdd from '../../assets/KRAdd.png'; -import Emotion from '../global/globaldropdown/Emotion'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import React, { useState, useRef, useEffect } from 'react'; +import { useSetRecoilState } from 'recoil'; const OkrObject = () => { - const queryClient = useQueryClient(); const [okrModalOn, setOkrModalOn] = useState(false); const [krModalOn, setkrModalOn] = useState(false); const [progressModalOn, setprogressModalOn] = useState(false); @@ -97,12 +94,9 @@ const OkrObject = () => { } }; - // const [slicedArray, setSlicedArray] = useState([]); const [KRArray, setKRArray] = useState([]); const { data: getOKRData } = useQuery(['OKR'], GetOKR, { onSuccess: response => { - // console.log(response); - // setSlicedArray(response?.slice(0, 2)); const newArray = response.map(data => { const newKRArray = [...data.keyresult]; newKRArray.sort((a, b) => a.krNumber - b.krNumber); @@ -112,19 +106,13 @@ const OkrObject = () => { }; }); setKRArray(newArray); - // console.log(KRArray); }, onError: response => {}, enabled: true, }); useEffect(() => {}); - /** +버튼 누르면 KR 생성하는 모달 띄움 */ const patchKR = (id, KR, state, index) => { - // console.log('kr', id, KR, state, index); - // console.log(patchKRInfo); - // console.log('okr', getOKRData[index]); - //test if (state === 'patch') setPatchkrInfo({ id: id, @@ -137,7 +125,6 @@ const OkrObject = () => { let index3 = false; for (let i = 0; i < getOKRData[index]?.keyresult.length; i++) { const forNum = Number(getOKRData[index]?.keyresult[i].krNumber); - // console.log('fn', forNum); if (forNum === 1) { index1 = true; } @@ -148,7 +135,6 @@ const OkrObject = () => { index3 = true; } } - // console.log('index', index1, index2, index3); if (index1 === false) { setPatchkrInfo({ id: id, diff --git a/src/components/mainpage/Test.jsx b/src/components/mainpage/Test.jsx deleted file mode 100644 index 622a3d4..0000000 --- a/src/components/mainpage/Test.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useState } from 'react'; -import styled from 'styled-components'; - -const Test = () => { - const [persent, setPersent] = useState(0); - return ( - <PersentBox> - <input - type='range' - min={0} - max={100} - step={1} - value={persent} - onChange={e => setPersent(e.target.valueAsNumber)} - /> - <div className='bg' style={{ width: `${persent}%` }}></div> - <div className='color'>{persent}</div> - </PersentBox> - ); -}; - -export default Test; - -const PersentBox = styled.div` - position: relative; - input[type='range'] { - //기존 디자인 없애기 - -webkit-appearance: none; - width: 100%; - background: transparent; - background: #ddd; - padding: 0; - } - input[type='range']::-webkit-slider-thumb { - // 포인터 역할 - -webkit-appearance: none; - background: #564b9a; - cursor: pointer; - height: 18px; - width: 18px; - margin-top: -10px; - border-radius: 50%; - position: relative; - z-index: 3; - } - input[type='range']::-webkit-slider-runnable-track { - //포인터가 움직이는 track - /* height: 3px; */ - width: 100%; - height: 11px; - cursor: pointer; - border-radius: 1.3px; - border: 0.2px solid #f2f4f6; - } - input[type='range']:focus::-webkit-slider-runnable-track { - /* background: #f2f4f6; */ - /* background: #ddd; */ - } - .bg { - height: 11px; - /* margin-top: 10px; */ - background-color: skyblue; - position: absolute; - top: 0px; - /* left: 0px; */ - } -`; diff --git a/src/components/mainpage/ToDo.jsx b/src/components/mainpage/ToDo.jsx index 5b00a7b..0f3c38e 100644 --- a/src/components/mainpage/ToDo.jsx +++ b/src/components/mainpage/ToDo.jsx @@ -1,7 +1,9 @@ -import React, { useState, useRef } from 'react'; -import { NotHave } from '../global/globalModal/modal.styled'; +import { GetTodo } from '../../apis/apiGET'; +import plus from '../../assets/plus.png'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; +import { NotHave } from '../global/globalModal/modal.styled'; +import TodoItem from './TodoItem'; import { Container, Header, @@ -9,10 +11,8 @@ import { TodoContainer, StTodoItem, } from './todo.styled'; -import TodoItem from './TodoItem'; -import plus from '../../assets/plus.png'; import { useQuery } from '@tanstack/react-query'; -import { GetTodo } from '../../apis/apiGET'; +import React, { useState, useRef } from 'react'; export default function ToDo() { //모달 상태관리 @@ -37,9 +37,7 @@ export default function ToDo() { // 임시 const { data: getTodo } = useQuery(['TODO'], GetTodo, { - onSuccess: response => { - // console.log('대시보드 todo :', response); - }, + onSuccess: response => {}, onError: response => {}, }); return ( diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index f266503..dba03b5 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -1,32 +1,23 @@ -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import React, { useEffect, useRef, useState } from 'react'; -import { GetCompletionTodo, GetOKR, GetTodo } from '../../apis/apiGET'; +import { GetCompletionTodo } from '../../apis/apiGET'; +import { PatchCheck } from '../../apis/apiPATCH'; +import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; -import blue from '../../assets/todoBlue.png'; -import { PatchCheck } from '../../apis/apiPATCH'; -import { toast } from 'react-toastify'; -import Toast from '../global/Toast'; import { patchTodoInfo } from '../../store/store'; -import { useSetRecoilState } from 'recoil'; +import Toast from '../global/Toast'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; -import Todo from './../todo/Todo'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import React, { useState } from 'react'; import ReactGA from 'react-ga4'; +import { toast } from 'react-toastify'; +import { useSetRecoilState } from 'recoil'; const TodoItem = ({ getTodo }) => { const queryClient = useQueryClient(); - // const { data: getTodo } = useQuery(['TODO'], GetTodo, { - // onSuccess: response => { - // // console.log('getTodo :', response); - // }, - // onError: response => {}, - // }); - // filter 함수 사용 const now = new Date(); - const today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; const plusToday = `${now.getFullYear()}-${now.getMonth() + 1}-${ now.getDate() + 1 }`; @@ -40,8 +31,6 @@ const TodoItem = ({ getTodo }) => { return false; }); - console.log('filterArray :', filterArray); - // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { onSuccess: response => { diff --git a/src/components/mainpage/menu.styled.js b/src/components/mainpage/menu.styled.js index f38fc7b..d6d45a0 100644 --- a/src/components/mainpage/menu.styled.js +++ b/src/components/mainpage/menu.styled.js @@ -27,11 +27,11 @@ export const MenuItem = styled.button` border-radius: 0 7px 7px 0; padding: 0 2rem 0 0; line-height: 4.5rem; - color: ${({ text, teamName }) => + color: ${({ text }) => `${ text === 'All OKR' ? '#DEDEDE' - : text === teamName + ' OKR' + : text === 'Team OKR' ? '#DEDEDE' : text === 'Calendar' ? '#DEDEDE' diff --git a/src/components/mainpage/todo.styled.js b/src/components/mainpage/todo.styled.js index 76ebc8d..b539c21 100644 --- a/src/components/mainpage/todo.styled.js +++ b/src/components/mainpage/todo.styled.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import checkicon from '../../assets/checkFull.png'; +import styled from 'styled-components'; export const Container = styled.div` width: 100%; diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 5b970f6..5c4c230 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -1,11 +1,6 @@ -import React, { useEffect, useState } from 'react'; -import Eye from '../../assets/eye.png'; -import CloseEye from '../../assets/closedEye.png'; -import { OnChange } from '../global/onChange'; -import { useNavigate } from 'react-router-dom'; -import { useMutation, useQuery } from '@tanstack/react-query'; import { SignIn } from '../../apis/apiPOST'; -import ReactGA from 'react-ga4'; +import CloseEye from '../../assets/closedEye.png'; +import Eye from '../../assets/eye.png'; import { MainHeader, ArticleHeader, @@ -16,7 +11,11 @@ import { HelpBox, SignWrap, } from '../../styles/sign.styled'; -import { GetTeamInfo } from '../../apis/apiGET'; +import { OnChange } from '../global/onChange'; +import { useMutation } from '@tanstack/react-query'; +import React, { useEffect, useState } from 'react'; +import ReactGA from 'react-ga4'; +import { useNavigate } from 'react-router-dom'; const Test = () => { const navigate = useNavigate(); @@ -83,7 +82,6 @@ const Test = () => { const [signValidation, setSignValidation] = useState(''); const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { - console.log('login', response); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index bdc32ce..0098dbc 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -1,4 +1,6 @@ -import { useState, useEffect } from 'react'; +import { SignUp } from '../../apis/apiPOST'; +import CloseEye from '../../assets/closedEye.png'; +import Eye from '../../assets/eye.png'; import { MainHeader, ArticleHeader, @@ -9,16 +11,12 @@ import { SignUpBtnMargin, SignWrap, } from '../../styles/sign.styled'; -import ReactGA from 'react-ga4'; -import Eye from '../../assets/eye.png'; -import CloseEye from '../../assets/closedEye.png'; +import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; import { OnChange } from '../global/onChange'; -import { useNavigate } from 'react-router-dom'; import { useMutation } from '@tanstack/react-query'; -import { SignUp } from '../../apis/apiPOST'; -import TeamDropDown from '../../components/global/globaldropdown/TeamDropDown.jsx'; -import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; -import { trackEvent } from '../../router/RouteChangeTracker'; +import { useState, useEffect } from 'react'; +import ReactGA from 'react-ga4'; +import { useNavigate } from 'react-router-dom'; const Test = () => { const navigate = useNavigate(); @@ -62,14 +60,6 @@ const Test = () => { const [teamMessage, setTeamMessage] = useState(''); const [teamPosiMessage, setTeamPosiMessage] = useState(''); - /**드롭박스 값 추출해오는 함수 */ - const OnChangeOptionValue = e => { - console.log('dd'); - const { name, value } = e.target; - setUserInfo({ ...userInfo, [name]: value }); - }; - // console.log(userInfo); - // 이메일 useEffect(() => { if (email === '') { @@ -175,7 +165,6 @@ const Test = () => { ]); // 버튼을 눌렀을 때 이메일 중복 검사 - const [signValidation, setSignValidation] = useState(''); const { mutate: signUpMutate } = useMutation(SignUp, { onSuccess: response => { if (process.env.NODE_ENV !== 'development') { @@ -194,7 +183,6 @@ const Test = () => { action: '회원가입 실패', }); } - setSignValidation('이미 존재하는 이메일입니다.'); alert(response.response.data); }, }); diff --git a/src/components/teamOKR/TeamOKR.jsx b/src/components/teamOKR/TeamOKR.jsx index 817b05c..5501699 100644 --- a/src/components/teamOKR/TeamOKR.jsx +++ b/src/components/teamOKR/TeamOKR.jsx @@ -1,20 +1,6 @@ import React from 'react'; -import { GetDetailObjective } from '../../apis/apiGET'; -import { useQuery } from '@tanstack/react-query'; export default function TeamOKR() { - // const { data: getDetailObjectiveData } = useQuery( - // ['getObjective'], - // GetDetailObjective, - // { - // refetchOnWindowFocus: false, - // onSuccess: response => { - // console.log(response); - // }, - // onError: response => {}, - // } - // ); - return ( <h2 style={{ fontSize: '3rem', fontWeight: 'bold' }}>Coming Soon..!</h2> ); diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 4943603..add415c 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -1,17 +1,17 @@ -import React, { useState } from 'react'; -import { DDay, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; +import { PatchCheck } from '../../apis/apiPATCH'; import badgeS from '../../assets/badgeS.png'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; +import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; -import blue from '../../assets/todoBlue.png'; -import { PatchCheck } from '../../apis/apiPATCH'; -import { toast } from 'react-toastify'; -import ReactGA from 'react-ga4'; +import { patchTodoInfo } from '../../store/store'; import Potal from '../global/globalModal/Potal'; -import { useSetRecoilState } from 'recoil'; import TodoPathModal from '../global/globalModal/TodoPathModal'; -import { patchTodoInfo } from '../../store/store'; +import { DDay, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import React, { useState } from 'react'; +import ReactGA from 'react-ga4'; +import { toast } from 'react-toastify'; +import { useSetRecoilState } from 'recoil'; const DetailTodoItem = ({ el, today, tomorrow }) => { const queryClient = useQueryClient(); diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index c654cfe..f91c0dc 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -1,12 +1,12 @@ -import React, { useState } from 'react'; -import { Finsh, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; -import badgeS from '../../assets/badgeS.png'; -import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { GetPostTodo } from '../../apis/apiGET'; +import { PatchCheck } from '../../apis/apiPATCH'; +import badgeS from '../../assets/badgeS.png'; +import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; -import blue from '../../assets/todoBlue.png'; -import { PatchCheck } from '../../apis/apiPATCH'; +import { Finsh, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; +import React, { useState } from 'react'; import { toast } from 'react-toastify'; const FinishTodo = ({ el }) => { diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index d284f36..929e6ee 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -1,23 +1,23 @@ -import React, { useState } from 'react'; +import { GetPastTodo, GetUser } from '../../apis/apiGET'; +import { PatchCheck } from '../../apis/apiPATCH'; +import badgeS from '../../assets/badgeS.png'; +import blue from '../../assets/todoBlue.png'; +import red from '../../assets/todoRed.png'; +import yellow from '../../assets/todoYellow.png'; +import { patchTodoInfo } from '../../store/store'; +import Potal from '../global/globalModal/Potal'; +import TodoPathModal from '../global/globalModal/TodoPathModal'; import { StPastTodo, TodoDetailHeader, TodoDetailItem, } from './tododetail.styled'; -import badgeS from '../../assets/badgeS.png'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { GetPastTodo, GetUser } from '../../apis/apiGET'; -import red from '../../assets/todoRed.png'; -import yellow from '../../assets/todoYellow.png'; -import blue from '../../assets/todoBlue.png'; -import { PatchCheck } from '../../apis/apiPATCH'; -import { styled } from 'styled-components'; -import { toast } from 'react-toastify'; +import React, { useState } from 'react'; import ReactGA from 'react-ga4'; -import Potal from '../global/globalModal/Potal'; +import { toast } from 'react-toastify'; import { useSetRecoilState } from 'recoil'; -import TodoPathModal from '../global/globalModal/TodoPathModal'; -import { patchTodoInfo } from '../../store/store'; +import { styled } from 'styled-components'; const PastTodo = () => { const [show, setShow] = useState(true); diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index eb72b3b..8385b81 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -1,8 +1,8 @@ -import React from 'react'; -import { StTeam } from './tododetail.styled'; +import { GetUser } from '../../apis/apiGET'; import badgeB from '../../assets/badgeB.png'; +import { StTeam } from './tododetail.styled'; import { useQuery } from '@tanstack/react-query'; -import { GetUser } from '../../apis/apiGET'; +import React from 'react'; const TeamTodo = () => { const { data: getMember } = useQuery(['MEMBER'], GetUser, { diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index b0801bb..3f70d0f 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -1,14 +1,14 @@ -import { useQuery } from '@tanstack/react-query'; -import { useEffect, useRef, useState } from 'react'; -import styled from 'styled-components'; import { GetAllTodo, GetPostTodo, GetUser } from '../../apis/apiGET'; +import Toast from './../global/Toast'; import DetailTodoItem from './DetailTodoItem'; import FinishTodo from './FinishTodo'; import PastTodo from './PastTodo'; import TeamTodo from './TeamTodo'; -import { DetailTodoWrap, StTeam } from './tododetail.styled'; import TodoNavi from './TodoNavi'; -import Toast from './../global/Toast'; +import { DetailTodoWrap, StTeam } from './tododetail.styled'; +import { useQuery } from '@tanstack/react-query'; +import { useEffect, useRef, useState } from 'react'; +import styled from 'styled-components'; export default function Todo() { //todo 전부 가져오기 diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index ff4a273..d902f2d 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -1,9 +1,9 @@ -import React, { useState, useRef } from 'react'; -import { Link } from 'react-scroll'; -import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; +import plus from '../../assets/plus.png'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; -import plus from '../../assets/plus.png'; +import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; +import React, { useState, useRef } from 'react'; +import { Link } from 'react-scroll'; const TodoNavi = ({ todayFormat }) => { const today = new Date(); diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index db1f704..279f59f 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -1,11 +1,11 @@ -import styled from 'styled-components'; -import prev from '../../assets/prev.png'; -import next from '../../assets/next.png'; -import more from '../../assets/more.png'; +import checkicon from '../../assets/checkFull.png'; import down from '../../assets/down.png'; +import more from '../../assets/more.png'; +import next from '../../assets/next.png'; +import prev from '../../assets/prev.png'; import check from '../../assets/todoCheck.png'; import up from '../../assets/up.png'; -import checkicon from '../../assets/checkFull.png'; +import styled from 'styled-components'; export const StNavi = styled.div` position: sticky; diff --git a/src/index.js b/src/index.js index ef07e5e..25783c2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,14 +1,14 @@ +import GlobalStyle from './components/global/GlobalStyle'; +import theme from './components/global/theme'; +import { RouteChangeTracker } from './router/RouteChangeTracker'; +import Router from './router/Router'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; import ReactDOM from 'react-dom/client'; -import GlobalStyle from './components/global/GlobalStyle'; -import { RecoilRoot } from 'recoil'; +import ReactGA4 from 'react-ga4'; import { BrowserRouter } from 'react-router-dom'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { RecoilRoot } from 'recoil'; import { ThemeProvider } from 'styled-components'; -import theme from './components/global/theme'; -import ReactGA4 from 'react-ga4'; -import Router from './router/Router'; -import { RouteChangeTracker } from './router/RouteChangeTracker'; const queryClient = new QueryClient(); diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 4e58aa3..9371b11 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,44 +1,25 @@ -import React, { useState, useEffect } from 'react'; -import styled from 'styled-components'; -// import Header from '../components/global/header/Header'; -// import Menu from '../components/mainpage/Menu'; +import Calendar from '../components/calendar/Calendar'; +import CompanyOKR from '../components/companyOKR/companyOKR'; +import DashBoardCalendar from '../components/mainpage/Calendar'; import DashBoardOKR from '../components/mainpage/OKR'; import DashBoardTodo from '../components/mainpage/ToDo'; -import DashBoardCalendar from '../components/mainpage/Calendar'; -import Todo from '../components/todo/Todo'; import TeamOKR from '../components/teamOKR/TeamOKR'; -import Calendar from '../components/calendar/Calendar'; -import CompanyOKR from '../components/companyOKR/companyOKR'; -// import { useRecoilValue } from 'recoil'; -// import { NowState } from '../store/store'; -// import { useNavigate } from 'react-router-dom'; +import Todo from '../components/todo/Todo'; import { MenuContainer, MenuItem } from './../components/mainpage/menu.styled'; +import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; -import { useQuery } from '@tanstack/react-query'; -import { GetTeamInfo } from '../apis/apiGET'; +import styled from 'styled-components'; export default function Mainpage() { const navigate = useNavigate(); - const [teamName, setTeamName] = useState(''); + useEffect(() => { if (localStorage.accesstoken === undefined) { navigate('/'); } }, []); - const { data: teaminfo } = useQuery(['team'], GetTeamInfo, { - onSuccess: response => { - setTeamName(response[0].team); - }, - }); - - const menuList = [ - 'Dashboard', - 'All OKR', - teamName + ' OKR', - 'TO - DO', - 'Calendar', - ]; + const menuList = ['Dashboard', 'All OKR', 'Team OKR', 'TO - DO', 'Calendar']; const selectComponent = { Dashboard: ( @@ -57,9 +38,7 @@ export default function Mainpage() { }; const [now, setNow] = useState('Dashboard'); - // console.log('now :', now); const clickNowPage = e => { - // console.log(e.target.value); const { name } = e.target; setNow(name); }; @@ -71,7 +50,6 @@ export default function Mainpage() { return ( <MenuItem text={text} - teamName={teamName} key={i} onClick={clickNowPage} name={text} diff --git a/src/pages/SignIn.jsx b/src/pages/SignIn.jsx index 35a339e..1b80497 100644 --- a/src/pages/SignIn.jsx +++ b/src/pages/SignIn.jsx @@ -1,6 +1,5 @@ -import React, { useEffect } from 'react'; import Article from '../components/signIn/Article'; -import Header from '../components/global/header/Header'; +import React, { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; export default function SignIn() { diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index 944594b..a1c9b49 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -1,8 +1,7 @@ -import React from 'react'; -import Header from '../components/global/header/Header'; import Article from '../components/signUp/Article'; -import { useNavigate } from 'react-router-dom'; +import React from 'react'; import { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; export default function SignUp() { const navigate = useNavigate(); diff --git a/src/router/RouteChangeTracker.js b/src/router/RouteChangeTracker.js index 2705e9f..360a978 100644 --- a/src/router/RouteChangeTracker.js +++ b/src/router/RouteChangeTracker.js @@ -1,6 +1,6 @@ import { useEffect } from 'react'; -import { useLocation } from 'react-router-dom'; import ReactGA4 from 'react-ga4'; +import { useLocation } from 'react-router-dom'; export const RouteChangeTracker = () => { const location = useLocation(); diff --git a/src/router/Router.js b/src/router/Router.js index 18106bd..ec68c98 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -1,10 +1,10 @@ -import React from 'react'; -import { Route, Routes } from 'react-router-dom'; -import Signin from '../pages/SignIn'; -import SignUp from '../pages/SignUp'; -import Mainpage from '../pages/Mainpage'; import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; +import Mainpage from '../pages/Mainpage'; +import Signin from '../pages/SignIn'; +import SignUp from '../pages/SignUp'; +import React from 'react'; +import { Route, Routes } from 'react-router-dom'; export default function Router() { return ( diff --git a/yarn.lock b/yarn.lock index 0938a59..910e33f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,7 +24,7 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": version "7.18.6" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -36,7 +36,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz" integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.11.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz" integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== @@ -66,6 +66,15 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" +"@babel/generator@^7.17.3", "@babel/generator@7.17.7": + version "7.17.7" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.21.0", "@babel/generator@^7.21.1", "@babel/generator@^7.7.2": version "7.21.1" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz" @@ -136,7 +145,7 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.18.9": +"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== @@ -148,7 +157,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": +"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz" integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== @@ -156,7 +165,7 @@ "@babel/template" "^7.20.7" "@babel/types" "^7.21.0" -"@babel/helper-hoist-variables@^7.18.6": +"@babel/helper-hoist-variables@^7.16.7", "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== @@ -239,7 +248,7 @@ dependencies: "@babel/types" "^7.20.0" -"@babel/helper-split-export-declaration@^7.18.6": +"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== @@ -251,7 +260,7 @@ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": +"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== @@ -289,7 +298,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.3", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": version "7.21.2" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz" integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== @@ -499,7 +508,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.18.6": +"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz" integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== @@ -811,7 +820,7 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.18.6": +"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz" integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== @@ -1067,6 +1076,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@7.17.3": + version "7.17.3" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.21.2" resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz" @@ -1076,6 +1101,14 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.17.0", "@babel/types@7.17.0": + version "7.17.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" @@ -1234,7 +1267,7 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz" integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== -"@fullcalendar/core@^6.1.4": +"@fullcalendar/core@^6.1.4", "@fullcalendar/core@~6.1.4": version "6.1.4" resolved "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.4.tgz" integrity sha512-ZDD0Owv0LezAk14nsRNaOc9nbowItGmT0mnjOhEw+L6B8P5eads8yYaNA9itn70MWoOjiAG8xqD7Yk1iJGxqgQ== @@ -1557,7 +1590,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== @@ -1590,7 +1623,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1815,7 +1848,7 @@ "@tanstack/query-core" "4.26.1" use-sync-external-store "^1.2.0" -"@testing-library/dom@^8.5.0": +"@testing-library/dom@^8.5.0", "@testing-library/dom@>=7.21.4": version "8.20.0" resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz" integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA== @@ -1865,6 +1898,18 @@ resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@trivago/prettier-plugin-sort-imports@^4.1.1": + version "4.1.1" + resolved "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.1.1.tgz" + integrity sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw== + dependencies: + "@babel/generator" "7.17.7" + "@babel/parser" "^7.20.5" + "@babel/traverse" "7.17.3" + "@babel/types" "7.17.0" + javascript-natural-sort "0.7.1" + lodash "^4.17.21" + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" @@ -1875,7 +1920,7 @@ resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.9": version "7.20.0" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== @@ -1959,16 +2004,16 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" @@ -2187,7 +2232,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^4.0.0 || ^5.0.0", "@typescript-eslint/eslint-plugin@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz" integrity sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== @@ -2210,7 +2255,7 @@ dependencies: "@typescript-eslint/utils" "5.54.0" -"@typescript-eslint/parser@^5.5.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz" integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== @@ -2256,7 +2301,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.54.0", "@typescript-eslint/utils@^5.43.0": +"@typescript-eslint/utils@^5.43.0", "@typescript-eslint/utils@5.54.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz" integrity sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== @@ -2454,15 +2499,20 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.0.0, acorn@^7.1.1: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +acorn@^7.0.0: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2503,7 +2553,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2513,7 +2563,17 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.8.0, ajv@^8.8.2: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.6.0, ajv@>=8: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2596,16 +2656,16 @@ aria-query@^5.0.0, aria-query@^5.1.3: dependencies: deep-equal "^2.0.5" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -2993,7 +3053,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4", "browserslist@>= 4.21.0", browserslist@>=4: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3091,7 +3151,16 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3215,16 +3284,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + colord@^2.9.1: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" @@ -3482,14 +3551,6 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css-tree@1.0.0-alpha.37: - 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" - css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" @@ -3498,6 +3559,14 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@1.0.0-alpha.37: + 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" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" @@ -3615,26 +3684,33 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@2.6.9, debug@^2.6.0: +debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - ms "^2.1.1" + ms "2.0.0" decimal.js@^10.2.1: version "10.4.3" @@ -3709,16 +3785,16 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -3816,14 +3892,6 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-serializer@0: - 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" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -3833,16 +3901,24 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +dom-serializer@0: + 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" domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" @@ -4236,7 +4312,7 @@ eslint-plugin-testing-library@^5.0.1: dependencies: "@typescript-eslint/utils" "^5.43.0" -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-scope@^5.1.1, eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4259,7 +4335,12 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== @@ -4280,7 +4361,7 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@^8.3.0, eslint@^8.34.0: +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.5.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.1.0, eslint@^8.3.0, eslint@^8.34.0, "eslint@>= 6", eslint@>=5, eslint@>=7.0.0, eslint@>=7.28.0: version "8.35.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz" integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== @@ -4582,7 +4663,15 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -4704,11 +4793,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -4771,7 +4855,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4785,6 +4869,13 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" @@ -5017,6 +5108,16 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -5028,16 +5129,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -5090,13 +5181,6 @@ husky@^8.0.3: resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -5104,6 +5188,13 @@ iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -5165,7 +5256,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5189,16 +5280,16 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - ipaddr.js@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -5495,6 +5586,11 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" +javascript-natural-sort@0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz" + integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== + jest-changed-files@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz" @@ -5798,7 +5894,7 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve@^27.4.2, jest-resolve@^27.5.1: +jest-resolve@*, jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== @@ -6020,7 +6116,7 @@ jest-worker@^28.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.4.3: +"jest@^27.0.0 || ^28.0.0", jest@^27.4.3: version "27.5.1" resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== @@ -6412,7 +6508,7 @@ microseconds@0.2.0: resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -6477,6 +6573,11 @@ mkdirp@~0.5.1: dependencies: minimist "^1.2.6" +ms@^2.1.1, ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -6487,11 +6588,6 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" @@ -7453,15 +7549,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^7.0.35: - version "7.0.39" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.1.4, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.3, postcss@^8.3.5, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.4, postcss@^8.4.6, "postcss@>= 8", postcss@>=8, postcss@>=8.0.9: version "8.4.21" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -7470,6 +7558,14 @@ postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^7.0.35: + version "7.0.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + preact@^10.0.5: version "10.13.0" resolved "https://registry.npmjs.org/preact/-/preact-10.13.0.tgz" @@ -7492,7 +7588,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.8.4: +prettier@^2.8.4, prettier@>=2.0.0, prettier@2.x: version "2.8.4" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz" integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== @@ -7558,7 +7654,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7693,7 +7789,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^18.2.0: +"react-dom@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.7.0 || ^17 || ^18", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 16.8.0", react-dom@>=16, react-dom@>=16.8, react-dom@>=16.8.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -7711,17 +7807,17 @@ react-error-overlay@^6.0.11: resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-ga4@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz" - integrity sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ== - react-ga@^3.3.1: version "3.3.1" resolved "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz" integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== -react-is@^16.13.1, react-is@^16.7.0: +react-ga4@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz" + integrity sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ== + +react-is@^16.13.1, react-is@^16.7.0, "react-is@>= 16.8.0": version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -7753,7 +7849,7 @@ react-query@^3.39.3: broadcast-channel "^3.4.1" match-sorter "^6.0.2" -react-refresh@^0.11.0: +react-refresh@^0.11.0, "react-refresh@>=0.10.0 <1.0.0": version "0.11.0" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== @@ -7843,7 +7939,7 @@ react-toastify@^9.1.1: dependencies: clsx "^1.1.1" -react@^18.2.0: +"react@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.6.2 || ^16.0 || ^17 || ^18", "react@^16.7.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16", "react@>= 16.8.0", react@>=16, react@>=16.13.1, react@>=16.8, react@>=16.8.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -8067,7 +8163,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2, rimraf@3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8084,7 +8180,7 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup@^2.43.1: +"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: version "2.79.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -8098,15 +8194,20 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex-test@^1.0.0: version "1.0.0" @@ -8154,15 +8255,6 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -8172,7 +8264,25 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: +schema-utils@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -8191,6 +8301,15 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -8208,7 +8327,28 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.3.2: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.8: version "7.3.8" resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -8368,7 +8508,12 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -8435,16 +8580,16 @@ stackframe@^1.3.4: resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -8452,6 +8597,20 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -8514,20 +8673,6 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" @@ -8588,7 +8733,7 @@ style-loader@^3.3.1: resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== -styled-components@^5.3.8: +styled-components@^5.3.8, "styled-components@>= 2": version "5.3.8" resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.8.tgz" integrity sha512-6jQrlvaJQ16uWVVO0rBfApaTPItkqaG32l3746enNZzpMDxMvzmHzj8rHUg39bvVtom0Y8o8ZzWuchEXKGjVsg== @@ -8612,7 +8757,14 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -8873,7 +9025,7 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -type-check@^0.4.0, type-check@~0.4.0: +type-check@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== @@ -8887,6 +9039,13 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-detect@4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" @@ -8897,7 +9056,7 @@ type-fest@^0.16.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== -type-fest@^0.20.2: +type-fest@^0.20.2, "type-fest@>=0.17.0 <4.0.0": version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== @@ -8931,6 +9090,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +"typescript@^3.2.1 || ^4", "typescript@>= 2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -8989,7 +9153,7 @@ unload@2.2.0: "@babel/runtime" "^7.6.2" detect-node "^2.0.4" -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -9143,7 +9307,7 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0: +webpack-dev-server@^4.6.0, "webpack-dev-server@3.x || 4.x": version "4.11.1" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== @@ -9207,7 +9371,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.64.4: +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.4.0 || ^5.9.0", "webpack@^4.44.2 || ^5.47.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.64.4, "webpack@>= 4", webpack@>=2, "webpack@>=4.43.0 <6.0.0": version "5.75.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz" integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== @@ -9237,7 +9401,7 @@ webpack@^5.64.4: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== From 9dfedcc1877312aedbf85c71582b59c304781341 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 31 Mar 2023 07:04:49 +0900 Subject: [PATCH 34/72] =?UTF-8?q?refect=20:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EB=B0=8F=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20=EC=9C=A0?= =?UTF-8?q?=ED=9A=A8=EC=84=B1=20=EB=A6=AC=ED=8E=99=ED=86=A0=EB=A7=81=20#87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiGET.js | 12 +- src/components/global/Toast.jsx | 8 +- .../globaldropdown/TeamPosiDropDown.jsx | 3 +- src/components/global/header/Header.jsx | 10 +- src/components/mainpage/TodoItem.jsx | 2 +- src/components/signIn/Article.jsx | 126 +++----- src/components/signUp/Article.jsx | 299 ++++++------------ src/styles/sign.styled.js | 37 +-- 8 files changed, 176 insertions(+), 321 deletions(-) diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 1c4626f..a8c7e44 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -58,13 +58,13 @@ export async function GetCompletionTodo() { return data; } -export async function GetUserInfo() { - const id = localStorage.getItem('Id'); +// export async function GetUserInfo() { +// const id = localStorage.getItem('Id'); - console.log('id', id); - const { data } = await api.get(`api/user/${id}`); - return data; -} +// // console.log('id', id); +// const { data } = await api.get(`api/user/${id}`); +// return data; +// } export async function GetTeamInfo() { const { data } = await api.get(`api/user/team/member`); diff --git a/src/components/global/Toast.jsx b/src/components/global/Toast.jsx index 2fc7562..e865e0f 100644 --- a/src/components/global/Toast.jsx +++ b/src/components/global/Toast.jsx @@ -1,16 +1,10 @@ import React from 'react'; -import { ToastContainer, toast } from 'react-toastify'; +import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import styled from 'styled-components'; const Toast = () => { - // const contextClassName = { - // success : , - // error : , - // info : , - // warning : , - // } return ( <> <StToastContainer diff --git a/src/components/global/globaldropdown/TeamPosiDropDown.jsx b/src/components/global/globaldropdown/TeamPosiDropDown.jsx index 8e525e7..0ed2884 100644 --- a/src/components/global/globaldropdown/TeamPosiDropDown.jsx +++ b/src/components/global/globaldropdown/TeamPosiDropDown.jsx @@ -31,8 +31,9 @@ const TeamPosiDropDown = ({ setUserInfo, userInfo }) => { return ( <DropdownContainer ref={dropDownRef} className='container'> <input + id='teamPosition' type='text' - value={finalValue} + value={userInfo.teamposition} readOnly={true} onClick={() => setIsOpen(!isOpen)} placeholder='직급을 선택하세요' diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index aa7e8ff..214f876 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -32,11 +32,11 @@ export default function Header() { setLogoutImg(logoutON); }; - const { data } = useQuery(['userinfo'], GetUserInfo, { - onSuccess: response => { - console.log(response); - }, - }); + // const { data } = useQuery(['userinfo'], GetUserInfo, { + // onSuccess: response => { + // console.log(response); + // }, + // }); const logout = () => { if (process.env.NODE_ENV !== 'development') { diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index f266503..84d1e62 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -40,7 +40,7 @@ const TodoItem = ({ getTodo }) => { return false; }); - console.log('filterArray :', filterArray); + // console.log('filterArray :', filterArray); // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 5b970f6..607da5d 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -15,8 +15,9 @@ import { LoginBtn, HelpBox, SignWrap, + Label, } from '../../styles/sign.styled'; -import { GetTeamInfo } from '../../apis/apiGET'; +import { toast } from 'react-toastify'; const Test = () => { const navigate = useNavigate(); @@ -28,59 +29,46 @@ const Test = () => { const [userInfo, setUserInfo] = useState({ email: '', password: '' }); - // 유효성 검사 - const [emailValidation, setemailValidation] = useState(false); - const [passwordValildation, setPasswordValidation] = useState(false); + // useEffect(() => { + // const savedFormData = JSON.parse(localStorage.getItem('userInfo')); + // if (savedFormData) { + // setUserInfo(savedFormData); + // } + // }, []); - // 정규식 - const email = userInfo.email; - const regemail = - /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; - const pw = userInfo.password; - let regpw = - /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,12}$/; + const [errors, setErrors] = useState({}); - // 에러메시지 - const [emailMessage, setEmailMessage] = useState(''); - const [pwMessage, setPwMessage] = useState(''); + const validate = () => { + let errors = {}; + const regemail = + /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; + let regpw = + /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,12}$/; - useEffect(() => { - if (email === '') { - setEmailMessage('이메일을 입력해주세요.'); - setemailValidation(false); - } else if (regemail.test(email) === false) { - setEmailMessage('이메일 양식으로 입력해주세요.'); - setemailValidation(false); - } else { - setEmailMessage('올바른 이메일 형식이에요'); - setemailValidation(true); + if (!userInfo.email.trim()) { + errors.email = '이메일을 입력해주세요.'; + } else if (!regemail.test(userInfo.email)) { + errors.email = '이메일 형식이 올바르지 않습니다.'; } - }, [email]); - - useEffect(() => { - if (pw === '') { - setPwMessage('비밀번호를 입력해주세요.'); - setPasswordValidation(false); - } else if (regpw.test(pw) === false) { - setPwMessage( - '비밀번호를 8자리 이상 12자리 이하, 숫자/대소문자/특수문자를 포함하여 입력해주세요.' - ); - setPasswordValidation(false); - } else { - setPwMessage('올바른 비밀번호 형식이에요'); - setPasswordValidation(true); + if (!userInfo.password.trim()) { + errors.password = '비밀번호를 입력해주세요.'; + } else if (!regpw.test(userInfo.password)) { + errors.password = + '비밀번호를 8자리 이상 12자리 이하, 숫자/대문자 또는 소문자/특수문자를 포함하여 입력해주세요.'; } - }, [pw]); + return errors; + }; - //버튼 상태 - const [btnState, setBtnState] = useState(false); - useEffect(() => { - if (emailValidation && passwordValildation) { - setBtnState(true); + const handleSubmit = e => { + e.preventDefault(); + const errors = validate(); + if (Object.keys(errors).length === 0) { + signInMutate(userInfo); + } else { + setErrors(errors); } - }, [emailValidation, passwordValildation]); + }; - const [signValidation, setSignValidation] = useState(''); const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { console.log('login', response); @@ -90,30 +78,25 @@ const Test = () => { action: '로그인', }); } - localStorage.setItem('Id', email); + localStorage.setItem('Id', userInfo.email); localStorage.setItem('accesstoken', response.accessToken); navigate('/mainpage'); }, - onError: () => { + onError: response => { if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', action: '로그인 실패', }); } - - setSignValidation('아이디 또는 비밀번호가 올바르지 않습니다.'); - alert(`${signValidation}`); + alert(response.response.data); }, }); return ( - <SignWrap> + <SignWrap onSubmit={handleSubmit}> <MainHeader>로그인</MainHeader> - <ArticleHeader> - <div className='div1' /> - 이메일 - </ArticleHeader> + <Label>이메일</Label> <InputBox> <EmailInput type='text' @@ -124,17 +107,9 @@ const Test = () => { }} /> </InputBox> - <ArticleHeader> - {emailValidation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {emailMessage} - </p> - )} - </ArticleHeader> - <ArticleHeader> - <div className='div2' /> - 비밀번호 - </ArticleHeader> + {errors.email && <div className='valid'>{errors.email}</div>} + + <Label>비밀번호</Label> <InputBox> <EmailInput @@ -151,22 +126,9 @@ const Test = () => { <PwEye src={CloseEye} onClick={eyeState} /> )} </InputBox> - <ArticleHeader> - {passwordValildation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {pwMessage} - </p> - )} - </ArticleHeader> + {errors.password && <div className='valid'>{errors.password}</div>} - <LoginBtn - btnState={btnState} - disabled={!btnState} - onClick={() => { - signInMutate(userInfo); - }}> - 로그인 하기 - </LoginBtn> + <LoginBtn type='submit'>로그인 하기</LoginBtn> <HelpBox> <span onClick={() => navigate('/signup')}>회원가입</span> </HelpBox> diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index bdc32ce..4e457a1 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -1,13 +1,13 @@ import { useState, useEffect } from 'react'; import { MainHeader, - ArticleHeader, InputBox, EmailInput, PwEye, LoginBtn, - SignUpBtnMargin, SignWrap, + Label, + HelpBox, } from '../../styles/sign.styled'; import ReactGA from 'react-ga4'; import Eye from '../../assets/eye.png'; @@ -16,11 +16,11 @@ import { OnChange } from '../global/onChange'; import { useNavigate } from 'react-router-dom'; import { useMutation } from '@tanstack/react-query'; import { SignUp } from '../../apis/apiPOST'; -import TeamDropDown from '../../components/global/globaldropdown/TeamDropDown.jsx'; import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; -import { trackEvent } from '../../router/RouteChangeTracker'; +import { toast } from 'react-toastify'; +import Toast from './../global/Toast'; -const Test = () => { +const Article = () => { const navigate = useNavigate(); // 눈 아이콘 const [pwEyeOpen, setPwEyeOpen] = useState(false); @@ -37,194 +37,118 @@ const Test = () => { teamposition: '', }); - // 정규식 - const email = userInfo.email; - const regemail = - /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; - const pw = userInfo.password; - let regpw = - /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,12}$/; - const regname = userInfo.name.length >= 2 && userInfo.name.length < 6; - - // 유효성 검사 - const [emailValidation, setemailValidation] = useState(false); - const [passwordValildation, setPasswordValidation] = useState(false); - const [pwCheckValidation, setPwCheckValidation] = useState(false); - const [nameValidation, setNameValidation] = useState(false); - const [teamValidation, setTeamValidation] = useState(false); - const [teamPosiValidation, setTeamPosiValidation] = useState(false); - - // 에러메시지 - const [emailMessage, setEmailMessage] = useState(''); - const [pwMessage, setPwMessage] = useState(''); - const [pwCheckMessage, setPwCheckMessage] = useState(''); - const [nameMessage, setNameMessage] = useState(''); - const [teamMessage, setTeamMessage] = useState(''); - const [teamPosiMessage, setTeamPosiMessage] = useState(''); - - /**드롭박스 값 추출해오는 함수 */ - const OnChangeOptionValue = e => { - console.log('dd'); - const { name, value } = e.target; - setUserInfo({ ...userInfo, [name]: value }); - }; - // console.log(userInfo); - - // 이메일 useEffect(() => { - if (email === '') { - setEmailMessage('이메일을 입력해주세요.'); - setemailValidation(false); - } else if (regemail.test(email) === false) { - setEmailMessage('이메일 양식으로 입력해주세요.'); - setemailValidation(false); - } else { - setEmailMessage('올바른 이메일 형식이에요'); - setemailValidation(true); + const savedFormData = JSON.parse(localStorage.getItem('userInfo')); + if (savedFormData) { + setUserInfo(savedFormData); } - }, [email]); + }, []); - // 비밀번호 useEffect(() => { - if (pw === '') { - setPwMessage('비밀번호를 입력해주세요.'); - setPasswordValidation(false); - } else if (regpw.test(pw) === false) { - setPwMessage( - '비밀번호를 8자리 이상 12자리 이하, 숫자/대소문자/특수문자를 포함하여 입력해주세요.' - ); - setPasswordValidation(false); - } else { - setPwMessage('올바른 비밀번호 형식이에요'); - setPasswordValidation(true); - } - }, [pw]); + localStorage.setItem('userInfo', JSON.stringify(userInfo)); + }, [userInfo]); - // 비밀번호 확인 - useEffect(() => { - if (pw !== userInfo.confirmpassword) { - setPwCheckMessage('비밀번호가 일치하지 않습니다.'); - setPwCheckValidation(false); - } else { - setPwCheckMessage('비밀번호가 일치합니다.'); - setPwCheckValidation(true); - } - }, [pw, userInfo.confirmpassword]); + const [errors, setErrors] = useState({}); - // 이름 확인 - useEffect(() => { - if (userInfo.name === '') { - setNameMessage('이름을 입력해주세요.'); - setNameValidation(false); - } else if (regname === false) { - setNameMessage('이름은 2글자 이상, 6글자 미만으로 입력해주세요.'); - setNameValidation(false); - } else { - setNameMessage('이름이 작성되었습니다.'); - setNameValidation(true); + // 유효성 검사 + const validate = () => { + let errors = {}; + const regemail = + /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; + let regpw = + /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,12}$/; + const regname = userInfo.name.length >= 2 && userInfo.name.length < 6; + if (!userInfo.email.trim()) { + errors.email = '이메일을 입력해주세요.'; + } else if (!regemail.test(userInfo.email)) { + errors.email = '이메일 형식이 올바르지 않습니다.'; } - }, [userInfo.name]); - - // 팀 확인 - useEffect(() => { - if (userInfo.team === '') { - setTeamMessage('팀을 입력해주세요.'); - setTeamValidation(false); - } else { - setTeamMessage('팀이 선택되었습니다.'); - setTeamValidation(true); + if (!userInfo.password.trim()) { + errors.password = '비밀번호를 입력해주세요.'; + } else if (!regpw.test(userInfo.password)) { + errors.password = + '비밀번호를 8자리 이상 12자리 이하, 숫자/대문자 또는 소문자/특수문자를 포함하여 입력해주세요.'; } - }, [userInfo.team]); - - // console.log(userInfo.team); - - // 직급 확인 - useEffect(() => { - if (userInfo.teamposition === '') { - setTeamPosiMessage('직급을 선택해주세요.'); - setTeamPosiValidation(false); - } else { - setTeamPosiMessage('직급이 선택되었습니다.'); - setTeamPosiValidation(true); + if (userInfo.password !== userInfo.confirmpassword) { + errors.confirmpassword = '비밀번호가 일치하지 않습니다.'; } - }, [userInfo.teamposition]); - - //버튼 상태 - //userInfo의 값으로 확인해야함 버그 찾음 - const [btnState, setBtnState] = useState(false); - useEffect(() => { - if ( - emailValidation && - passwordValildation && - pwCheckValidation && - nameValidation && - teamValidation && - teamPosiValidation - ) { - setBtnState(true); - } else { - setBtnState(false); + if (!userInfo.name.trim()) { + errors.name = '이름을 입력해주세요.'; + } else if (!regname) { + errors.name = '이름은 2글자 이상, 6글자 미만으로 입력해주세요. '; + } + if (!userInfo.team.trim()) { + errors.team = '팀명을 입력해주세요.'; + } + if (!userInfo.teamposition.trim()) { + errors.teamposition = '직급을 선택해주세요.'; } - }, [ - emailValidation, - passwordValildation, - pwCheckValidation, - nameValidation, - teamValidation, - teamPosiValidation, - ]); + return errors; + }; - // 버튼을 눌렀을 때 이메일 중복 검사 - const [signValidation, setSignValidation] = useState(''); const { mutate: signUpMutate } = useMutation(SignUp, { onSuccess: response => { + toast('회원가입 성공!'); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', action: '회원가입', }); } - navigate('/'); + + setTimeout(() => { + navigate('/'); + }, 1000); }, onError: response => { + console.log(response); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', action: '회원가입 실패', }); } - setSignValidation('이미 존재하는 이메일입니다.'); - alert(response.response.data); + toast(response?.response.data); }, }); + const handleSubmit = e => { + e.preventDefault(); + const errors = validate(); + if (Object.keys(errors).length === 0) { + signUpMutate(userInfo); + } else { + setErrors(errors); + } + }; + return ( - <SignWrap> + <SignWrap onSubmit={handleSubmit}> <MainHeader>회원가입</MainHeader> - <ArticleHeader>이메일</ArticleHeader> + + <Label htmlFor='email'>이메일</Label> <InputBox> <EmailInput + id='email' type='text' name='email' + value={userInfo.email} placeholder='이메일을 입력하세요' onChange={event => { OnChange(event, userInfo, setUserInfo); }} /> </InputBox> - <ArticleHeader> - {emailValidation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {emailMessage} - </p> - )} - </ArticleHeader> - <ArticleHeader>비밀번호</ArticleHeader> + {errors.email && <div className='valid'>{errors.email}</div>} + + <Label htmlFor='password'>비밀번호</Label> <InputBox> <EmailInput + id='password' type={pwEyeOpen ? 'text' : 'password'} name='password' + value={userInfo.password} placeholder='비밀번호를 입력하세요' onChange={event => { OnChange(event, userInfo, setUserInfo); @@ -236,18 +160,15 @@ const Test = () => { <PwEye src={CloseEye} onClick={eyeState} /> )} </InputBox> - <ArticleHeader> - {passwordValildation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {pwMessage} - </p> - )} - </ArticleHeader> - <ArticleHeader>비밀번호 확인</ArticleHeader> + {errors.password && <div className='valid'>{errors.password}</div>} + + <Label htmlFor='confirmpassword'>비밀번호 확인</Label> <InputBox> <EmailInput + id='confirmpassword' type={pwEyeOpen ? 'text' : 'password'} name='confirmpassword' + value={userInfo.confirmpassword} placeholder='비밀번호를 입력하세요' onChange={event => { OnChange(event, userInfo, setUserInfo); @@ -259,67 +180,53 @@ const Test = () => { <PwEye src={CloseEye} onClick={eyeState} /> )} </InputBox> - <ArticleHeader> - {pwCheckValidation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {pwCheckMessage} - </p> - )} - </ArticleHeader> - <ArticleHeader>이름</ArticleHeader> + {errors.confirmpassword && ( + <div className='valid'>{errors.confirmpassword}</div> + )} + + <Label htmlFor='name'>이름</Label> <InputBox> <EmailInput + id='name' name='name' + value={userInfo.name} onChange={event => { OnChange(event, userInfo, setUserInfo); }} placeholder='이름를 입력하세요' /> </InputBox> - <ArticleHeader> - {nameValidation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {nameMessage} - </p> - )} - </ArticleHeader> - <ArticleHeader>팀</ArticleHeader> + {errors.name && <div className='valid'>{errors.name}</div>} + + <Label htmlFor='team'>팀</Label> <InputBox> <EmailInput + id='team' name='team' + value={userInfo.team} onChange={event => { OnChange(event, userInfo, setUserInfo); }} placeholder='팀이름를 입력하세요' /> </InputBox> - <ArticleHeader> - {teamValidation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {teamMessage} - </p> - )} - </ArticleHeader> - <ArticleHeader>직급</ArticleHeader> - <TeamPosiDropDown setUserInfo={setUserInfo} userInfo={userInfo} /> - <ArticleHeader> - {teamPosiValidation ? null : ( - <p className='p1' style={{ color: 'red' }}> - {teamPosiMessage} - </p> - )} - </ArticleHeader> - <LoginBtn - btnState={btnState} - disabled={!btnState} - onClick={() => { - signUpMutate(userInfo); - }}> - 회원가입 - </LoginBtn> - <SignUpBtnMargin /> + {errors.team && <div className='valid'>{errors.team}</div>} + + <Label htmlFor='teamPosition'>직급</Label> + <InputBox> + <TeamPosiDropDown setUserInfo={setUserInfo} userInfo={userInfo} /> + </InputBox> + {errors.teamposition && ( + <div className='valid'>{errors.teamposition}</div> + )} + + <LoginBtn type='submit'>회원가입</LoginBtn> + <HelpBox style={{ marginBottom: '100px' }}> + <span onClick={() => navigate('/')}>로그인 하러가기</span> + </HelpBox> + <Toast /> </SignWrap> ); }; -export default Test; +export default Article; diff --git a/src/styles/sign.styled.js b/src/styles/sign.styled.js index de5d723..1e2115c 100644 --- a/src/styles/sign.styled.js +++ b/src/styles/sign.styled.js @@ -1,9 +1,15 @@ import styled from 'styled-components'; -export const SignWrap = styled.div` +export const SignWrap = styled.form` width: 70rem; margin: 0 auto; /* background-color: yellowgreen; */ + .valid { + color: red; + font-size: 1.4rem; + margin-bottom: 1rem; + margin: 0.3rem 0 1rem 0; + } `; export const MainHeader = styled.div` @@ -14,21 +20,13 @@ export const MainHeader = styled.div` font-size: 4.2rem; `; -export const ArticleHeader = styled.div` +export const Label = styled.label` height: 3.3rem; + display: block; font-weight: 500; font-size: 2.4rem; - margin: 5px 0; - .p1 { - font-size: 14px; - } - .p2 { - font-size: 14px; - display: flex; - align-items: center; - justify-content: center; - color: red; - } + margin: 10px 0; + cursor: pointer; `; export const InputBox = styled.div` @@ -36,6 +34,7 @@ export const InputBox = styled.div` height: 6.7rem; ${props => props.theme.row_center} position: relative; + /* background-color: pink; */ `; export const EmailInput = styled.input` @@ -81,26 +80,18 @@ export const LoginBtn = styled.button` color: var(--bg-color); border: none; cursor: pointer; - margin-bottom: 10rem; -`; - -export const SignUpBtnMargin = styled.div` - /* margin-bottom: 195px; */ + margin-top: 10rem; `; export const HelpBox = styled.div` - /* display: flex; - align-items: center; - justify-content: center; */ ${props => props.theme.row_center} gap: 50px; font-weight: 400; font-size: 2.1rem; height: 3rem; - /* line-height: 29px; */ width: 100%; color: #7c7c7c; - /* background-color: pink; */ + margin-top: 40px; span { cursor: pointer; } From e87aca1c3d977cc14ab88b7ac714ca1df08f57c7 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 31 Mar 2023 21:33:48 +0900 Subject: [PATCH 35/72] =?UTF-8?q?todo=20=EC=A1=B0=ED=9A=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiGET.js | 10 -------- src/components/global/header/Header.jsx | 1 - src/components/mainpage/TodoItem.jsx | 30 +++++++++++++++++------- src/components/signIn/Article.jsx | 3 +-- src/components/signUp/Article.jsx | 5 ---- src/components/todo/Todo.jsx | 2 +- src/components/todo/TodoNavi.jsx | 11 ++++++--- src/components/todo/tododetail.styled.js | 4 ++-- 8 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 9348d5d..99b702f 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -58,16 +58,6 @@ export async function GetCompletionTodo() { return data; } - -// export async function GetUserInfo() { -// const id = localStorage.getItem('Id'); - -// // console.log('id', id); -// const { data } = await api.get(`api/user/${id}`); -// return data; -// } - - export async function GetTeamInfo() { const { data } = await api.get(`api/user/team/member`); return data; diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index e71f621..ab11027 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -28,7 +28,6 @@ export default function Header() { setLogoutImg(logoutON); }; - // const { data } = useQuery(['userinfo'], GetUserInfo, { // onSuccess: response => { // console.log(response); diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index 82a26e8..3471f24 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -18,22 +18,33 @@ const TodoItem = ({ getTodo }) => { // filter 함수 사용 const now = new Date(); - const plusToday = `${now.getFullYear()}-${now.getMonth() + 1}-${ - now.getDate() + 1 - }`; + console.log(new Date(now.setDate(now.getDate() + 1))); + console.log( + new Date('2023-03-31').getMonth() === now.getMonth() && + new Date('2023-03-31').getDate() === now.getDate() + ); + // console.log(new Date('2023-03-31') === new Date(now)); const filterArray = getTodo?.filter(el => { if (el.completion === false) { - if (new Date(plusToday) > new Date(el.startDate)) { - return true; + // return el; + if (new Date(now.setDate(now.getDate() + 1)) > new Date(el.startDate)) { + return el; } + // } else if ( + // new Date(el.startDate).getMonth() === now.getMonth() && + // new Date(el.startDate).getDate() === now.getDate() + // ) { + // return null; + // } else { + // return el; + // } + } else { + return null; } - return false; }); - - // console.log('filterArray :', filterArray); - + console.log('filterArray :', filterArray); // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { @@ -113,6 +124,7 @@ const TodoItem = ({ getTodo }) => { onError: response => {}, } ); + console.log(filterArray); return ( <> {filterArray?.map(el => ( diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 579e9d9..e92fa6a 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -20,7 +20,6 @@ import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; - const Test = () => { const navigate = useNavigate(); // 눈 아이콘 @@ -129,7 +128,7 @@ const Test = () => { </InputBox> {errors.password && <div className='valid'>{errors.password}</div>} - <LoginBtn type='submit'>로그인 하기</LoginBtn> + <LoginBtn type='submit'>로그인</LoginBtn> <HelpBox> <span onClick={() => navigate('/signup')}>회원가입</span> </HelpBox> diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index fa462aa..0319c55 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -14,9 +14,6 @@ import { import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; import { OnChange } from '../global/onChange'; import { useMutation } from '@tanstack/react-query'; - -import { SignUp } from '../../apis/apiPOST'; -import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; import { toast } from 'react-toastify'; import Toast from './../global/Toast'; @@ -24,7 +21,6 @@ import { useState, useEffect } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; - const Article = () => { const navigate = useNavigate(); // 눈 아이콘 @@ -115,7 +111,6 @@ const Article = () => { }); } toast(response?.response.data); - }, }); diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 3f70d0f..181962f 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -49,7 +49,7 @@ export default function Todo() { ) : ( <> <TodoDashboard> - <TodoNavi todayFormat={today} /> + <TodoNavi todayFormat={today} getAllTodo={getAllTodo} /> <PastTodo /> {getAllTodo?.map(el => ( <DetailTodoWrap key={el.targetDate}> diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index d902f2d..9b19479 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -5,7 +5,8 @@ import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; import React, { useState, useRef } from 'react'; import { Link } from 'react-scroll'; -const TodoNavi = ({ todayFormat }) => { +const TodoNavi = ({ todayFormat, getAllTodo }) => { + // console.log(getAllTodo); const today = new Date(); const yearMonth = `${today.getFullYear()}년 ${today.getMonth() + 1}월`; @@ -14,6 +15,7 @@ const TodoNavi = ({ todayFormat }) => { let makeWeekAll = date => { let day = date.getDay(); let week = []; + const haveDay = []; for (let i = 0; i < 7; i++) { let newDate = new Date(date.valueOf() + 86400000 * (i - day)); @@ -34,7 +36,9 @@ const TodoNavi = ({ todayFormat }) => { } else if (i === 6) { dateValue = '토'; } - // console.log(newDate); + + // if() + // console.log(allTodo[i]?.targetDate); // console.log(newDate.getDate()); let format = ''; if (newDate.getMonth() + 1 < 10) { @@ -103,6 +107,8 @@ const TodoNavi = ({ todayFormat }) => { } }; + console.log(state.week); + return ( <StNavi> <TodoHeader> @@ -125,7 +131,6 @@ const TodoNavi = ({ todayFormat }) => { <NaviPlus onClick={createTodo}> <img src={plus} alt='' /> </NaviPlus> - {/* <div className='more' /> */} </div> </TodoHeader> <DateNavi> diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 279f59f..ab2cc9f 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -327,8 +327,8 @@ export const StTeam = styled.div` padding: 24px 15px 15px 15px; box-sizing: border-box; background-color: #fff; - box-shadow: 0px 3px 15px rgba(124, 124, 124, 0.25); - border-radius: 8px; + /* box-shadow: 0px 3px 15px rgba(124, 124, 124, 0.25); + border-radius: 8px; */ .title { width: 100%; From 48b8fc94949f012cb34f6486fd18c414876a6fc4 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 31 Mar 2023 21:53:06 +0900 Subject: [PATCH 36/72] =?UTF-8?q?todo=20=EC=88=98=EC=A0=95=20=EC=B5=9C?= =?UTF-8?q?=EC=A2=85=EB=B3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/mainpage/TodoItem.jsx | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index 3471f24..e66c0d7 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -18,27 +18,26 @@ const TodoItem = ({ getTodo }) => { // filter 함수 사용 const now = new Date(); - console.log(new Date(now.setDate(now.getDate() + 1))); - console.log( - new Date('2023-03-31').getMonth() === now.getMonth() && - new Date('2023-03-31').getDate() === now.getDate() - ); + console.log(new Date(now.setDate(now.getDate()))); + // console.log( + // new Date('2023-03-31').getMonth() === now.getMonth() && + // new Date('2023-03-31').getDate() === now.getDate() + // ); // console.log(new Date('2023-03-31') === new Date(now)); const filterArray = getTodo?.filter(el => { if (el.completion === false) { // return el; - if (new Date(now.setDate(now.getDate() + 1)) > new Date(el.startDate)) { + if (new Date(now.setDate(now.getDate())) < new Date(el.startDate)) { + return null; + } else if ( + new Date(el.startDate).getMonth() === now.getMonth() && + new Date(el.startDate).getDate() === now.getDate() + ) { + return el; + } else { return el; } - // } else if ( - // new Date(el.startDate).getMonth() === now.getMonth() && - // new Date(el.startDate).getDate() === now.getDate() - // ) { - // return null; - // } else { - // return el; - // } } else { return null; } From 07569b996f5bd7dce0019d820ef574b142946122 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Sat, 1 Apr 2023 09:15:48 +0900 Subject: [PATCH 37/72] =?UTF-8?q?feat=20:=20=EC=83=88=EB=A1=9C=EA=B3=A0?= =?UTF-8?q?=EC=B9=A8=20=EC=97=AC=EB=B6=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/global/Toast.jsx | 1 - .../global/globalModal/KrPatchModal.jsx | 18 +++++++++++++++- .../global/globalModal/OkrModal.jsx | 14 +++++++++++++ .../global/globalModal/OkrPatchModal.jsx | 14 +++++++++++++ .../global/globalModal/ProgressPatchModal.jsx | 14 +++++++++++++ .../global/globalModal/TodoModal.jsx | 14 +++++++++++++ .../global/globalModal/TodoPathModal.jsx | 14 +++++++++++++ src/components/signIn/Article.jsx | 21 +++++++++++++++---- src/components/signUp/Article.jsx | 19 ++++++++++++++--- 9 files changed, 120 insertions(+), 9 deletions(-) diff --git a/src/components/global/Toast.jsx b/src/components/global/Toast.jsx index e865e0f..84cec5c 100644 --- a/src/components/global/Toast.jsx +++ b/src/components/global/Toast.jsx @@ -1,6 +1,5 @@ import React from 'react'; import { ToastContainer } from 'react-toastify'; - import 'react-toastify/dist/ReactToastify.css'; import styled from 'styled-components'; diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index ecb099b..720c9c8 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -16,6 +16,20 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { const krInfo = useRecoilValue(patchKRInfo); + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); + // 모달 스크롤 방지 useEffect(() => { // 현재 위치에 고정시킴 @@ -96,7 +110,9 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { }); const createKr = () => { - if (krInfo.state === 'patch') { + if (title.keyResult === '') { + alert('KR이 입력되지 않았습니다.'); + } else if (krInfo.state === 'patch') { const id = krInfo.id; const value = title; patchKRMutate({ value, id }); diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index 754d742..4d72b6d 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -15,6 +15,20 @@ import DatePicker, { DateObject } from 'react-multi-date-picker'; import { toast } from 'react-toastify'; const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); + const queryClient = useQueryClient(); const months = [ '1월', diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index 7fa68b0..1f3873a 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -19,6 +19,20 @@ import { toast } from 'react-toastify'; import { useRecoilValue } from 'recoil'; const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); + const queryClient = useQueryClient(); const months = [ '1월', diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index 71c63b6..db3b7ac 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -14,6 +14,20 @@ import ReactGA from 'react-ga4'; import { useRecoilValue } from 'recoil'; const ProgressPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); + const queryClient = useQueryClient(); const progressInfo = useRecoilValue(patchProgressInfo); diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index fef7cbf..69465b5 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -30,6 +30,20 @@ const TodoModal = ({ todoModalRef, todoModalOutSideClick, }) => { + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); + const queryClient = useQueryClient(); const months = [ diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 6aa0501..e847480 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -28,6 +28,20 @@ import { toast } from 'react-toastify'; import { useRecoilState, useRecoilValue } from 'recoil'; const TodoPathModal = ({ onCloseModal }) => { + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); + useEffect(() => { // 현재 위치에 고정시킴 document.body.style.cssText = ` diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index e92fa6a..1436223 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -12,15 +12,28 @@ import { SignWrap, Label, } from '../../styles/sign.styled'; - -import { toast } from 'react-toastify'; import { OnChange } from '../global/onChange'; import { useMutation } from '@tanstack/react-query'; import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; +import { toast } from 'react-toastify'; + +const Article = () => { + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); -const Test = () => { const navigate = useNavigate(); // 눈 아이콘 const [pwEyeOpen, setPwEyeOpen] = useState(false); @@ -136,4 +149,4 @@ const Test = () => { ); }; -export default Test; +export default Article; diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 0319c55..4fbe250 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -13,15 +13,28 @@ import { } from '../../styles/sign.styled'; import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; import { OnChange } from '../global/onChange'; -import { useMutation } from '@tanstack/react-query'; -import { toast } from 'react-toastify'; import Toast from './../global/Toast'; - +import { useMutation } from '@tanstack/react-query'; import { useState, useEffect } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; +import { toast } from 'react-toastify'; const Article = () => { + useEffect(() => { + const handleBeforeUnload = e => { + e.preventDefault(); + e.returnValue = + '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, []); + const navigate = useNavigate(); // 눈 아이콘 const [pwEyeOpen, setPwEyeOpen] = useState(false); From 631cca78bb3d9b9af72883c32cb17fcdd5b295a1 Mon Sep 17 00:00:00 2001 From: Byeong Min Cho <merrybmc@gmail.com> Date: Sat, 1 Apr 2023 10:25:45 +0900 Subject: [PATCH 38/72] =?UTF-8?q?feat=20:=20=ED=8C=80=EC=9B=90=20OKR=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B6=88=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- craco.config.js | 13 + package-lock.json | 1378 ++++++++++++++++- package.json | 12 +- src/apis/apiGET.js | 4 +- .../global/globalModal/OkrPatchModal.jsx | 2 +- src/components/mainpage/OKR.jsx | 39 +- src/components/mainpage/OkrItem.jsx | 137 +- src/components/mainpage/TodoItem.jsx | 10 - src/components/signIn/Article.jsx | 17 +- src/components/signUp/Article.jsx | 5 +- yarn.lock | 558 ++++++- 11 files changed, 2065 insertions(+), 110 deletions(-) create mode 100644 craco.config.js diff --git a/craco.config.js b/craco.config.js new file mode 100644 index 0000000..986e27f --- /dev/null +++ b/craco.config.js @@ -0,0 +1,13 @@ +module.exports = { + webpack: { + configure: webpackConfig => { + webpackConfig.resolve.fallback = { + buffer: require.resolve('buffer/'), + crypto: require.resolve('crypto-browserify'), + stream: require.resolve('stream-browserify'), + util: require.resolve('util/'), + }; + return webpackConfig; + }, + }, +}; diff --git a/package-lock.json b/package-lock.json index 8102921..a88f2a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "hasInstallScript": true, "dependencies": { + "@craco/craco": "^7.1.0", "@fullcalendar/core": "^6.1.4", "@fullcalendar/daygrid": "^6.1.4", "@fullcalendar/react": "^6.1.4", @@ -17,7 +18,10 @@ "@testing-library/react": "^13.0.0", "@testing-library/user-event": "^13.2.1", "axios": "^1.3.4", + "buffer": "^6.0.3", + "crypto-browserify": "^3.12.0", "eslint-plugin-prettier": "^4.2.1", + "jsonwebtoken": "^9.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-ga": "^3.3.1", @@ -29,7 +33,9 @@ "react-scroll": "^1.8.9", "react-toastify": "^9.1.1", "recoil": "^0.7.7", + "stream-browserify": "^3.0.0", "styled-components": "^5.3.8", + "util": "^0.12.5", "web-vitals": "^2.1.0" }, "devDependencies": { @@ -2062,6 +2068,63 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "license": "MIT" }, + "node_modules/@craco/craco": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz", + "integrity": "sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==", + "dependencies": { + "autoprefixer": "^10.4.12", + "cosmiconfig": "^7.0.1", + "cosmiconfig-typescript-loader": "^1.0.0", + "cross-spawn": "^7.0.3", + "lodash": "^4.17.21", + "semver": "^7.3.7", + "webpack-merge": "^5.8.0" + }, + "bin": { + "craco": "dist/bin/craco.js" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "react-scripts": "^5.0.0" + } + }, + "node_modules/@craco/craco/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@csstools/normalize.css": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", @@ -3626,6 +3689,26 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, "node_modules/@types/aria-query": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", @@ -4943,6 +5026,22 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "license": "MIT" }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -5294,6 +5393,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -5348,6 +5466,11 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "license": "MIT" }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -5449,12 +5572,76 @@ "unload": "2.2.0" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "license": "BSD-2-Clause" }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, "node_modules/browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", @@ -5492,12 +5679,45 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -5712,6 +5932,15 @@ "node": ">=8" } }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", @@ -5741,6 +5970,19 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -6099,6 +6341,68 @@ "node": ">=10" } }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz", + "integrity": "sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==", + "dependencies": { + "cosmiconfig": "^7", + "ts-node": "^10.7.0" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "typescript": ">=3" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6113,6 +6417,27 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -6639,6 +6964,15 @@ "node": ">= 0.8" } }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -6719,6 +7053,14 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "license": "Apache-2.0" }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", @@ -6728,6 +7070,21 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6898,6 +7255,14 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "license": "MIT" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6925,6 +7290,25 @@ "integrity": "sha512-JhCRm9v30FMNzQSsjl4kXaygU+qHBD0Yh7mKxyjmF0V8VwYVB6qpBRX28GyAucrM9wDCpSUctT6FpMUQxbyKuA==", "license": "ISC" }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -7784,6 +8168,15 @@ "node": ">=0.8.x" } }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -8724,6 +9117,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -8733,6 +9148,16 @@ "he": "bin/he" } }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "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", @@ -9054,6 +9479,25 @@ "node": ">=4" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -9337,6 +9781,20 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -9430,6 +9888,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -9616,6 +10085,14 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -10741,6 +11218,35 @@ "node": ">=0.10.0" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", @@ -10754,6 +11260,25 @@ "node": ">=4.0" } }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -10999,6 +11524,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -11018,6 +11548,16 @@ "remove-accents": "0.4.2" } }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "node_modules/mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", @@ -11094,6 +11634,23 @@ "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==", "license": "MIT" }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -11170,6 +11727,11 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "license": "ISC" }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -11711,6 +12273,18 @@ "node": ">=6" } }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -11802,6 +12376,21 @@ "node": ">=8" } }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -13351,6 +13940,24 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "license": "MIT" }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -13441,6 +14048,15 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -14167,6 +14783,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -14598,6 +15223,29 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -14843,6 +15491,15 @@ "node": ">= 0.4" } }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -15641,6 +16298,61 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "license": "MIT" }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "node_modules/tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", @@ -15938,6 +16650,18 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15983,6 +16707,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -16236,6 +16965,18 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -16403,6 +17144,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -16824,7 +17570,15 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "license": "ISC", "engines": { - "node": ">=10" + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" } }, "node_modules/yocto-queue": { @@ -18122,6 +18876,49 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, + "@craco/craco": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz", + "integrity": "sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==", + "requires": { + "autoprefixer": "^10.4.12", + "cosmiconfig": "^7.0.1", + "cosmiconfig-typescript-loader": "^1.0.0", + "cross-spawn": "^7.0.3", + "lodash": "^4.17.21", + "semver": "^7.3.7", + "webpack-merge": "^5.8.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, "@csstools/normalize.css": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", @@ -19089,6 +19886,26 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, "@types/aria-query": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", @@ -20047,6 +20864,24 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -20290,6 +21125,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -20326,6 +21166,11 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -20415,11 +21260,75 @@ "unload": "2.2.0" } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, "browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", @@ -20439,11 +21348,30 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, "builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -20567,6 +21495,15 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", @@ -20590,6 +21527,16 @@ "wrap-ansi": "^7.0.0" } }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -20842,6 +21789,61 @@ "yaml": "^1.10.0" } }, + "cosmiconfig-typescript-loader": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz", + "integrity": "sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==", + "requires": { + "cosmiconfig": "^7", + "ts-node": "^10.7.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -20852,6 +21854,24 @@ "which": "^2.0.1" } }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -21180,6 +22200,15 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -21234,11 +22263,33 @@ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, "diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -21358,6 +22409,14 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -21376,6 +22435,27 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.317.tgz", "integrity": "sha512-JhCRm9v30FMNzQSsjl4kXaygU+qHBD0Yh7mKxyjmF0V8VwYVB6qpBRX28GyAucrM9wDCpSUctT6FpMUQxbyKuA==" }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -21960,6 +23040,15 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -22590,11 +23679,40 @@ "has-symbols": "^1.0.2" } }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "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", @@ -22816,6 +23934,11 @@ "harmony-reflect": "^1.4.6" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -22985,6 +24108,14 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -23036,6 +24167,14 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -23151,6 +24290,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -23939,6 +25083,27 @@ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" }, + "jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "requires": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "jsx-ast-utils": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", @@ -23948,6 +25113,25 @@ "object.assign": "^4.1.3" } }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -24118,6 +25302,11 @@ "semver": "^6.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -24135,6 +25324,16 @@ "remove-accents": "0.4.2" } }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", @@ -24187,6 +25386,22 @@ "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -24228,6 +25443,11 @@ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -24580,6 +25800,18 @@ "callsites": "^3.0.0" } }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -24640,6 +25872,18 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -25502,6 +26746,26 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -25551,6 +26815,15 @@ "safe-buffer": "^5.1.0" } }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -26036,6 +27309,15 @@ "glob": "^7.1.3" } }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -26322,6 +27604,23 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, "shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -26497,6 +27796,15 @@ "internal-slot": "^1.0.4" } }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -27033,6 +28341,38 @@ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + } + } + }, "tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", @@ -27229,6 +28569,18 @@ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "requires": {} }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -27260,6 +28612,11 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -27454,6 +28811,15 @@ } } }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, "webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -27550,6 +28916,11 @@ "is-typed-array": "^1.1.10" } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -27879,6 +29250,11 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index f226ef3..32fc1a8 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "@craco/craco": "^7.1.0", "@fullcalendar/core": "^6.1.4", "@fullcalendar/daygrid": "^6.1.4", "@fullcalendar/react": "^6.1.4", @@ -11,7 +12,10 @@ "@testing-library/react": "^13.0.0", "@testing-library/user-event": "^13.2.1", "axios": "^1.3.4", + "buffer": "^6.0.3", + "crypto-browserify": "^3.12.0", "eslint-plugin-prettier": "^4.2.1", + "jsonwebtoken": "^9.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-ga": "^3.3.1", @@ -23,13 +27,15 @@ "react-scroll": "^1.8.9", "react-toastify": "^9.1.1", "recoil": "^0.7.7", + "stream-browserify": "^3.0.0", "styled-components": "^5.3.8", + "util": "^0.12.5", "web-vitals": "^2.1.0" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", + "start": "craco start", + "build": "craco build", + "test": "craco test", "eject": "react-scripts eject", "postinstall": "husky install", "format": "prettier --cache --write .", diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 99b702f..86a7b2b 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -58,7 +58,7 @@ export async function GetCompletionTodo() { return data; } -export async function GetTeamInfo() { - const { data } = await api.get(`api/user/team/member`); +export async function GetUserInfo(uid) { + const { data } = await api.get(`api/user/${uid}`); return data; } diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index 1f3873a..a591514 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -138,7 +138,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { action: 'Objective 수정 실패', }); } - alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); + alert('팀장만 OKR 수정가능합니다.'); }, }); diff --git a/src/components/mainpage/OKR.jsx b/src/components/mainpage/OKR.jsx index e1d22d9..d0188b8 100644 --- a/src/components/mainpage/OKR.jsx +++ b/src/components/mainpage/OKR.jsx @@ -1,4 +1,4 @@ -import { GetOKR, GetTeamInfo } from '../../apis/apiGET.js'; +import { GetOKR, GetTeamInfo, GetUserInfo } from '../../apis/apiGET.js'; import plus from '../../assets/plus.png'; import AlertModal from '../global/globalModal/AlertModal.jsx'; import OkrModal from '../global/globalModal/OkrModal.jsx'; @@ -7,6 +7,8 @@ import { NotHave } from '../global/globalModal/modal.styled'; import { Container, Header, HeaderBox, OkrContainer } from './OKR.styled'; import OkrObject from './OkrItem'; import { useQuery } from '@tanstack/react-query'; +import jwt_decode from 'jsonwebtoken/decode'; +import { useEffect } from 'react'; import React from 'react'; import { useState, useRef } from 'react'; @@ -15,18 +17,31 @@ export default function OKR() { const [okrModalOn, setOkrModalOn] = useState(false); const [alertModalOn, setAlertModalOn] = useState(false); const [teamName, setTeamName] = useState(''); + const [accessToken, setAccessToken] = useState( + localStorage.getItem('accesstoken') + ); + const [uid, setUid] = useState(null); + const [position, setPosition] = useState(''); - const { data: getOKRData } = useQuery(['OKR'], GetOKR, { - onSuccess: response => {}, - onError: response => {}, - }); + useEffect(() => { + const decodeToken = jwt_decode(accessToken); + const extractedUid = decodeToken.userId; + setUid(extractedUid); + }, [accessToken]); - const { data: teaminfo } = useQuery(['team'], GetTeamInfo, { + const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { + enabled: !!uid, onSuccess: response => { - setTeamName(response[0].team); + setTeamName(response.team); + setPosition(response.teamposition); }, }); + const { data: getOKRData } = useQuery(['OKR'], GetOKR, { + onSuccess: response => {}, + onError: response => {}, + }); + /**모달 닫는 함수 */ const onCloseModal = () => { setOkrModalOn(!okrModalOn); @@ -34,10 +49,14 @@ export default function OKR() { /** +버튼 누르면 OKR 생성하는 모달 띄움 */ const createOKR = () => { - if (getOKRData.length < 4) { - setOkrModalOn(!okrModalOn); + if (position === '팀장') { + if (getOKRData.length < 4) { + setOkrModalOn(!okrModalOn); + } else { + setAlertModalOn(!alertModalOn); + } } else { - setAlertModalOn(!alertModalOn); + alert('팀장만 OKR 생성 가능합니다.'); } }; diff --git a/src/components/mainpage/OkrItem.jsx b/src/components/mainpage/OkrItem.jsx index e8acee5..5090714 100644 --- a/src/components/mainpage/OkrItem.jsx +++ b/src/components/mainpage/OkrItem.jsx @@ -1,4 +1,4 @@ -import { GetOKR } from '../../apis/apiGET.js'; +import { GetOKR, GetUserInfo } from '../../apis/apiGET.js'; import kRAdd from '../../assets/KRAdd.png'; import { patchOKRInfo, @@ -19,6 +19,7 @@ import { PersentBox, } from './OKR.styled'; import { useQuery, useQueryClient } from '@tanstack/react-query'; +import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useRef, useEffect } from 'react'; import { useSetRecoilState } from 'recoil'; @@ -30,6 +31,24 @@ const OkrObject = () => { const setPatchkrInfo = useSetRecoilState(patchKRInfo); const setPatchProgressInfo = useSetRecoilState(patchProgressInfo); const [openDropdownId, setOpenDropdownId] = useState(null); + const [accessToken, setAccessToken] = useState( + localStorage.getItem('accesstoken') + ); + const [uid, setUid] = useState(null); + const [position, setPosition] = useState(''); + + useEffect(() => { + const decodeToken = jwt_decode(accessToken); + const extractedUid = decodeToken.userId; + setUid(extractedUid); + }, [accessToken]); + + const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { + enabled: !!uid, + onSuccess: response => { + setPosition(response.teamposition); + }, + }); /**O 모달 닫는 함수 */ const onObjectiveCloseModal = () => { @@ -43,14 +62,18 @@ const OkrObject = () => { /** +버튼 누르면 OKR 생성하는 모달 띄움 */ const patchOKR = (id, objective, start, end, color) => { - setPatchOkrInfo({ - id: id, - objective: objective, - startData: start, - endData: end, - color: color, - }); - setOkrModalOn(!okrModalOn); + if (position === '팀장') { + setPatchOkrInfo({ + id: id, + objective: objective, + startData: start, + endData: end, + color: color, + }); + setOkrModalOn(!okrModalOn); + } else { + alert('팀장만 OKR 수정이 가능합니다.'); + } }; /**KR 모달 닫는 함수 */ @@ -60,8 +83,17 @@ const OkrObject = () => { /** +버튼 누르면 OKR 생성하는 모달 띄움 */ const patchProgress = (id, value, state, color) => { - setPatchProgressInfo({ id: id, value: value, state: state, color: color }); - setprogressModalOn(!progressModalOn); + if (position === '팀장') { + setPatchProgressInfo({ + id: id, + value: value, + state: state, + color: color, + }); + setprogressModalOn(!progressModalOn); + } else { + alert('팀장만 OKR 수정이 가능합니다.'); + } }; // 모달 외 클릭시 닫기위해 ref생성 @@ -111,54 +143,57 @@ const OkrObject = () => { enabled: true, }); - useEffect(() => {}); const patchKR = (id, KR, state, index) => { - if (state === 'patch') - setPatchkrInfo({ - id: id, - kr: KR, - state: state, - }); - else if (state === 'post') { - let index1 = false; - let index2 = false; - let index3 = false; - for (let i = 0; i < getOKRData[index]?.keyresult.length; i++) { - const forNum = Number(getOKRData[index]?.keyresult[i].krNumber); - if (forNum === 1) { - index1 = true; - } - if (forNum === 2) { - index2 = true; - } - if (forNum === 3) { - index3 = true; - } - } - if (index1 === false) { - setPatchkrInfo({ - id: id, - kr: KR, - state: state, - num: 1, - }); - } else if (index1 === true && index2 === false) { + if (position === '팀장') { + if (state === 'patch') setPatchkrInfo({ id: id, kr: KR, state: state, - num: 2, - }); - } else if (index1 === true && index2 === true && index3 === false) { - setPatchkrInfo({ - id: id, - kr: KR, - state: state, - num: 3, }); + else if (state === 'post') { + let index1 = false; + let index2 = false; + let index3 = false; + for (let i = 0; i < getOKRData[index]?.keyresult.length; i++) { + const forNum = Number(getOKRData[index]?.keyresult[i].krNumber); + if (forNum === 1) { + index1 = true; + } + if (forNum === 2) { + index2 = true; + } + if (forNum === 3) { + index3 = true; + } + } + if (index1 === false) { + setPatchkrInfo({ + id: id, + kr: KR, + state: state, + num: 1, + }); + } else if (index1 === true && index2 === false) { + setPatchkrInfo({ + id: id, + kr: KR, + state: state, + num: 2, + }); + } else if (index1 === true && index2 === true && index3 === false) { + setPatchkrInfo({ + id: id, + kr: KR, + state: state, + num: 3, + }); + } } + setkrModalOn(!krModalOn); + } else { + alert('팀장만 OKR 수정이 가능합니다.'); } - setkrModalOn(!krModalOn); }; return ( diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index e66c0d7..d8acbc9 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -18,13 +18,6 @@ const TodoItem = ({ getTodo }) => { // filter 함수 사용 const now = new Date(); - console.log(new Date(now.setDate(now.getDate()))); - // console.log( - // new Date('2023-03-31').getMonth() === now.getMonth() && - // new Date('2023-03-31').getDate() === now.getDate() - // ); - // console.log(new Date('2023-03-31') === new Date(now)); - const filterArray = getTodo?.filter(el => { if (el.completion === false) { // return el; @@ -43,8 +36,6 @@ const TodoItem = ({ getTodo }) => { } }); - console.log('filterArray :', filterArray); - // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { onSuccess: response => { @@ -123,7 +114,6 @@ const TodoItem = ({ getTodo }) => { onError: response => {}, } ); - console.log(filterArray); return ( <> {filterArray?.map(el => ( diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 1436223..9d432b1 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -14,26 +14,11 @@ import { } from '../../styles/sign.styled'; import { OnChange } from '../global/onChange'; import { useMutation } from '@tanstack/react-query'; -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; -import { toast } from 'react-toastify'; const Article = () => { - useEffect(() => { - const handleBeforeUnload = e => { - e.preventDefault(); - e.returnValue = - '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; - }; - - window.addEventListener('beforeunload', handleBeforeUnload); - - return () => { - window.removeEventListener('beforeunload', handleBeforeUnload); - }; - }, []); - const navigate = useNavigate(); // 눈 아이콘 const [pwEyeOpen, setPwEyeOpen] = useState(false); diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 4fbe250..15d8a82 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -35,6 +35,10 @@ const Article = () => { }; }, []); + useEffect(() => { + localStorage.removeItem('userInfo'); + }, []); + const navigate = useNavigate(); // 눈 아이콘 const [pwEyeOpen, setPwEyeOpen] = useState(false); @@ -109,7 +113,6 @@ const Article = () => { action: '회원가입', }); } - setTimeout(() => { navigate('/'); }, 1000); diff --git a/yarn.lock b/yarn.lock index 910e33f..73c438c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1114,6 +1114,26 @@ resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@craco/craco@^7.1.0": + version "7.1.0" + resolved "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz" + integrity sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA== + dependencies: + autoprefixer "^10.4.12" + cosmiconfig "^7.0.1" + cosmiconfig-typescript-loader "^1.0.0" + cross-spawn "^7.0.3" + lodash "^4.17.21" + semver "^7.3.7" + webpack-merge "^5.8.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@csstools/normalize.css@*": version "12.0.0" resolved "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz" @@ -1572,7 +1592,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -1603,6 +1623,14 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" @@ -1915,6 +1943,26 @@ resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "@types/aria-query@^5.0.1": version "5.0.1" resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" @@ -2499,7 +2547,12 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: version "8.8.2" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== @@ -2632,6 +2685,11 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + arg@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" @@ -2729,6 +2787,16 @@ asap@~2.0.6: resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" @@ -2749,7 +2817,7 @@ at-least-node@^1.0.0: resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -autoprefixer@^10.4.13: +autoprefixer@^10.4.12, autoprefixer@^10.4.13: version "10.4.13" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz" integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== @@ -2944,6 +3012,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + batch@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" @@ -2979,6 +3052,26 @@ bluebird@^3.5.5: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bn.js@^4.0.0: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^4.1.0: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.1" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" @@ -3048,11 +3141,70 @@ broadcast-channel@^3.4.1: rimraf "3.0.2" unload "2.2.0" +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4", "browserslist@>= 4.21.0", browserslist@>=4: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" @@ -3070,11 +3222,29 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtin-modules@^3.1.0: version "3.3.0" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" @@ -3225,6 +3395,14 @@ ci-info@^3.2.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + cjs-module-lexer@^1.0.0: version "1.2.2" resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" @@ -3246,6 +3424,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clsx@^1.1.1: version "1.2.1" resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" @@ -3425,6 +3612,14 @@ core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cosmiconfig-typescript-loader@^1.0.0: + version "1.0.9" + resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz" + integrity sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g== + dependencies: + cosmiconfig "^7" + ts-node "^10.7.0" + cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" @@ -3436,7 +3631,7 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -cosmiconfig@^7.0.0: +cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: version "7.1.0" resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== @@ -3447,6 +3642,42 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -3456,6 +3687,23 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-browserify@^3.12.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" @@ -3795,6 +4043,14 @@ depd@2.0.0: resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -3842,6 +4098,20 @@ diff-sequences@^29.4.3: resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz" integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -3973,6 +4243,13 @@ duplexer@^0.1.2: resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" @@ -3990,6 +4267,19 @@ electron-to-chromium@^1.4.284: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.317.tgz" integrity sha512-JhCRm9v30FMNzQSsjl4kXaygU+qHBD0Yh7mKxyjmF0V8VwYVB6qpBRX28GyAucrM9wDCpSUctT6FpMUQxbyKuA== +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emittery@^0.10.2: version "0.10.2" resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" @@ -4470,6 +4760,14 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" @@ -5025,11 +5323,37 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + he@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoist-non-react-statics@^3.0.0: version "3.3.2" resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" @@ -5212,6 +5536,11 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" @@ -5256,7 +5585,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4, inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5290,7 +5619,7 @@ ipaddr.js@1.9.1: resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-arguments@^1.1.1: +is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== @@ -5373,6 +5702,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -5422,6 +5758,13 @@ is-plain-obj@^3.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" @@ -5476,7 +5819,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.9: +is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: version "1.1.10" resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== @@ -5534,6 +5877,11 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" @@ -6249,6 +6597,16 @@ jsonpointer@^5.0.0: resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== +jsonwebtoken@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz" + integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== + dependencies: + jws "^3.2.2" + lodash "^4.17.21" + ms "^2.1.1" + semver "^7.3.8" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: version "3.3.3" resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" @@ -6257,6 +6615,23 @@ jsonpointer@^5.0.0: array-includes "^3.1.5" object.assign "^4.1.3" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" @@ -6438,6 +6813,11 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + makeerror@1.0.12: version "1.0.12" resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" @@ -6453,6 +6833,15 @@ match-sorter@^6.0.2: "@babel/runtime" "^7.12.5" remove-accents "0.4.2" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" @@ -6508,6 +6897,14 @@ microseconds@0.2.0: resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + "mime-db@>= 1.43.0 < 2", mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" @@ -6542,11 +6939,16 @@ mini-css-extract-plugin@^2.4.5: dependencies: schema-utils "^4.0.0" -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -6907,6 +7309,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" @@ -6970,6 +7383,17 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" @@ -7681,6 +8105,18 @@ psl@^1.1.33: resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" @@ -7720,13 +8156,21 @@ raf@^3.4.1: dependencies: performance-now "^2.1.0" -randombytes@^2.1.0: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" @@ -7869,7 +8313,7 @@ react-router@6.8.2: dependencies: "@remix-run/router" "1.3.3" -react-scripts@5.0.1: +react-scripts@^5.0.0, react-scripts@5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz" integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== @@ -7966,7 +8410,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6: +readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.1" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz" integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== @@ -8170,6 +8614,14 @@ rimraf@^3.0.0, rimraf@^3.0.2, rimraf@3.0.2: dependencies: glob "^7.1.3" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + rollup-plugin-terser@^7.0.0: version "7.0.2" resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" @@ -8194,7 +8646,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8218,7 +8670,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -8421,6 +8873,21 @@ setprototypeof@1.2.0: resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" @@ -8597,6 +9064,14 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" @@ -8998,6 +9473,25 @@ tryer@^1.0.1: resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +ts-node@^10.7.0, ts-node@>=9.0.0: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tsconfig-paths@^3.14.1: version "3.14.2" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" @@ -9090,7 +9584,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -"typescript@^3.2.1 || ^4", "typescript@>= 2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": +"typescript@^3.2.1 || ^4", "typescript@>= 2.7", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=3: version "4.9.5" resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -9211,6 +9705,17 @@ util.promisify@~1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.0" +util@^0.12.5: + version "0.12.5" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + utila@~0.4: version "0.4.0" resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" @@ -9226,6 +9731,11 @@ uuid@^8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" @@ -9350,6 +9860,14 @@ webpack-manifest-plugin@^4.0.2: tapable "^2.0.0" webpack-sources "^2.2.0" +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" @@ -9471,7 +9989,7 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-typed-array@^1.1.9: +which-typed-array@^1.1.2, which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== @@ -9497,6 +10015,11 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" @@ -9758,6 +10281,11 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" From 28ae11fe1c5398be75b468936ed835475a9732c2 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 3 Apr 2023 08:47:38 +0900 Subject: [PATCH 39/72] =?UTF-8?q?pull=EC=9D=84=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=9E=84=EC=8B=9C=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/mainpage/TodoItem.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index e66c0d7..932c740 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -168,7 +168,7 @@ const TodoItem = ({ getTodo }) => { <div title={el.memo}>{el.toDo}</div> <p style={{ color: 'red' }}> {/* {el.fstartDate}~{el.fendDate} 까지 */} - {el.fendDate} 완료 + {el.fendDate}까지 완료 </p> </div> <div className='priorityBox'> From b6a7da0a2c18b3c8ea5471ac800f2e8f457dd5fb Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Wed, 5 Apr 2023 01:07:29 +0900 Subject: [PATCH 40/72] =?UTF-8?q?=EC=A3=BC=EA=B0=84=20=EC=BA=98=EB=A6=B0?= =?UTF-8?q?=EB=8D=94=20UX=EC=B8=A1=EB=A9=B4=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/mainpage/TodoItem.jsx | 15 +- src/components/todo/FinishTodo.jsx | 2 +- src/components/todo/Todo.jsx | 13 +- src/components/todo/TodoNavi.jsx | 62 ++- src/components/todo/tododetail.styled.js | 32 ++ yarn.lock | 547 +++++++++-------------- 6 files changed, 313 insertions(+), 358 deletions(-) diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index e87b9a9..47db78a 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -110,7 +110,9 @@ const TodoItem = ({ getTodo }) => { ['completionTodo'], GetCompletionTodo, { - onSuccess: response => {}, + onSuccess: response => { + console.log('completionTodo', response); + }, onError: response => {}, } ); @@ -155,10 +157,13 @@ const TodoItem = ({ getTodo }) => { </div> <div className='detail'> <div className='nameDateComplitc'> - <div title={el.memo}>{el.toDo}</div> - <p style={{ color: 'red' }}> - {/* {el.fstartDate}~{el.fendDate} 까지 */} - {el.fendDate}까지 완료 + <div + title={el.memo} + style={{ textDecoration: 'line-through', color: '#a9a9a9' }}> + {el.toDo} + </div> + <p style={{ textDecoration: 'line-through', color: '#a9a9a9' }}> + {el.fstartDate}~{el.fendDate} </p> </div> <div className='priorityBox'> diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index f91c0dc..b9d6f58 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -14,7 +14,7 @@ const FinishTodo = ({ el }) => { // console.log('el :', el); - const Priority = ({ ct }) => { + const Priority = () => { // console.log(el.priority); if (el.priority === 1) { return <img src={red} alt='' />; diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 181962f..5d17fe5 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -13,19 +13,24 @@ import styled from 'styled-components'; export default function Todo() { //todo 전부 가져오기 const { data: getAllTodo } = useQuery(['ALLTODO'], GetAllTodo, { - onSuccess: response => {}, + onSuccess: response => { + // console.log('getTodo', response); + }, onError: response => {}, }); const now = new Date(); let today = ''; let tomorrow; - if (now.getMonth() + 1 < 10) { - today = `0${now.getMonth() + 1}월 ${now.getDate()}일`; - tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; + if (now.getMonth() + 1 < 10 && now.getDate() < 10) { + today = `0${now.getMonth() + 1}월 0${now.getDate()}일`; + tomorrow = `0${now.getMonth() + 1}월 0${now.getDate() + 1}일`; } else if (now.getDate() < 10) { today = `${now.getMonth() + 1}월 0${now.getDate()}일`; tomorrow = `${now.getMonth() + 1}월 0${now.getDate() + 1}일`; + } else if (now.getMonth() + 1 < 10) { + today = `0${now.getMonth() + 1}월 ${now.getDate()}일`; + tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; } else { today = `${now.getMonth() + 1}월 ${now.getDate()}일`; tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 9b19479..f63b14b 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -2,21 +2,26 @@ import plus from '../../assets/plus.png'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; -import React, { useState, useRef } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { Link } from 'react-scroll'; const TodoNavi = ({ todayFormat, getAllTodo }) => { // console.log(getAllTodo); + // console.log(todayFormat); const today = new Date(); const yearMonth = `${today.getFullYear()}년 ${today.getMonth() + 1}월`; let date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); + const [month, setMonth] = useState(today.getMonth() + 1); + let makeWeekAll = date => { let day = date.getDay(); let week = []; - const haveDay = []; - + const haveDay = getAllTodo?.map(todo => { + return todo.targetDate; + }); + // console.log(haveDay); for (let i = 0; i < 7; i++) { let newDate = new Date(date.valueOf() + 86400000 * (i - day)); // let id = Math.random(); @@ -37,29 +42,34 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { dateValue = '토'; } - // if() - // console.log(allTodo[i]?.targetDate); - // console.log(newDate.getDate()); let format = ''; - if (newDate.getMonth() + 1 < 10) { + if (newDate.getMonth() + 1 < 10 && newDate.getDate() < 10) { + format = `0${newDate.getMonth() + 1}월 0${newDate.getDate()}일`; + } else if (newDate.getMonth() + 1 < 10) { format = `0${newDate.getMonth() + 1}월 ${newDate.getDate()}일`; } else if (newDate.getDate() < 10) { format = `${newDate.getMonth() + 1}월 0${newDate.getDate()}일`; } else { format = `${newDate.getMonth() + 1}월 ${newDate.getDate()}일`; } + week.push([ dateValue, `${newDate.getMonth() + 1}`, `${newDate.getDate()}`, { format: format }, + { includes: haveDay?.includes(format) }, ]); + + // console.log(week); } return week; }; let week = makeWeekAll(date); + // console.log() + const [state, setState] = useState({ date, week, @@ -73,6 +83,15 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { date: newDate, week: newWeek, }); + + newWeek.map(el => { + if (el[1] === month) { + setMonth(month); + } else { + setMonth(el[1]); + } + return el; + }); }; const onPressArrowRight = () => { @@ -83,6 +102,14 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { date: newDate, week: newWeek, }); + newWeek.map(el => { + if (el[1] === month) { + setMonth(month); + } else { + setMonth(el[1]); + } + return el; + }); }; const dateM = date.getMonth() + 1; @@ -106,20 +133,19 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { setTodoModalOn(!todoModalOn); } }; - - console.log(state.week); + // console.log(state.week); return ( <StNavi> <TodoHeader> <div className='left'> - <div className='dDay'>{yearMonth}</div> - <div className='down' /> + <div className='dDay'> + {today.getFullYear()}년 {month}월 + </div> </div> <div className='right'> <div className='prev' onClick={onPressArrowLeft} /> <div className='next' onClick={onPressArrowRight} /> - {/* <div className='today'>오늘</div> */} <Link className='today' to={todayFormat} @@ -142,22 +168,28 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { spy={true} smooth={true} offset={-500} - className='day' - style={{ border: '2px solid rgba(255, 131, 54,1)' }}> + className={el[4].includes === false ? 'day' : 'include'} + style={{ backgroundColor: ' rgba(255, 131, 54, 0.3)' }}> <span className='label'>{el[0]}</span> <span className='date' style={{ color: '#ff8336' }}> {el[2]} </span> + {el[4].includes === false ? null : ( + <div className='includeCh'></div> + )} </Link> ) : ( <Link - className='day' + className={el[4].includes === false ? 'day' : 'include'} to={el[3].format} spy={true} offset={-500} smooth={true}> <span className='label'>{el[0]}</span> <span className='date'>{el[2]}</span> + {el[4].includes === false ? null : ( + <div className='includeCh'></div> + )} </Link> )} </React.Fragment> diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index ab2cc9f..5abd169 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -95,6 +95,30 @@ export const DateNavi = styled.div` flex-direction: column; align-items: center; justify-content: center; + cursor: default; + .label { + color: #4b4b4b; + font-size: 1.5rem; + margin-bottom: 1px; + } + .date { + font-size: 25px; + line-height: 34px; + } + } + .include { + width: calc(100% / 7); + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: relative; + cursor: pointer; + transition: all 0.3s; + :hover { + background-color: rgb(248, 248, 248); + } .label { color: #4b4b4b; font-size: 1.5rem; @@ -105,6 +129,14 @@ export const DateNavi = styled.div` /* background-color: pink; */ line-height: 34px; } + .includeCh { + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #000; + position: absolute; + bottom: 6px; + } } `; diff --git a/yarn.lock b/yarn.lock index 73c438c..c7b90c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,7 +36,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz" integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.11.0": +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz" integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== @@ -66,7 +66,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.17.3", "@babel/generator@7.17.7": +"@babel/generator@7.17.7", "@babel/generator@^7.17.3": version "7.17.7" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz" integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== @@ -508,7 +508,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.18.6": +"@babel/plugin-syntax-flow@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz" integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== @@ -820,7 +820,7 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.18.6": +"@babel/plugin-transform-react-jsx@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz" integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== @@ -1060,6 +1060,22 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" +"@babel/traverse@7.17.3": + version "7.17.3" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": version "7.21.2" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz" @@ -1076,21 +1092,13 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@7.17.3": - version "7.17.3" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== +"@babel/types@7.17.0", "@babel/types@^7.17.0": + version "7.17.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" "@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.21.2" @@ -1101,14 +1109,6 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.17.0", "@babel/types@7.17.0": - version "7.17.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" @@ -1287,7 +1287,7 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz" integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== -"@fullcalendar/core@^6.1.4", "@fullcalendar/core@~6.1.4": +"@fullcalendar/core@^6.1.4": version "6.1.4" resolved "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.4.tgz" integrity sha512-ZDD0Owv0LezAk14nsRNaOc9nbowItGmT0mnjOhEw+L6B8P5eads8yYaNA9itn70MWoOjiAG8xqD7Yk1iJGxqgQ== @@ -1592,7 +1592,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -1610,19 +1610,11 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" @@ -1631,6 +1623,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" @@ -1651,7 +1651,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1876,7 +1876,7 @@ "@tanstack/query-core" "4.26.1" use-sync-external-store "^1.2.0" -"@testing-library/dom@^8.5.0", "@testing-library/dom@>=7.21.4": +"@testing-library/dom@^8.5.0": version "8.20.0" resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz" integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA== @@ -1968,7 +1968,7 @@ resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.9": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.20.0" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== @@ -2052,16 +2052,16 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" @@ -2280,7 +2280,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.0.0 || ^5.0.0", "@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz" integrity sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== @@ -2303,7 +2303,7 @@ dependencies: "@typescript-eslint/utils" "5.54.0" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.5.0": +"@typescript-eslint/parser@^5.5.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz" integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== @@ -2349,7 +2349,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.43.0", "@typescript-eslint/utils@5.54.0": +"@typescript-eslint/utils@5.54.0", "@typescript-eslint/utils@^5.43.0": version "5.54.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz" integrity sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== @@ -2552,20 +2552,15 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -acorn@^7.0.0: +acorn@^7.0.0, acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2606,7 +2601,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2616,17 +2611,7 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.8.0, ajv@^8.8.2: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.6.0, ajv@>=8: +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2714,16 +2699,16 @@ aria-query@^5.0.0, aria-query@^5.1.3: dependencies: deep-equal "^2.0.5" -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -3052,17 +3037,7 @@ bluebird@^3.5.5: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^4.1.0: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^4.11.9: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== @@ -3205,7 +3180,7 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4", "browserslist@>= 4.21.0", browserslist@>=4: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3321,16 +3296,7 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3471,16 +3437,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@^1.1.4, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@^1.1.4, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colord@^2.9.1: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" @@ -3799,14 +3765,6 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" @@ -3815,6 +3773,14 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" @@ -3932,33 +3898,26 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@^2.6.0: +debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" decimal.js@^10.2.1: version "10.4.3" @@ -4033,16 +3992,16 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" @@ -4162,6 +4121,14 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" +dom-serializer@0: + 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" + dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -4171,24 +4138,16 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@0: - 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" +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" @@ -4602,7 +4561,7 @@ eslint-plugin-testing-library@^5.0.1: dependencies: "@typescript-eslint/utils" "^5.43.0" -eslint-scope@^5.1.1, eslint-scope@5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4625,12 +4584,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== @@ -4651,7 +4605,7 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.5.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.1.0, eslint@^8.3.0, eslint@^8.34.0, "eslint@>= 6", eslint@>=5, eslint@>=7.0.0, eslint@>=7.28.0: +eslint@^8.3.0, eslint@^8.34.0: version "8.35.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz" integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== @@ -4961,15 +4915,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -5091,6 +5037,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -5153,7 +5104,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5167,13 +5118,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" @@ -5432,16 +5376,6 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -5453,6 +5387,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -5505,13 +5449,6 @@ husky@^8.0.3: resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -5519,6 +5456,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -5585,7 +5529,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5609,16 +5553,16 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -6242,7 +6186,7 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve@*, jest-resolve@^27.4.2, jest-resolve@^27.5.1: +jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== @@ -6464,7 +6408,7 @@ jest-worker@^28.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -"jest@^27.0.0 || ^28.0.0", jest@^27.4.3: +jest@^27.4.3: version "27.5.1" resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== @@ -6905,7 +6849,7 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -6975,11 +6919,6 @@ mkdirp@~0.5.1: dependencies: minimist "^1.2.6" -ms@^2.1.1, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -6990,6 +6929,11 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" @@ -7973,15 +7917,6 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.1.4, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.3, postcss@^8.3.5, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.4, postcss@^8.4.6, "postcss@>= 8", postcss@>=8, postcss@>=8.0.9: - version "8.4.21" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - postcss@^7.0.35: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" @@ -7990,6 +7925,15 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: + version "8.4.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + preact@^10.0.5: version "10.13.0" resolved "https://registry.npmjs.org/preact/-/preact-10.13.0.tgz" @@ -8012,7 +7956,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.8.4, prettier@>=2.0.0, prettier@2.x: +prettier@^2.8.4: version "2.8.4" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz" integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== @@ -8078,7 +8022,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8233,7 +8177,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -"react-dom@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.7.0 || ^17 || ^18", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 16.8.0", react-dom@>=16, react-dom@>=16.8, react-dom@>=16.8.0: +react-dom@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -8251,17 +8195,17 @@ react-error-overlay@^6.0.11: resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-ga@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz" - integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== - react-ga4@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz" integrity sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ== -react-is@^16.13.1, react-is@^16.7.0, "react-is@>= 16.8.0": +react-ga@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz" + integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== + +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -8293,7 +8237,7 @@ react-query@^3.39.3: broadcast-channel "^3.4.1" match-sorter "^6.0.2" -react-refresh@^0.11.0, "react-refresh@>=0.10.0 <1.0.0": +react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== @@ -8313,7 +8257,7 @@ react-router@6.8.2: dependencies: "@remix-run/router" "1.3.3" -react-scripts@^5.0.0, react-scripts@5.0.1: +react-scripts@5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz" integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== @@ -8383,7 +8327,7 @@ react-toastify@^9.1.1: dependencies: clsx "^1.1.1" -"react@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.6.2 || ^16.0 || ^17 || ^18", "react@^16.7.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16", "react@>= 16.8.0", react@>=16, react@>=16.13.1, react@>=16.8, react@>=16.8.0: +react@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -8607,7 +8551,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0, rimraf@^3.0.2, rimraf@3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8632,7 +8576,7 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: +rollup@^2.43.1: version "2.79.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -8646,20 +8590,15 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: version "1.0.0" @@ -8670,7 +8609,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -8707,6 +8646,15 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -8716,25 +8664,7 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.1: +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -8753,15 +8683,6 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -8779,28 +8700,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.8: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -8975,16 +8875,16 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@^0.5.0: version "0.5.7" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@^0.7.3: version "0.7.4" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" @@ -9047,16 +8947,16 @@ stackframe@^1.3.4: resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -9072,20 +8972,6 @@ stream-browserify@^3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -9148,6 +9034,20 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" @@ -9208,7 +9108,7 @@ style-loader@^3.3.1: resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== -styled-components@^5.3.8, "styled-components@>= 2": +styled-components@^5.3.8: version "5.3.8" resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.8.tgz" integrity sha512-6jQrlvaJQ16uWVVO0rBfApaTPItkqaG32l3746enNZzpMDxMvzmHzj8rHUg39bvVtom0Y8o8ZzWuchEXKGjVsg== @@ -9232,14 +9132,7 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -9473,7 +9366,7 @@ tryer@^1.0.1: resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== -ts-node@^10.7.0, ts-node@>=9.0.0: +ts-node@^10.7.0: version "10.9.1" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== @@ -9519,7 +9412,7 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -type-check@^0.4.0: +type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== @@ -9533,13 +9426,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - type-detect@4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" @@ -9550,7 +9436,7 @@ type-fest@^0.16.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== -type-fest@^0.20.2, "type-fest@>=0.17.0 <4.0.0": +type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== @@ -9584,11 +9470,6 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -"typescript@^3.2.1 || ^4", "typescript@>= 2.7", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=3: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -9647,7 +9528,7 @@ unload@2.2.0: "@babel/runtime" "^7.6.2" detect-node "^2.0.4" -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -9817,7 +9698,7 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0, "webpack-dev-server@3.x || 4.x": +webpack-dev-server@^4.6.0: version "4.11.1" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== @@ -9889,7 +9770,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.4.0 || ^5.9.0", "webpack@^4.44.2 || ^5.47.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.64.4, "webpack@>= 4", webpack@>=2, "webpack@>=4.43.0 <6.0.0": +webpack@^5.64.4: version "5.75.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz" integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== @@ -9919,7 +9800,7 @@ webpack-sources@^3.2.3: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== From 09014d181902c66f8146c52e77960f2a38bbb853 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Thu, 6 Apr 2023 17:59:11 +0900 Subject: [PATCH 41/72] =?UTF-8?q?okr=20png=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/emoji1.png | Bin 0 -> 1203 bytes src/assets/emoji2.png | Bin 0 -> 1113 bytes src/assets/emoji3.png | Bin 0 -> 1113 bytes src/assets/milestone 1.png | Bin 0 -> 450 bytes src/assets/mount.png | Bin 0 -> 1182 bytes .../global/globaldropdown/Emotion.jsx | 6 +- .../global/globaldropdown/dropdown.js | 42 +-- src/components/mainpage/OKR.styled.js | 244 ++++++++---------- src/components/mainpage/OkrItem.jsx | 155 +++++------ 9 files changed, 209 insertions(+), 238 deletions(-) create mode 100644 src/assets/emoji1.png create mode 100644 src/assets/emoji2.png create mode 100644 src/assets/emoji3.png create mode 100644 src/assets/milestone 1.png create mode 100644 src/assets/mount.png diff --git a/src/assets/emoji1.png b/src/assets/emoji1.png new file mode 100644 index 0000000000000000000000000000000000000000..821a2620fe2f0a6a2ff79400cd74f9b531d4b4dc GIT binary patch literal 1203 zcmV;k1WfyhP)<h;3K|Lk000e1NJLTq0018V0018d1^@s6AFdWT00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1V~9lK~#7Ftyf)W zTtyWA=I-v@O>S##vzs5PG%ZadwAm!4B}ybFnm;XQwO|WHkyfxzg1(4Fq*cThEz$=o z3R0v}Uld;y1JRANielVK8>9wP6Kc{;HeHf!HtyfO(=+$Bo8G;5ckeFwV0Lz9&YW+~ znKLuzGB^aEMK@gN1w$7#gH+cU15~n@#R?`6#}82P4cmipCpuXv0X~C%$T&uSdrHaD zB7k|l{sS6L(IP%aCFDGc9aMcn<x!La;fXmaX}$F~Bn+{3OxcOL#m~ZhFKkY#c#VTS zOU*@>KQWcPHvE_xQSOO<+zNGO9bC05sNO#T<>|?Syos-xu=4FTLq4#Kb$hQg`&zG$ z&$c~vPMuR8Cy^z_@TW^-CmJGWrr5vrFE+Xv579v5-HO=yH26)~LZBSHf{n+1v-B^W z?7+=4yDa@oAw3C;o+&qHy^@FFcs{X!9kFiRmk%KId%dYI6|S`<*7YQ8^)zM}|5Vbr zb_iu6HCAV8Cx5yh<${9kVF_yho^qiAC=z4r0?LGY`=Y5`)q4$PgJV=;5_^?ZWz$aQ z_#T=?b^o-f&)az&RejS=RY0O3)HLY`<MU`wUk-$$M+Qr}&$}lA|3@QWUez+j(=J30 z4<dajP*ex=s0e)U9pt81r$jf=emNM0|MZA{yb3{XiK6DikS(#UR91BzVu6JqEUtMo z1bJHw#5*9-ech#7wL5~qX?v@L!oX+4kk%L99WgEzAn%I8&SL+2!|-*?7#$p4!t&e! zwex@=E@rWXBuyl5kq3eilg0kGM+}Qs(Zc8s=lKf6zKIy{?1<?WJ0cb$OH`I`8<wFM zcw-Qm$xX%{n~9Bu@_(%40;#cjc$#CnE3f`1<L7V{Y$0X~N2OM~2HFy+yEhAsZnw<U zP4KqZ$AMd4tqr_Q5fK!+HOYB~vu8KJDS|ag)VZ_tprzs68p(MhAL53aDWz;nLk5aZ zgA>$}#XGk+x;7RB`Q=hlN>;;jkHp~wLk}k4mbeqqaf$Zqm!cy7Q%L{^yW{9@UoI*- z(6)?2Jxg!|3FjFfLnl2kzZMj_fje1=jxRzRFnm$L+@d?zC${7OdFDX3Gw<k-(XOXa zJd6-|pvNL0wt3DvFRL;9HEq1p)jp1fjUpx-x!Qn)OYBLs8q4Q+2X+Z!#(u8Y)8N(= zDu#xWqRJ(Zw$=;%F{~{ZCfQzW7k^ii2@hTZ@=kq4IYLq5B*jnPoo0@lwLqk$hfTt6 zILPeF!t3mr)im0aMzIcjP5W`&B(7j>z;S}yeaggVD;LI55`JH&77@Py<Kd``G)^8o z%AUZv{Gq~MEEg%AR`ESaH0x1+13($4={81b{>x<Xgxz52Z?!O<r$xL%#JlwcIP<_L zeXqUC_F<%$kmGP7PwXUx`{=6eqbs+Gwqx^Mo)B;5IBB~;C*(&qg!4{x-U78WZ{Rxf RVDSI|002ovPDHLkV1m)VBe?(o literal 0 HcmV?d00001 diff --git a/src/assets/emoji2.png b/src/assets/emoji2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bd5c63842825654a117283fd92d5cf49e881b9 GIT binary patch literal 1113 zcmV-f1g86mP)<h;3K|Lk000e1NJLTq0018V0018d1^@s6AFdWT00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1MW#gK~#7Fy;oao z6jd1h&g`^h*-A^amY~7K3PDq96)FkT(1Jyp5F0fyF~(9GV?-09iBCQ#8WNwHXbdsf z2f>(__y9Z^Lq)0vVg#Z#$}KHj5=w7`w##nmUOI<wc6N5#&dk{<S@@DObI$oM-+%r& zmpKAHA+O<C1h9?OMhL8DskQ_xvlvDk7ZJsA){lw?{O8A~D5M~V(1KEY#A;I^U8GsY zGQpf-`HDe&hdUvcQLIG*->|wBi-DPmQI=$;eu>$7UOa_}o2uq&KZ@NXKD}sS6XtLp z$i4*!VBnlQgLiz9%W-_d-h-?z!<|B(XB}h^`{h~sb%`@iJcjq!^CgM_gXOBD_jR!W z-#f_V1j0z+0(;6(EL?*%3G<j@*~kF;%|<@$DK3*@5}OD(dMe1#Z8tLHOm_!6AH}_Z zL=z`qbB>(&0CxjPkA4jwn=c`+qMphA8^y*9tPRHtX*B3u7BAcFSWLsIQ$bJt6)V!H zt4nyw`})c-GNN0J>1+UVu%&()p{3Gl1h7-*qtO<|;~KiU?)P-w(h^saA3Ii#o}Q4W z{K?M~B+pKNi7h(UW3Bz=Q>Du=@bvo*qx#B!(YEp^YHE^DVe{r`RNt4zq2Ufh5|23K zsnUIX-mn@0)C%rs(iTSIVXXdX&|%aOK8SA{-hdLbuvT#lXg+rWy*Ha2DueZ_5iX15 z+Iq&o#w`!W$*f}=X6DW8nY)<G%4Ze?;)XcptpMHOR7Gx1qG*;-1r@nImmC;kc?g9t zf&A$7O5ow$Kxhqv;^8;+0|QE8kr>xGiazdcYVsN6iG!R-n|>zoy1abNUf|>=W@rqH z!2c%sNs_lJ)#jx6@aa_;{Jq<uQl-_QeZw#C4T;}$E;9}T`~2vSP6lw`$1AK|ah1QY zPD5qLfG-$0tnqj|%aQl`(H|HtRm%Um6ogOwBihiXWuy4ak3}q@p-A|`d}O?djX2?F z^bb~~mGbIJwLFW<ViykO$TKLxn}*aTRaR?PrVv_UcoNrz6Do7gF)_oRmhE;sM=sW5 z;COU<r^<L~nSsvd+~a$tF$z)O7SL}z_Mvz&{~JB;BfizzeT3=Xt8%dGnHbuer?5O^ zZDVF8-fo@9^eaKXJ6`J9KetPFDD4rS;%hm=N!UdL*Yoi;lE1n&it(ucD#~ZEq(rgb zN=$Nyo%DNTp~!vu?hywlsioohT!;%&s%a9{%hQF3d--f|Blae@0*K&U@dPu_ULKtO z6IF2g8+Aoh;Ce5Kx6!_trQb`h;6>2}Zyb+PyN##X4({_cJh@iowq3znDtI$BxK)?n fSFsa+`0;rgy%{NFsz}Ac00000NkvXXu0mjfxq%SB literal 0 HcmV?d00001 diff --git a/src/assets/emoji3.png b/src/assets/emoji3.png new file mode 100644 index 0000000000000000000000000000000000000000..181ad8d36d931909d417d074372cc8973db6f754 GIT binary patch literal 1113 zcmV-f1g86mP)<h;3K|Lk000e1NJLTq0018V0018d1^@s6AFdWT00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1MW#gK~#7Ftyf!U zR7V*8W-p1j$tG&*8hmN&CB?Lscqz0CZCYAuTS41C7Ewx}Mv5=>0s&DUd{exD7)8Vz z`j%)wka*W1h^`u45RD;Tva1{88do<Ov%AM{&PjH2+;dCZ4-RMknQ!Ks|DXTN%n@)1 zC5mt1#`h2i(wxC}Kx^QWLKOYDg9J_?jU!?X!cN8%b_6AYpHPGb7VGS|oCMILzC*}h z8z-?JV-Z)L;8VVK@%av;fs90q&l}ac4HxE#THG_Dx(xfru$ZsQqZXEs?o?pdt!hRf ztX#!XI1#7EYgxOOML)(0kFK|m(b%DcIIh7wbHY7X&YG<#1TuWO^J*7~SvZ&{t~|qs z7{o2sj6<Oig_eXlJZJLG5?`QG8o96!@-s0J?(Fm;7IVW1l1YK~_F~P*?@~sc-NS|| z&TucG@HC^rb~aAHvSpQ6xiX**Yy~;N`ua+&S`|QJW4SR&K^@oshpag9zu90-&80(S z4_aERbFi&#yvmbkZuTP)cNr4})~Mq2x|YW0#^N5G9f^2gg|4n5z1{6KCQ9$G<0}`l z@=utcv^1l$OG+}Z!n^IoUJG&tb6re|pjmrW)gY!%AIRDZ7QBEJg2Dc5IZ%<pXVV7E z$qIskyV(=2e1#cDhQ77chnkuJ%$)fec4%uIkFE|c=6;hzU{cD88WG&l6chq!$gdc9 z>AZ_a?J!!%XiBH#63eN}L&QEP?<p>qG%+Mt0LTw9V#|_ZebB;MAYr0cir=(igu>i$ zWs<*wV<?<psKfS%2)pRXMYGlu7ky~hIvM|Mnu6FfXM20B&y5v(0%$le8ON@am=j&N zAU$t2YoAd)fWX8QI-*5byk#mjADxKqUgKTvA?pvEDMS7CN`&thBT$~g?2jz6(1RxR zq~J~CjNJ0_2+ZdAT{l`TmEiFCvTSuFC-i|oowcKJH+mD=q=ZoL$Ja0MSKV{?#%0XB zz9D|amzubC%ACq0$xkY-6=QuK96IMmdsi_Y#q;;gN&XamuI<PCIWJgF!v;&leC*3z zCXBovAwCj)NjDz!Xr6lcn!*rID76*TAkZm(!^g6iTR<=V;bswnJn)BMl4Iq*G|H<S zis^-4Q{%^BGkf3;U2Xo>kv(v5vmX^!i{EqCXx(Yg%Uu(bY@LqoLt&s`J;S|Cr)S8M z_iP0lRcV>9z0eMhv56)a!KLCC9DcXS{Ey`tZ?kC}C!?B|KHw?FvbCON|9|Q69ivA3 zf3>Sv#7Qit@N9Jg&LVJ@r``s!5GSojj?;;esNsMMkz}^M!Y5pgsUsrsm`|9awebr% fE#~2ZlQG`{=Y={v7hroT00000NkvXXu0mjfFn<XY literal 0 HcmV?d00001 diff --git a/src/assets/milestone 1.png b/src/assets/milestone 1.png new file mode 100644 index 0000000000000000000000000000000000000000..b08cc9531aa4b363521dfe2dab795b82790e67e1 GIT binary patch literal 450 zcmV;z0X_bSP)<h;3K|Lk000e1NJLTq001HY001Hg1^@s6I!6n_00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0ar;xK~#7F?U%7i z!$26v{}&FozJm_M&AxzxK7oS|U==qNmlm-gq#dk?6_+A7SbP8%cWD<_7X=X%Gjwpa zlVa}ccPY(~DeWCxhWkOncaRIe%iVonPQZZYZsSq_2gBjFR6uv5eY=l2319^6@=fYU z5bePLLlFU67>d}VFd{OIh(ztH)q@gSc{|6CzmWd~8>Aw&PnJM_3EL!7Q~z))k%-ja zT2=nIRX8S4Qbi~LL8lxJ5UU0pldO@8<*?10rU{3nd8AW535lr5m!17MBStxzi{1~v zpu|NF+JEsZ%H5Yodq2Y8_9~u6y6r5p@&GnVSh$+Dou+t}*?GbGsg5Na!&7wpinaGb z6ulV5sJ`bF4DMWu+^nE~qyyV)B+C0BuZ@Qa`iIlDRS_QD66VDJDrWH_S-eOVFOtQJ sWHAyElL~GHBN2k?=|gi83tYp1F<8=F7RbWVIRF3v07*qoM6N<$f|psgSO5S3 literal 0 HcmV?d00001 diff --git a/src/assets/mount.png b/src/assets/mount.png new file mode 100644 index 0000000000000000000000000000000000000000..7789c71d094cbcc218cf59925457e6e0bd3388c6 GIT binary patch literal 1182 zcmV;P1Y!G$P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T700009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1T#rQK~#7F&6jU% z6J;2{pXa^14%UCSvDL1#?2nN|mSy5lV-$i}jG7p}@xdqwC;@GjjekK=bju`wnkXWE zz-Wx|vq4Oj7{eB)K*UKquyqN6$iHMF+Z^j$*Is*%cf&PZ>0R%R-tgBC@7woz-s>;V zUEh0O1dFU|-_w9RgddcXVn=L1Kbb(10YaYsUp@nqFtCUNq;*Oop7;77&X?&YBM6At z3>M&FAt1PvmhnTdfaMAr1(8M)BtKK}!_Sw%0=5ehu~DAV*TEvT3o44uJQKbIi!6Yk zdYf_WRNEul!2*^AQ;em}<Rd`?SithXSXtMA`>#K`*tyC3PjXT#mt>I2`%WKIN(p8u z$ujf71FOFMV*i^rbdxN|soc>sD7u{BTwDhKOM3eTUOyKbrt_Dt(f2390k8?n6|AYM z*sQjd9yhc$-TyM!geAejGea*?&cBjC-X4#W4{X4+;OXJvC5&Tl<qeBcW~vKpz_g$s zNg<`F&mWgb4vmeCJq9Jllwdd<u2UAk4y`ybVIPzja~0%-Jp@ptoj_~GZr*$vN{C^> zNF-8EM4O7`kxWOFJON6CVZjV=-NrJpZgf1}2_?eN`zIEQt(cKA;rwwy5FijJxJFMT z7~B{1ddJ}oF;v0v1bhYN5EBU&(h62@>0RyL7HI+l6cr5ioZGN<fSUfA2E!b`g2}bV zu&eR#<g)yjf6MXZ2y6faE_%=IvyT?LR`CiV*QLt6af-p8)5@+chmVJt^vwmF$sPMV zikaOfu`HP(o{)W%e>oY`2eUt(#sg67=k<b1_eM7>ue2lC3o0j|jZFk=?v?S=D5IZ7 z1mwj4?0AUaxkjQx5zHLDi1W5^4597ftL}caU)A2bl1Xe(?Q`DRTf&Umt{-UWH!Uc3 zM?^O#M4-T1BMT>hDyR$5i9bT_)#~xi_sVxaD&JS-3MvY}j=b0Wu-0_VTkPT&b?V9) z1@Vc7!;>#mxA#3eCpRBj>3{9)PR;3s2L0WUdVzENrc8E$9!4s7OXBb8*x(gPr&_X8 zvlX0;-$<n7WfKQiOytijSV4hzyj@hz6j;G8@we#2tIGwpwNT_XLA83yt=I@9M)1`F z3fjj5LhSTxJ5>qA1Rb2?9k2mp95@1XdMTn)a2?7YoF}++--X8s=tZyzUi1Mgck5)} z^Hn>}wC0Y?6Qs<{Ctx#<ntGk6vZLgL{kbDq!P>pQuU8tK2e~wGE-!GNO1+e){JVyp zocod$WF+^%0^tZW>K^2g*!y$+S;1gWbOV%PQ8oxGTLhfjqn&`zTC;0t{cJb*?&Sca z;wQn1py7r3c1V^Xb?xeGTi6k<N>gk(Q{)Ps((DEqQ=UbyW?b1e1vzJCr?T0AcDPIM wUa$VMh}gl1aYx}UAtz_l-A>^ksUQ0KUyUM1bCe#UAOHXW07*qoM6N<$f`kY!l>h($ literal 0 HcmV?d00001 diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index 93a1cc5..963fc9a 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -1,7 +1,7 @@ import { PatchEmotion } from '../../../apis/apiPATCH'; -import bad from '../../../assets/bad2.png'; -import good from '../../../assets/good.png'; -import normal from '../../../assets/normal2.png'; +import good from '../../../assets/emoji1.png'; +import bad from '../../../assets/emoji2.png'; +import normal from '../../../assets/emoji3.png'; import { EmotionSelect } from './dropDown.styled'; import { emotion } from './dropdown'; import { useMutation, useQueryClient } from '@tanstack/react-query'; diff --git a/src/components/global/globaldropdown/dropdown.js b/src/components/global/globaldropdown/dropdown.js index e58dab3..c219bdb 100644 --- a/src/components/global/globaldropdown/dropdown.js +++ b/src/components/global/globaldropdown/dropdown.js @@ -1,9 +1,9 @@ -import bad from '../../../assets/bad2.png'; import blueF from '../../../assets/blue.png'; +import good from '../../../assets/emoji1.png'; +import bad from '../../../assets/emoji2.png'; +import normal from '../../../assets/emoji3.png'; import four from '../../../assets/four.png'; -import good from '../../../assets/good.png'; import grayF from '../../../assets/gray.png'; -import normal from '../../../assets/normal2.png'; import one from '../../../assets/one.png'; import redF from '../../../assets/red.png'; import three from '../../../assets/three.png'; @@ -35,24 +35,24 @@ export const useDropDown = (ref, initialState) => { return [isOpen, setIsOpen]; }; -export const team = { - list: [ - 'P01', - 'P02', - 'P03', - 'P04', - 'P05', - 'P06', - 'P07', - 'P08', - 'P09', - 'P010', - 'P011', - 'P012', - 'P013', - ], - defaultValue: '부서를 선택해주세요', -}; +// export const team = { +// list: [ +// 'P01', +// 'P02', +// 'P03', +// 'P04', +// 'P05', +// 'P06', +// 'P07', +// 'P08', +// 'P09', +// 'P010', +// 'P011', +// 'P012', +// 'P013', +// ], +// defaultValue: '부서를 선택해주세요', +// }; export const teamPosi = { list: ['팀장', '팀원'], diff --git a/src/components/mainpage/OKR.styled.js b/src/components/mainpage/OKR.styled.js index f6e607d..c70532d 100644 --- a/src/components/mainpage/OKR.styled.js +++ b/src/components/mainpage/OKR.styled.js @@ -1,3 +1,5 @@ +import milestone from '../../assets/milestone 1.png'; +import mount from '../../assets/mount.png'; import styled from 'styled-components'; export const Container = styled.div` @@ -8,7 +10,6 @@ export const Container = styled.div` box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); border-radius: 12px; box-sizing: border-box; - /* background-color: skyblue; */ `; export const HeaderBox = styled.div` @@ -66,60 +67,64 @@ export const OKRBox = styled.div` export const Objective = styled.div` display: flex; flex-direction: row; - .Logo { - font-weight: 700; - font-size: 54.2282px; - line-height: 74px; - margin-left: 17px; - color: ${({ color }) => color}; - cursor: default; - } - .NameBox { - width: 400px; - .Name { - margin-top: 16px; - margin-left: 16px; - font-weight: 500; - font-size: 22px; - line-height: 33px; - letter-spacing: -0.01em; + align-items: center; + /* justify-content: space-between; */ + padding: 17px 21px; + position: relative; + .left { + width: calc(100% - 172px - 42px); + display: flex; + align-items: center; + .title { + font-weight: 700; + font-size: 54.2282px; + line-height: 74px; color: ${({ color }) => color}; - cursor: pointer; - } - .Cal { - height: 18px; - font-style: normal; - font-weight: 500; - font-size: 12.5px; - margin-left: 15px; - color: #4b4b4b; cursor: default; + background: url(${mount}) no-repeat center / 100%; + min-width: 40px; + height: 40px; + margin-right: 16px; + } + .nameBox { + width: 100%; + .name { + width: calc(100% - 56px); + height: 38px; + font-weight: 500; + font-size: 22px; + line-height: 33px; + letter-spacing: -0.01em; + color: ${({ color }) => color}; + cursor: pointer; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .date { + height: 18px; + font-style: normal; + font-weight: 500; + font-size: 12.5px; + color: #4b4b4b; + cursor: default; + } } } - .Range { - width: 123px; - height: 11px; - margin-top: 34px; - margin-left: 130px; - cursor: pointer; - } - .percent { - font-weight: 300; - font-size: 18px; - line-height: 25px; - letter-spacing: -0.01em; - margin-top: 26px; - margin-left: 14px; - color: ${({ color }) => color}; - cursor: default; - } - .patchbtn { - width: 50px; - height: 30px; - position: absolute; - top: 50%; - right: -50px; - transform: translateY(-50%); + .right { + height: 100%; + display: flex; + align-items: center; + .percent { + width: 35px; + height: 25px; + font-weight: 300; + font-size: 18px; + /* line-height: 25px; */ + color: ${({ color }) => color}; + cursor: default; + margin-left: 14px; + } } `; @@ -130,92 +135,56 @@ export const KRBox = styled.div` border-radius: 7px; margin-bottom: 8px; display: flex; - flex-direction: row; - .Logo { - margin-left: 20px; - margin-top: 6px; - width: 36px; - height: 27px; - font-weight: 500; - font-size: 16px; - line-height: 27px; - text-align: center; - letter-spacing: -0.02em; - color: ${({ color }) => color}; - cursor: default; - } - .Name { - margin-top: 6px; - margin-left: 20px; - width: 400px; - height: 27px; - font-style: normal; - font-weight: 500; - font-size: 20px; - line-height: 27px; - letter-spacing: -0.01em; - color: #4b4b4b; - cursor: pointer; - } - .Range { - width: 123px; - height: 11px; - margin-top: 15px; - margin-left: 13px; - cursor: pointer; - } - .percent { - width: 47px; - font-weight: 300; - font-size: 18px; - line-height: 25px; - letter-spacing: -0.01em; - margin-top: 8px; - margin-left: 14px; - color: ${({ color }) => color}; - cursor: default; - } - .right { + align-items: center; + padding: 0 14px; + + .left { + width: calc(100% - 172px - 28px); display: flex; align-items: center; - cursor: pointer; - .range { - width: 123px; - height: 11px; + .mount { + width: 34px; + height: 34px; + background: url(${milestone}) no-repeat center / cover; + } + .logo { + width: 50px; + height: 27px; + font-weight: 500; + font-size: 16px; + line-height: 27px; + text-align: center; + letter-spacing: -0.02em; + color: ${({ color }) => color}; + cursor: default; + margin: 0 10px 0 14px; + } + .name { + width: calc(100% - 220px); + height: 27px; + font-style: normal; + font-weight: 500; + font-size: 20px; + line-height: 27px; + letter-spacing: -0.01em; + color: #4b4b4b; cursor: pointer; } + } + .right { + height: 100%; + display: flex; + align-items: center; .percent { - margin-left: 14px; + width: 35px; + height: 25px; font-weight: 300; font-size: 18px; - line-height: 25px; - letter-spacing: -0.01em; color: ${({ color }) => color}; cursor: default; + margin-left: 14px; + margin-right: 11px; } - .emotionBox { - width: 33px; - height: 31px; - background: #f8f8f8; - border-radius: 7px; - display: flex; - text-align: center; - align-items: center; - justify-content: center; - cursor: pointer; - /* margin-left: 10px; */ - margin-right: 5px; - } - } - - .patchbtn { - position: absolute; - top: 0; - right: -50px; - /* margin-top: 7px; */ - width: 50px; - height: 30px; - /* display: none; */ } `; @@ -238,25 +207,24 @@ export const EmptyKR = styled.button` margin-bottom: 8px; `; -export const OKRSpace = styled.div` - margin-top: 110px; - background-color: black; -`; - export const PersentBox = styled.div` - height: 11px; + width: 123px; border-radius: 3px; position: relative; + max-width: 180px; + + display: flex; + background-color: pink; //기존 디자인 없애기 - background-color: black; - margin-top: ${({ state }) => `${state === 'Objective' ? '34px' : '15px'}`}; - margin-left: ${({ state }) => `${state === 'Objective' ? '29px' : '12.5px'}`}; + /* margin-top: ${({ state }) => `${state === 'Objective' ? '34px' : '15px'}`}; + margin-left: ${({ state }) => + `${state === 'Objective' ? '29px' : '12.5px'}`}; */ cursor: pointer; input[type='range'] { - width: 205px; - -webkit-appearance: none; width: 100%; + height: 11px; + -webkit-appearance: none; background: transparent; background: #e8e8e8; padding: 0; diff --git a/src/components/mainpage/OkrItem.jsx b/src/components/mainpage/OkrItem.jsx index 5090714..cb49902 100644 --- a/src/components/mainpage/OkrItem.jsx +++ b/src/components/mainpage/OkrItem.jsx @@ -203,101 +203,104 @@ const OkrObject = () => { <OKRBox key={index}> <> <Objective key={Obdata.objectiveId} color={Obdata.color}> - <div className='Box'> - <div className='Logo'>O</div> - </div> - <div className='NameBox'> - <div - className='Name' - onClick={() => { - patchOKR( - Obdata.objectiveId, - Obdata.objective, - Obdata.startdate, - Obdata.enddate, - Obdata.color - ); - }}> - {Obdata.objective} - </div> - <div className='Cal'> - {Obdata.startdate} - {Obdata.enddate} + <div className='left'> + <div className='title'></div> + <div className='nameBox'> + <div + className='name' + onClick={() => { + patchOKR( + Obdata.objectiveId, + Obdata.objective, + Obdata.startdate, + Obdata.enddate, + Obdata.color + ); + }}> + {Obdata.objective} + </div> + <div className='date'> + {Obdata.startdate} - {Obdata.enddate} + </div> </div> </div> - <PersentBox - ObColor={Obdata.color} - state='Objective' - onClick={() => { - patchProgress( - Obdata.objectiveId, - Obdata.progress, - 'Objective', - Obdata.color - ); - }}> - <input - type='range' - min={0} - max={100} - step={1} - value={Obdata.progress} - /> - <div - className='bg' - style={{ width: `${Obdata.progress}%` }}></div> - </PersentBox> - <div className='background' /> - <div className='percent'>{Obdata.progress}%</div> - </Objective> - </> - {Obdata.keyresult.map(data => { - return ( - <KRBox key={data.keyResultId} color={Obdata.color}> - <div className='Logo'>KR{data.krNumber}</div> - <div - className='Name' - onClick={() => { - patchKR(data.keyResultId, data.keyResult, 'patch'); - }}> - {data.keyResult} - </div> + <div className='right'> <PersentBox + ObColor={Obdata.color} + state='Objective' onClick={() => { patchProgress( - data.keyResultId, - data.progress, - 'KR', + Obdata.objectiveId, + Obdata.progress, + 'Objective', Obdata.color ); - }} - ObColor={Obdata.color} - state='KR'> + }}> <input type='range' min={0} max={100} step={1} - value={data.progress} + value={Obdata.progress} /> <div className='bg' - style={{ width: `${data.progress}%` }}></div> + style={{ width: `${Obdata.progress}%` }}></div> </PersentBox> + <div className='percent'>{Obdata.progress}%</div> + </div> + </Objective> + </> + {Obdata.keyresult.map(data => { + return ( + <KRBox key={data.keyResultId} color={Obdata.color}> + <div className='left'> + <div className='mount'></div> + <div className='logo'>목표{data.krNumber}</div> + <div + className='name' + onClick={() => { + patchKR(data.keyResultId, data.keyResult, 'patch'); + }}> + {data.keyResult} + </div> + </div> - <OKRSpace /> - <div className='percent'>{data.progress}%</div> <div className='right'> - <div className='emotionBox'> - {KRArray && ( - <Emotion - keyResultId={data.keyResultId} - emotionState={data.emotion} - openDropdownId={openDropdownId} - setOpenDropdownId={setOpenDropdownId} - /> - )} - </div> + <PersentBox + onClick={() => { + patchProgress( + data.keyResultId, + data.progress, + 'KR', + Obdata.color + ); + }} + ObColor={Obdata.color} + state='KR'> + <input + type='range' + min={0} + max={100} + step={1} + value={data.progress} + /> + <div + className='bg' + style={{ width: `${data.progress}%` }}></div> + </PersentBox> + <div className='percent'>{data.progress}%</div> + <div className='emotionBox'></div> + + {KRArray && ( + <Emotion + keyResultId={data.keyResultId} + emotionState={data.emotion} + openDropdownId={openDropdownId} + setOpenDropdownId={setOpenDropdownId} + /> + )} </div> </KRBox> ); From 3c1d480b04d7030f876103a448884a1b6c7caef5 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 7 Apr 2023 04:10:29 +0900 Subject: [PATCH 42/72] =?UTF-8?q?tutorial=20ui=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiPATCH.js | 5 ++ src/assets/tutorial.png | Bin 0 -> 205383 bytes src/assets/whiteClose.png | Bin 0 -> 235 bytes src/components/mainpage/OKR.jsx | 5 ++ src/components/mainpage/TodoItem.jsx | 2 +- src/components/mainpage/Tutorial.jsx | 86 +++++++++++++++++++++++++++ src/components/signIn/Article.jsx | 1 + src/pages/Mainpage.jsx | 67 ++++++++++++++++----- src/store/store.js | 14 +++++ 9 files changed, 164 insertions(+), 16 deletions(-) create mode 100644 src/assets/tutorial.png create mode 100644 src/assets/whiteClose.png create mode 100644 src/components/mainpage/Tutorial.jsx diff --git a/src/apis/apiPATCH.js b/src/apis/apiPATCH.js index 8ca23f7..484662a 100644 --- a/src/apis/apiPATCH.js +++ b/src/apis/apiPATCH.js @@ -34,3 +34,8 @@ export async function PatchTodo({ id, value }) { const { data } = await api.patch(`api/todo/${id}`, value); return data; } + +export async function PatchTutorial() { + const { data } = await api.patch(`api/user/tutorial`); + return data; +} diff --git a/src/assets/tutorial.png b/src/assets/tutorial.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6428b112868b1d829b57d899327ca3ebb6f28c GIT binary patch literal 205383 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%0ANPv0uNe}`aYJ#jKw(|7PG;C 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�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 literal 0 HcmV?d00001 diff --git a/src/assets/whiteClose.png b/src/assets/whiteClose.png new file mode 100644 index 0000000000000000000000000000000000000000..2a75ce8e4db8fd66ecf7a99e89e2154be90587ae GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6l5$8 za(7}_cTVOdki(Mh=<CS9u(6-}Pa-Rj-{9%u7*fHw_G&lh0R<kG3m1;QUe;HXd!flS zxlWE_(FX_L2@F@t?@Zy5&iS}xfoe}#Pw>801FOWtZPKC}IaVdfUFnGoFyH2U_y(76 zGWV61*d^?T?#%x<<3!n&SLY7Bc*l50gJ*rF+d~arQP&0MTtqq-%?*%w(IDUTja9^J c+2XH^E!%ooJhCPi0Nuji>FVdQ&MBb@03)7J`~Uy| literal 0 HcmV?d00001 diff --git a/src/components/mainpage/OKR.jsx b/src/components/mainpage/OKR.jsx index d0188b8..a9d7153 100644 --- a/src/components/mainpage/OKR.jsx +++ b/src/components/mainpage/OKR.jsx @@ -22,16 +22,21 @@ export default function OKR() { ); const [uid, setUid] = useState(null); const [position, setPosition] = useState(''); + // console.log('uid :', uid); useEffect(() => { const decodeToken = jwt_decode(accessToken); const extractedUid = decodeToken.userId; setUid(extractedUid); + // console.log('useEffect'); }, [accessToken]); const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { enabled: !!uid, + // console.log(enabled) onSuccess: response => { + // console.log(response); + // console.log('통신'); setTeamName(response.team); setPosition(response.teamposition); }, diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index 47db78a..36e9c16 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -111,7 +111,7 @@ const TodoItem = ({ getTodo }) => { GetCompletionTodo, { onSuccess: response => { - console.log('completionTodo', response); + // console.log('completionTodo', response); }, onError: response => {}, } diff --git a/src/components/mainpage/Tutorial.jsx b/src/components/mainpage/Tutorial.jsx new file mode 100644 index 0000000..734cf80 --- /dev/null +++ b/src/components/mainpage/Tutorial.jsx @@ -0,0 +1,86 @@ +import { PatchTutorial } from '../../apis/apiPATCH'; +import tutorialImg from '../../assets/tutorial.png'; +import close from '../../assets/whiteClose.png'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useState } from 'react'; +import React from 'react'; +import styled from 'styled-components'; + +const Tutorial = () => { + const [haveCh, setHaveCh] = useState(false); + + console.log(haveCh); + const queryClient = useQueryClient(); + + const { mutate: patchTutorial } = useMutation(PatchTutorial, { + onSuccess: response => { + queryClient.invalidateQueries(['userInfo']); + console.log('눌림'); + }, + onError: error => { + console.log('에러요'); + }, + }); + return ( + <StTutorial> + <div className='bg' /> + <div className='checkBox'> + {haveCh ? ( + <input type='checkbox' onChange={e => setHaveCh(e.target.checked)} /> + ) : ( + <input type='checkbox' onChange={e => setHaveCh(e.target.checked)} /> + )} + + <span>다시보지 않기</span> + <div className='close' onClick={() => patchTutorial()} /> + </div> + </StTutorial> + ); +}; + +export default Tutorial; + +const StTutorial = styled.div` + height: 100vh; + width: 100%; + position: fixed; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.15); + z-index: 20; + + .bg { + width: 100%; + height: 100%; + background: url(${tutorialImg}) no-repeat left top / cover; + } + .checkBox { + width: 226px; + line-height: 32px; + display: flex; + align-items: center; + position: absolute; + bottom: 53px; + right: 53px; + z-index: 21; + input { + width: 26px; + height: 26px; + padding: 0; + margin: 0; + cursor: pointer; + } + span { + font-size: 22px; + color: #fff; + margin: 0 29px 0 11px; + cursor: default; + } + .close { + width: 20px; + height: 20px; + background: url(${close}) no-repeat center / cover; + cursor: pointer; + } + } +`; diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index 9d432b1..affafce 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -70,6 +70,7 @@ const Article = () => { const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { + // console.log(response); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 9371b11..02547bb 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,11 +1,17 @@ +import { GetUserInfo } from '../apis/apiGET'; import Calendar from '../components/calendar/Calendar'; import CompanyOKR from '../components/companyOKR/companyOKR'; +import Portal from '../components/global/globalModal/Potal'; import DashBoardCalendar from '../components/mainpage/Calendar'; import DashBoardOKR from '../components/mainpage/OKR'; import DashBoardTodo from '../components/mainpage/ToDo'; +import Tutorial from '../components/mainpage/Tutorial'; import TeamOKR from '../components/teamOKR/TeamOKR'; import Todo from '../components/todo/Todo'; +import { accessTokenInfo } from '../store/store'; import { MenuContainer, MenuItem } from './../components/mainpage/menu.styled'; +import { useQuery } from '@tanstack/react-query'; +import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import styled from 'styled-components'; @@ -13,12 +19,35 @@ import styled from 'styled-components'; export default function Mainpage() { const navigate = useNavigate(); + const [uid, setUid] = useState(null); + const [accessToken, setAccessToken] = useState( + localStorage.getItem('accesstoken') + ); + // console.log(accessToken); + + useEffect(() => { + const decodeToken = jwt_decode(accessToken); + // console.log(decodeToken); + const extractedUid = decodeToken.userId; + // console.log(extractedUid); + setUid(() => extractedUid); + }, [accessToken]); + // console.log(uid); + useEffect(() => { if (localStorage.accesstoken === undefined) { navigate('/'); } }, []); + const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { + enabled: !!uid, + // console.log(enabled) + onSuccess: response => { + console.log(response); + }, + }); + const menuList = ['Dashboard', 'All OKR', 'Team OKR', 'TO - DO', 'Calendar']; const selectComponent = { @@ -45,21 +74,29 @@ export default function Mainpage() { return ( <Wrap> - <MenuContainer> - {menuList.map((text, i) => { - return ( - <MenuItem - text={text} - key={i} - onClick={clickNowPage} - name={text} - className={text === now ? 'active' : ''}> - {text} - </MenuItem> - ); - })} - </MenuContainer> - <MainContainer>{selectComponent[now]}</MainContainer> + {userInfo?.firstLogin ? ( + <Portal> + <Tutorial /> + </Portal> + ) : ( + <> + <MenuContainer> + {menuList.map((text, i) => { + return ( + <MenuItem + text={text} + key={i} + onClick={clickNowPage} + name={text} + className={text === now ? 'active' : ''}> + {text} + </MenuItem> + ); + })} + </MenuContainer> + <MainContainer>{selectComponent[now]}</MainContainer> + </> + )} </Wrap> ); } diff --git a/src/store/store.js b/src/store/store.js index 7fb4bbc..bedca8a 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -46,3 +46,17 @@ export const patchTodoInfo = atom({ priority: 0, }, }); + +// export const accessTokenInfo = atom({ +// key: 'defaultAccessTokenInfo', +// default:{ +// localStorage.getItem('accesstoken') +// } +// }); + +// export const userId = atom({ +// key : 'userInfo', +// default : { +// id : +// } +// }) From ae01a052b2a04a3835cbb55c496cfcc50a81dbbe Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 7 Apr 2023 04:15:09 +0900 Subject: [PATCH 43/72] =?UTF-8?q?console=20=EC=A7=80=EC=9B=8C=EC=84=9C=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/mainpage/Tutorial.jsx | 4 ---- src/pages/Mainpage.jsx | 8 -------- 2 files changed, 12 deletions(-) diff --git a/src/components/mainpage/Tutorial.jsx b/src/components/mainpage/Tutorial.jsx index 734cf80..f635f8a 100644 --- a/src/components/mainpage/Tutorial.jsx +++ b/src/components/mainpage/Tutorial.jsx @@ -15,10 +15,6 @@ const Tutorial = () => { const { mutate: patchTutorial } = useMutation(PatchTutorial, { onSuccess: response => { queryClient.invalidateQueries(['userInfo']); - console.log('눌림'); - }, - onError: error => { - console.log('에러요'); }, }); return ( diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 02547bb..ac643dd 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -23,16 +23,12 @@ export default function Mainpage() { const [accessToken, setAccessToken] = useState( localStorage.getItem('accesstoken') ); - // console.log(accessToken); useEffect(() => { const decodeToken = jwt_decode(accessToken); - // console.log(decodeToken); const extractedUid = decodeToken.userId; - // console.log(extractedUid); setUid(() => extractedUid); }, [accessToken]); - // console.log(uid); useEffect(() => { if (localStorage.accesstoken === undefined) { @@ -42,10 +38,6 @@ export default function Mainpage() { const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { enabled: !!uid, - // console.log(enabled) - onSuccess: response => { - console.log(response); - }, }); const menuList = ['Dashboard', 'All OKR', 'Team OKR', 'TO - DO', 'Calendar']; From 6ef1d9d1271fc2b769e2440f3b14370997477239 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 7 Apr 2023 13:50:08 +0900 Subject: [PATCH 44/72] =?UTF-8?q?menu=20=EB=AF=B8=EC=99=84=EC=84=B1=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/global/globalModal/Modal.jsx | 1 + src/pages/Mainpage.jsx | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/global/globalModal/Modal.jsx b/src/components/global/globalModal/Modal.jsx index 245973c..b81d0b3 100644 --- a/src/components/global/globalModal/Modal.jsx +++ b/src/components/global/globalModal/Modal.jsx @@ -2,6 +2,7 @@ import { ModalBackground, ModalBox } from './modal.styled'; import React from 'react'; const Modal = children => { + console.log(children); return ( <> <ModalBackground /> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index ac643dd..3f7265b 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -40,7 +40,9 @@ export default function Mainpage() { enabled: !!uid, }); - const menuList = ['Dashboard', 'All OKR', 'Team OKR', 'TO - DO', 'Calendar']; + // const menuList = ['Dashboard', 'All OKR', 'Team OKR', 'TO - DO', 'Calendar']; + + const menuList = ['Dashboard', 'TO - DO']; const selectComponent = { Dashboard: ( @@ -52,10 +54,10 @@ export default function Mainpage() { <DashBoardCalendar /> </> ), - 'All OKR': <CompanyOKR />, - 'TEAM OKR': <TeamOKR />, + // 'All OKR': <CompanyOKR />, + // 'TEAM OKR': <TeamOKR />, 'TO - DO': <Todo />, - Calendar: <Calendar />, + // Calendar: <Calendar />, }; const [now, setNow] = useState('Dashboard'); From c7b9896ca15d65c1c48bb1ef1cdd3466f9f88fba Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 14 Apr 2023 13:45:40 +0900 Subject: [PATCH 45/72] =?UTF-8?q?feat=20:=20favicon=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/index.html b/public/index.html index ff199a2..89a732f 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,8 @@ <head> <meta charset="utf-8" /> - <link rel="icon" href="%PUBLIC_URL%/favicon.png" /> + <!-- <link rel="icon" href="%PUBLIC_URL%/favicon.png" /> --> + <link rel="stylesheet" href="./favicon.png" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="theme-color" content="#000000" /> <meta From b88a70cb8faf3ccb222277e29b64dbaa0f1a0ef9 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 14 Apr 2023 13:49:50 +0900 Subject: [PATCH 46/72] cicd test --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index be7177a..4ebf6bf 100644 --- a/README.md +++ b/README.md @@ -45,3 +45,5 @@ --- ## 맴버 + +cicd test From ba0802731217aa339eb4378ddc37aec368daa6c7 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 14 Apr 2023 13:57:51 +0900 Subject: [PATCH 47/72] favicon error --- public/{favicon.png => favicon.ico} | Bin public/index.html | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename public/{favicon.png => favicon.ico} (100%) diff --git a/public/favicon.png b/public/favicon.ico similarity index 100% rename from public/favicon.png rename to public/favicon.ico diff --git a/public/index.html b/public/index.html index 89a732f..eee882d 100644 --- a/public/index.html +++ b/public/index.html @@ -4,8 +4,8 @@ <head> <meta charset="utf-8" /> - <!-- <link rel="icon" href="%PUBLIC_URL%/favicon.png" /> --> - <link rel="stylesheet" href="./favicon.png" /> + <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> + <!-- <link rel="stylesheet" href="./favicon.png" /> --> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="theme-color" content="#000000" /> <meta From 7600cf0f9740bde037d70d83198afbf5bd7b6869 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 14 Apr 2023 15:08:45 +0900 Subject: [PATCH 48/72] test --- public/{favicon.ico => favicon.png} | Bin public/index.html | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename public/{favicon.ico => favicon.png} (100%) diff --git a/public/favicon.ico b/public/favicon.png similarity index 100% rename from public/favicon.ico rename to public/favicon.png diff --git a/public/index.html b/public/index.html index eee882d..ce4cb31 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,7 @@ <head> <meta charset="utf-8" /> - <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> + <link rel="icon" href="%PUBLIC_URL%/favicon.png" /> <!-- <link rel="stylesheet" href="./favicon.png" /> --> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="theme-color" content="#000000" /> From e1bf9039cbf402a2bac7f952caf59271f38a57a2 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Fri, 14 Apr 2023 15:13:41 +0900 Subject: [PATCH 49/72] =?UTF-8?q?=20=EC=9E=84=EC=8B=9C=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 4ebf6bf..be7177a 100644 --- a/README.md +++ b/README.md @@ -45,5 +45,3 @@ --- ## 맴버 - -cicd test From b8bb6656097b3e0cd456464642bef857a915fa06 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sat, 15 Apr 2023 07:48:26 +0900 Subject: [PATCH 50/72] =?UTF-8?q?fix=20:=20todo=20navi=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/todo/DetailTodoItem.jsx | 1 - src/components/todo/Todo.jsx | 3 +- src/components/todo/TodoNavi.jsx | 62 ++++++++++++++---------- src/components/todo/tododetail.styled.js | 22 +++++---- 4 files changed, 50 insertions(+), 38 deletions(-) diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index add415c..b5fcbae 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -231,7 +231,6 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} </Potal> - ; </> ); }; diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 5d17fe5..d406374 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -6,7 +6,7 @@ import PastTodo from './PastTodo'; import TeamTodo from './TeamTodo'; import TodoNavi from './TodoNavi'; import { DetailTodoWrap, StTeam } from './tododetail.styled'; -import { useQuery } from '@tanstack/react-query'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; import { useEffect, useRef, useState } from 'react'; import styled from 'styled-components'; @@ -14,6 +14,7 @@ export default function Todo() { //todo 전부 가져오기 const { data: getAllTodo } = useQuery(['ALLTODO'], GetAllTodo, { onSuccess: response => { + // queryClient.invalidateQueries(['ALLTODO']); // console.log('getTodo', response); }, onError: response => {}, diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index f63b14b..dea8ba4 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -2,12 +2,16 @@ import plus from '../../assets/plus.png'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; +import { useQueryClient } from '@tanstack/react-query'; import React, { useState, useRef, useEffect } from 'react'; import { Link } from 'react-scroll'; const TodoNavi = ({ todayFormat, getAllTodo }) => { - // console.log(getAllTodo); // console.log(todayFormat); + + const haveDay = getAllTodo?.map(todo => { + return todo.targetDate; + }); const today = new Date(); const yearMonth = `${today.getFullYear()}년 ${today.getMonth() + 1}월`; @@ -18,10 +22,7 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { let makeWeekAll = date => { let day = date.getDay(); let week = []; - const haveDay = getAllTodo?.map(todo => { - return todo.targetDate; - }); - // console.log(haveDay); + for (let i = 0; i < 7; i++) { let newDate = new Date(date.valueOf() + 86400000 * (i - day)); // let id = Math.random(); @@ -53,13 +54,16 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { format = `${newDate.getMonth() + 1}월 ${newDate.getDate()}일`; } - week.push([ + console.log(haveDay?.includes(format)); + // console.log(haveDay); + + week.push({ dateValue, - `${newDate.getMonth() + 1}`, - `${newDate.getDate()}`, - { format: format }, - { includes: haveDay?.includes(format) }, - ]); + month: `${newDate.getMonth() + 1}`, + date: `${newDate.getDate()}`, + format: format, + includes: haveDay?.includes(format), + }); // console.log(week); } @@ -68,8 +72,6 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { let week = makeWeekAll(date); - // console.log() - const [state, setState] = useState({ date, week, @@ -103,16 +105,17 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { week: newWeek, }); newWeek.map(el => { - if (el[1] === month) { + if (el.month === month) { setMonth(month); } else { - setMonth(el[1]); + setMonth(el.month); } return el; }); }; const dateM = date.getMonth() + 1; + // 오늘 날짜 값 추출하기 const dateD = date.getDate(); const [todoModalOn, setTodoModalOn] = useState(false); @@ -133,7 +136,10 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { setTodoModalOn(!todoModalOn); } }; - // console.log(state.week); + // console.log(dateD); + // console.log('haveDay :', haveDay); + console.log('navi :', state.week); + console.log('getAllTodo :', getAllTodo); return ( <StNavi> @@ -162,32 +168,36 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { <DateNavi> {state.week?.map((el, index) => ( <React.Fragment key={index}> - {Number(el[2]) === dateD && Number(el[1]) === dateM ? ( + {Number(el.date) === dateD && Number(el.month) === dateM ? ( <Link - to={el[3].format} + to={el.format} spy={true} smooth={true} offset={-500} - className={el[4].includes === false ? 'day' : 'include'} + className={ + el.includes === false || undefined ? 'day' : 'include' + } style={{ backgroundColor: ' rgba(255, 131, 54, 0.3)' }}> <span className='label'>{el[0]}</span> <span className='date' style={{ color: '#ff8336' }}> - {el[2]} + {el.date} </span> - {el[4].includes === false ? null : ( + {el?.includes === undefined ? null : ( <div className='includeCh'></div> )} </Link> ) : ( <Link - className={el[4].includes === false ? 'day' : 'include'} - to={el[3].format} + className={ + el.includes === false || undefined ? 'day' : 'include' + } + to={el?.format} spy={true} offset={-500} smooth={true}> - <span className='label'>{el[0]}</span> - <span className='date'>{el[2]}</span> - {el[4].includes === false ? null : ( + <span className='label'>{el?.dateValue}</span> + <span className='date'>{el?.date}</span> + {el.includes === undefined ? null : ( <div className='includeCh'></div> )} </Link> diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 5abd169..3a93801 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -174,6 +174,8 @@ export const TodoDetailHeader = styled.div` background: url(${down}) no-repeat center / 100%; margin-right: 10px; cursor: pointer; + padding: 10px; + box-sizing: border-box; } .up { width: 13px; @@ -181,6 +183,8 @@ export const TodoDetailHeader = styled.div` background: url(${up}) no-repeat center / 100%; margin-right: 10px; cursor: pointer; + padding: 10px; + box-sizing: border-box; } .title { width: 100%; @@ -200,33 +204,31 @@ export const TodoDetailItem = styled.div` /* box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); */ .item { + width: 99%; + margin: 0 auto 10px auto; display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; background-color: #f8f8f8; border-radius: 8px; - padding: 0 19px 0 17px; - margin-bottom: 10px; - /* background-color: pink; */ + padding: 0 19px 2px 17px; } .notHave { + width: 99% !important; + margin: 0 auto 10px auto; display: flex; align-items: center; justify-content: start; - margin-bottom: 10px; background-color: #fff; box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); border-radius: 8px; padding: 0 19px 0 17px; - margin-bottom: 10px; - font-size: 2rem; + font-size: 1.6rem !important; + font-weight: 500 !important; height: 45px; color: #9b9b9b !important; } - .dayLine { - /* border-bottom: 2px solid #e8e8e8; */ - } .flexLeft { display: flex; align-items: center; @@ -326,7 +328,7 @@ export const DDay = styled.div` `; export const Finsh = styled.div` - margin-bottom: 50px; + margin-bottom: 20px; .noCompl { display: flex; align-items: center; From 29ecf755215fa70c5f2855556f6ef82b452f6538 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sat, 15 Apr 2023 08:13:00 +0900 Subject: [PATCH 51/72] =?UTF-8?q?fix=20:=20=EC=83=81=ED=83=9C=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20todo=20list=20=20cursor=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/todo/DetailTodoItem.jsx | 10 ++++++++++ src/components/todo/FinishTodo.jsx | 20 +++++++++++++++++--- src/components/todo/PastTodo.jsx | 3 ++- src/components/todo/tododetail.styled.js | 4 ++-- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index b5fcbae..eba6c9e 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -141,6 +141,11 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { <div className='item'> <div className='flexLeft' + style={ + pt.completion === true + ? { cursor: 'default' } + : { cursor: 'pointer' } + } onClick={() => { patchTodo( pt.toDoId, @@ -172,6 +177,11 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { <div className='item'> <div className='flexLeft' + style={ + pt.completion === true + ? { cursor: 'default' } + : { cursor: 'pointer' } + } onClick={() => { alert('본인이 작성한 TODO만 수정 가능합니다.'); }}> diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index b9d6f58..2cdd68a 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -74,7 +74,13 @@ const FinishTodo = ({ el }) => { if (ct.myToDo === true) { return ( <div className='item'> - <div className='flexLeft'> + <div + className='flexLeft' + style={ + ct.completion === true + ? { cursor: 'default' } + : { cursor: 'pointer' } + }> <Title ct={ct} /> <div className='krBox' title={ct.memo}> <div className='fKrTitle'>{ct.toDo}</div> @@ -97,7 +103,13 @@ const FinishTodo = ({ el }) => { } else { return ( <div className='item'> - <div className='flexLeft'> + <div + className='flexLeft' + style={ + ct.completion === true + ? { cursor: 'default' } + : { cursor: 'pointer' } + }> <Title ct={ct} /> <div className='krBox' title={ct.memo}> <div className='fKrTitle'>{ct.toDo}</div> @@ -132,7 +144,9 @@ const FinishTodo = ({ el }) => { </TodoDetailHeader> {el.completionTodo.length === 0 ? ( - <div className='noCompl'>완료한 리스트가 없습니다.</div> + <div className='noCompl' style={{ cursor: 'default' }}> + 완료한 리스트가 없습니다. + </div> ) : ( el.completionTodo?.map(ct => ( <TodoDetailItem diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index 929e6ee..72dc2f6 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -135,6 +135,7 @@ const PastTodo = () => { <div className='item'> <div className='flexLeft' + style={{ cursor: 'pointer' }} onClick={() => { patchTodo( el.toDoId, @@ -166,7 +167,7 @@ const PastTodo = () => { } else { return ( <div className='item'> - <div className='flexLeft'> + <div className='flexLeft' style={{ cursor: 'pointer' }}> <Title el={el} /> <div className='krBox' title={el.memo}> <div className='krTitle'>{el.toDo}</div> diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 3a93801..9981d2e 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -126,7 +126,6 @@ export const DateNavi = styled.div` } .date { font-size: 25px; - /* background-color: pink; */ line-height: 34px; } .includeCh { @@ -213,6 +212,7 @@ export const TodoDetailItem = styled.div` background-color: #f8f8f8; border-radius: 8px; padding: 0 19px 2px 17px; + cursor: default; } .notHave { width: 99% !important; @@ -232,7 +232,7 @@ export const TodoDetailItem = styled.div` .flexLeft { display: flex; align-items: center; - cursor: pointer; + /* cursor: pointer; */ .kr { width: 50px; font-size: 2rem; From 45844f5e6f7ec6dd454e6d50cb0639b99c56f2c2 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sun, 16 Apr 2023 20:56:29 +0900 Subject: [PATCH 52/72] =?UTF-8?q?refect=20:=20Dashboard=20=EC=BA=98?= =?UTF-8?q?=EB=A6=B0=EB=8D=94=EC=97=90=EC=84=9C=20todo=20crud=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20TO-DO=20=EB=84=A4=EB=B9=84=20=ED=97=A4?= =?UTF-8?q?=EB=8D=94=20=EC=9B=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + .../global/globalModal/AlertModalTest.jsx | 49 + src/components/global/globalModal/Modal.jsx | 14 - .../global/globalModal/TodoModal.jsx | 31 +- .../global/globalModal/TodoPathModal.jsx | 3 + .../global/globalModal/modal.styled.js | 2 - src/components/mainpage/Calendar.jsx | 112 +- src/components/mainpage/TodoItem.jsx | 5 +- src/components/signIn/Article.jsx | 4 +- src/components/todo/TodoNavi.jsx | 55 +- src/components/todo/tododetail.styled.js | 4 + src/pages/Mainpage.jsx | 2 + yarn.lock | 3634 +++++++++-------- 13 files changed, 2069 insertions(+), 1848 deletions(-) create mode 100644 src/components/global/globalModal/AlertModalTest.jsx delete mode 100644 src/components/global/globalModal/Modal.jsx diff --git a/package.json b/package.json index 32fc1a8..48b9349 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "@craco/craco": "^7.1.0", "@fullcalendar/core": "^6.1.4", "@fullcalendar/daygrid": "^6.1.4", + "@fullcalendar/interaction": "^6.1.5", "@fullcalendar/react": "^6.1.4", "@tanstack/react-query": "^4.26.1", "@testing-library/jest-dom": "^5.14.1", @@ -20,6 +21,7 @@ "react-dom": "^18.2.0", "react-ga": "^3.3.1", "react-ga4": "^2.1.0", + "react-icons": "^4.8.0", "react-multi-date-picker": "^3.3.4", "react-query": "^3.39.3", "react-router-dom": "^6.8.2", diff --git a/src/components/global/globalModal/AlertModalTest.jsx b/src/components/global/globalModal/AlertModalTest.jsx new file mode 100644 index 0000000..f384cc0 --- /dev/null +++ b/src/components/global/globalModal/AlertModalTest.jsx @@ -0,0 +1,49 @@ +import { ModalBackground, ModalBox } from './modal.styled'; +import React from 'react'; +import { ImWarning } from 'react-icons/im'; +import styled from 'styled-components'; + +const AlertModalTest = ({ onCloseModal, children }) => { + console.log(children); + return ( + <> + <ModalBg /> + <ModalContent> + <ImWarning onClick={onCloseModal} /> + <div className='contents'>{children}</div> + </ModalContent> + </> + ); +}; + +export default AlertModalTest; + +const ModalBg = styled.div` + height: 100%; + width: 100%; + position: fixed; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.15); + z-index: 20; +`; + +const ModalContent = styled.div` + position: fixed; + width: 71.5rem; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: #fff; + border-radius: 15px; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + z-index: 21; + text-align: center; + padding: 20px 30px; + border: var(--main-border); + padding: 1.3rem; + .contents { + color: #ec5a00; + font-size: 1.7rem; + } +`; diff --git a/src/components/global/globalModal/Modal.jsx b/src/components/global/globalModal/Modal.jsx deleted file mode 100644 index b81d0b3..0000000 --- a/src/components/global/globalModal/Modal.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import { ModalBackground, ModalBox } from './modal.styled'; -import React from 'react'; - -const Modal = children => { - console.log(children); - return ( - <> - <ModalBackground /> - <ModalBox></ModalBox> - </> - ); -}; - -export default Modal; diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 69465b5..15955fd 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -29,7 +29,10 @@ const TodoModal = ({ onCloseTodoModal, todoModalRef, todoModalOutSideClick, + formCalendar, + dateInfo, }) => { + // console.log(dateInfo); useEffect(() => { const handleBeforeUnload = e => { e.preventDefault(); @@ -80,8 +83,8 @@ const TodoModal = ({ const [todoInfo, setTodoInfo] = useState({ toDo: '', memo: '', - startDate: '', - startDateTime: '', + startDate: formCalendar !== undefined ? dateInfo.start : '', + startDateTime: formCalendar !== undefined ? dateInfo.startDateTime : '', endDate: '', endDateTime: '', priority: '', @@ -107,6 +110,8 @@ const TodoModal = ({ }); }; + console.log(todoInfo); + //endDate 변환 함수 년-월 const convertEnd = (date, format = defaultFormat.format) => { let object = { date, format }; @@ -274,7 +279,12 @@ const TodoModal = ({ weekDays={weekDays} format='YYYY-MM-DD' placeholder='시작일' - value={defaultFormat.date} + // value={defaultFormat.date} + value={ + formCalendar !== undefined + ? dateInfo.start + : defaultFormat.date + } onChange={convertStart} animations={[ opacity(), @@ -311,7 +321,12 @@ const TodoModal = ({ format='YYYY-MM-DD HH:mm' plugins={[<TimePicker position='bottom' hideSeconds />]} placeholder='시작일' - value={timeFormat.date} + // value={timeFormat.date} + value={ + formCalendar !== undefined + ? dateInfo.start + : timeFormat.date + } onChange={convertStartWithTime} animations={[ opacity(), @@ -349,6 +364,11 @@ const TodoModal = ({ format='YYYY-MM-DD' placeholder='종료일' value={defaultFormat.date} + // value={ + // formCalendar !== undefined + // ? dateInfo.end + // : defaultFormat.date + // } onChange={convertEnd} animations={[ opacity(), @@ -387,6 +407,9 @@ const TodoModal = ({ plugins={[<TimePicker position='bottom' hideSeconds />]} placeholder='종료일' value={timeFormat.date} + // value={ + // formCalendar !== undefined ? dateInfo.end : timeFormat.date + // } onChange={convertEndWithTime} animations={[ opacity(), diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index e847480..6244031 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -78,6 +78,7 @@ const TodoPathModal = ({ onCloseModal }) => { const [defaultFormat, setDefaultFormat] = useState({ format: 'YYYY-MM-DD' }); const todoInfo = useRecoilValue(patchTodoInfo); + // console.log(todoInfo); const [title, setTitle] = useState({ memo: todoInfo.memo, @@ -89,6 +90,8 @@ const TodoPathModal = ({ onCloseModal }) => { toDo: todoInfo.toDo, }); + console.log(title); + const [startWithTime, setStartWithTime] = useState(false); const [endWithTime, setEndWithTime] = useState(false); diff --git a/src/components/global/globalModal/modal.styled.js b/src/components/global/globalModal/modal.styled.js index 3bb05a0..62ab58b 100644 --- a/src/components/global/globalModal/modal.styled.js +++ b/src/components/global/globalModal/modal.styled.js @@ -16,7 +16,6 @@ export const ModalBackground = styled.div` export const ModalBox = styled.div` position: fixed; - /* height: 470px; */ width: 71.5rem; top: 50%; left: 50%; @@ -24,7 +23,6 @@ export const ModalBox = styled.div` background-color: #fff; border-radius: 15px; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); - /* box-shadow: var(--box-shadow); */ z-index: 21; text-align: center; padding: 20px 30px; diff --git a/src/components/mainpage/Calendar.jsx b/src/components/mainpage/Calendar.jsx index d95d645..f108454 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/mainpage/Calendar.jsx @@ -1,16 +1,67 @@ import { GetTodo } from '../../apis/apiGET'; +import { patchTodoInfo } from '../../store/store'; +import Potal from '../global/globalModal/Potal'; +import TodoModal from '../global/globalModal/TodoModal'; +import TodoPathModal from './../global/globalModal/TodoPathModal'; import { Container } from './Calendar.styled'; import dayGridPlugin from '@fullcalendar/daygrid'; +import interactionPlugin from '@fullcalendar/interaction'; import FullCalendar from '@fullcalendar/react'; import { useQuery } from '@tanstack/react-query'; import React, { useState } from 'react'; +import { useSetRecoilState } from 'recoil'; export default function Calendar() { + const [todoModalOn, setTodoModalOn] = useState(false); + const [createModalOn, setCreateModalOn] = useState(false); const array = []; const [calendarData, setCalendarData] = useState(); + console.log(calendarData); + + const [formCalendar, setFormCalendar] = useState(true); + const [dateInfo, setDateInfo] = useState({ + start: '', + startDateTime: '', + }); + + // console.log(dateInfo); + + const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); + + const closePathModal = () => { + setTodoModalOn(!todoModalOn); + }; + + const closeCrModal = () => { + setCreateModalOn(!createModalOn); + }; + + const patchTodo = ( + id, + todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority + ) => { + setPatchTodoInfo({ + id, + toDo: todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority, + }); + setTodoModalOn(!todoModalOn); + }; const { data: getTodo } = useQuery(['TODO'], GetTodo, { onSuccess: response => { + console.log(response); response?.map(el => { const endDate = new Date(el.endDate); endDate.setDate(endDate.getDate() + 1); @@ -24,6 +75,15 @@ export default function Calendar() { borderColor: `${el.color === null ? '#9B9B9B' : el.color}`, textColr: '#fff', fontSize: '17px', + id: el.toDoId, + + todo: el.toDo, + memo: el.memo, + startDate: el.startDate, + startDateTime: el.startDateTime, + endDate: el.endDate, + endDateTime: el.endDateTime, + priority: el.priority, }; array.push(obj); return setCalendarData(array); @@ -32,18 +92,44 @@ export default function Calendar() { onError: response => {}, }); + const handleDateClick = clickDateInfo => { + // console.log(clickDateInfo); + setDateInfo({ + ...dateInfo, + start: clickDateInfo.startStr, + startDateTime: '00:00', + }); + console.log('생성'); + setCreateModalOn(true); + }; + + const handleEventClick = clickDateInfo => { + console.log(clickDateInfo.event.id); + console.log('수정'); + patchTodo( + clickDateInfo.event.id, + clickDateInfo.event.extendedProps.todo, + clickDateInfo.event.extendedProps.memo, + clickDateInfo.event.extendedProps.startDate, + clickDateInfo.event.extendedProps.startDateTime, + clickDateInfo.event.extendedProps.endDate, + clickDateInfo.event.extendedProps.endDateTime, + clickDateInfo.event.extendedProps.priority + ); + setTodoModalOn(true); + }; + return ( <Container> <FullCalendar - plugins={[dayGridPlugin]} + plugins={[dayGridPlugin, interactionPlugin]} initialView='dayGridMonth' - dayMaxEvents={true} locale='ko' - views={{ - listDay: { buttonText: 'list day' }, - listWeek: { buttonText: 'list week' }, - listMonth: { buttonText: 'list month' }, - }} + // dateClick={handleDateClick} + // eventContent={renderEventContent} + selectable={true} + select={handleDateClick} + eventClick={handleEventClick} headerToolbar={{ left: 'prev', center: 'title', @@ -51,6 +137,18 @@ export default function Calendar() { }} events={calendarData} /> + <Potal> + {todoModalOn ? <TodoPathModal onCloseModal={closePathModal} /> : null} + </Potal> + <Potal> + {createModalOn && ( + <TodoModal + onCloseTodoModal={closeCrModal} + formCalendar={formCalendar} + dateInfo={dateInfo} + /> + )} + </Potal> </Container> ); } diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/mainpage/TodoItem.jsx index 36e9c16..708d747 100644 --- a/src/components/mainpage/TodoItem.jsx +++ b/src/components/mainpage/TodoItem.jsx @@ -74,7 +74,6 @@ const TodoItem = ({ getTodo }) => { }; const [todoModalOn, setTodoModalOn] = useState(false); - // console.log(todoModalOn); const onTodoCloseModal = () => { setTodoModalOn(!todoModalOn); @@ -84,7 +83,7 @@ const TodoItem = ({ getTodo }) => { const patchTodo = ( id, - todo, + toDo, memo, startDate, startDateTime, @@ -95,7 +94,7 @@ const TodoItem = ({ getTodo }) => { // console.log(todo); setPatchTodoInfo({ id, - toDo: todo, + toDo, memo, startDate, startDateTime, diff --git a/src/components/signIn/Article.jsx b/src/components/signIn/Article.jsx index affafce..17668c2 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/signIn/Article.jsx @@ -17,6 +17,7 @@ import { useMutation } from '@tanstack/react-query'; import React, { useState } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; +import { toast } from 'react-toastify'; const Article = () => { const navigate = useNavigate(); @@ -79,16 +80,17 @@ const Article = () => { } localStorage.setItem('Id', userInfo.email); localStorage.setItem('accesstoken', response.accessToken); + toast('로그인이 성공적으로 되었습니다.'); navigate('/mainpage'); }, onError: response => { + toast(response.response.data); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', action: '로그인 실패', }); } - alert(response.response.data); }, }); diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index dea8ba4..e37a514 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -7,25 +7,23 @@ import React, { useState, useRef, useEffect } from 'react'; import { Link } from 'react-scroll'; const TodoNavi = ({ todayFormat, getAllTodo }) => { - // console.log(todayFormat); - + //targetDate 년도도 받아야함 const haveDay = getAllTodo?.map(todo => { + // console.log(todo); return todo.targetDate; }); + // console.log(haveDay); + const today = new Date(); - const yearMonth = `${today.getFullYear()}년 ${today.getMonth() + 1}월`; let date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); - const [month, setMonth] = useState(today.getMonth() + 1); - - let makeWeekAll = date => { + let makeWeek = date => { let day = date.getDay(); let week = []; for (let i = 0; i < 7; i++) { let newDate = new Date(date.valueOf() + 86400000 * (i - day)); - // let id = Math.random(); let dateValue; if (i === 0) { dateValue = '일'; @@ -54,23 +52,19 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { format = `${newDate.getMonth() + 1}월 ${newDate.getDate()}일`; } - console.log(haveDay?.includes(format)); - // console.log(haveDay); - week.push({ dateValue, month: `${newDate.getMonth() + 1}`, date: `${newDate.getDate()}`, + year: `${newDate.getFullYear()}`, format: format, includes: haveDay?.includes(format), }); - - // console.log(week); } return week; }; - let week = makeWeekAll(date); + let week = makeWeek(date); const [state, setState] = useState({ date, @@ -79,44 +73,29 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { const onPressArrowLeft = () => { let newDate = new Date(state.date.valueOf() - 86400000 * (7 * 1)); - let newWeek = makeWeekAll(newDate); + let newWeek = makeWeek(newDate); setState({ ...state, date: newDate, week: newWeek, }); - - newWeek.map(el => { - if (el[1] === month) { - setMonth(month); - } else { - setMonth(el[1]); - } - return el; - }); + console.log('newWeek :', newWeek); }; const onPressArrowRight = () => { let newDate = new Date(state.date.valueOf() + 86400000 * (7 * 1)); - let newWeek = makeWeekAll(newDate); + let newWeek = makeWeek(newDate); setState({ ...state, date: newDate, week: newWeek, }); - newWeek.map(el => { - if (el.month === month) { - setMonth(month); - } else { - setMonth(el.month); - } - return el; - }); }; const dateM = date.getMonth() + 1; // 오늘 날짜 값 추출하기 const dateD = date.getDate(); + const dateY = date.getFullYear(); const [todoModalOn, setTodoModalOn] = useState(false); /**모달 닫는 함수 */ @@ -136,17 +115,13 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { setTodoModalOn(!todoModalOn); } }; - // console.log(dateD); - // console.log('haveDay :', haveDay); - console.log('navi :', state.week); - console.log('getAllTodo :', getAllTodo); return ( <StNavi> <TodoHeader> <div className='left'> <div className='dDay'> - {today.getFullYear()}년 {month}월 + {state.week[3].year}년 {state.week[3].month}월 </div> </div> <div className='right'> @@ -168,7 +143,9 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { <DateNavi> {state.week?.map((el, index) => ( <React.Fragment key={index}> - {Number(el.date) === dateD && Number(el.month) === dateM ? ( + {Number(el.date) === dateD && + Number(el.month) === dateM && + Number(el.year) === dateY ? ( <Link to={el.format} spy={true} @@ -178,7 +155,7 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { el.includes === false || undefined ? 'day' : 'include' } style={{ backgroundColor: ' rgba(255, 131, 54, 0.3)' }}> - <span className='label'>{el[0]}</span> + <span className='label'>{el.dateValue}</span> <span className='date' style={{ color: '#ff8336' }}> {el.date} </span> diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 9981d2e..8679f64 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -27,6 +27,7 @@ export const TodoHeader = styled.div` font-size: 2.7rem; color: #4b4b4b; margin-right: 15px; + cursor: default; } .down { width: 13px; @@ -88,6 +89,7 @@ export const DateNavi = styled.div` border-radius: 8px; margin-bottom: 70px; display: flex; + overflow: hidden; .day { width: calc(100% / 7); height: 100%; @@ -154,6 +156,8 @@ export const StPastTodo = styled.div` top: 186px; background-color: #fff; margin-bottom: 20px; + + /* overflow-y: scroll; */ /* border: 1px solid; */ /* background-color: pink; */ `; diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 3f7265b..2ee7483 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,6 +1,7 @@ import { GetUserInfo } from '../apis/apiGET'; import Calendar from '../components/calendar/Calendar'; import CompanyOKR from '../components/companyOKR/companyOKR'; +import Modal from '../components/global/globalModal/AlertModalTest'; import Portal from '../components/global/globalModal/Potal'; import DashBoardCalendar from '../components/mainpage/Calendar'; import DashBoardOKR from '../components/mainpage/OKR'; @@ -92,6 +93,7 @@ export default function Mainpage() { </> )} </Wrap> + // <Modal /> ); } diff --git a/yarn.lock b/yarn.lock index c7b90c6..ab0663e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,53 +4,53 @@ "@adobe/css-tools@^4.0.1": version "4.2.0" - resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855" integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== "@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" - resolved "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz" + resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== dependencies: json-schema "^0.4.0" jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz" - integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" + integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz" - integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" + integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.0" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.21.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-module-transforms" "^7.21.2" "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.0" + "@babel/parser" "^7.21.4" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" + "@babel/traverse" "^7.21.4" + "@babel/types" "^7.21.4" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -58,63 +58,63 @@ semver "^6.3.0" "@babel/eslint-parser@^7.16.3": - version "7.19.1" - resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz" - integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz#d79e822050f2de65d7f368a076846e7184234af7" + integrity sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@7.17.7", "@babel/generator@^7.17.3": +"@babel/generator@7.17.7": version "7.17.7" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== dependencies: "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.21.0", "@babel/generator@^7.21.1", "@babel/generator@^7.7.2": - version "7.21.1" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz" - integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== +"@babel/generator@^7.17.3", "@babel/generator@^7.21.4", "@babel/generator@^7.7.2": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== dependencies: - "@babel/types" "^7.21.0" + "@babel/types" "^7.21.4" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== dependencies: "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" + integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" + "@babel/compat-data" "^7.21.4" + "@babel/helper-validator-option" "^7.21.0" browserslist "^4.21.3" lru-cache "^5.1.1" semver "^6.3.0" "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz" - integrity sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18" + integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.9" @@ -126,16 +126,16 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz" - integrity sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz#40411a8ab134258ad2cf3a3d987ec6aa0723cee5" + integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.3.1" "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: "@babel/helper-compilation-targets" "^7.17.7" @@ -147,19 +147,19 @@ "@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-explode-assignable-expression@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: "@babel/types" "^7.18.6" "@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== dependencies: "@babel/template" "^7.20.7" @@ -167,28 +167,28 @@ "@babel/helper-hoist-variables@^7.16.7", "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== dependencies: "@babel/types" "^7.21.0" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.0", "@babel/helper-module-transforms@^7.21.2": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": version "7.21.2" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -202,19 +202,19 @@ "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.20.2" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -224,7 +224,7 @@ "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -236,43 +236,43 @@ "@babel/helper-simple-access@^7.20.2": version "7.20.2" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: "@babel/types" "^7.20.2" "@babel/helper-skip-transparent-expression-wrappers@^7.20.0": version "7.20.0" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: "@babel/types" "^7.20.0" "@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.19.4": version "7.19.4" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== "@babel/helper-wrap-function@^7.18.9": version "7.20.5" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== dependencies: "@babel/helper-function-name" "^7.19.0" @@ -282,7 +282,7 @@ "@babel/helpers@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== dependencies: "@babel/template" "^7.20.7" @@ -291,37 +291,37 @@ "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.3", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": - version "7.21.2" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.3", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@^7.20.1": +"@babel/plugin-proposal-async-generator-functions@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -331,15 +331,15 @@ "@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.18.6": +"@babel/plugin-proposal-class-static-block@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== dependencies: "@babel/helper-create-class-features-plugin" "^7.21.0" @@ -348,7 +348,7 @@ "@babel/plugin-proposal-decorators@^7.16.4": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.21.0.tgz#70e0c89fdcd7465c97593edb8f628ba6e4199d63" integrity sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w== dependencies: "@babel/helper-create-class-features-plugin" "^7.21.0" @@ -359,7 +359,7 @@ "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -367,7 +367,7 @@ "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" @@ -375,15 +375,15 @@ "@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -391,7 +391,7 @@ "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -399,15 +399,15 @@ "@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.20.2": +"@babel/plugin-proposal-object-rest-spread@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: "@babel/compat-data" "^7.20.5" @@ -418,15 +418,15 @@ "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": +"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -435,15 +435,15 @@ "@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.18.6": +"@babel/plugin-proposal-private-property-in-object@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -453,7 +453,7 @@ "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -461,161 +461,161 @@ "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-decorators@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz#d2b3f31c3e86fa86e16bb540b7660c55bd7d0e78" integrity sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz" - integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz#3e37fca4f06d93567c1cd9b75156422e90a67107" + integrity sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-import-assertions@^7.20.0": version "7.20.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== dependencies: "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.20.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" - integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-arrow-functions@^7.18.6": +"@babel/plugin-transform-arrow-functions@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-async-to-generator@^7.18.6": +"@babel/plugin-transform-async-to-generator@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== dependencies: "@babel/helper-module-imports" "^7.18.6" @@ -624,21 +624,21 @@ "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.20.2": +"@babel/plugin-transform-block-scoping@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.20.2": +"@babel/plugin-transform-classes@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -651,24 +651,24 @@ "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.18.9": +"@babel/plugin-transform-computed-properties@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/template" "^7.20.7" -"@babel/plugin-transform-destructuring@^7.20.2": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz" - integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -676,14 +676,14 @@ "@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" @@ -691,22 +691,22 @@ "@babel/plugin-transform-flow-strip-types@^7.16.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz#6aeca0adcb81dc627c8986e770bfaa4d9812aff5" integrity sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-flow" "^7.18.6" -"@babel/plugin-transform-for-of@^7.18.8": +"@babel/plugin-transform-for-of@^7.21.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e" integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: "@babel/helper-compilation-targets" "^7.18.9" @@ -715,38 +715,38 @@ "@babel/plugin-transform-literals@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.19.6": +"@babel/plugin-transform-modules-amd@^7.20.11": version "7.20.11" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== dependencies: "@babel/helper-module-transforms" "^7.20.11" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.19.6": +"@babel/plugin-transform-modules-commonjs@^7.21.2": version "7.21.2" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== dependencies: "@babel/helper-module-transforms" "^7.21.2" "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-simple-access" "^7.20.2" -"@babel/plugin-transform-modules-systemjs@^7.19.6": +"@babel/plugin-transform-modules-systemjs@^7.20.11": version "7.20.11" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== dependencies: "@babel/helper-hoist-variables" "^7.18.6" @@ -756,15 +756,15 @@ "@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": version "7.20.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.20.5" @@ -772,57 +772,57 @@ "@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz" - integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== +"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.20.2" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz" - integrity sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" + integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-development@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" "@babel/plugin-transform-react-jsx@^7.18.6": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -833,15 +833,15 @@ "@babel/plugin-transform-react-pure-annotations@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.18.6": +"@babel/plugin-transform-regenerator@^7.20.5": version "7.20.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -849,17 +849,17 @@ "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@^7.16.4": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz" - integrity sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" + integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== dependencies: - "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-module-imports" "^7.21.4" "@babel/helper-plugin-utils" "^7.20.2" babel-plugin-polyfill-corejs2 "^0.3.3" babel-plugin-polyfill-corejs3 "^0.6.0" @@ -868,14 +868,14 @@ "@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.19.0": +"@babel/plugin-transform-spread@^7.20.7": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -883,74 +883,75 @@ "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-template-literals@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typeof-symbol@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typescript@^7.21.0": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz" - integrity sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg== +"@babel/plugin-transform-typescript@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-create-class-features-plugin" "^7.21.0" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-typescript" "^7.20.0" "@babel/plugin-transform-unicode-escapes@^7.18.10": version "7.18.10" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.20.2" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz" - integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" + integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== dependencies: - "@babel/compat-data" "^7.20.1" - "@babel/helper-compilation-targets" "^7.20.0" + "@babel/compat-data" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.18.6" + "@babel/helper-validator-option" "^7.21.0" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" "@babel/plugin-proposal-dynamic-import" "^7.18.6" "@babel/plugin-proposal-export-namespace-from" "^7.18.9" "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-object-rest-spread" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -967,40 +968,40 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.20.7" + "@babel/plugin-transform-async-to-generator" "^7.20.7" "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.20.2" - "@babel/plugin-transform-classes" "^7.20.2" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.20.7" + "@babel/plugin-transform-destructuring" "^7.21.3" "@babel/plugin-transform-dotall-regex" "^7.18.6" "@babel/plugin-transform-duplicate-keys" "^7.18.9" "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-for-of" "^7.21.0" "@babel/plugin-transform-function-name" "^7.18.9" "@babel/plugin-transform-literals" "^7.18.9" "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.19.6" - "@babel/plugin-transform-modules-commonjs" "^7.19.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" "@babel/plugin-transform-new-target" "^7.18.6" "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-parameters" "^7.21.3" "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.20.5" "@babel/plugin-transform-reserved-words" "^7.18.6" "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-spread" "^7.20.7" "@babel/plugin-transform-sticky-regex" "^7.18.6" "@babel/plugin-transform-template-literals" "^7.18.9" "@babel/plugin-transform-typeof-symbol" "^7.18.9" "@babel/plugin-transform-unicode-escapes" "^7.18.10" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.20.2" + "@babel/types" "^7.21.4" babel-plugin-polyfill-corejs2 "^0.3.3" babel-plugin-polyfill-corejs3 "^0.6.0" babel-plugin-polyfill-regenerator "^0.4.1" @@ -1009,7 +1010,7 @@ "@babel/preset-modules@^0.1.5": version "0.1.5" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -1020,7 +1021,7 @@ "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -1031,29 +1032,31 @@ "@babel/plugin-transform-react-pure-annotations" "^7.18.6" "@babel/preset-typescript@^7.16.0": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz" - integrity sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg== + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" + integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-transform-typescript" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-typescript" "^7.21.3" "@babel/regjsgen@^0.8.0": version "0.8.0" - resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== dependencies: regenerator-runtime "^0.13.11" "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" @@ -1062,7 +1065,7 @@ "@babel/traverse@7.17.3": version "7.17.3" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== dependencies: "@babel/code-frame" "^7.16.7" @@ -1076,34 +1079,34 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": - version "7.21.2" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz" - integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== +"@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" + integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.1" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.2" - "@babel/types" "^7.21.2" + "@babel/parser" "^7.21.4" + "@babel/types" "^7.21.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@7.17.0", "@babel/types@^7.17.0": +"@babel/types@7.17.0": version "7.17.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.21.2" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz" - integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.17.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -1111,12 +1114,12 @@ "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@craco/craco@^7.1.0": version "7.1.0" - resolved "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-7.1.0.tgz#12bd394c7f0334e214302e4d35a1768f68042fbb" integrity sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA== dependencies: autoprefixer "^10.4.12" @@ -1129,19 +1132,19 @@ "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@csstools/normalize.css@*": version "12.0.0" - resolved "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" - resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== dependencies: "@csstools/selector-specificity" "^2.0.2" @@ -1149,7 +1152,7 @@ "@csstools/postcss-color-function@^1.1.1": version "1.1.1" - resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -1157,21 +1160,21 @@ "@csstools/postcss-font-format-keywords@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-hwb-function@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-ic-unit@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -1179,7 +1182,7 @@ "@csstools/postcss-is-pseudo-class@^2.0.7": version "2.0.7" - resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== dependencies: "@csstools/selector-specificity" "^2.0.0" @@ -1187,21 +1190,21 @@ "@csstools/postcss-nested-calc@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-normalize-display-values@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-oklab-function@^1.1.1": version "1.1.1" - resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -1209,72 +1212,84 @@ "@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": version "1.3.0" - resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-stepped-value-functions@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-text-decoration-shorthand@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-trigonometric-functions@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-unset-value@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== "@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": - version "2.1.1" - resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz" - integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== "@emotion/is-prop-valid@^1.1.0": version "1.2.0" - resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== dependencies: "@emotion/memoize" "^0.8.0" "@emotion/memoize@^0.8.0": version "0.8.0" - resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== "@emotion/stylis@^0.8.4": version "0.8.5" - resolved "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== "@emotion/unitless@^0.7.4": version "0.7.5" - resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@eslint/eslintrc@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz" - integrity sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" + integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== + +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.5.1" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -1282,31 +1297,36 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.35.0": - version "8.35.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz" - integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== +"@eslint/js@8.38.0": + version "8.38.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" + integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== "@fullcalendar/core@^6.1.4": - version "6.1.4" - resolved "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.4.tgz" - integrity sha512-ZDD0Owv0LezAk14nsRNaOc9nbowItGmT0mnjOhEw+L6B8P5eads8yYaNA9itn70MWoOjiAG8xqD7Yk1iJGxqgQ== + version "6.1.5" + resolved "https://registry.yarnpkg.com/@fullcalendar/core/-/core-6.1.5.tgz#b2ec855f3144ca995af8e5b783a15002d73870fb" + integrity sha512-U3ZJy1JGAgvyXG4iLWvTW4osbkt5Fj9gmbU1B+RyRhiqwXGE0F329sX7kqLTzj3QI1IPzyq6xnJfWUIsAe7+qw== dependencies: - preact "^10.0.5" + preact "~10.12.1" "@fullcalendar/daygrid@^6.1.4": - version "6.1.4" - resolved "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.4.tgz" - integrity sha512-X0QWEiA/hT8GYiQzmXt9DlZTWaQbNtBHBXGtaMNcVXbGHDCzLoWTHrde/jABGfr/i2+d9sLUO4oTtwz2HVpNtQ== + version "6.1.5" + resolved "https://registry.yarnpkg.com/@fullcalendar/daygrid/-/daygrid-6.1.5.tgz#fa5df2ec926a0a2367a91f43981518643d3d63c7" + integrity sha512-wXQUNPOyEQ1FEHVdtxP/tLcAAGwY4zeFejujhcznhKC751X8voInF+7kFmI7GDTVgX9cd72Muku3c+gHi8ygEQ== + +"@fullcalendar/interaction@^6.1.5": + version "6.1.5" + resolved "https://registry.yarnpkg.com/@fullcalendar/interaction/-/interaction-6.1.5.tgz#548bee3f21046f30ad64c2596cbd94689db509f0" + integrity sha512-7U+WsysSlgVSkWqyjLnE6dVKUk2I7sGZN0zcadSfvL2e3KzD30BKgz78p6LRayW2Trtyf/7rZEe1k064ELd0+Q== "@fullcalendar/react@^6.1.4": - version "6.1.4" - resolved "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.4.tgz" - integrity sha512-9nc0uHr7zfhNIMyaM+ftoVqX9UEn+frCjTeofN3lcl3bCYvo2dwLw+n9jBJx//f+NRrSwmIvKq2JrqmF2IrwJA== + version "6.1.5" + resolved "https://registry.yarnpkg.com/@fullcalendar/react/-/react-6.1.5.tgz#75f9f705be7297ee0ee700dfab3e6997153b54f3" + integrity sha512-OVQJQhtDAwxHbFk84bm5Y6iGLjGDrrBgr3491JbfnqHUjSaO+T1rNHUvtnot0X4/ZdnoxWr2nKqxPxpmCCL/lw== "@humanwhocodes/config-array@^0.11.8": version "0.11.8" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -1315,17 +1335,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -1336,12 +1356,12 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== dependencies: "@jest/types" "^27.5.1" @@ -1353,7 +1373,7 @@ "@jest/console@^28.1.3": version "28.1.3" - resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== dependencies: "@jest/types" "^28.1.3" @@ -1365,7 +1385,7 @@ "@jest/core@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== dependencies: "@jest/console" "^27.5.1" @@ -1399,7 +1419,7 @@ "@jest/environment@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== dependencies: "@jest/fake-timers" "^27.5.1" @@ -1407,16 +1427,16 @@ "@types/node" "*" jest-mock "^27.5.1" -"@jest/expect-utils@^29.4.3": - version "29.4.3" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz" - integrity sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ== +"@jest/expect-utils@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" + integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== dependencies: jest-get-type "^29.4.3" "@jest/fake-timers@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== dependencies: "@jest/types" "^27.5.1" @@ -1428,7 +1448,7 @@ "@jest/globals@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== dependencies: "@jest/environment" "^27.5.1" @@ -1437,7 +1457,7 @@ "@jest/reporters@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -1468,21 +1488,21 @@ "@jest/schemas@^28.1.3": version "28.1.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== dependencies: "@sinclair/typebox" "^0.24.1" "@jest/schemas@^29.4.3": version "29.4.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== dependencies: "@sinclair/typebox" "^0.25.16" "@jest/source-map@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: callsites "^3.0.0" @@ -1491,7 +1511,7 @@ "@jest/test-result@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== dependencies: "@jest/console" "^27.5.1" @@ -1501,7 +1521,7 @@ "@jest/test-result@^28.1.3": version "28.1.3" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== dependencies: "@jest/console" "^28.1.3" @@ -1511,7 +1531,7 @@ "@jest/test-sequencer@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== dependencies: "@jest/test-result" "^27.5.1" @@ -1521,7 +1541,7 @@ "@jest/transform@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" @@ -1542,7 +1562,7 @@ "@jest/types@^27.5.1": version "27.5.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" @@ -1553,7 +1573,7 @@ "@jest/types@^28.1.3": version "28.1.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== dependencies: "@jest/schemas" "^28.1.3" @@ -1563,10 +1583,10 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jest/types@^29.4.3": - version "29.4.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz" - integrity sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA== +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== dependencies: "@jest/schemas" "^29.4.3" "@types/istanbul-lib-coverage" "^2.0.0" @@ -1575,77 +1595,79 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@3.1.0": version "3.1.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" - resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" - resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== dependencies: eslint-scope "5.1.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1653,12 +1675,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1666,7 +1688,7 @@ "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.10" - resolved "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz#2eba163b8e7dbabb4ce3609ab5e32ab63dda3ef8" integrity sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA== dependencies: ansi-html-community "^0.0.8" @@ -1679,14 +1701,14 @@ schema-utils "^3.0.0" source-map "^0.7.3" -"@remix-run/router@1.3.3": - version "1.3.3" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.3.3.tgz" - integrity sha512-YRHie1yQEj0kqqCTCJEfHqYSSNlZQ696QJG+MMiW4mxSl9I0ojz/eRhJS4fs88Z5i6D1SmoF9d3K99/QOhI8/w== +"@remix-run/router@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.5.0.tgz#57618e57942a5f0131374a9fdb0167e25a117fdc" + integrity sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg== "@rollup/plugin-babel@^5.2.0": version "5.3.1" - resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== dependencies: "@babel/helper-module-imports" "^7.10.4" @@ -1694,7 +1716,7 @@ "@rollup/plugin-node-resolve@^11.2.1": version "11.2.1" - resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -1706,7 +1728,7 @@ "@rollup/plugin-replace@^2.4.1": version "2.4.2" - resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -1714,7 +1736,7 @@ "@rollup/pluginutils@^3.1.0": version "3.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== dependencies: "@types/estree" "0.0.39" @@ -1723,36 +1745,36 @@ "@rushstack/eslint-patch@^1.1.0": version "1.2.0" - resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== "@sinclair/typebox@^0.24.1": version "0.24.51" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sinclair/typebox@^0.25.16": version "0.25.24" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== "@sinonjs/commons@^1.7.0": version "1.8.6" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^8.0.1": version "8.1.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== dependencies: "@sinonjs/commons" "^1.7.0" "@surma/rollup-plugin-off-main-thread@^2.2.3": version "2.2.3" - resolved "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== dependencies: ejs "^3.1.6" @@ -1762,47 +1784,47 @@ "@svgr/babel-plugin-add-jsx-attribute@^5.4.0": version "5.4.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== "@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": version "5.4.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== "@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": 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" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== "@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": 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" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== "@svgr/babel-plugin-svg-dynamic-title@^5.4.0": version "5.4.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== "@svgr/babel-plugin-svg-em-dimensions@^5.4.0": version "5.4.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== "@svgr/babel-plugin-transform-react-native-svg@^5.4.0": 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" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== "@svgr/babel-plugin-transform-svg-component@^5.5.0": version "5.5.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== "@svgr/babel-preset@^5.5.0": version "5.5.0" - resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== dependencies: "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" @@ -1816,7 +1838,7 @@ "@svgr/core@^5.5.0": version "5.5.0" - resolved "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== dependencies: "@svgr/plugin-jsx" "^5.5.0" @@ -1825,14 +1847,14 @@ "@svgr/hast-util-to-babel-ast@^5.5.0": version "5.5.0" - resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== dependencies: "@babel/types" "^7.12.6" "@svgr/plugin-jsx@^5.5.0": version "5.5.0" - resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== dependencies: "@babel/core" "^7.12.3" @@ -1842,7 +1864,7 @@ "@svgr/plugin-svgo@^5.5.0": version "5.5.0" - resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== dependencies: cosmiconfig "^7.0.0" @@ -1851,7 +1873,7 @@ "@svgr/webpack@^5.5.0": version "5.5.0" - resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== dependencies: "@babel/core" "^7.12.3" @@ -1863,22 +1885,22 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" -"@tanstack/query-core@4.26.1": - version "4.26.1" - resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.26.1.tgz" - integrity sha512-Zrx2pVQUP4ndnsu6+K/m8zerXSVY8QM+YSbxA1/jbBY21GeCd5oKfYl92oXPK0hPEUtoNuunIdiq0ZMqLos+Zg== +"@tanstack/query-core@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.29.1.tgz#62a4bc120b85e6bb3c6c0aca96346e643e232248" + integrity sha512-vkPewLEG8ua0efo3SsVT0BcBtkq5RZX8oPhDAyKL+k/rdOYSQTEocfGEXSaBwIwsXeOGBUpfKqI+UmHvNqdWXg== "@tanstack/react-query@^4.26.1": - version "4.26.1" - resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.26.1.tgz" - integrity sha512-i3dnz4TOARGIXrXQ5P7S25Zfi4noii/bxhcwPurh2nrf5EUCcAt/95TB2HSmMweUBx206yIMWUMEQ7ptd6zwDg== + version "4.29.3" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.29.3.tgz#037205560784ed4a5e3fd605a2143e325b6189fa" + integrity sha512-FPQrMu7PbCgBcVzoRJm7WmQnAFv+LUgZM9KBZ7Vk/+yERH2BDLvQRuAgczQd5Tb1s3HbOktECRDaOkUxdyBAjw== dependencies: - "@tanstack/query-core" "4.26.1" + "@tanstack/query-core" "4.29.1" use-sync-external-store "^1.2.0" "@testing-library/dom@^8.5.0": version "8.20.0" - resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6" integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA== dependencies: "@babel/code-frame" "^7.10.4" @@ -1892,7 +1914,7 @@ "@testing-library/jest-dom@^5.14.1": version "5.16.5" - resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== dependencies: "@adobe/css-tools" "^4.0.1" @@ -1907,7 +1929,7 @@ "@testing-library/react@^13.0.0": version "13.4.0" - resolved "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== dependencies: "@babel/runtime" "^7.12.5" @@ -1916,19 +1938,19 @@ "@testing-library/user-event@^13.2.1": version "13.5.0" - resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295" integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg== dependencies: "@babel/runtime" "^7.12.5" "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@trivago/prettier-plugin-sort-imports@^4.1.1": version "4.1.1" - resolved "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.1.1.tgz#71c3c1ae770c3738b6fc85710714844477574ffd" integrity sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw== dependencies: "@babel/generator" "7.17.7" @@ -1940,37 +1962,37 @@ "@trysound/sax@0.2.0": version "0.2.0" - resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/aria-query@^5.0.1": version "5.0.1" - resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.20.0" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== dependencies: "@babel/parser" "^7.20.7" @@ -1981,14 +2003,14 @@ "@types/babel__generator@*": version "7.6.4" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" @@ -1996,14 +2018,14 @@ "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": version "7.18.3" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" "@types/body-parser@*": version "1.19.2" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: "@types/connect" "*" @@ -2011,14 +2033,14 @@ "@types/bonjour@^3.5.9": version "3.5.10" - resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": version "1.3.5" - resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== dependencies: "@types/express-serve-static-core" "*" @@ -2026,45 +2048,40 @@ "@types/connect@*": version "3.4.35" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== dependencies: "@types/node" "*" "@types/eslint-scope@^3.7.3": version "3.7.4" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.21.1" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz" - integrity sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ== + version "8.37.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" + integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": +"@types/estree@*", "@types/estree@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== "@types/estree@0.0.39": version "0.0.39" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== dependencies: "@types/node" "*" @@ -2073,7 +2090,7 @@ "@types/express@*", "@types/express@^4.17.13": version "4.17.17" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== dependencies: "@types/body-parser" "*" @@ -2083,111 +2100,111 @@ "@types/graceful-fs@^4.1.2": version "4.1.6" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" "@types/html-minifier-terser@^6.0.0": version "6.1.0" - resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-proxy@^1.17.8": version "1.17.10" - resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@*": - version "29.4.0" - resolved "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz" - integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ== + version "29.5.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.0.tgz#337b90bbcfe42158f39c2fb5619ad044bbb518ac" + integrity sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg== dependencies: expect "^29.0.0" pretty-format "^29.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/mime@*": version "3.0.1" - resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== "@types/node@*": - version "18.14.5" - resolved "https://registry.npmjs.org/@types/node/-/node-18.14.5.tgz" - integrity sha512-CRT4tMK/DHYhw1fcCEBwME9CSaZNclxfzVMe7GsO6ULSwsttbj70wSiX6rZdIjGblu93sTJxLdhNIT85KKI7Qw== + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.1.5": version "2.7.2" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/prop-types@*": version "15.7.5" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/q@^1.5.1": version "1.5.5" - resolved "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== "@types/qs@*": version "6.9.7" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/range-parser@*": version "1.2.4" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-dom@^18.0.0": version "18.0.11" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== dependencies: "@types/react" "*" "@types/react@*": - version "18.0.28" - resolved "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz" - integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== + version "18.0.35" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.35.tgz#192061cb1044fe01f2d3a94272cd35dd50502741" + integrity sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2195,36 +2212,36 @@ "@types/resolve@1.17.1": version "1.17.1" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== dependencies: "@types/node" "*" "@types/retry@0.12.0": version "0.12.0" - resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/semver@^7.3.12": version "7.3.13" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@types/serve-index@^1.9.1": version "1.9.1" - resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": version "1.15.1" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== dependencies: "@types/mime" "*" @@ -2232,148 +2249,148 @@ "@types/sockjs@^0.3.33": version "0.3.33" - resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== dependencies: "@types/node" "*" "@types/stack-utils@^2.0.0": version "2.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/testing-library__jest-dom@^5.9.1": version "5.14.5" - resolved "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== dependencies: "@types/jest" "*" "@types/trusted-types@^2.0.2": version "2.0.3" - resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== "@types/ws@^8.5.1": version "8.5.4" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== dependencies: "@types/node" "*" "@types/yargs-parser@*": version "21.0.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^16.0.0": version "16.0.5" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.22" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz" - integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz" - integrity sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== - dependencies: - "@typescript-eslint/scope-manager" "5.54.0" - "@typescript-eslint/type-utils" "5.54.0" - "@typescript-eslint/utils" "5.54.0" + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz#b1d4b0ad20243269d020ef9bbb036a40b0849829" + integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/type-utils" "5.58.0" + "@typescript-eslint/utils" "5.58.0" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" - regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.0.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.54.0.tgz" - integrity sha512-rRYECOTh5V3iWsrOzXi7h1jp3Bi9OkJHrb3wECi3DVqMGTilo9wAYmCbT+6cGdrzUY3MWcAa2mESM6FMik6tVw== + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.58.0.tgz#157af1376add1a945c4559eef25114f0a29f49e1" + integrity sha512-LA/sRPaynZlrlYxdefrZbMx8dqs/1Kc0yNG+XOk5CwwZx7tTv263ix3AJNioF0YBVt7hADpAUR20owl6pv4MIQ== dependencies: - "@typescript-eslint/utils" "5.54.0" + "@typescript-eslint/utils" "5.58.0" "@typescript-eslint/parser@^5.5.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz" - integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.58.0.tgz#2ac4464cf48bef2e3234cb178ede5af352dddbc6" + integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== dependencies: - "@typescript-eslint/scope-manager" "5.54.0" - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/typescript-estree" "5.54.0" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.54.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz" - integrity sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg== +"@typescript-eslint/scope-manager@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz#5e023a48352afc6a87be6ce3c8e763bc9e2f0bc8" + integrity sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA== dependencies: - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/visitor-keys" "5.54.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" -"@typescript-eslint/type-utils@5.54.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz" - integrity sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ== +"@typescript-eslint/type-utils@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz#f7d5b3971483d4015a470d8a9e5b8a7d10066e52" + integrity sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w== dependencies: - "@typescript-eslint/typescript-estree" "5.54.0" - "@typescript-eslint/utils" "5.54.0" + "@typescript-eslint/typescript-estree" "5.58.0" + "@typescript-eslint/utils" "5.58.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.54.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz" - integrity sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ== +"@typescript-eslint/types@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" + integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== -"@typescript-eslint/typescript-estree@5.54.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz" - integrity sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ== +"@typescript-eslint/typescript-estree@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" + integrity sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q== dependencies: - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/visitor-keys" "5.54.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.54.0", "@typescript-eslint/utils@^5.43.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz" - integrity sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== +"@typescript-eslint/utils@5.58.0", "@typescript-eslint/utils@^5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.58.0.tgz#430d7c95f23ec457b05be5520c1700a0dfd559d5" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.54.0" - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/typescript-estree" "5.54.0" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.54.0": - version "5.54.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz" - integrity sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA== +"@typescript-eslint/visitor-keys@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" + integrity sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA== dependencies: - "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/types" "5.58.0" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== dependencies: "@webassemblyjs/helper-numbers" "1.11.1" @@ -2381,22 +2398,22 @@ "@webassemblyjs/floating-point-hex-parser@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== "@webassemblyjs/helper-api-error@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== "@webassemblyjs/helper-buffer@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== "@webassemblyjs/helper-numbers@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.11.1" @@ -2405,12 +2422,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== "@webassemblyjs/helper-wasm-section@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2420,26 +2437,26 @@ "@webassemblyjs/ieee754@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== "@webassemblyjs/wasm-edit@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2453,7 +2470,7 @@ "@webassemblyjs/wasm-gen@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2464,7 +2481,7 @@ "@webassemblyjs/wasm-opt@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2474,7 +2491,7 @@ "@webassemblyjs/wasm-parser@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2486,7 +2503,7 @@ "@webassemblyjs/wast-printer@1.11.1": version "1.11.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2494,22 +2511,22 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== abab@^2.0.3, abab@^2.0.5: version "2.0.6" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -2517,7 +2534,7 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: acorn-globals@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: acorn "^7.1.1" @@ -2525,51 +2542,42 @@ acorn-globals@^6.0.0: acorn-import-assertions@^1.7.6: version "1.8.0" - resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-node@^1.8.2: - version "1.8.2" - resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^7.0.0, acorn-walk@^7.1.1: +acorn-walk@^7.1.1: version "7.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.1.1: version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^7.0.0, acorn@^7.1.1: +acorn@^7.1.1: version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== address@^1.0.1, address@^1.1.2: version "1.2.2" - resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== adjust-sourcemap-loader@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== dependencies: loader-utils "^2.0.0" @@ -2577,33 +2585,33 @@ adjust-sourcemap-loader@^4.0.0: agent-base@6: version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -2611,9 +2619,9 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0: version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -2623,48 +2631,53 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-html-community@^0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -2672,46 +2685,54 @@ anymatch@^3.0.3, anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== arg@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^5.0.0, aria-query@^5.1.3: version "5.1.3" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: deep-equal "^2.0.5" +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-flatten@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" @@ -2722,12 +2743,12 @@ array-includes@^3.1.5, array-includes@^3.1.6: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flat@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" @@ -2737,7 +2758,7 @@ array.prototype.flat@^1.3.1: array.prototype.flatmap@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" @@ -2747,7 +2768,7 @@ array.prototype.flatmap@^1.3.1: array.prototype.reduce@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== dependencies: call-bind "^1.0.2" @@ -2758,7 +2779,7 @@ array.prototype.reduce@^1.0.5: array.prototype.tosorted@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== dependencies: call-bind "^1.0.2" @@ -2769,12 +2790,12 @@ array.prototype.tosorted@^1.1.1: asap@~2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== asn1.js@^5.2.0: version "5.4.1" - resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" @@ -2784,31 +2805,31 @@ asn1.js@^5.2.0: ast-types-flow@^0.0.7: version "0.0.7" - resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== async@^3.2.3: version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== autoprefixer@^10.4.12, autoprefixer@^10.4.13: - version "10.4.13" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" fraction.js "^4.2.0" normalize-range "^0.1.2" picocolors "^1.0.0" @@ -2816,18 +2837,18 @@ autoprefixer@^10.4.12, autoprefixer@^10.4.13: available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axe-core@^4.6.2: version "4.6.3" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== axios@^1.3.4: - version "1.3.4" - resolved "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz" - integrity sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ== + version "1.3.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.5.tgz#e07209b39a0d11848e3e341fa087acd71dadc542" + integrity sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -2835,14 +2856,14 @@ axios@^1.3.4: axobject-query@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== dependencies: deep-equal "^2.0.5" babel-jest@^27.4.2, babel-jest@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== dependencies: "@jest/transform" "^27.5.1" @@ -2856,7 +2877,7 @@ babel-jest@^27.4.2, babel-jest@^27.5.1: babel-loader@^8.2.3: version "8.3.0" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== dependencies: find-cache-dir "^3.3.1" @@ -2866,7 +2887,7 @@ babel-loader@^8.2.3: babel-plugin-istanbul@^6.1.1: version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -2877,7 +2898,7 @@ babel-plugin-istanbul@^6.1.1: babel-plugin-jest-hoist@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== dependencies: "@babel/template" "^7.3.3" @@ -2887,7 +2908,7 @@ babel-plugin-jest-hoist@^27.5.1: babel-plugin-macros@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== dependencies: "@babel/runtime" "^7.12.5" @@ -2896,12 +2917,12 @@ babel-plugin-macros@^3.1.0: babel-plugin-named-asset-import@^0.3.8: version "0.3.8" - resolved "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: "@babel/compat-data" "^7.17.7" @@ -2910,7 +2931,7 @@ babel-plugin-polyfill-corejs2@^0.3.3: babel-plugin-polyfill-corejs3@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" @@ -2918,35 +2939,35 @@ babel-plugin-polyfill-corejs3@^0.6.0: babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" "babel-plugin-styled-components@>= 1.12.0": - version "2.0.7" - resolved "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz" - integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.1.tgz#cd977cc0ff8410d5cbfdd142e42576e9c8794b87" + integrity sha512-c8lJlszObVQPguHkI+akXv8+Jgb9Ccujx0EetL7oIvwU100LxO6XAGe45qry37wUL40a5U9f23SYrivro2XKhA== dependencies: "@babel/helper-annotate-as-pure" "^7.16.0" "@babel/helper-module-imports" "^7.16.0" babel-plugin-syntax-jsx "^6.18.0" - lodash "^4.17.11" + lodash "^4.17.21" picomatch "^2.3.0" babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" - resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== babel-preset-current-node-syntax@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -2964,7 +2985,7 @@ babel-preset-current-node-syntax@^1.0.0: babel-preset-jest@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: babel-plugin-jest-hoist "^27.5.1" @@ -2972,7 +2993,7 @@ babel-preset-jest@^27.5.1: babel-preset-react-app@^10.0.1: version "10.0.1" - resolved "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584" integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg== dependencies: "@babel/core" "^7.16.0" @@ -2994,22 +3015,22 @@ babel-preset-react-app@^10.0.1: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== batch@0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== bfj@^7.0.2: version "7.0.2" - resolved "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== dependencies: bluebird "^3.5.5" @@ -3019,37 +3040,37 @@ bfj@^7.0.2: big-integer@^1.6.16: version "1.6.51" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== big.js@^5.2.2: version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bluebird@^3.5.5: version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== bn.js@^5.0.0, bn.js@^5.1.1: version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== body-parser@1.20.1: version "1.20.1" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" @@ -3066,9 +3087,9 @@ body-parser@1.20.1: unpipe "1.0.0" bonjour-service@^1.0.11: - version "1.1.0" - resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz" - integrity sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q== + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== dependencies: array-flatten "^2.1.2" dns-equal "^1.0.0" @@ -3077,12 +3098,12 @@ bonjour-service@^1.0.11: boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -3090,21 +3111,21 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" broadcast-channel@^3.4.1: version "3.7.0" - resolved "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz" + resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== dependencies: "@babel/runtime" "^7.7.2" @@ -3118,17 +3139,17 @@ broadcast-channel@^3.4.1: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-process-hrtime@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" @@ -3140,7 +3161,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" @@ -3149,7 +3170,7 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" @@ -3159,7 +3180,7 @@ browserify-des@^1.0.0: browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: bn.js "^5.0.0" @@ -3167,7 +3188,7 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: browserify-sign@^4.0.0: version "4.2.1" - resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== dependencies: bn.js "^5.1.1" @@ -3182,7 +3203,7 @@ browserify-sign@^4.0.0: browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: version "4.21.5" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: caniuse-lite "^1.0.30001449" @@ -3192,29 +3213,29 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4 bser@2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-equal-constant-time@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-xor@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -3222,22 +3243,22 @@ buffer@^6.0.3: builtin-modules@^3.1.0: version "3.3.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== bytes@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -3245,12 +3266,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -3258,27 +3279,27 @@ camel-case@^4.1.2: camelcase-css@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0, camelcase@^6.2.1: version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== camelize@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-api@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== dependencies: browserslist "^4.0.0" @@ -3286,19 +3307,19 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449: - version "1.0.30001460" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001460.tgz" - integrity sha512-Bud7abqjvEjipUkpLs4D7gR0l8hBYBHoa+tGtKJHvT2AYzLp1z7EmVkUT4ERpVUfca8S2HGIVs883D8pUH1ZzQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001478" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" + integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" - resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -3307,7 +3328,7 @@ chalk@^2.0.0, chalk@^2.4.1: chalk@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: ansi-styles "^4.1.0" @@ -3315,7 +3336,7 @@ chalk@^3.0.0: chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -3323,22 +3344,22 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: char-regex@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== char-regex@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== check-types@^11.1.1: version "11.2.2" - resolved "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4" integrity sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA== chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -3353,17 +3374,17 @@ chokidar@^3.4.2, chokidar@^3.5.3: chrome-trace-event@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^3.2.0: version "3.8.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" @@ -3371,19 +3392,19 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: cjs-module-lexer@^1.0.0: version "1.2.2" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== clean-css@^5.2.2: version "5.3.2" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== dependencies: source-map "~0.6.0" cliui@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -3392,7 +3413,7 @@ cliui@^7.0.2: clone-deep@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -3401,17 +3422,17 @@ clone-deep@^4.0.1: clsx@^1.1.1: version "1.2.1" - resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== co@^4.6.0: version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== coa@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== dependencies: "@types/q" "^1.5.1" @@ -3420,90 +3441,95 @@ coa@^2.0.2: collect-v8-coverage@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.1: version "2.9.3" - resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@^2.0.10: version "2.0.19" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.20.0: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@^7.2.0: version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== commander@^8.3.0: version "8.3.0" - resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== common-path-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== common-tags@^1.8.0: version "1.8.2" - resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compressible@~2.0.16: version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -3516,71 +3542,71 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== confusing-browser-globals@^1.0.11: version "1.0.11" - resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== connect-history-api-fallback@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== core-js-compat@^3.25.1: - version "3.29.0" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.0.tgz" - integrity sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ== + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe" + integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw== dependencies: browserslist "^4.21.5" core-js-pure@^3.23.3: - version "3.29.0" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.0.tgz" - integrity sha512-v94gUjN5UTe1n0yN/opTihJ8QBWD2O8i19RfTZR7foONPWArnjB96QA/wk5ozu1mm6ja3udQCzOzwQXTxi3xOQ== + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.1.tgz#7d93dc89e7d47b8ef05d7e79f507b0e99ea77eec" + integrity sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg== core-js@^3.19.2: - version "3.29.0" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz" - integrity sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg== + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.1.tgz#fc9c5adcc541d8e9fa3e381179433cbf795628ba" + integrity sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig-typescript-loader@^1.0.0: version "1.0.9" - resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz#69c523f7e8c3d9f27f563d02bbeadaf2f27212d3" integrity sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g== dependencies: cosmiconfig "^7" @@ -3588,7 +3614,7 @@ cosmiconfig-typescript-loader@^1.0.0: cosmiconfig@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== dependencies: "@types/parse-json" "^4.0.0" @@ -3599,7 +3625,7 @@ cosmiconfig@^6.0.0: cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: version "7.1.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" @@ -3610,7 +3636,7 @@ cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: create-ecdh@^4.0.0: version "4.0.4" - resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" @@ -3618,7 +3644,7 @@ create-ecdh@^4.0.0: create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" @@ -3629,7 +3655,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" @@ -3641,12 +3667,12 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -3655,7 +3681,7 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: crypto-browserify@^3.12.0: version "3.12.0" - resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" @@ -3672,36 +3698,36 @@ crypto-browserify@^3.12.0: crypto-random-string@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== css-blank-pseudo@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== dependencies: postcss-selector-parser "^6.0.9" css-color-keywords@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== css-declaration-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== css-has-pseudo@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== dependencies: postcss-selector-parser "^6.0.9" css-loader@^6.5.1: version "6.7.3" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== dependencies: icss-utils "^5.1.0" @@ -3715,7 +3741,7 @@ css-loader@^6.5.1: css-minimizer-webpack-plugin@^3.2.0: version "3.4.1" - resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== dependencies: cssnano "^5.0.6" @@ -3727,17 +3753,17 @@ css-minimizer-webpack-plugin@^3.2.0: css-prefers-color-scheme@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== css-select-base-adapter@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== css-select@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== dependencies: boolbase "^1.0.0" @@ -3747,7 +3773,7 @@ css-select@^2.0.0: css-select@^4.1.3: version "4.3.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -3758,7 +3784,7 @@ css-select@^4.1.3: css-to-react-native@^3.0.0: version "3.2.0" - resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== dependencies: camelize "^1.0.0" @@ -3767,7 +3793,7 @@ css-to-react-native@^3.0.0: css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== dependencies: mdn-data "2.0.4" @@ -3775,7 +3801,7 @@ css-tree@1.0.0-alpha.37: css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" @@ -3783,32 +3809,32 @@ css-tree@^1.1.2, css-tree@^1.1.3: css-what@^3.2.1: version "3.4.2" - resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== css-what@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== css.escape@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== cssdb@^7.1.0: - version "7.4.1" - resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.4.1.tgz" - integrity sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ== + version "7.5.4" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.5.4.tgz#e34dafee5184d67634604e345e389ca79ac179ea" + integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssnano-preset-default@^5.2.14: version "5.2.14" - resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== dependencies: css-declaration-sorter "^6.3.1" @@ -3843,12 +3869,12 @@ cssnano-preset-default@^5.2.14: cssnano-utils@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== cssnano@^5.0.6: version "5.1.15" - resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== dependencies: cssnano-preset-default "^5.2.14" @@ -3857,41 +3883,41 @@ cssnano@^5.0.6: csso@^4.0.2, csso@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" cssom@^0.4.4: version "0.4.4" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== cssom@~0.3.6: version "0.3.8" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== damerau-levenshtein@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== data-urls@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== dependencies: abab "^2.0.3" @@ -3900,38 +3926,38 @@ data-urls@^2.0.0: debug@2.6.9, debug@^2.6.0: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" decimal.js@^10.2.1: version "10.4.3" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== dedent@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-equal@^2.0.5: version "2.2.0" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== dependencies: call-bind "^1.0.2" @@ -3954,57 +3980,52 @@ deep-equal@^2.0.5: deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.3.0" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz" - integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-gateway@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: execa "^5.0.0" define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3, define-properties@^1.1.4: version "1.2.0" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -defined@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz" - integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== - delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== des.js@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" @@ -4012,59 +4033,50 @@ des.js@^1.0.0: destroy@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-newline@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4, detect-node@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== detect-port-alt@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== dependencies: address "^1.0.1" debug "^2.6.0" -detective@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz" - integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== - dependencies: - acorn-node "^1.8.2" - defined "^1.0.0" - minimist "^1.2.6" - didyoumean@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== diff-sequences@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== diff-sequences@^29.4.3: version "29.4.3" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diffie-hellman@^5.0.0: version "5.0.3" - resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" @@ -4073,57 +4085,57 @@ diffie-hellman@^5.0.0: dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dlv@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== dns-equal@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + version "5.5.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.5.0.tgz#f59cbf3396c130957c56a6ad5fd3959ccdc30065" + integrity sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.16" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== dom-converter@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" dom-serializer@0: version "0.2.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== dependencies: domelementtype "^2.0.1" @@ -4131,7 +4143,7 @@ dom-serializer@0: dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -4140,31 +4152,31 @@ dom-serializer@^1.0.1: domelementtype@1: version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domexception@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== dependencies: webidl-conversions "^5.0.0" domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domutils@^1.7.0: version "1.7.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== dependencies: dom-serializer "0" @@ -4172,7 +4184,7 @@ domutils@^1.7.0: domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -4181,7 +4193,7 @@ domutils@^2.5.2, domutils@^2.8.0: dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" @@ -4189,46 +4201,46 @@ dot-case@^3.0.4: dotenv-expand@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== dotenv@^10.0.0: version "10.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== duplexer@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== ecdsa-sig-formatter@1.0.11: version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.6: - version "3.1.8" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" electron-to-chromium@^1.4.284: - version "1.4.317" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.317.tgz" - integrity sha512-JhCRm9v30FMNzQSsjl4kXaygU+qHBD0Yh7mKxyjmF0V8VwYVB6qpBRX28GyAucrM9wDCpSUctT6FpMUQxbyKuA== + version "1.4.365" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.365.tgz#ccd9e352d4493aa288d87e6ea36f3edf350c045e" + integrity sha512-FRHZO+1tUNO4TOPXmlxetkoaIY8uwHzd1kKopK/Gx2SKn1L47wJXWD44wxP5CGRyyP98z/c8e1eBzJrgPeiBOg== elliptic@^6.5.3: version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: bn.js "^4.11.9" @@ -4241,37 +4253,37 @@ elliptic@^6.5.3: emittery@^0.10.2: version "0.10.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== emittery@^0.8.1: version "0.8.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== emojis-list@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== enhanced-resolve@^5.10.0: version "5.12.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== dependencies: graceful-fs "^4.2.4" @@ -4279,35 +4291,35 @@ enhanced-resolve@^5.10.0: entities@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: version "2.1.4" - resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: stackframe "^1.3.4" es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" available-typed-arrays "^1.0.5" call-bind "^1.0.2" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" @@ -4315,8 +4327,8 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" @@ -4324,11 +4336,12 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: is-string "^1.0.7" is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" string.prototype.trimend "^1.0.6" string.prototype.trimstart "^1.0.6" typed-array-length "^1.0.4" @@ -4337,12 +4350,12 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-get-iterator@^1.1.2: version "1.1.3" - resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== dependencies: call-bind "^1.0.2" @@ -4355,14 +4368,14 @@ es-get-iterator@^1.1.2: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== es-set-tostringtag@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: get-intrinsic "^1.1.3" @@ -4371,14 +4384,14 @@ es-set-tostringtag@^2.0.1: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -4387,32 +4400,32 @@ es-to-primitive@^1.2.1: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" @@ -4423,13 +4436,13 @@ escodegen@^2.0.0: source-map "~0.6.1" eslint-config-prettier@^8.6.0: - version "8.6.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz" - integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== eslint-config-react-app@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA== dependencies: "@babel/core" "^7.16.0" @@ -4449,7 +4462,7 @@ eslint-config-react-app@^7.0.1: eslint-import-resolver-node@^0.3.7: version "0.3.7" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" @@ -4457,15 +4470,15 @@ eslint-import-resolver-node@^0.3.7: resolve "^1.22.1" eslint-module-utils@^2.7.4: - version "2.7.4" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" eslint-plugin-flowtype@^8.0.3: version "8.0.3" - resolved "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== dependencies: lodash "^4.17.21" @@ -4473,7 +4486,7 @@ eslint-plugin-flowtype@^8.0.3: eslint-plugin-import@^2.25.3: version "2.27.5" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: array-includes "^3.1.6" @@ -4494,14 +4507,14 @@ eslint-plugin-import@^2.25.3: eslint-plugin-jest@^25.3.0: version "25.7.0" - resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== dependencies: "@typescript-eslint/experimental-utils" "^5.0.0" eslint-plugin-jsx-a11y@^6.5.1: version "6.7.1" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== dependencies: "@babel/runtime" "^7.20.7" @@ -4523,19 +4536,19 @@ eslint-plugin-jsx-a11y@^6.5.1: eslint-plugin-prettier@^4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" eslint-plugin-react-hooks@^4.3.0: version "4.6.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.27.1: version "7.32.2" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== dependencies: array-includes "^3.1.6" @@ -4555,48 +4568,41 @@ eslint-plugin-react@^7.27.1: string.prototype.matchall "^4.0.8" eslint-plugin-testing-library@^5.0.1: - version "5.10.2" - resolved "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.2.tgz" - integrity sha512-f1DmDWcz5SDM+IpCkEX0lbFqrrTs8HRsEElzDEqN/EBI0hpRj8Cns5+IVANXswE8/LeybIJqPAOQIFu2j5Y5sw== + version "5.10.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.3.tgz#e613fbaf9a145e9eef115d080b32cb488fae622e" + integrity sha512-0yhsKFsjHLud5PM+f2dWr9K3rqYzMy4cSHs3lcmFYMa1CdSzRvHGgXvsFarBjZ41gU8jhTdMIkg8jHLxGJqLqw== dependencies: - "@typescript-eslint/utils" "^5.43.0" + "@typescript-eslint/utils" "^5.58.0" eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== eslint-webpack-plugin@^3.1.1: version "3.2.0" - resolved "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== dependencies: "@types/eslint" "^7.29.0 || ^8.4.1" @@ -4606,12 +4612,14 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.3.0, eslint@^8.34.0: - version "8.35.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz" - integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== - dependencies: - "@eslint/eslintrc" "^2.0.0" - "@eslint/js" "8.35.0" + version "8.38.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" + integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.38.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -4622,9 +4630,8 @@ eslint@^8.3.0, eslint@^8.34.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -4646,77 +4653,76 @@ eslint@^8.3.0, eslint@^8.34.0: minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - regexpp "^3.2.0" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter3@^4.0.0: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" @@ -4724,7 +4730,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: execa@^5.0.0: version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -4739,12 +4745,12 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expect@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== dependencies: "@jest/types" "^27.5.1" @@ -4753,19 +4759,19 @@ expect@^27.5.1: jest-message-util "^27.5.1" expect@^29.0.0: - version "29.4.3" - resolved "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz" - integrity sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg== + version "29.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" + integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== dependencies: - "@jest/expect-utils" "^29.4.3" + "@jest/expect-utils" "^29.5.0" jest-get-type "^29.4.3" - jest-matcher-utils "^29.4.3" - jest-message-util "^29.4.3" - jest-util "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" express@^4.17.3: version "4.18.2" - resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" @@ -4802,17 +4808,17 @@ express@^4.17.3: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.2.12, fast-glob@^3.2.9: version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -4823,45 +4829,45 @@ fast-glob@^3.2.12, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" faye-websocket@^0.11.3: version "0.11.4" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" fb-watchman@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" file-loader@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== dependencies: loader-utils "^2.0.0" @@ -4869,26 +4875,26 @@ file-loader@^6.2.0: filelist@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" filesize@^8.0.6: version "8.0.7" - resolved "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -4901,7 +4907,7 @@ finalhandler@1.2.0: find-cache-dir@^3.3.1: version "3.3.2" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" @@ -4910,14 +4916,14 @@ find-cache-dir@^3.3.1: find-up@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -4925,7 +4931,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -4933,7 +4939,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -4941,25 +4947,25 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.0.0, follow-redirects@^1.15.0: version "1.15.2" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-each@^0.3.3: version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" fork-ts-checker-webpack-plugin@^6.5.0: - version "6.5.2" - resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz" - integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== + version "6.5.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" + integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" @@ -4977,7 +4983,7 @@ fork-ts-checker-webpack-plugin@^6.5.0: form-data@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" @@ -4986,7 +4992,7 @@ form-data@^3.0.0: form-data@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -4995,22 +5001,22 @@ form-data@^4.0.0: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fraction.js@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== fresh@0.5.2: version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -5019,7 +5025,7 @@ fs-extra@^10.0.0: fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -5029,12 +5035,12 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: fs-monkey@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2, fsevents@~2.3.2: @@ -5044,12 +5050,12 @@ fsevents@^2.3.2, fsevents@~2.3.2: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -5059,22 +5065,22 @@ function.prototype.name@^1.1.5: functions-have-names@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" @@ -5083,22 +5089,22 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -5106,26 +5112,38 @@ get-symbol-description@^1.0.0: glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -5137,14 +5155,14 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: global-modules@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== dependencies: global-prefix "^3.0.0" global-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: ini "^1.3.5" @@ -5153,26 +5171,26 @@ global-prefix@^3.0.0: globals@^11.1.0: version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: version "13.20.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" globby@^11.0.4, globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -5184,92 +5202,92 @@ globby@^11.0.4, globby@^11.1.0: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== gzip-size@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: duplexer "^0.1.2" hamt_plus@1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601" integrity sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA== handle-thing@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== harmony-reflect@^1.4.6: version "1.6.2" - resolved "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: inherits "^2.0.4" @@ -5278,7 +5296,7 @@ hash-base@^3.0.0: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" @@ -5286,12 +5304,12 @@ hash.js@^1.0.0, hash.js@^1.0.3: he@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" @@ -5300,19 +5318,19 @@ hmac-drbg@^1.0.1: hoist-non-react-statics@^3.0.0: version "3.3.2" - resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" hoopy@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== hpack.js@^2.1.6: version "2.1.6" - resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" @@ -5322,24 +5340,24 @@ hpack.js@^2.1.6: html-encoding-sniffer@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: whatwg-encoding "^1.0.5" html-entities@^2.1.0, html-entities@^2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-minifier-terser@^6.0.2: version "6.1.0" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: camel-case "^4.1.2" @@ -5351,9 +5369,9 @@ html-minifier-terser@^6.0.2: terser "^5.10.0" html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -5363,7 +5381,7 @@ html-webpack-plugin@^5.5.0: htmlparser2@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" @@ -5373,12 +5391,12 @@ htmlparser2@^6.1.0: http-deceiver@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -5389,7 +5407,7 @@ http-errors@2.0.0: http-errors@~1.6.2: version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" @@ -5399,12 +5417,12 @@ http-errors@~1.6.2: http-parser-js@>=0.5.1: version "0.5.8" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -5413,7 +5431,7 @@ http-proxy-agent@^4.0.1: http-proxy-middleware@^2.0.3: version "2.0.6" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== dependencies: "@types/http-proxy" "^1.17.8" @@ -5424,7 +5442,7 @@ http-proxy-middleware@^2.0.3: http-proxy@^1.18.1: version "1.18.1" - resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" @@ -5433,7 +5451,7 @@ http-proxy@^1.18.1: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -5441,63 +5459,63 @@ https-proxy-agent@^5.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== husky@^8.0.3: version "8.0.3" - resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== idb@^7.0.1: version "7.1.1" - resolved "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== identity-obj-proxy@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== dependencies: harmony-reflect "^1.4.6" ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immer@^9.0.7: - version "9.0.19" - resolved "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz" - integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -5505,7 +5523,7 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: import-local@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -5513,17 +5531,17 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -5531,22 +5549,22 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@^1.3.5: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.3, internal-slot@^1.0.4: +internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: get-intrinsic "^1.2.0" @@ -5555,25 +5573,25 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1: +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" @@ -5582,26 +5600,26 @@ is-array-buffer@^3.0.1: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -5609,114 +5627,114 @@ is-boolean-object@^1.1.0: is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-module@^2.9.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-generator-function@^1.0.7: version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: has-tostringtag "^1.0.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-module@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -5724,48 +5742,48 @@ is-regex@^1.1.4: is-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== is-root@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: version "1.1.10" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: available-typed-arrays "^1.0.5" @@ -5776,24 +5794,24 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: is-typedarray@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-weakmap@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-weakset@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== dependencies: call-bind "^1.0.2" @@ -5801,39 +5819,39 @@ is-weakset@^2.0.1: is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -5844,7 +5862,7 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -5853,7 +5871,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -5862,7 +5880,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.1.3: version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" @@ -5870,7 +5888,7 @@ istanbul-reports@^3.1.3: jake@^10.8.5: version "10.8.5" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== dependencies: async "^3.2.3" @@ -5880,12 +5898,12 @@ jake@^10.8.5: javascript-natural-sort@0.7.1: version "0.7.1" - resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== jest-changed-files@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== dependencies: "@jest/types" "^27.5.1" @@ -5894,7 +5912,7 @@ jest-changed-files@^27.5.1: jest-circus@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== dependencies: "@jest/environment" "^27.5.1" @@ -5919,7 +5937,7 @@ jest-circus@^27.5.1: jest-cli@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== dependencies: "@jest/core" "^27.5.1" @@ -5937,7 +5955,7 @@ jest-cli@^27.5.1: jest-config@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: "@babel/core" "^7.8.0" @@ -5967,7 +5985,7 @@ jest-config@^27.5.1: jest-diff@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== dependencies: chalk "^4.0.0" @@ -5975,26 +5993,26 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz" - integrity sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA== +jest-diff@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== dependencies: chalk "^4.0.0" diff-sequences "^29.4.3" jest-get-type "^29.4.3" - pretty-format "^29.4.3" + pretty-format "^29.5.0" jest-docblock@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: detect-newline "^3.0.0" jest-each@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: "@jest/types" "^27.5.1" @@ -6005,7 +6023,7 @@ jest-each@^27.5.1: jest-environment-jsdom@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== dependencies: "@jest/environment" "^27.5.1" @@ -6018,7 +6036,7 @@ jest-environment-jsdom@^27.5.1: jest-environment-node@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== dependencies: "@jest/environment" "^27.5.1" @@ -6030,17 +6048,17 @@ jest-environment-node@^27.5.1: jest-get-type@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== jest-get-type@^29.4.3: version "29.4.3" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== jest-haste-map@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== dependencies: "@jest/types" "^27.5.1" @@ -6060,7 +6078,7 @@ jest-haste-map@^27.5.1: jest-jasmine2@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== dependencies: "@jest/environment" "^27.5.1" @@ -6083,7 +6101,7 @@ jest-jasmine2@^27.5.1: jest-leak-detector@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== dependencies: jest-get-type "^27.5.1" @@ -6091,7 +6109,7 @@ jest-leak-detector@^27.5.1: jest-matcher-utils@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: chalk "^4.0.0" @@ -6099,19 +6117,19 @@ jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz" - integrity sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg== +jest-matcher-utils@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" + integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== dependencies: chalk "^4.0.0" - jest-diff "^29.4.3" + jest-diff "^29.5.0" jest-get-type "^29.4.3" - pretty-format "^29.4.3" + pretty-format "^29.5.0" jest-message-util@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== dependencies: "@babel/code-frame" "^7.12.13" @@ -6126,7 +6144,7 @@ jest-message-util@^27.5.1: jest-message-util@^28.1.3: version "28.1.3" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== dependencies: "@babel/code-frame" "^7.12.13" @@ -6139,24 +6157,24 @@ jest-message-util@^28.1.3: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz" - integrity sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw== +jest-message-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" + integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.4.3" + pretty-format "^29.5.0" slash "^3.0.0" stack-utils "^2.0.3" jest-mock@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== dependencies: "@jest/types" "^27.5.1" @@ -6164,22 +6182,22 @@ jest-mock@^27.5.1: jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== jest-regex-util@^28.0.0: version "28.0.2" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== jest-resolve-dependencies@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== dependencies: "@jest/types" "^27.5.1" @@ -6188,7 +6206,7 @@ jest-resolve-dependencies@^27.5.1: jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== dependencies: "@jest/types" "^27.5.1" @@ -6204,7 +6222,7 @@ jest-resolve@^27.4.2, jest-resolve@^27.5.1: jest-runner@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== dependencies: "@jest/console" "^27.5.1" @@ -6231,7 +6249,7 @@ jest-runner@^27.5.1: jest-runtime@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== dependencies: "@jest/environment" "^27.5.1" @@ -6259,7 +6277,7 @@ jest-runtime@^27.5.1: jest-serializer@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: "@types/node" "*" @@ -6267,7 +6285,7 @@ jest-serializer@^27.5.1: jest-snapshot@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: "@babel/core" "^7.7.2" @@ -6295,7 +6313,7 @@ jest-snapshot@^27.5.1: jest-util@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: "@jest/types" "^27.5.1" @@ -6307,7 +6325,7 @@ jest-util@^27.5.1: jest-util@^28.1.3: version "28.1.3" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== dependencies: "@jest/types" "^28.1.3" @@ -6317,12 +6335,12 @@ jest-util@^28.1.3: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz" - integrity sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q== +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -6331,7 +6349,7 @@ jest-util@^29.4.3: jest-validate@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== dependencies: "@jest/types" "^27.5.1" @@ -6343,7 +6361,7 @@ jest-validate@^27.5.1: jest-watch-typeahead@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== dependencies: ansi-escapes "^4.3.1" @@ -6356,7 +6374,7 @@ jest-watch-typeahead@^1.0.0: jest-watcher@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== dependencies: "@jest/test-result" "^27.5.1" @@ -6369,7 +6387,7 @@ jest-watcher@^27.5.1: jest-watcher@^28.0.0: version "28.1.3" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== dependencies: "@jest/test-result" "^28.1.3" @@ -6383,7 +6401,7 @@ jest-watcher@^28.0.0: jest-worker@^26.2.1: version "26.6.2" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" @@ -6392,7 +6410,7 @@ jest-worker@^26.2.1: jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -6401,7 +6419,7 @@ jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: jest-worker@^28.0.2: version "28.1.3" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== dependencies: "@types/node" "*" @@ -6410,31 +6428,36 @@ jest-worker@^28.0.2: jest@^27.4.3: version "27.5.1" - resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: "@jest/core" "^27.5.1" import-local "^3.0.2" jest-cli "^27.5.1" +jiti@^1.17.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== js-sha3@0.8.0: version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -6442,14 +6465,14 @@ js-yaml@^3.13.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsdom@^16.6.0: version "16.7.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== dependencies: abab "^2.0.5" @@ -6482,54 +6505,54 @@ jsdom@^16.6.0: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.1.2, json5@^2.2.0, json5@^2.2.2: version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -6538,12 +6561,12 @@ jsonfile@^6.0.1: jsonpointer@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== jsonwebtoken@^9.0.0: version "9.0.0" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== dependencies: jws "^3.2.2" @@ -6553,7 +6576,7 @@ jsonwebtoken@^9.0.0: "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: version "3.3.3" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: array-includes "^3.1.5" @@ -6561,7 +6584,7 @@ jsonwebtoken@^9.0.0: jwa@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== dependencies: buffer-equal-constant-time "1.0.1" @@ -6570,7 +6593,7 @@ jwa@^1.4.1: jws@^3.2.2: version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== dependencies: jwa "^1.4.1" @@ -6578,39 +6601,47 @@ jws@^3.2.2: kind-of@^6.0.2: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== klona@^2.0.4, klona@^2.0.5: version "2.0.6" - resolved "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== language-subtag-registry@~0.3.2: version "0.3.22" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@=1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: language-subtag-registry "~0.3.2" +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + leven@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -6618,7 +6649,7 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" @@ -6626,22 +6657,22 @@ levn@~0.3.0: lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6: version "2.1.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== loader-runner@^4.2.0: version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^2.0.0, loader-utils@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" @@ -6650,12 +6681,12 @@ loader-utils@^2.0.0, loader-utils@^2.0.4: loader-utils@^3.2.0: version "3.2.1" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" @@ -6663,115 +6694,115 @@ locate-path@^3.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.memoize@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.sortby@^4.7.0: version "4.7.0" - resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== lodash.throttle@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz" - integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.9" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== dependencies: sourcemap-codec "^1.4.8" make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== makeerror@1.0.12: version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" match-sorter@^6.0.2: version "6.3.1" - resolved "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== dependencies: "@babel/runtime" "^7.12.5" @@ -6779,7 +6810,7 @@ match-sorter@^6.0.2: md5.js@^1.3.4: version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" @@ -6788,49 +6819,49 @@ md5.js@^1.3.4: mdn-data@2.0.14: version "2.0.14" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== mdn-data@2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.1.2, memfs@^3.4.3: - version "3.4.13" - resolved "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz" - integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== + version "3.5.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.0.tgz#9da86405fca0a539addafd37dbd452344fd1c0bd" + integrity sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA== dependencies: fs-monkey "^1.0.3" merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -6838,12 +6869,12 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: microseconds@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== miller-rabin@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" @@ -6851,132 +6882,141 @@ miller-rabin@^4.0.0: mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.4.5: - version "2.7.2" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz" - integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== + version "2.7.5" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" + integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ== dependencies: schema-utils "^4.0.0" minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp@~0.5.1: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multicast-dns@^7.2.5: version "7.2.5" - resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: dns-packet "^5.2.2" thunky "^1.0.2" +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nano-time@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA== dependencies: big-integer "^1.6.16" nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" @@ -6984,78 +7024,78 @@ no-case@^3.0.4: node-forge@^1: version "1.3.1" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.8: version "2.0.10" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" nth-check@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== dependencies: boolbase "~1.0.0" nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" nwsapi@^2.2.0: - version "2.2.2" - resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz" - integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== + version "2.2.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" + integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g== -object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-hash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-is@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: call-bind "^1.0.2" @@ -7063,12 +7103,12 @@ object-is@^1.1.5: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -7078,7 +7118,7 @@ object.assign@^4.1.3, object.assign@^4.1.4: object.entries@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" @@ -7087,7 +7127,7 @@ object.entries@^1.1.6: object.fromentries@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" @@ -7096,7 +7136,7 @@ object.fromentries@^2.0.6: object.getownpropertydescriptors@^2.1.0: version "2.1.5" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== dependencies: array.prototype.reduce "^1.0.5" @@ -7106,7 +7146,7 @@ object.getownpropertydescriptors@^2.1.0: object.hasown@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: define-properties "^1.1.4" @@ -7114,7 +7154,7 @@ object.hasown@^1.1.2: object.values@^1.1.0, object.values@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -7123,43 +7163,43 @@ object.values@^1.1.0, object.values@^1.1.6: oblivious-set@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@^8.0.9, open@^8.4.0: version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" @@ -7168,7 +7208,7 @@ open@^8.0.9, open@^8.4.0: optionator@^0.8.1: version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -7180,7 +7220,7 @@ optionator@^0.8.1: optionator@^0.9.1: version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -7192,42 +7232,42 @@ optionator@^0.9.1: p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-retry@^4.5.0: version "4.6.2" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" @@ -7235,12 +7275,12 @@ p-retry@^4.5.0: p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== param-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -7248,14 +7288,14 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" - resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: asn1.js "^5.2.0" @@ -7266,7 +7306,7 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -7276,17 +7316,17 @@ parse-json@^5.0.0, parse-json@^5.2.0: parse5@6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -7294,42 +7334,42 @@ pascal-case@^3.1.2: path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" @@ -7340,63 +7380,63 @@ pbkdf2@^3.0.3: performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== -pirates@^4.0.4: +pirates@^4.0.1, pirates@^4.0.4: version "4.0.5" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pkg-up@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== dependencies: find-up "^3.0.0" postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== dependencies: postcss-selector-parser "^6.0.10" postcss-browser-comments@^4: version "4.0.0" - resolved "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a" integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== postcss-calc@^8.2.3: version "8.2.4" - resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== dependencies: postcss-selector-parser "^6.0.9" @@ -7404,35 +7444,35 @@ postcss-calc@^8.2.3: postcss-clamp@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== dependencies: postcss-value-parser "^4.2.0" postcss-color-functional-notation@^4.2.4: version "4.2.4" - resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== dependencies: postcss-value-parser "^4.2.0" postcss-color-hex-alpha@^8.0.4: version "8.0.4" - resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== dependencies: postcss-value-parser "^4.2.0" postcss-color-rebeccapurple@^7.1.1: version "7.1.1" - resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== dependencies: postcss-value-parser "^4.2.0" postcss-colormin@^5.3.1: version "5.3.1" - resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== dependencies: browserslist "^4.21.4" @@ -7442,7 +7482,7 @@ postcss-colormin@^5.3.1: postcss-convert-values@^5.1.3: version "5.1.3" - resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== dependencies: browserslist "^4.21.4" @@ -7450,55 +7490,55 @@ postcss-convert-values@^5.1.3: postcss-custom-media@^8.0.2: version "8.0.2" - resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== dependencies: postcss-value-parser "^4.2.0" postcss-custom-properties@^12.1.10: version "12.1.11" - resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== dependencies: postcss-value-parser "^4.2.0" postcss-custom-selectors@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== dependencies: postcss-selector-parser "^6.0.4" postcss-dir-pseudo-class@^6.0.5: version "6.0.5" - resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== dependencies: postcss-selector-parser "^6.0.10" postcss-discard-comments@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== postcss-discard-duplicates@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== postcss-discard-empty@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== postcss-discard-overridden@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== postcss-double-position-gradients@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -7506,50 +7546,50 @@ postcss-double-position-gradients@^3.1.2: postcss-env-function@^4.0.6: version "4.0.6" - resolved "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== dependencies: postcss-value-parser "^4.2.0" postcss-flexbugs-fixes@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== postcss-focus-visible@^6.0.4: version "6.0.4" - resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== dependencies: postcss-selector-parser "^6.0.9" postcss-focus-within@^5.0.4: version "5.0.4" - resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== dependencies: postcss-selector-parser "^6.0.9" postcss-font-variant@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== postcss-gap-properties@^3.0.5: version "3.0.5" - resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== postcss-image-set-function@^4.0.7: version "4.0.7" - resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== dependencies: postcss-value-parser "^4.2.0" postcss-import@^14.1.0: version "14.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== dependencies: postcss-value-parser "^4.0.0" @@ -7558,19 +7598,19 @@ postcss-import@^14.1.0: postcss-initial@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== postcss-js@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== dependencies: camelcase-css "^2.0.1" postcss-lab-function@^4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -7578,7 +7618,7 @@ postcss-lab-function@^4.2.1: postcss-load-config@^3.1.4: version "3.1.4" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== dependencies: lilconfig "^2.0.5" @@ -7586,7 +7626,7 @@ postcss-load-config@^3.1.4: postcss-loader@^6.2.1: version "6.2.1" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== dependencies: cosmiconfig "^7.0.0" @@ -7595,17 +7635,17 @@ postcss-loader@^6.2.1: postcss-logical@^5.0.4: version "5.0.4" - resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== postcss-media-minmax@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== postcss-merge-longhand@^5.1.7: version "5.1.7" - resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== dependencies: postcss-value-parser "^4.2.0" @@ -7613,7 +7653,7 @@ postcss-merge-longhand@^5.1.7: postcss-merge-rules@^5.1.4: version "5.1.4" - resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== dependencies: browserslist "^4.21.4" @@ -7623,14 +7663,14 @@ postcss-merge-rules@^5.1.4: postcss-minify-font-values@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== dependencies: postcss-value-parser "^4.2.0" postcss-minify-gradients@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== dependencies: colord "^2.9.1" @@ -7639,7 +7679,7 @@ postcss-minify-gradients@^5.1.1: postcss-minify-params@^5.1.4: version "5.1.4" - resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== dependencies: browserslist "^4.21.4" @@ -7648,19 +7688,19 @@ postcss-minify-params@^5.1.4: postcss-minify-selectors@^5.2.1: version "5.2.1" - resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== dependencies: postcss-selector-parser "^6.0.5" postcss-modules-extract-imports@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== postcss-modules-local-by-default@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== dependencies: icss-utils "^5.0.0" @@ -7669,28 +7709,28 @@ postcss-modules-local-by-default@^4.0.0: postcss-modules-scope@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: postcss-selector-parser "^6.0.4" postcss-modules-values@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" postcss-nested@6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== dependencies: postcss-selector-parser "^6.0.10" postcss-nesting@^10.2.0: version "10.2.0" - resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== dependencies: "@csstools/selector-specificity" "^2.0.0" @@ -7698,47 +7738,47 @@ postcss-nesting@^10.2.0: postcss-normalize-charset@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== postcss-normalize-display-values@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-positions@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-repeat-style@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-string@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-timing-functions@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-unicode@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== dependencies: browserslist "^4.21.4" @@ -7746,7 +7786,7 @@ postcss-normalize-unicode@^5.1.1: postcss-normalize-url@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: normalize-url "^6.0.1" @@ -7754,14 +7794,14 @@ postcss-normalize-url@^5.1.0: postcss-normalize-whitespace@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== dependencies: postcss-value-parser "^4.2.0" postcss-normalize@^10.0.1: version "10.0.1" - resolved "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7" integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== dependencies: "@csstools/normalize.css" "*" @@ -7770,12 +7810,12 @@ postcss-normalize@^10.0.1: postcss-opacity-percentage@^1.1.2: version "1.1.3" - resolved "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6" integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== postcss-ordered-values@^5.1.3: version "5.1.3" - resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== dependencies: cssnano-utils "^3.1.0" @@ -7783,26 +7823,26 @@ postcss-ordered-values@^5.1.3: postcss-overflow-shorthand@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== dependencies: postcss-value-parser "^4.2.0" postcss-page-break@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== postcss-place@^7.0.5: version "7.0.5" - resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== dependencies: postcss-value-parser "^4.2.0" postcss-preset-env@^7.0.1: version "7.8.3" - resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== dependencies: "@csstools/postcss-cascade-layers" "^1.1.1" @@ -7857,14 +7897,14 @@ postcss-preset-env@^7.0.1: postcss-pseudo-class-any-link@^7.1.6: version "7.1.6" - resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== dependencies: postcss-selector-parser "^6.0.10" postcss-reduce-initial@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== dependencies: browserslist "^4.21.4" @@ -7872,26 +7912,26 @@ postcss-reduce-initial@^5.1.2: postcss-reduce-transforms@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== dependencies: postcss-value-parser "^4.2.0" postcss-replace-overflow-wrap@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== postcss-selector-not@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== dependencies: postcss-selector-parser "^6.0.10" postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.11" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== dependencies: cssesc "^3.0.0" @@ -7899,7 +7939,7 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-select postcss-svgo@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== dependencies: postcss-value-parser "^4.2.0" @@ -7907,19 +7947,19 @@ postcss-svgo@^5.1.0: postcss-unique-selectors@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== dependencies: postcss-selector-parser "^6.0.5" postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^7.0.35: version "7.0.39" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== dependencies: picocolors "^0.2.1" @@ -7927,48 +7967,48 @@ postcss@^7.0.35: postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.4: version "8.4.21" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" -preact@^10.0.5: - version "10.13.0" - resolved "https://registry.npmjs.org/preact/-/preact-10.13.0.tgz" - integrity sha512-ERdIdUpR6doqdaSIh80hvzebHB7O6JxycOhyzAeLEchqOq/4yueslQbfnPwXaNhAYacFTyCclhwkEbOumT0tHw== +preact@~10.12.1: + version "10.12.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.12.1.tgz#8f9cb5442f560e532729b7d23d42fd1161354a21" + integrity sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg== prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@^2.8.4: - version "2.8.4" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz" - integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== + version "2.8.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" + integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" - resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== pretty-error@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" @@ -7976,7 +8016,7 @@ pretty-error@^4.0.0: pretty-format@^27.0.2, pretty-format@^27.5.1: version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: ansi-regex "^5.0.1" @@ -7985,7 +8025,7 @@ pretty-format@^27.0.2, pretty-format@^27.5.1: pretty-format@^28.1.3: version "28.1.3" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== dependencies: "@jest/schemas" "^28.1.3" @@ -7993,10 +8033,10 @@ pretty-format@^28.1.3: ansi-styles "^5.0.0" react-is "^18.0.0" -pretty-format@^29.0.0, pretty-format@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz" - integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== +pretty-format@^29.0.0, pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== dependencies: "@jest/schemas" "^29.4.3" ansi-styles "^5.0.0" @@ -8004,19 +8044,19 @@ pretty-format@^29.0.0, pretty-format@^29.4.3: process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise@^8.1.0: version "8.3.0" - resolved "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" prompts@^2.0.1, prompts@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -8024,7 +8064,7 @@ prompts@^2.0.1, prompts@^2.4.2: prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -8033,7 +8073,7 @@ prop-types@^15.7.2, prop-types@^15.8.1: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -8041,17 +8081,17 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== psl@^1.1.33: version "1.9.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" - resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" @@ -8063,53 +8103,53 @@ public-encrypt@^4.0.0: punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== q@^1.1.2: version "1.5.1" - resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== qs@6.11.0: version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== raf@^3.4.1: version "3.4.1" - resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== dependencies: performance-now "^2.1.0" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" @@ -8117,12 +8157,12 @@ randomfill@^1.0.3: range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.1: version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -8132,7 +8172,7 @@ raw-body@2.5.1: react-app-polyfill@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w== dependencies: core-js "^3.19.2" @@ -8144,12 +8184,12 @@ react-app-polyfill@^3.0.0: react-date-object@^2.1.5: version "2.1.7" - resolved "https://registry.npmjs.org/react-date-object/-/react-date-object-2.1.7.tgz" + resolved "https://registry.yarnpkg.com/react-date-object/-/react-date-object-2.1.7.tgz#a21fff40ef18344fee3616f40ee86169c1e83f5e" integrity sha512-810eaGk/xvQBJNncPvhwXaKcSwPRKX48jtY/5U5T1bSUnGFqmBdMvl4EVl76cyzQ8U3KX6hpF6xZ1c0eY9vvJA== react-dev-utils@^12.0.1: version "12.0.1" - resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== dependencies: "@babel/code-frame" "^7.16.0" @@ -8179,7 +8219,7 @@ react-dev-utils@^12.0.1: react-dom@^18.2.0: version "18.2.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" @@ -8187,42 +8227,47 @@ react-dom@^18.2.0: react-element-popper@^2.1.6: version "2.1.6" - resolved "https://registry.npmjs.org/react-element-popper/-/react-element-popper-2.1.6.tgz" + resolved "https://registry.yarnpkg.com/react-element-popper/-/react-element-popper-2.1.6.tgz#4afb912287d57de5d442fb85e76f4d7b94fde879" integrity sha512-8va7mUmrKIkUnaM2t5Dyctd8cjgVgVcrv5vVD0FRay0sN6EPBCKa0bDi1/KmVDAjfgSIn7zQnjtc4VojcGrkgQ== react-error-overlay@^6.0.11: version "6.0.11" - resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== react-ga4@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/react-ga4/-/react-ga4-2.1.0.tgz#56601f59d95c08466ebd6edfbf8dede55c4678f9" integrity sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ== react-ga@^3.3.1: version "3.3.1" - resolved "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.1.tgz#d8e1f4e05ec55ed6ff944dcb14b99011dfaf9504" integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== +react-icons@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.8.0.tgz#621e900caa23b912f737e41be57f27f6b2bff445" + integrity sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg== + react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^17.0.1: version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0: version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== react-multi-date-picker@^3.3.4: version "3.3.4" - resolved "https://registry.npmjs.org/react-multi-date-picker/-/react-multi-date-picker-3.3.4.tgz" + resolved "https://registry.yarnpkg.com/react-multi-date-picker/-/react-multi-date-picker-3.3.4.tgz#89248efa08c60230622f88f48822b0e6bb7f7da3" integrity sha512-bl1aTt3bmAYfsPpIUKsWVl3XWCfY3nxu7BFvLCR7j9iHckmiJNbkMBVGu5AvrcSa3mI39ybdHQuB3YzeM5O6Cg== dependencies: react-date-object "^2.1.5" @@ -8230,7 +8275,7 @@ react-multi-date-picker@^3.3.4: react-query@^3.39.3: version "3.39.3" - resolved "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz" + resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.3.tgz#4cea7127c6c26bdea2de5fb63e51044330b03f35" integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g== dependencies: "@babel/runtime" "^7.5.5" @@ -8239,27 +8284,27 @@ react-query@^3.39.3: react-refresh@^0.11.0: version "0.11.0" - resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== react-router-dom@^6.8.2: - version "6.8.2" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.2.tgz" - integrity sha512-N/oAF1Shd7g4tWy+75IIufCGsHBqT74tnzHQhbiUTYILYF0Blk65cg+HPZqwC+6SqEyx033nKqU7by38v3lBZg== + version "6.10.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.10.0.tgz#090ddc5c84dc41b583ce08468c4007c84245f61f" + integrity sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg== dependencies: - "@remix-run/router" "1.3.3" - react-router "6.8.2" + "@remix-run/router" "1.5.0" + react-router "6.10.0" -react-router@6.8.2: - version "6.8.2" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.8.2.tgz" - integrity sha512-lF7S0UmXI5Pd8bmHvMdPKI4u4S5McxmHnzJhrYi9ZQ6wE+DA8JN5BzVC5EEBuduWWDaiJ8u6YhVOCmThBli+rw== +react-router@6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.10.0.tgz#230f824fde9dd0270781b5cb497912de32c0a971" + integrity sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ== dependencies: - "@remix-run/router" "1.3.3" + "@remix-run/router" "1.5.0" react-scripts@5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== dependencies: "@babel/core" "^7.16.0" @@ -8314,7 +8359,7 @@ react-scripts@5.0.1: react-scroll@^1.8.9: version "1.8.9" - resolved "https://registry.npmjs.org/react-scroll/-/react-scroll-1.8.9.tgz" + resolved "https://registry.yarnpkg.com/react-scroll/-/react-scroll-1.8.9.tgz#96f8a82f882b187970c2338759225c7e619d915b" integrity sha512-9m7ztraiX/l6L7erzYAD3fhnveNckei6/NkWfqwN2e0FRdoE2W6Pk4oi2Nah7mWpPCPAeIgegfaqZACTimPOwg== dependencies: lodash.throttle "^4.1.1" @@ -8322,28 +8367,28 @@ react-scroll@^1.8.9: react-toastify@^9.1.1: version "9.1.2" - resolved "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.2.tgz" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.2.tgz#293aa1f952240129fe485ae5cb2f8d09c652cf3f" integrity sha512-PBfzXO5jMGEtdYR5jxrORlNZZe/EuOkwvwKijMatsZZm8IZwLj01YvobeJYNjFcA6uy6CVrx2fzL9GWbhWPTDA== dependencies: clsx "^1.1.1" react@^18.2.0: version "18.2.0" - resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" read-cache@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" readable-stream@^2.0.1: version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -8355,9 +8400,9 @@ readable-stream@^2.0.1: util-deprecate "~1.0.1" readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.1" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -8365,28 +8410,28 @@ readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" recoil@^0.7.7: version "0.7.7" - resolved "https://registry.npmjs.org/recoil/-/recoil-0.7.7.tgz" + resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.7.tgz#c5f2c843224384c9c09e4a62c060fb4c1454dc8e" integrity sha512-8Og5KPQW9LwC577Vc7Ug2P0vQshkv1y3zG3tSSkWMqkWSwHmE+by06L8JtnGocjW6gcCvfwB3YtrJG6/tWivNQ== dependencies: hamt_plus "1.0.2" recursive-readdir@^2.2.2: version "2.2.3" - resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== dependencies: minimatch "^3.0.5" redent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" @@ -8394,51 +8439,46 @@ redent@^3.0.0: regenerate-unicode-properties@^10.1.0: version "10.1.0" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9: version "0.13.11" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-transform@^0.15.1: version "0.15.1" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" regex-parser@^2.2.11: version "2.2.11" - resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== regexp.prototype.flags@^1.4.3: version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - regexpu-core@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz" - integrity sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" @@ -8449,24 +8489,24 @@ regexpu-core@^5.3.1: regjsparser@^0.9.1: version "0.9.1" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remove-accents@0.4.2: version "0.4.2" - resolved "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== renderkid@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== dependencies: css-select "^4.1.3" @@ -8477,39 +8517,39 @@ renderkid@^3.0.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-url-loader@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== dependencies: adjust-sourcemap-loader "^4.0.0" @@ -8520,21 +8560,21 @@ resolve-url-loader@^4.0.0: resolve.exports@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.12.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.4: version "2.0.0-next.4" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: is-core-module "^2.9.0" @@ -8543,24 +8583,24 @@ resolve@^2.0.0-next.4: retry@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" @@ -8568,7 +8608,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: rollup-plugin-terser@^7.0.0: version "7.0.2" - resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== dependencies: "@babel/code-frame" "^7.10.4" @@ -8578,31 +8618,31 @@ rollup-plugin-terser@^7.0.0: rollup@^2.43.1: version "2.79.1" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== optionalDependencies: fsevents "~2.3.2" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -8611,17 +8651,17 @@ safe-regex-test@^1.0.0: "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize.css@*: version "13.0.0" - resolved "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== sass-loader@^12.3.0: version "12.6.0" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== dependencies: klona "^2.0.4" @@ -8629,26 +8669,26 @@ sass-loader@^12.3.0: sax@~1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: xmlchars "^2.2.0" scheduler@^0.23.0: version "0.23.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" schema-utils@2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== dependencies: "@types/json-schema" "^7.0.4" @@ -8657,7 +8697,7 @@ schema-utils@2.7.0: schema-utils@^2.6.5: version "2.7.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: "@types/json-schema" "^7.0.5" @@ -8665,51 +8705,51 @@ schema-utils@^2.6.5: ajv-keywords "^3.5.2" schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d" + integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ== dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.8.0" + ajv "^8.9.0" ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" + ajv-keywords "^5.1.0" select-hose@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== dependencies: node-forge "^1" semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + version "7.4.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== dependencies: lru-cache "^6.0.0" send@0.18.0: version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -8728,21 +8768,21 @@ send@0.18.0: serialize-javascript@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== dependencies: randombytes "^2.1.0" -serialize-javascript@^6.0.0: +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" @@ -8755,7 +8795,7 @@ serve-index@^1.9.1: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -8765,17 +8805,17 @@ serve-static@1.15.0: setprototypeof@1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" @@ -8783,36 +8823,36 @@ sha.js@^2.4.0, sha.js@^2.4.8: shallow-clone@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shallowequal@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: - version "1.8.0" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -8821,27 +8861,27 @@ side-channel@^1.0.4: signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== sockjs@^0.3.24: version "0.3.24" - resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" @@ -8850,17 +8890,17 @@ sockjs@^0.3.24: source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-loader@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.2.tgz#af23192f9b344daa729f6772933194cc5fa54fee" integrity sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg== dependencies: abab "^2.0.5" @@ -8869,7 +8909,7 @@ source-map-loader@^3.0.0: source-map-support@^0.5.6, source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -8877,34 +8917,34 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.5.0: version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.7.3: version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== source-map@^0.8.0-beta.0: version "0.8.0-beta.0" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== dependencies: whatwg-url "^7.0.0" sourcemap-codec@^1.4.8: version "1.4.8" - resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdy-transport@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" @@ -8916,7 +8956,7 @@ spdy-transport@^3.0.0: spdy@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" @@ -8927,46 +8967,46 @@ spdy@^4.0.2: sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stable@^0.1.8: version "0.1.8" - resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-utils@^2.0.3: version "2.0.6" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" stackframe@^1.3.4: version "1.3.4" - resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== "statuses@>= 1.4.0 < 2": version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== stop-iteration-iterator@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== dependencies: internal-slot "^1.0.4" stream-browserify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== dependencies: inherits "~2.0.4" @@ -8974,7 +9014,7 @@ stream-browserify@^3.0.0: string-length@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" @@ -8982,7 +9022,7 @@ string-length@^4.0.1: string-length@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== dependencies: char-regex "^2.0.0" @@ -8990,12 +9030,12 @@ string-length@^5.0.1: string-natural-compare@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -9004,7 +9044,7 @@ string-width@^4.1.0, string-width@^4.2.0: string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" @@ -9016,9 +9056,18 @@ string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimend@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" @@ -9027,7 +9076,7 @@ string.prototype.trimend@^1.0.6: string.prototype.trimstart@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" @@ -9036,21 +9085,21 @@ string.prototype.trimstart@^1.0.6: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" stringify-object@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: get-own-enumerable-property-symbols "^3.0.0" @@ -9059,59 +9108,59 @@ stringify-object@^3.3.0: strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-comments@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== style-loader@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz" - integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== + version "3.3.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.2.tgz#eaebca714d9e462c19aa1e3599057bc363924899" + integrity sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw== styled-components@^5.3.8: - version "5.3.8" - resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.8.tgz" - integrity sha512-6jQrlvaJQ16uWVVO0rBfApaTPItkqaG32l3746enNZzpMDxMvzmHzj8rHUg39bvVtom0Y8o8ZzWuchEXKGjVsg== + version "5.3.9" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.9.tgz#641af2a8bb89904de708c71b439caa9633e8f0ba" + integrity sha512-Aj3kb13B75DQBo2oRwRa/APdB5rSmwUfN5exyarpX+x/tlM/rwZA2vVk2vQgVSP6WKaZJHWwiFrzgHt+CLtB4A== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/traverse" "^7.4.5" @@ -9126,36 +9175,49 @@ styled-components@^5.3.8: stylehacks@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== dependencies: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" +sucrase@^3.29.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7" + integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" @@ -9163,17 +9225,17 @@ supports-hyperlinks@^2.0.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-parser@^2.0.2: version "2.0.4" - resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== svgo@^1.2.2: version "1.3.2" - resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== dependencies: chalk "^2.4.1" @@ -9192,7 +9254,7 @@ svgo@^1.2.2: svgo@^2.7.0: version "2.8.0" - resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== dependencies: "@trysound/sax" "0.2.0" @@ -9205,23 +9267,23 @@ svgo@^2.7.0: symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tailwindcss@^3.0.2: - version "3.2.7" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz" - integrity sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.1.tgz#b6662fab6a9b704779e48d083a9fef5a81d2b81e" + integrity sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g== dependencies: arg "^5.0.2" chokidar "^3.5.3" color-name "^1.1.4" - detective "^5.2.1" didyoumean "^1.2.2" dlv "^1.1.3" fast-glob "^3.2.12" glob-parent "^6.0.2" is-glob "^4.0.3" + jiti "^1.17.2" lilconfig "^2.0.6" micromatch "^4.0.5" normalize-path "^3.0.0" @@ -9236,25 +9298,26 @@ tailwindcss@^3.0.2: postcss-value-parser "^4.2.0" quick-lru "^5.1.1" resolve "^1.22.1" + sucrase "^3.29.0" tapable@^1.0.0: version "1.1.3" - resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== temp-dir@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== tempy@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== dependencies: is-stream "^2.0.0" @@ -9264,27 +9327,27 @@ tempy@^0.6.0: terminal-link@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5: - version "5.3.6" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== +terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7: + version "5.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" + integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.17" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" + serialize-javascript "^6.0.1" + terser "^5.16.5" -terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: - version "5.16.5" - resolved "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz" - integrity sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg== +terser@^5.0.0, terser@^5.10.0, terser@^5.16.5: + version "5.16.9" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.9.tgz#7a28cb178e330c484369886f2afd623d9847495f" + integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -9293,7 +9356,7 @@ terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -9302,44 +9365,58 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + throat@^6.0.1: version "6.0.2" - resolved "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== thunky@^1.0.2: version "1.1.0" - resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== tmpl@1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.0.0: version "4.1.2" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: psl "^1.1.33" @@ -9349,26 +9426,31 @@ tough-cookie@^4.0.0: tr46@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== dependencies: punycode "^2.1.0" tr46@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== dependencies: punycode "^2.1.1" tryer@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + ts-node@^10.7.0: version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -9387,7 +9469,7 @@ ts-node@^10.7.0: tsconfig-paths@^3.14.1: version "3.14.2" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" @@ -9397,58 +9479,58 @@ tsconfig-paths@^3.14.1: tslib@^1.8.1: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3: version "2.5.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" type-detect@4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.16.0: version "0.16.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-is@~1.6.18: version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -9456,7 +9538,7 @@ type-is@~1.6.18: typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -9465,14 +9547,14 @@ typed-array-length@^1.0.4: typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -9482,12 +9564,12 @@ unbox-primitive@^1.0.2: unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" @@ -9495,34 +9577,34 @@ unicode-match-property-ecmascript@^2.0.0: unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unique-string@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: crypto-random-string "^2.0.0" universalify@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unload@2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== dependencies: "@babel/runtime" "^7.6.2" @@ -9530,37 +9612,37 @@ unload@2.2.0: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unquote@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== upath@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -9568,17 +9650,17 @@ url-parse@^1.5.3: use-sync-external-store@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@~1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== dependencies: define-properties "^1.1.3" @@ -9588,7 +9670,7 @@ util.promisify@~1.0.0: util@^0.12.5: version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -9599,27 +9681,27 @@ util@^0.12.5: utila@~0.4: version "0.4.0" - resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^8.3.2: version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-to-istanbul@^8.1.0: version "8.1.1" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" @@ -9628,33 +9710,33 @@ v8-to-istanbul@^8.1.0: vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== w3c-hr-time@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" w3c-xmlserializer@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== dependencies: xml-name-validator "^3.0.0" walker@^1.0.7: version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" watchpack@^2.4.0: version "2.4.0" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" @@ -9662,34 +9744,34 @@ watchpack@^2.4.0: wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" - resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" web-vitals@^2.1.0: version "2.1.4" - resolved "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c" integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg== webidl-conversions@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webidl-conversions@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== webidl-conversions@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== webpack-dev-middleware@^5.3.1: version "5.3.3" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== dependencies: colorette "^2.0.10" @@ -9699,9 +9781,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.6.0: - version "4.11.1" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== + version "4.13.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz#9feb740b8b56b886260bae1360286818a221bae8" + integrity sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -9722,6 +9804,7 @@ webpack-dev-server@^4.6.0: html-entities "^2.3.2" http-proxy-middleware "^2.0.3" ipaddr.js "^2.0.1" + launch-editor "^2.6.0" open "^8.0.9" p-retry "^4.5.0" rimraf "^3.0.2" @@ -9731,11 +9814,11 @@ webpack-dev-server@^4.6.0: sockjs "^0.3.24" spdy "^4.0.2" webpack-dev-middleware "^5.3.1" - ws "^8.4.2" + ws "^8.13.0" webpack-manifest-plugin@^4.0.2: version "4.1.1" - resolved "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f" integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== dependencies: tapable "^2.0.0" @@ -9743,7 +9826,7 @@ webpack-manifest-plugin@^4.0.2: webpack-merge@^5.8.0: version "5.8.0" - resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== dependencies: clone-deep "^4.0.1" @@ -9751,7 +9834,7 @@ webpack-merge@^5.8.0: webpack-sources@^1.4.3: version "1.4.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" @@ -9759,7 +9842,7 @@ webpack-sources@^1.4.3: webpack-sources@^2.2.0: version "2.3.1" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== dependencies: source-list-map "^2.0.1" @@ -9767,16 +9850,16 @@ webpack-sources@^2.2.0: webpack-sources@^3.2.3: version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.64.4: - version "5.75.0" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz" - integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== + version "5.79.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.79.0.tgz#8552b5da5a26e4e25842c08a883e08fc7740547a" + integrity sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" + "@types/estree" "^1.0.0" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" @@ -9785,7 +9868,7 @@ webpack@^5.64.4: browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -9796,13 +9879,13 @@ webpack@^5.64.4: neo-async "^2.6.2" schema-utils "^3.1.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" + terser-webpack-plugin "^5.3.7" watchpack "^2.4.0" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -9811,29 +9894,29 @@ websocket-driver@>=0.5.1, websocket-driver@^0.7.4: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-encoding@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" whatwg-fetch@^3.6.2: version "3.6.2" - resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== whatwg-mimetype@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" @@ -9842,7 +9925,7 @@ whatwg-url@^7.0.0: whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== dependencies: lodash "^4.7.0" @@ -9851,7 +9934,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -9862,7 +9945,7 @@ which-boxed-primitive@^1.0.2: which-collection@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== dependencies: is-map "^2.0.1" @@ -9872,7 +9955,7 @@ which-collection@^1.0.1: which-typed-array@^1.1.2, which-typed-array@^1.1.9: version "1.1.9" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== dependencies: available-typed-arrays "^1.0.5" @@ -9884,31 +9967,31 @@ which-typed-array@^1.1.2, which-typed-array@^1.1.9: which@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wildcard@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== workbox-background-sync@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== dependencies: idb "^7.0.1" @@ -9916,14 +9999,14 @@ workbox-background-sync@6.5.4: workbox-broadcast-update@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== dependencies: workbox-core "6.5.4" workbox-build@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== dependencies: "@apideck/better-ajv-errors" "^0.3.1" @@ -9966,19 +10049,19 @@ workbox-build@6.5.4: workbox-cacheable-response@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== dependencies: workbox-core "6.5.4" workbox-core@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== workbox-expiration@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== dependencies: idb "^7.0.1" @@ -9986,7 +10069,7 @@ workbox-expiration@6.5.4: workbox-google-analytics@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== dependencies: workbox-background-sync "6.5.4" @@ -9996,14 +10079,14 @@ workbox-google-analytics@6.5.4: workbox-navigation-preload@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== dependencies: workbox-core "6.5.4" workbox-precaching@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== dependencies: workbox-core "6.5.4" @@ -10012,14 +10095,14 @@ workbox-precaching@6.5.4: workbox-range-requests@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== dependencies: workbox-core "6.5.4" workbox-recipes@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== dependencies: workbox-cacheable-response "6.5.4" @@ -10031,21 +10114,21 @@ workbox-recipes@6.5.4: workbox-routing@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== dependencies: workbox-core "6.5.4" workbox-strategies@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== dependencies: workbox-core "6.5.4" workbox-streams@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== dependencies: workbox-core "6.5.4" @@ -10053,12 +10136,12 @@ workbox-streams@6.5.4: workbox-sw@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== workbox-webpack-plugin@^6.4.1: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7" integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg== dependencies: fast-json-stable-stringify "^2.1.0" @@ -10069,7 +10152,7 @@ workbox-webpack-plugin@^6.4.1: workbox-window@6.5.4: version "6.5.4" - resolved "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== dependencies: "@types/trusted-types" "^2.0.2" @@ -10077,7 +10160,7 @@ workbox-window@6.5.4: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -10086,12 +10169,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -10101,57 +10184,52 @@ write-file-atomic@^3.0.0: ws@^7.4.6: version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.4.2: - version "8.12.1" - resolved "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== xml-name-validator@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^16.2.0: version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -10164,10 +10242,10 @@ yargs@^16.2.0: yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 5bf4e15d2c8a05c9447f5cb2eea71762ad686d72 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 17 Apr 2023 00:38:36 +0900 Subject: [PATCH 53/72] =?UTF-8?q?refect=20:=20Todo=20Navi=20undefined=20is?= =?UTF-8?q?Loading=EC=9C=BC=EB=A1=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/global/Loading.jsx | 39 +++++++++++++++++++++ src/components/mainpage/Calendar.jsx | 4 +-- src/components/todo/Todo.jsx | 51 +++++++++++++++++++--------- src/components/todo/TodoNavi.jsx | 17 ++++------ 4 files changed, 82 insertions(+), 29 deletions(-) create mode 100644 src/components/global/Loading.jsx diff --git a/src/components/global/Loading.jsx b/src/components/global/Loading.jsx new file mode 100644 index 0000000..c7a7616 --- /dev/null +++ b/src/components/global/Loading.jsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { FaSpinner } from 'react-icons/fa'; +import styled from 'styled-components'; + +const Loading = () => { + return ( + <StLoadingBox> + <FaSpinner /> + </StLoadingBox> + ); +}; + +export default Loading; + +const StLoadingBox = styled.div` + display: flex; + align-items: center; + justify-content: center; + width: 50%; + height: 80px; + margin: 10px auto; + svg { + width: 40px; + height: 40px; + animation: spin 1s linear infinite; + + path { + color: skyblue; + } + } + @keyframes spin { + from { + transform: rotate(0); + } + to { + transform: rotate(360deg); + } + } +`; diff --git a/src/components/mainpage/Calendar.jsx b/src/components/mainpage/Calendar.jsx index f108454..67bea27 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/mainpage/Calendar.jsx @@ -16,7 +16,7 @@ export default function Calendar() { const [createModalOn, setCreateModalOn] = useState(false); const array = []; const [calendarData, setCalendarData] = useState(); - console.log(calendarData); + // console.log(calendarData); const [formCalendar, setFormCalendar] = useState(true); const [dateInfo, setDateInfo] = useState({ @@ -61,7 +61,7 @@ export default function Calendar() { const { data: getTodo } = useQuery(['TODO'], GetTodo, { onSuccess: response => { - console.log(response); + // console.log(response); response?.map(el => { const endDate = new Date(el.endDate); endDate.setDate(endDate.getDate() + 1); diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index d406374..2ca33d1 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -1,4 +1,5 @@ import { GetAllTodo, GetPostTodo, GetUser } from '../../apis/apiGET'; +import Loading from '../global/Loading'; import Toast from './../global/Toast'; import DetailTodoItem from './DetailTodoItem'; import FinishTodo from './FinishTodo'; @@ -12,14 +13,27 @@ import styled from 'styled-components'; export default function Todo() { //todo 전부 가져오기 - const { data: getAllTodo } = useQuery(['ALLTODO'], GetAllTodo, { - onSuccess: response => { - // queryClient.invalidateQueries(['ALLTODO']); - // console.log('getTodo', response); - }, + const { data: getAllTodo, isLoading } = useQuery(['ALLTODO'], GetAllTodo, { + onSuccess: response => {}, onError: response => {}, }); + const [showLoading, setShowLoading] = useState(true); + + useEffect(() => { + let timeout; + + if (!isLoading) { + timeout = setTimeout(() => { + setShowLoading(false); + }, 1000); + } + + return () => { + clearTimeout(timeout); + }; + }, [isLoading]); + const now = new Date(); let today = ''; let tomorrow; @@ -54,17 +68,22 @@ export default function Todo() { <h2 className='notHave'>설정된 To Do가 없습니다.</h2> ) : ( <> - <TodoDashboard> - <TodoNavi todayFormat={today} getAllTodo={getAllTodo} /> - <PastTodo /> - {getAllTodo?.map(el => ( - <DetailTodoWrap key={el.targetDate}> - <DetailTodoItem el={el} today={today} tomorrow={tomorrow} /> - <FinishTodo el={el} /> - </DetailTodoWrap> - ))} - </TodoDashboard> - <TeamTodo /> + {showLoading && <Loading />} + {!showLoading && ( + <> + <TodoDashboard> + <TodoNavi todayFormat={today} getAllTodo={getAllTodo} /> + <PastTodo /> + {getAllTodo?.map(el => ( + <DetailTodoWrap key={el.targetDate}> + <DetailTodoItem el={el} today={today} tomorrow={tomorrow} /> + <FinishTodo el={el} /> + </DetailTodoWrap> + ))} + </TodoDashboard> + <TeamTodo /> + </> + )} <Toast /> </> )} diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index e37a514..5d79a3e 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -7,12 +7,9 @@ import React, { useState, useRef, useEffect } from 'react'; import { Link } from 'react-scroll'; const TodoNavi = ({ todayFormat, getAllTodo }) => { - //targetDate 년도도 받아야함 const haveDay = getAllTodo?.map(todo => { - // console.log(todo); return todo.targetDate; }); - // console.log(haveDay); const today = new Date(); @@ -116,6 +113,8 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { } }; + console.log(state.week); + return ( <StNavi> <TodoHeader> @@ -151,30 +150,26 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { spy={true} smooth={true} offset={-500} - className={ - el.includes === false || undefined ? 'day' : 'include' - } + className={el.includes === false ? 'day' : 'include'} style={{ backgroundColor: ' rgba(255, 131, 54, 0.3)' }}> <span className='label'>{el.dateValue}</span> <span className='date' style={{ color: '#ff8336' }}> {el.date} </span> - {el?.includes === undefined ? null : ( + {el?.includes === false ? null : ( <div className='includeCh'></div> )} </Link> ) : ( <Link - className={ - el.includes === false || undefined ? 'day' : 'include' - } + className={el.includes === false ? 'day' : 'include'} to={el?.format} spy={true} offset={-500} smooth={true}> <span className='label'>{el?.dateValue}</span> <span className='date'>{el?.date}</span> - {el.includes === undefined ? null : ( + {el.includes === false ? null : ( <div className='includeCh'></div> )} </Link> From 7b42887f79aedec47e24c4e1ac1c93d8924be07b Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 17 Apr 2023 00:49:06 +0900 Subject: [PATCH 54/72] =?UTF-8?q?refect=20:=20spinner=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/components/global/Loading.jsx | 26 +++++--------------------- src/components/todo/Todo.jsx | 2 +- yarn.lock | 5 +++++ 4 files changed, 12 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 48b9349..d67df48 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "react-router-dom": "^6.8.2", "react-scripts": "5.0.1", "react-scroll": "^1.8.9", + "react-spinners": "^0.13.8", "react-toastify": "^9.1.1", "recoil": "^0.7.7", "stream-browserify": "^3.0.0", diff --git a/src/components/global/Loading.jsx b/src/components/global/Loading.jsx index c7a7616..731d846 100644 --- a/src/components/global/Loading.jsx +++ b/src/components/global/Loading.jsx @@ -1,11 +1,12 @@ import React from 'react'; -import { FaSpinner } from 'react-icons/fa'; +// import { FaSpinner } from 'react-icons/fa'; +import FadeLoader from 'react-spinners/FadeLoader'; import styled from 'styled-components'; const Loading = () => { return ( <StLoadingBox> - <FaSpinner /> + <FadeLoader color='skyblue' height={15} width={5} radius={2} margin={2} /> </StLoadingBox> ); }; @@ -17,23 +18,6 @@ const StLoadingBox = styled.div` align-items: center; justify-content: center; width: 50%; - height: 80px; - margin: 10px auto; - svg { - width: 40px; - height: 40px; - animation: spin 1s linear infinite; - - path { - color: skyblue; - } - } - @keyframes spin { - from { - transform: rotate(0); - } - to { - transform: rotate(360deg); - } - } + height: 100vh; + margin: 0 auto; `; diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 2ca33d1..f8a29c3 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -26,7 +26,7 @@ export default function Todo() { if (!isLoading) { timeout = setTimeout(() => { setShowLoading(false); - }, 1000); + }, 700); } return () => { diff --git a/yarn.lock b/yarn.lock index ab0663e..fbca291 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8365,6 +8365,11 @@ react-scroll@^1.8.9: lodash.throttle "^4.1.1" prop-types "^15.7.2" +react-spinners@^0.13.8: + version "0.13.8" + resolved "https://registry.yarnpkg.com/react-spinners/-/react-spinners-0.13.8.tgz#5262571be0f745d86bbd49a1e6b49f9f9cb19acc" + integrity sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA== + react-toastify@^9.1.1: version "9.1.2" resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.2.tgz#293aa1f952240129fe485ae5cb2f8d09c652cf3f" From 5983a754db340ebe93ee5574e565267c75f98ad9 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 17 Apr 2023 08:54:24 +0900 Subject: [PATCH 55/72] =?UTF-8?q?refect=20:=20=EB=AC=B8=EC=84=9C=ED=99=94?= =?UTF-8?q?=20=EB=B0=8F=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + .../global/globalModal/TodoModal.jsx | 14 ++--- src/components/mainpage/Calendar.jsx | 13 ++--- src/components/signUp/Article.jsx | 56 +++++++++---------- src/components/todo/TodoNavi.jsx | 15 ++--- src/pages/Mainpage.jsx | 8 +-- 6 files changed, 48 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index be7177a..eb09f67 100644 --- a/README.md +++ b/README.md @@ -45,3 +45,5 @@ --- ## 맴버 + +## 컨포넌트 정보 diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 15955fd..f6e2421 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -29,7 +29,7 @@ const TodoModal = ({ onCloseTodoModal, todoModalRef, todoModalOutSideClick, - formCalendar, + fromCalendar, dateInfo, }) => { // console.log(dateInfo); @@ -83,8 +83,8 @@ const TodoModal = ({ const [todoInfo, setTodoInfo] = useState({ toDo: '', memo: '', - startDate: formCalendar !== undefined ? dateInfo.start : '', - startDateTime: formCalendar !== undefined ? dateInfo.startDateTime : '', + startDate: fromCalendar !== undefined ? dateInfo.start : '', + startDateTime: fromCalendar !== undefined ? dateInfo.startDateTime : '', endDate: '', endDateTime: '', priority: '', @@ -281,7 +281,7 @@ const TodoModal = ({ placeholder='시작일' // value={defaultFormat.date} value={ - formCalendar !== undefined + fromCalendar !== undefined ? dateInfo.start : defaultFormat.date } @@ -323,7 +323,7 @@ const TodoModal = ({ placeholder='시작일' // value={timeFormat.date} value={ - formCalendar !== undefined + fromCalendar !== undefined ? dateInfo.start : timeFormat.date } @@ -365,7 +365,7 @@ const TodoModal = ({ placeholder='종료일' value={defaultFormat.date} // value={ - // formCalendar !== undefined + // fromCalendar !== undefined // ? dateInfo.end // : defaultFormat.date // } @@ -408,7 +408,7 @@ const TodoModal = ({ placeholder='종료일' value={timeFormat.date} // value={ - // formCalendar !== undefined ? dateInfo.end : timeFormat.date + // fromCalendar !== undefined ? dateInfo.end : timeFormat.date // } onChange={convertEndWithTime} animations={[ diff --git a/src/components/mainpage/Calendar.jsx b/src/components/mainpage/Calendar.jsx index 67bea27..e91d01b 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/mainpage/Calendar.jsx @@ -16,16 +16,13 @@ export default function Calendar() { const [createModalOn, setCreateModalOn] = useState(false); const array = []; const [calendarData, setCalendarData] = useState(); - // console.log(calendarData); - const [formCalendar, setFormCalendar] = useState(true); + const [fromCalendar, setFromCalendar] = useState(true); const [dateInfo, setDateInfo] = useState({ start: '', startDateTime: '', }); - // console.log(dateInfo); - const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); const closePathModal = () => { @@ -61,10 +58,11 @@ export default function Calendar() { const { data: getTodo } = useQuery(['TODO'], GetTodo, { onSuccess: response => { - // console.log(response); response?.map(el => { const endDate = new Date(el.endDate); endDate.setDate(endDate.getDate() + 1); + console.log(endDate.toISOString()); + console.log('----'); const newEndDate = endDate.toISOString().split('T')[0]; let obj = { @@ -93,7 +91,6 @@ export default function Calendar() { }); const handleDateClick = clickDateInfo => { - // console.log(clickDateInfo); setDateInfo({ ...dateInfo, start: clickDateInfo.startStr, @@ -125,8 +122,6 @@ export default function Calendar() { plugins={[dayGridPlugin, interactionPlugin]} initialView='dayGridMonth' locale='ko' - // dateClick={handleDateClick} - // eventContent={renderEventContent} selectable={true} select={handleDateClick} eventClick={handleEventClick} @@ -144,7 +139,7 @@ export default function Calendar() { {createModalOn && ( <TodoModal onCloseTodoModal={closeCrModal} - formCalendar={formCalendar} + fromCalendar={fromCalendar} dateInfo={dateInfo} /> )} diff --git a/src/components/signUp/Article.jsx b/src/components/signUp/Article.jsx index 15d8a82..1d089ef 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/signUp/Article.jsx @@ -15,30 +15,28 @@ import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; import { OnChange } from '../global/onChange'; import Toast from './../global/Toast'; import { useMutation } from '@tanstack/react-query'; -import { useState, useEffect } from 'react'; +import { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; import { toast } from 'react-toastify'; const Article = () => { - useEffect(() => { - const handleBeforeUnload = e => { - e.preventDefault(); - e.returnValue = - '현재 입력중인 항목이 있습니다. 정말 새로고침 하시겠습니까?'; - }; + // 새로고침 막기 + const preventClose = e => { + e.preventDefault(); + e.returnValue = ''; + }; - window.addEventListener('beforeunload', handleBeforeUnload); + useEffect(() => { + (() => { + window.addEventListener('beforeunload', preventClose); + })(); return () => { - window.removeEventListener('beforeunload', handleBeforeUnload); + window.removeEventListener('beforeunload', preventClose); }; }, []); - useEffect(() => { - localStorage.removeItem('userInfo'); - }, []); - const navigate = useNavigate(); // 눈 아이콘 const [pwEyeOpen, setPwEyeOpen] = useState(false); @@ -55,19 +53,7 @@ const Article = () => { teamposition: '', }); - useEffect(() => { - const savedFormData = JSON.parse(localStorage.getItem('userInfo')); - if (savedFormData) { - setUserInfo(savedFormData); - } - }, []); - - useEffect(() => { - localStorage.setItem('userInfo', JSON.stringify(userInfo)); - }, [userInfo]); - const [errors, setErrors] = useState({}); - // 유효성 검사 const validate = () => { let errors = {}; @@ -106,16 +92,15 @@ const Article = () => { const { mutate: signUpMutate } = useMutation(SignUp, { onSuccess: response => { - toast('회원가입 성공!'); + // toast('회원가입 성공!'); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', action: '회원가입', }); } - setTimeout(() => { - navigate('/'); - }, 1000); + alert('회원가입 성공'); + navigate('/'); }, onError: response => { @@ -126,7 +111,7 @@ const Article = () => { action: '회원가입 실패', }); } - toast(response?.response.data); + alert(response?.response.data); }, }); @@ -140,16 +125,23 @@ const Article = () => { } }; + const onKeyDown = e => { + console.log(e); + if (e.key === 'Enter') { + handleSubmit(e); + } + }; + return ( <SignWrap onSubmit={handleSubmit}> <MainHeader>회원가입</MainHeader> - <Label htmlFor='email'>이메일</Label> <InputBox> <EmailInput id='email' type='text' name='email' + onKeyDown={onKeyDown} value={userInfo.email} placeholder='이메일을 입력하세요' onChange={event => { @@ -167,6 +159,7 @@ const Article = () => { name='password' value={userInfo.password} placeholder='비밀번호를 입력하세요' + autoComplete='off' onChange={event => { OnChange(event, userInfo, setUserInfo); }} @@ -187,6 +180,7 @@ const Article = () => { name='confirmpassword' value={userInfo.confirmpassword} placeholder='비밀번호를 입력하세요' + autoComplete='off' onChange={event => { OnChange(event, userInfo, setUserInfo); }} diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 5d79a3e..69fe5f4 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -2,8 +2,7 @@ import plus from '../../assets/plus.png'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; -import { useQueryClient } from '@tanstack/react-query'; -import React, { useState, useRef, useEffect } from 'react'; +import React, { useState, useRef } from 'react'; import { Link } from 'react-scroll'; const TodoNavi = ({ todayFormat, getAllTodo }) => { @@ -16,10 +15,12 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { let date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); let makeWeek = date => { + //요일 let day = date.getDay(); let week = []; for (let i = 0; i < 7; i++) { + // 24*60*60*1000 let newDate = new Date(date.valueOf() + 86400000 * (i - day)); let dateValue; if (i === 0) { @@ -69,18 +70,17 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { }); const onPressArrowLeft = () => { - let newDate = new Date(state.date.valueOf() - 86400000 * (7 * 1)); + let newDate = new Date(state.date.valueOf() - 86400000 * 7); let newWeek = makeWeek(newDate); setState({ ...state, date: newDate, week: newWeek, }); - console.log('newWeek :', newWeek); }; const onPressArrowRight = () => { - let newDate = new Date(state.date.valueOf() + 86400000 * (7 * 1)); + let newDate = new Date(state.date.valueOf() + 86400000 * 7); let newWeek = makeWeek(newDate); setState({ ...state, @@ -89,8 +89,8 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { }); }; + // 오늘 날짜 관련 값 추출 const dateM = date.getMonth() + 1; - // 오늘 날짜 값 추출하기 const dateD = date.getDate(); const dateY = date.getFullYear(); @@ -106,15 +106,12 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { // 모달 외 클릭시 닫기위해 ref생성 const todoModalRef = useRef(null); - /** 모달위에 있는 배경이랑 ref가 같으면 modalOn을 false로 바꾸는 함수 */ const todoModalOutSideClick = e => { if (todoModalRef.current === e.target) { setTodoModalOn(!todoModalOn); } }; - console.log(state.week); - return ( <StNavi> <TodoHeader> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 2ee7483..6c863a1 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -31,16 +31,16 @@ export default function Mainpage() { setUid(() => extractedUid); }, [accessToken]); + const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { + enabled: !!uid, + }); + useEffect(() => { if (localStorage.accesstoken === undefined) { navigate('/'); } }, []); - const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { - enabled: !!uid, - }); - // const menuList = ['Dashboard', 'All OKR', 'Team OKR', 'TO - DO', 'Calendar']; const menuList = ['Dashboard', 'TO - DO']; From 038a885c0630f362b9f99a5d90f03d5d3658b62f Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sun, 23 Apr 2023 15:25:38 +0900 Subject: [PATCH 56/72] =?UTF-8?q?fix=20:=20todo=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=20UI=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/checkOff.png | Bin 0 -> 347 bytes src/assets/checkOn.png | Bin 0 -> 313 bytes src/assets/filter.png | Bin 0 -> 376 bytes src/assets/filter1.png | Bin 0 -> 376 bytes src/assets/fliterCheckOn.png | Bin 0 -> 194 bytes src/assets/sort.png | Bin 0 -> 316 bytes .../global/globaldropdown/OkrDropDown.jsx | 5 +- src/components/mainpage/Calendar.jsx | 10 +- src/components/todo/DetailTodoItem.jsx | 435 +++++++++--------- src/components/todo/DoneFilter.jsx | 56 +++ src/components/todo/Filter.jsx | 37 ++ src/components/todo/KrFilter.jsx | 92 ++++ src/components/todo/SortFilter.jsx | 32 ++ src/components/todo/Todo.jsx | 22 +- src/components/todo/TodoNavi.jsx | 3 +- src/components/todo/tododetail.styled.js | 321 ++++++++++++- src/store/store.js | 35 +- 17 files changed, 790 insertions(+), 258 deletions(-) create mode 100644 src/assets/checkOff.png create mode 100644 src/assets/checkOn.png create mode 100644 src/assets/filter.png create mode 100644 src/assets/filter1.png create mode 100644 src/assets/fliterCheckOn.png create mode 100644 src/assets/sort.png create mode 100644 src/components/todo/DoneFilter.jsx create mode 100644 src/components/todo/Filter.jsx create mode 100644 src/components/todo/KrFilter.jsx create mode 100644 src/components/todo/SortFilter.jsx diff --git a/src/assets/checkOff.png b/src/assets/checkOff.png new file mode 100644 index 0000000000000000000000000000000000000000..00248cdc447b6c873a4b58f3b2491eb18c5d1980 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11|+SoP4xm&oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{s&JN$B+ufxs&(v9SjgTX5Y&wm>3j&^w1Kw zGB?ir2ZDPV#WzIlZB$cByzaV4hi6jR8s9~|$BOPs>%EjO`f7e}_Whsdc3PTWloKqy zanxjb+bmy4j?X;VM(+Hx{CtF(kGAD3-NeIccp`0q*MAOm=@~EeEqOUke`CGC@38ut zrSPPgJGM7?aZdOw_^If3Y|P~&N>igk|IgKrynOgkm)KNphgeSWy3;vg#}{k5@0XZ* z!c#&`agWyYxzZ1+{5M|i5GxN`kh?9>=IQhko^1RPjdj9K9&4`d@F=lkHcXhWY&kFa p!QF+Lt{Y|3`728keZ(Ye7?K&AYTuah+5r8|;OXk;vd$@?2>__%e$oH{ literal 0 HcmV?d00001 diff --git a/src/assets/checkOn.png b/src/assets/checkOn.png new file mode 100644 index 0000000000000000000000000000000000000000..09dda9eb1d5ccc9ac2a977c3ce03b511446298de GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11|+SoP4xm&oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{y9$<$B+ufxtA95H90UeJd}4U*nGoeQ>2OK zwUi6zm?b*O)}C7zsXV)^Gf!$u=49~#<zEbJ&BFbbCFTK^|9ao%ePArNUTe&!E4QP; z^&8W>8*L5qX3SWTn)Kk+io+J(;g!3h8Y}-BpYJ)XI>YMGCy_#)^lXdxpn~hac*U)6 z{Q9)lJnvd!!t%pc6**O9)~eo`5EtDxTe!kK$oSF0uWZhRA!<w_+!t2ueNc4%`V!vm z_zMRA4{NM7=5j7tR^lNPQFBc_zH!}4i;E0fYd)U;CVb4!^yVpF_2odHF?hQAxvX<a GXaWG*Q+Lz= literal 0 HcmV?d00001 diff --git a/src/assets/filter.png b/src/assets/filter.png new file mode 100644 index 0000000000000000000000000000000000000000..24eec7289944a49956c6768e63fc0461587aa98f GIT binary patch literal 376 zcmV-;0f+vHP)<h;3K|Lk000e1NJLTq000pH000mO1^@s6@G+EM00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0S!q+K~#7F)ss7J zgFq05_f;U#P(x#h10*+yTOI{B$Q6<k#B}LWCLKozkw79<<QwDwNZH%~cSyYaZ?TeP z+1P8zh5us33_G8O`3D+B(GMX+lFPK9l%@hlBZNrvJeR~!VHjq^Fi6(-{d3oKS&}3R zL%<8?d|g$Q<aJ#)zVEN6Y05m$`;t<&=K$~po1!Q_RLs?(L6&8`yRQ2^2T}mW7%j{4 zRp*#~P;HIlnA*1ec?y6IR^&vh_i*fOKabpF9LMv;yTavV5Cl&;#?T!=vSatzp(GrW z7@VWywrw2@{@(~<svCpA)+J{2ckI2GD^{-Hm(bg}GJ;@p8x%jlr8~HiVmp7ywY3Gb W0dYT&NnB|F0000<MNUMnLSTaC!I?$? literal 0 HcmV?d00001 diff --git a/src/assets/filter1.png b/src/assets/filter1.png new file mode 100644 index 0000000000000000000000000000000000000000..24eec7289944a49956c6768e63fc0461587aa98f GIT binary patch literal 376 zcmV-;0f+vHP)<h;3K|Lk000e1NJLTq000pH000mO1^@s6@G+EM00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0S!q+K~#7F)ss7J zgFq05_f;U#P(x#h10*+yTOI{B$Q6<k#B}LWCLKozkw79<<QwDwNZH%~cSyYaZ?TeP z+1P8zh5us33_G8O`3D+B(GMX+lFPK9l%@hlBZNrvJeR~!VHjq^Fi6(-{d3oKS&}3R zL%<8?d|g$Q<aJ#)zVEN6Y05m$`;t<&=K$~po1!Q_RLs?(L6&8`yRQ2^2T}mW7%j{4 zRp*#~P;HIlnA*1ec?y6IR^&vh_i*fOKabpF9LMv;yTavV5Cl&;#?T!=vSatzp(GrW z7@VWywrw2@{@(~<svCpA)+J{2ckI2GD^{-Hm(bg}GJ;@p8x%jlr8~HiVmp7ywY3Gb W0dYT&NnB|F0000<MNUMnLSTaC!I?$? literal 0 HcmV?d00001 diff --git a/src/assets/fliterCheckOn.png b/src/assets/fliterCheckOn.png new file mode 100644 index 0000000000000000000000000000000000000000..85026f9b0b9aeff5c4cf1f560121573487eff28f GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11|+SoP4xm&oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBez>QLV@L(#+jEA34F)`J53k3xhB)~sED$Pa zn(TGJOErYUos-$PW!>LpDHY}Q5!=?y5pnpru5iNQ*4?(8^Iev3{QI!*P=n<8AGYrT lelGVExc2+N@>|bp7#pMbSh{;=tp-}b;OXk;vd$@?2>{}xKW_j4 literal 0 HcmV?d00001 diff --git a/src/assets/sort.png b/src/assets/sort.png new file mode 100644 index 0000000000000000000000000000000000000000..65c22ed102d559e40d6c64a078b368214cab88d9 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVg?3oVGw3ym^DWND9BhG z<nF|<?wrg^AcrO0(btiIVPik{pF~z5|DvahV@L(#(@FMxO$H+Ex!z65?&e7x?GMji zke2XYFpnW`k=#KCj^w#9H$6FW`utiZFzlP&5UBKxq0ag9uUYR)E9|#Pe6aDCXxn(^ z^Phb)6j~lE%e<#^Ix01??5Lcq{O)y+cdh%JA9UHoT_f1(#H~V^|ITxmRVAuk{N9&y z+ibxUq1)TOdu?2`DtD5~(Te^>8V&Q822BaFTejDtFL<fN@%WB)uk)7q-k2QF^*+;K z!!?s$ZPyr$WsEl*t!j=%NVYxn)O=*P<RKIDIr}Ax*1ZmwnAe`_zuWR<*Ce3l7(8A5 KT-G@yGywo{v3o!O literal 0 HcmV?d00001 diff --git a/src/components/global/globaldropdown/OkrDropDown.jsx b/src/components/global/globaldropdown/OkrDropDown.jsx index cf5a6c0..76ea63b 100644 --- a/src/components/global/globaldropdown/OkrDropDown.jsx +++ b/src/components/global/globaldropdown/OkrDropDown.jsx @@ -1,5 +1,6 @@ import { GetOKR } from '../../../apis/apiGET'; import Arrow from '../../../assets/dropdownArrow.png'; +import { okrDataAtom } from '../../../store/store'; import { DropIcon, OkrDropBox, @@ -9,6 +10,7 @@ import { import { useDropDown } from './dropdown'; import { useQuery } from '@tanstack/react-query'; import { useState, useRef } from 'react'; +import { useRecoilValue } from 'recoil'; const OkrDropDown = ({ setKid, setOid, title }) => { const dropDownRef = useRef(null); @@ -22,6 +24,7 @@ const OkrDropDown = ({ setKid, setOid, title }) => { onSuccess: response => {}, onError: response => {}, }); + // const getOkrData = useRecoilValue(okrDataAtom); const ValueClick = e => { setIsOpen(!isOpen); @@ -74,7 +77,7 @@ const OkrDropDown = ({ setKid, setOid, title }) => { }}> <span style={{ color: data.color }}> KR{index + 1} - {'\u00A0'} + {/* {'\u00A0'} */} </span> {el.keyResult} </div> diff --git a/src/components/mainpage/Calendar.jsx b/src/components/mainpage/Calendar.jsx index e91d01b..9b18faa 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/mainpage/Calendar.jsx @@ -61,8 +61,8 @@ export default function Calendar() { response?.map(el => { const endDate = new Date(el.endDate); endDate.setDate(endDate.getDate() + 1); - console.log(endDate.toISOString()); - console.log('----'); + // console.log(endDate.toISOString()); + // console.log('----'); const newEndDate = endDate.toISOString().split('T')[0]; let obj = { @@ -96,13 +96,13 @@ export default function Calendar() { start: clickDateInfo.startStr, startDateTime: '00:00', }); - console.log('생성'); + // console.log('생성'); setCreateModalOn(true); }; const handleEventClick = clickDateInfo => { - console.log(clickDateInfo.event.id); - console.log('수정'); + // console.log(clickDateInfo.event.id); + // console.log('수정'); patchTodo( clickDateInfo.event.id, clickDateInfo.event.extendedProps.todo, diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index eba6c9e..4c27559 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -6,6 +6,7 @@ import yellow from '../../assets/todoYellow.png'; import { patchTodoInfo } from '../../store/store'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; +import Filter from './Filter'; import { DDay, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import React, { useState } from 'react'; @@ -14,233 +15,235 @@ import { toast } from 'react-toastify'; import { useSetRecoilState } from 'recoil'; const DetailTodoItem = ({ el, today, tomorrow }) => { - const queryClient = useQueryClient(); - - // 우선순위 - const Priority = ({ pt }) => { - // console.log('pt :', pt); - if (pt.priority === 1) { - return <img src={red} alt='' />; - } else if (pt.priority === 2) { - return <img src={yellow} alt='' />; - } else if (pt.priority === 3) { - return <img src={blue} alt='' />; - } else { - return; - } - }; - - const { mutate: patchCheckmutate } = useMutation(PatchCheck, { - onSuccess: response => { - if (process.env.NODE_ENV !== 'development') { - ReactGA.event({ - category: '버튼', - action: 'TODO 완료', - }); - } - queryClient.invalidateQueries(['ALLTODO']); - queryClient.invalidateQueries(['PASTTODO']); - }, - onError: response => {}, - }); - - // 체크 - const Check = ({ pt }) => { - const onClickCheck = () => { - const id = pt.toDoId; - patchCheckmutate({ id }); - toast('To Do를 완료했습니다.'); - }; - - return <div className='check' onClick={onClickCheck} />; - }; - - //오늘, 내일 글씨 - const DateColor = ({ el, today, tomorrow, pt }) => { - if (el.targetDate === today) { - return ( - <div className='dateGreen'> - {pt.fstartDate} - {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} - {pt.fendDate} - {pt.endDateTime === '00:00' ? null : pt.endDateTime} - </div> - ); - } else if (el.targetDate === tomorrow) { - return ( - <div className='dateYellow'> - {pt.fstartDate} - {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} - {pt.fendDate} - {pt.endDateTime === '00:00' ? null : pt.endDateTime} - </div> - ); - } else { - return ( - <div className='normalDate'> - {pt.fstartDate} - {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} - {pt.fendDate} - {pt.endDateTime === '00:00' ? null : pt.endDateTime} - </div> - ); - } - }; - - const Title = ({ pt }) => { - // console.log(pt); - if (pt.color === null) { - return ( - <div className='colorNull' style={{ color: '#9b9b9b' }}> - {pt.keyResultId === null ? 'none' : `KR${pt.krNumber}`} - </div> - ); - } - return ( - <div className='kr' style={{ color: pt.color }}> - {pt.keyResultId === null ? 'none' : `KR${pt.krNumber}`} - </div> - ); - }; - - const [todoModalOn, setTodoModalOn] = useState(false); - - const onTodoCloseModal = () => { - setTodoModalOn(!todoModalOn); - }; - - const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); - - const patchTodo = ( - id, - todo, - memo, - startDate, - startDateTime, - endDate, - endDateTime, - priority - ) => { - console.log(todo); - setPatchTodoInfo({ - id, - toDo: todo, - memo, - startDate, - startDateTime, - endDate, - endDateTime, - priority, - }); - setTodoModalOn(!todoModalOn); - }; - - const FilterMyTodo = ({ pt }) => { - if (pt.myToDo === true) { - return ( - <div className='item'> - <div - className='flexLeft' - style={ - pt.completion === true - ? { cursor: 'default' } - : { cursor: 'pointer' } - } - onClick={() => { - patchTodo( - pt.toDoId, - pt.toDo, - pt.memo, - pt.startDate, - pt.startDateTime, - pt.endDate, - pt.endDateTime, - pt.priority - ); - }}> - <Title pt={pt} /> - <div className='krBox' title={pt.memo}> - <div className='krTitle'>{pt.toDo}</div> - <div className='krManager'> - <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> - </div> - </div> - </div> - <div className='flexRight'> - <Priority pt={pt} /> - <Check pt={pt} /> - </div> - </div> - ); - } else { - return ( - <div className='item'> - <div - className='flexLeft' - style={ - pt.completion === true - ? { cursor: 'default' } - : { cursor: 'pointer' } - } - onClick={() => { - alert('본인이 작성한 TODO만 수정 가능합니다.'); - }}> - <Title pt={pt} /> - <div className='krBox' title={pt.memo}> - <div className='krTitle'>{pt.toDo}</div> - <div className='krManager'> - <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> - - <div className='kmName'>{pt.createUser}</div> - <img src={badgeS} alt='' /> - </div> - </div> - </div> - <div className='flexRight'> - <Priority pt={pt} /> - <div className='another' /> - </div> - </div> - ); - } - }; - - //해당 날짜에 todo가 없을 때 - const HavePt = () => { - if (el.progressTodo.length === 0) { - return ( - <TodoDetailItem> - <div className='notHave'>이 날은 진행중인 To Do가 없습니다.</div> - </TodoDetailItem> - ); - } else { - return ( - <> - {el.progressTodo.map(pt => ( - <TodoDetailItem key={pt.toDoId}> - <FilterMyTodo pt={pt} /> - </TodoDetailItem> - ))} - </> - ); - } - }; + // const queryClient = useQueryClient(); + + // // 우선순위 + // const Priority = ({ pt }) => { + // // console.log('pt :', pt); + // if (pt.priority === 1) { + // return <img src={red} alt='' />; + // } else if (pt.priority === 2) { + // return <img src={yellow} alt='' />; + // } else if (pt.priority === 3) { + // return <img src={blue} alt='' />; + // } else { + // return; + // } + // }; + + // const { mutate: patchCheckmutate } = useMutation(PatchCheck, { + // onSuccess: response => { + // if (process.env.NODE_ENV !== 'development') { + // ReactGA.event({ + // category: '버튼', + // action: 'TODO 완료', + // }); + // } + // queryClient.invalidateQueries(['ALLTODO']); + // queryClient.invalidateQueries(['PASTTODO']); + // }, + // onError: response => {}, + // }); + + // // 체크 + // const Check = ({ pt }) => { + // const onClickCheck = () => { + // const id = pt.toDoId; + // patchCheckmutate({ id }); + // toast('To Do를 완료했습니다.'); + // }; + + // return <div className='check' onClick={onClickCheck} />; + // }; + + // //오늘, 내일 글씨 + // const DateColor = ({ el, today, tomorrow, pt }) => { + // if (el.targetDate === today) { + // return ( + // <div className='dateGreen'> + // {pt.fstartDate} + // {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} + // {pt.fendDate} + // {pt.endDateTime === '00:00' ? null : pt.endDateTime} + // </div> + // ); + // } else if (el.targetDate === tomorrow) { + // return ( + // <div className='dateYellow'> + // {pt.fstartDate} + // {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} + // {pt.fendDate} + // {pt.endDateTime === '00:00' ? null : pt.endDateTime} + // </div> + // ); + // } else { + // return ( + // <div className='normalDate'> + // {pt.fstartDate} + // {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} + // {pt.fendDate} + // {pt.endDateTime === '00:00' ? null : pt.endDateTime} + // </div> + // ); + // } + // }; + + // const Title = ({ pt }) => { + // // console.log(pt); + // if (pt.color === null) { + // return ( + // <div className='colorNull' style={{ color: '#9b9b9b' }}> + // {pt.keyResultId === null ? 'none' : `KR${pt.krNumber}`} + // </div> + // ); + // } + // return ( + // <div className='kr' style={{ color: pt.color }}> + // {pt.keyResultId === null ? 'none' : `KR${pt.krNumber}`} + // </div> + // ); + // }; + + // const [todoModalOn, setTodoModalOn] = useState(false); + + // const onTodoCloseModal = () => { + // setTodoModalOn(!todoModalOn); + // }; + + // const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); + + // const patchTodo = ( + // id, + // todo, + // memo, + // startDate, + // startDateTime, + // endDate, + // endDateTime, + // priority + // ) => { + // console.log(todo); + // setPatchTodoInfo({ + // id, + // toDo: todo, + // memo, + // startDate, + // startDateTime, + // endDate, + // endDateTime, + // priority, + // }); + // setTodoModalOn(!todoModalOn); + // }; + + // const FilterMyTodo = ({ pt }) => { + // if (pt.myToDo === true) { + // return ( + // <div className='item'> + // <div + // className='flexLeft' + // style={ + // pt.completion === true + // ? { cursor: 'default' } + // : { cursor: 'pointer' } + // } + // onClick={() => { + // patchTodo( + // pt.toDoId, + // pt.toDo, + // pt.memo, + // pt.startDate, + // pt.startDateTime, + // pt.endDate, + // pt.endDateTime, + // pt.priority + // ); + // }}> + // <Title pt={pt} /> + // <div className='krBox' title={pt.memo}> + // <div className='krTitle'>{pt.toDo}</div> + // <div className='krManager'> + // <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> + // </div> + // </div> + // </div> + // <div className='flexRight'> + // <Priority pt={pt} /> + // <Check pt={pt} /> + // </div> + // </div> + // ); + // } else { + // return ( + // <div className='item'> + // <div + // className='flexLeft' + // style={ + // pt.completion === true + // ? { cursor: 'default' } + // : { cursor: 'pointer' } + // } + // onClick={() => { + // alert('본인이 작성한 TODO만 수정 가능합니다.'); + // }}> + // <Title pt={pt} /> + // <div className='krBox' title={pt.memo}> + // <div className='krTitle'>{pt.toDo}</div> + // <div className='krManager'> + // <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> + + // <div className='kmName'>{pt.createUser}</div> + // <img src={badgeS} alt='' /> + // </div> + // </div> + // </div> + // <div className='flexRight'> + // <Priority pt={pt} /> + // <div className='another' /> + // </div> + // </div> + // ); + // } + // }; + + // //해당 날짜에 todo가 없을 때 + // const HavePt = () => { + // if (el.progressTodo.length === 0) { + // return ( + // <TodoDetailItem> + // <div className='notHave'>이 날은 진행중인 To Do가 없습니다.</div> + // </TodoDetailItem> + // ); + // } else { + // return ( + // <> + // {el.progressTodo.map(pt => ( + // <TodoDetailItem key={pt.toDoId}> + // <FilterMyTodo pt={pt} /> + // </TodoDetailItem> + // ))} + // </> + // ); + // } + // }; return ( <> <DDay> <TodoDetailHeader> <div className='header'> - <div className='title' id={el.targetDate}> + <div className='title'>TODAY</div> + <Filter /> + {/* <div className='title' id={el.targetDate}> {el.targetDate} - </div> + </div> */} </div> </TodoDetailHeader> - <HavePt /> + {/* <HavePt /> */} </DDay> - <Potal> + {/* <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} - </Potal> + </Potal> */} </> ); }; diff --git a/src/components/todo/DoneFilter.jsx b/src/components/todo/DoneFilter.jsx new file mode 100644 index 0000000..5d999f1 --- /dev/null +++ b/src/components/todo/DoneFilter.jsx @@ -0,0 +1,56 @@ +import filter from '../../assets/filter1.png'; +import { useDropDown } from '../global/globaldropdown/dropdown'; +import { StDoneFilter } from './tododetail.styled'; +import React, { useRef } from 'react'; +import { AiFillCloseCircle } from 'react-icons/ai'; +import { GrClose } from 'react-icons/gr'; + +const DoneFilter = () => { + const DoneDropRef = useRef(null); + + const [DoneDropOn, setDoneDropOn] = useDropDown(DoneDropRef, false); + + const DoneDroponHandler = () => { + setDoneDropOn(!DoneDropOn); + }; + + return ( + <StDoneFilter ref={DoneDropRef}> + <div className='filterContainer' onClick={DoneDroponHandler}> + <img src={filter} alt='' /> + <div className='result'> + <span>완료 : 전체</span> + </div> + </div> + + {DoneDropOn && ( + <div className='doneDrop'> + <div className='inputBox'> + <div className='hashFlex'> + {/* <span>완료</span> */} + + <div className='hash'> + <span>완료</span> + <GrClose /> + </div> + </div> + {/* <div className='closeBtn'></div> */} + <AiFillCloseCircle className='closeBtn' /> + </div> + <ul> + <li> + <input type='checkbox' /> + <span className='done'>완료</span> + </li> + <li> + <input type='checkbox' /> + <span className='done'>미완료</span> + </li> + </ul> + </div> + )} + </StDoneFilter> + ); +}; + +export default DoneFilter; diff --git a/src/components/todo/Filter.jsx b/src/components/todo/Filter.jsx new file mode 100644 index 0000000..358f4e2 --- /dev/null +++ b/src/components/todo/Filter.jsx @@ -0,0 +1,37 @@ +import { GetKR, GetOKR } from '../../apis/apiGET'; +import checkOff from '../../assets/checkOff.png'; +import checkOn from '../../assets/checkOn.png'; +import filter from '../../assets/filter1.png'; +import { krDataAtom } from '../../store/store'; +import DoneFilter from './DoneFilter'; +import KrFilter from './KrFilter'; +import SortFilter from './SortFilter'; +import { StFilterContainer } from './tododetail.styled'; +import { useQuery } from '@tanstack/react-query'; +import React, { useRef, useState } from 'react'; +import { useRecoilState } from 'recoil'; + +const Filter = () => { + const [krState, setKrState] = useRecoilState(krDataAtom); + // console.log(krState); + const { data: getOkrData } = useQuery(['krData'], GetKR, { + retry: 3, + staleTime: 60 * 1000, + onSuccess: response => { + setKrState(response); + }, + }); + + const doneDrop = useRef(null); + const sortDrop = useRef(null); + + return ( + <StFilterContainer> + <KrFilter /> + <DoneFilter /> + <SortFilter /> + </StFilterContainer> + ); +}; + +export default Filter; diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx new file mode 100644 index 0000000..6a6dde4 --- /dev/null +++ b/src/components/todo/KrFilter.jsx @@ -0,0 +1,92 @@ +import filter from '../../assets/filter1.png'; +import { okrCheckSelector } from '../../store/store'; +import { useDropDown } from '../global/globaldropdown/dropdown'; +import { StKrFilter } from './tododetail.styled'; +import React, { useRef, useState } from 'react'; +import { AiFillCloseCircle } from 'react-icons/ai'; +import { GrClose } from 'react-icons/gr'; +import { useRecoilState } from 'recoil'; + +const KrFilter = () => { + const krDropRef = useRef(null); + //드롭다운이 보여지는 상태관리 + const [krDropOn, setKrDropon] = useDropDown(krDropRef, false); + + const [checkData, setCheckData] = useRecoilState(okrCheckSelector); + + // console.log(checkData); + + // filterContainer를 누르면 Drop이 보이는 함수 + const krDroponHandler = () => { + setKrDropon(!krDropOn); + }; + + // checkbox 클릭하면 해시태그 추가 + const addHash = e => {}; + + const [isCheck, setIsCheck] = useState(true); + const onCheckHandler = e => { + // console.log(e); + setIsCheck(!isCheck); + }; + + // console.log(krDrop); + + return ( + <StKrFilter ref={krDropRef}> + <div className='filterContainer' onClick={krDroponHandler}> + <img src={filter} alt='' /> + <div className='result'> + <span>KR : 전체</span> + </div> + </div> + + {krDropOn && ( + <div className='krDrop'> + <div className='inputBox'> + <div className='hashFlex'> + {/* <span>KR1</span> */} + {checkData.map(data => ( + <div className='hash' key={data.keyResultId}> + <span>KR{data.krNumber}</span> + <GrClose /> + </div> + ))} + + <div className='hash'> + <span>None</span> + <GrClose /> + </div> + </div> + {/* <div className='closeBtn'></div> */} + <AiFillCloseCircle className='closeBtn' /> + </div> + <ul> + {checkData.map(data => ( + <li key={data.keyResultId} onClick={addHash}> + <input + type='checkbox' + onChange={onCheckHandler} + checked={isCheck} + /> + <span className='kr' style={{ color: 'rgb(69, 126, 255)' }}> + KR{data.krNumber} + </span> + :<span className='desc'>{data.keyResult}</span> + </li> + ))} + + <li> + <input type='checkbox' onChange={onCheckHandler} checked /> + <span className='kr' style={{ color: 'rgb(155,155,155)' }}> + None + </span> + </li> + </ul> + </div> + )} + </StKrFilter> + ); +}; + +export default KrFilter; diff --git a/src/components/todo/SortFilter.jsx b/src/components/todo/SortFilter.jsx new file mode 100644 index 0000000..0ff9c61 --- /dev/null +++ b/src/components/todo/SortFilter.jsx @@ -0,0 +1,32 @@ +import sort from '../../assets/sort.png'; +import { useDropDown } from '../global/globaldropdown/dropdown'; +import { StSortFilter } from './tododetail.styled'; +import React, { useRef } from 'react'; + +const SortFilter = () => { + const sortDropRef = useRef(null); + + const [sortDropOn, setSortDropOn] = useDropDown(sortDropRef, false); + + const sortDropHandler = () => { + setSortDropOn(!sortDropOn); + }; + return ( + <StSortFilter ref={sortDropRef}> + <div className='sortContainer' onClick={sortDropHandler}> + <img src={sort} alt='' /> + <span className='result'>정렬</span> + </div> + + {sortDropOn && ( + <ul className='sortDrop'> + <li>우선순위</li> + <li>등록일자</li> + <li>마감기한</li> + </ul> + )} + </StSortFilter> + ); +}; + +export default SortFilter; diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index f8a29c3..d352ebe 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -2,6 +2,7 @@ import { GetAllTodo, GetPostTodo, GetUser } from '../../apis/apiGET'; import Loading from '../global/Loading'; import Toast from './../global/Toast'; import DetailTodoItem from './DetailTodoItem'; +import Filter from './Filter'; import FinishTodo from './FinishTodo'; import PastTodo from './PastTodo'; import TeamTodo from './TeamTodo'; @@ -73,15 +74,20 @@ export default function Todo() { <> <TodoDashboard> <TodoNavi todayFormat={today} getAllTodo={getAllTodo} /> - <PastTodo /> - {getAllTodo?.map(el => ( + {/* <Filter /> */} + {/* <PastTodo /> */} + {/* {getAllTodo?.map(el => ( <DetailTodoWrap key={el.targetDate}> <DetailTodoItem el={el} today={today} tomorrow={tomorrow} /> <FinishTodo el={el} /> </DetailTodoWrap> - ))} + ))} */} + + <DetailTodoWrap> + <DetailTodoItem /> + </DetailTodoWrap> </TodoDashboard> - <TeamTodo /> + {/* <TeamTodo /> */} </> )} <Toast /> @@ -93,18 +99,20 @@ export default function Todo() { const StSticky = styled.div` display: flex; - position: relative; + /* position: relative; */ .notHave { width: 100%; font-size: 2.4rem; font-weight: 700; color: var(--main-color); - /* background-color: pink; */ + /* background-color: skyblue; */ } `; const TodoDashboard = styled.div` max-width: 1195px; width: 100%; - padding: 0 27px; + /* padding: 0 27px; */ + position: relative; + /* background-color: gray; */ `; diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 69fe5f4..957f4f4 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -147,8 +147,7 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { spy={true} smooth={true} offset={-500} - className={el.includes === false ? 'day' : 'include'} - style={{ backgroundColor: ' rgba(255, 131, 54, 0.3)' }}> + className={el.includes === false ? 'day' : 'include'}> <span className='label'>{el.dateValue}</span> <span className='date' style={{ color: '#ff8336' }}> {el.date} diff --git a/src/components/todo/tododetail.styled.js b/src/components/todo/tododetail.styled.js index 8679f64..bc5667b 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/components/todo/tododetail.styled.js @@ -8,8 +8,8 @@ import up from '../../assets/up.png'; import styled from 'styled-components'; export const StNavi = styled.div` - position: sticky; - top: 0; + /* position: sticky; */ + /* top: 0; */ padding-bottom: 3px; box-sizing: content-box; background-color: #fff; @@ -87,7 +87,6 @@ export const DateNavi = styled.div` /* border: 0.8px solid rgba(124, 124, 124, 0.25); */ box-shadow: 0px 3px 10px rgba(124, 124, 124, 0.25); border-radius: 8px; - margin-bottom: 70px; display: flex; overflow: hidden; .day { @@ -117,9 +116,9 @@ export const DateNavi = styled.div` justify-content: center; position: relative; cursor: pointer; - transition: all 0.3s; + /* transition: all 0.3s; */ :hover { - background-color: rgb(248, 248, 248); + background-color: #e8e8e8; } .label { color: #4b4b4b; @@ -131,12 +130,12 @@ export const DateNavi = styled.div` line-height: 34px; } .includeCh { - width: 6px; - height: 6px; + width: 4px; + height: 4px; border-radius: 50%; - background-color: #000; + background-color: #9b9b9b; position: absolute; - bottom: 6px; + bottom: 15px; } } `; @@ -166,11 +165,14 @@ export const TodoDetailHeader = styled.div` .header { width: 100%; display: flex; + justify-content: space-between; align-items: center; /* margin-bottom: 10.5px; */ - padding-bottom: 10.5px; + /* padding-bottom: 10.5px; */ box-sizing: content-box; cursor: default; + /* background-color: yellow; */ + margin-top: 33px; .down { width: 13px; height: 7px; @@ -190,9 +192,9 @@ export const TodoDetailHeader = styled.div` box-sizing: border-box; } .title { - width: 100%; + /* width: 50%; */ + /* background-color: pink; */ font-size: 2.3rem; - color: #4b4b4b; } } `; @@ -328,7 +330,9 @@ export const TodoDetailItem = styled.div` `; export const DDay = styled.div` - margin-bottom: 20px; + /* margin-bottom: 20px; */ + /* background-color: skyblue; */ + border-bottom: 1px solid rgba(0, 0, 0, 0.2); `; export const Finsh = styled.div` @@ -463,3 +467,294 @@ export const NaviPlus = styled.div` margin-left: 2.8rem; cursor: pointer; `; + +export const StFilterContainer = styled.div` + /* width: 50%; */ + height: 30px; + display: flex; + /* background-color: skyblue; */ +`; + +export const StKrFilter = styled.div` + width: 143px; + height: 30px; + border: 0.5px solid #000; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + .filterContainer { + display: flex; + align-items: center; + font-size: 15px; + color: #4b4b4b; + padding: 0px 10px; + cursor: pointer; + img { + width: 16px; + height: 15px; + margin-right: 6.6px; + } + } + .krDrop { + width: 206px; + /* height: 127px; */ + position: absolute; + top: 100%; + left: 0; + background: #ffffff; + border: 0.5px solid #000000; + border-radius: 8px; + display: flex; + flex-direction: column; + align-items: center; + .inputBox { + margin-top: 9px; + width: 182px; + white-space: normal; + /* height: 21px; */ + background: #ffffff; + border: 0.5px solid #000000; + border-radius: 5px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 3px 4px; + .hashFlex { + width: 152px; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + gap: 4px; + .hash { + /* width: 36px; */ + height: 15px; + background: #457eff; + border: 1px solid #457eff; + border-radius: 2.3px; + color: #fff; + display: flex; + align-items: center; + justify-content: center; + padding: 2px; + span { + } + svg { + width: 7px; + height: 7px; + margin-left: 3px; + cursor: pointer; + path { + fill: rgba(217, 217, 217, 1); + } + } + } + } + .closeBtn { + width: 20px; + height: 20px; + cursor: pointer; + } + } + ul { + padding: 0; + margin-top: 11px; + margin-bottom: 0; + /* background-color: skyblue; */ + li { + width: 175px; + height: 15px; + margin-bottom: 12px; + display: flex; + align-items: center; + font-size: 15px; + font-weight: 500; + /* :nth-last-child(1) { + margin-bottom: 0; + } */ + input { + width: 15px; + height: 15px; + margin-right: 8px; + cursor: pointer; + } + .kr { + margin-right: 2px; + } + .desc { + margin-left: 2px; + } + } + } + } +`; + +export const StDoneFilter = styled.div` + width: 143px; + height: 30px; + border: 0.5px solid #000; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + margin: 0 12px; + /* background-color: pink; */ + .filterContainer { + display: flex; + align-items: center; + font-size: 15px; + color: #4b4b4b; + cursor: pointer; + padding: 0px 10px; + img { + width: 16px; + height: 15px; + margin-right: 6.6px; + } + } + .doneDrop { + width: 206px; + /* height: 127px; */ + position: absolute; + top: 100%; + left: 0; + background: #ffffff; + border: 0.5px solid #000000; + border-radius: 8px; + display: flex; + flex-direction: column; + align-items: center; + /* background-color: pink; */ + .inputBox { + margin-top: 9px; + width: 182px; + white-space: normal; + /* height: 21px; */ + background: #ffffff; + border: 0.5px solid #000000; + border-radius: 5px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 3px 4px; + .hashFlex { + width: 152px; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + gap: 4px; + .hash { + /* width: 36px; */ + height: 15px; + background: #457eff; + border: 1px solid #457eff; + border-radius: 2.3px; + color: #fff; + display: flex; + align-items: center; + justify-content: center; + padding: 2px; + span { + } + svg { + width: 7px; + height: 7px; + margin-left: 3px; + cursor: pointer; + path { + fill: rgba(217, 217, 217, 1); + } + } + } + } + .closeBtn { + width: 20px; + height: 20px; + cursor: pointer; + } + } + ul { + padding: 0; + margin-top: 11px; + margin-bottom: 0; + /* background-color: skyblue; */ + li { + width: 175px; + height: 15px; + margin-bottom: 12px; + display: flex; + align-items: center; + font-size: 15px; + font-weight: 500; + /* :nth-last-child(1) { + margin-bottom: 0; + } */ + input { + width: 15px; + height: 15px; + margin-right: 8px; + cursor: pointer; + } + .done { + margin-right: 2px; + } + } + } + } +`; + +export const StSortFilter = styled.div` + width: 86px; + height: 30px; + border: 0.5px solid #000000; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + .sortContainer { + cursor: pointer; + display: flex; + align-items: center; + font-size: 15px; + color: #4b4b4b; + padding: 0px 10px; + img { + width: 14px; + height: 14px; + margin-right: 7px; + } + } + .sortDrop { + padding: 0; + margin: 0; + position: absolute; + top: 100%; + width: 86px; + background: #ffffff; + border: 0.5px solid #000000; + border-radius: 8px; + text-align: center; + li { + width: 100%; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + font-size: 15px; + color: #4b4b4b; + border-bottom: 0.3px solid #000; + transition: all 0.3s; + :nth-last-child(1) { + border: none; + } + :hover { + background: rgba(217, 217, 217, 0.45); + } + } + } +`; diff --git a/src/store/store.js b/src/store/store.js index bedca8a..3e93b46 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -1,4 +1,5 @@ -import { atom } from 'recoil'; +import { get } from 'react-scroll/modules/mixins/scroller'; +import { atom, selector } from 'recoil'; export const NowState = atom({ key: 'now', default: '0' }); @@ -47,16 +48,22 @@ export const patchTodoInfo = atom({ }, }); -// export const accessTokenInfo = atom({ -// key: 'defaultAccessTokenInfo', -// default:{ -// localStorage.getItem('accesstoken') -// } -// }); - -// export const userId = atom({ -// key : 'userInfo', -// default : { -// id : -// } -// }) +export const krDataAtom = atom({ + key: 'krData', + default: null, +}); + +export const okrCheckSelector = selector({ + key: 'okrCheck', + // get: ({ get }) => { + // const datas = get(krDataAtom)?.map(el => { + // console.log(el); + // const data = { ...el }; + // data.checked = true; + // return data; + // }); + // return datas; + // }, + get: ({ get }) => get(krDataAtom), + set: ({ set }, checkList) => set(krDataAtom, checkList), +}); From 86817cb0a37aa33d686915f4b75ec5c6b7f3851b Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sun, 23 Apr 2023 15:27:55 +0900 Subject: [PATCH 57/72] =?UTF-8?q?pull=EC=9D=84=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=9E=84=EC=8B=9C=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/global/globalModal/TodoModal.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 15955fd..e9fd148 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -239,7 +239,6 @@ const TodoModal = ({ <img src={todoOkr} alt='' /> <OkrDropDown setKid={setKid} setOid={setOid} /> </div> - <div className='object itemBox'> <img src={todo} alt='' /> <input @@ -253,10 +252,9 @@ const TodoModal = ({ }} /> </div> - <div className='object itemBox'> <img src={memo} alt='' /> - <input + <textarea type='text' placeholder='Memo 내용을 작성하세요' className='input' @@ -267,6 +265,7 @@ const TodoModal = ({ /> </div> + {/* <textarea name='' id='' cols='310' rows='310'></textarea> */} <div className='date'> <img src={calender} alt='' /> <div className='dateBox'> From 9940c5d51369955ad7ad986721c694cc0d28ac29 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 24 Apr 2023 07:01:20 +0900 Subject: [PATCH 58/72] =?UTF-8?q?refect=20:=20mainpage=20component?= =?UTF-8?q?=EB=A5=BC=20page=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/global/header/Header.jsx | 4 +- src/components/mainpage/Menu.jsx | 32 +++++++ src/components/mainpage/menu.styled.js | 7 +- src/components/mainpage/todo.styled.js | 4 +- .../Article.jsx => member/LoginForm.jsx} | 6 +- .../Article.jsx => member/RegisterForm.jsx} | 21 ++--- src/pages/Mainpage.jsx | 90 ++++++++----------- src/pages/SignIn.jsx | 15 +--- src/pages/SignUp.jsx | 13 +-- src/pages/TodoPage.jsx | 20 +++++ src/router/Router.js | 9 +- src/store/store.js | 5 +- src/styles/mainpage.styled.js | 24 +++++ 13 files changed, 145 insertions(+), 105 deletions(-) create mode 100644 src/components/mainpage/Menu.jsx rename src/components/{signIn/Article.jsx => member/LoginForm.jsx} (98%) rename src/components/{signUp/Article.jsx => member/RegisterForm.jsx} (95%) create mode 100644 src/pages/TodoPage.jsx create mode 100644 src/styles/mainpage.styled.js diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index ab11027..20a6c52 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -17,7 +17,7 @@ export default function Header() { const onLogout = () => { localStorage.removeItem('accesstoken'); setUserState(userState + 1); - navigate('/'); + navigate('/signin'); }; const handleMouseEnter = () => { @@ -41,7 +41,7 @@ export default function Header() { action: '로그아웃', }); } - navigate('/'); + navigate('/signin'); }; return ( <Layout> diff --git a/src/components/mainpage/Menu.jsx b/src/components/mainpage/Menu.jsx new file mode 100644 index 0000000..1cebb88 --- /dev/null +++ b/src/components/mainpage/Menu.jsx @@ -0,0 +1,32 @@ +import { NowState } from '../../store/store'; +import { MenuContainer, MenuItem } from './menu.styled'; +import React, { useState } from 'react'; +import { useLocation, useNavigate, useParams } from 'react-router-dom'; +import { useRecoilState } from 'recoil'; + +const Menu = () => { + const navigate = useNavigate(); + // url 정보를 이용해 active 주기 + const location = useLocation(); + + return ( + <MenuContainer> + <MenuItem + className={location.pathname === '/' ? 'active' : ''} + onClick={e => { + navigate('/'); + }}> + Dashboard + </MenuItem> + <MenuItem + className={location.pathname === '/todo' ? 'active' : ''} + onClick={e => { + navigate('/todo'); + }}> + To - do + </MenuItem> + </MenuContainer> + ); +}; + +export default Menu; diff --git a/src/components/mainpage/menu.styled.js b/src/components/mainpage/menu.styled.js index d6d45a0..693aac1 100644 --- a/src/components/mainpage/menu.styled.js +++ b/src/components/mainpage/menu.styled.js @@ -1,14 +1,11 @@ import styled from 'styled-components'; export const MenuContainer = styled.div` - width: 28rem; - /* height: 1650px; */ + width: 28.3rem; height: 100%; display: flex; flex-direction: column; align-items: center; - margin-top: 1.8rem; - padding: 0 2rem 0 0; position: sticky; top: 20px; @@ -20,7 +17,7 @@ export const MenuItem = styled.button` border: none; font-size: 20px; font-weight: 900; - margin-bottom: 2.5rem; + margin-bottom: 2.4rem; text-align: right; cursor: pointer; background-color: #fff; diff --git a/src/components/mainpage/todo.styled.js b/src/components/mainpage/todo.styled.js index b539c21..7b0376c 100644 --- a/src/components/mainpage/todo.styled.js +++ b/src/components/mainpage/todo.styled.js @@ -4,9 +4,7 @@ import styled from 'styled-components'; export const Container = styled.div` width: 100%; max-width: 68.2rem; - max-height: 56rem; - height: 100%; - /* overflow-y: auto; */ + height: 56rem; border: 1px solid rgba(232, 232, 232, 1); margin-left: 3.9rem; box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); diff --git a/src/components/signIn/Article.jsx b/src/components/member/LoginForm.jsx similarity index 98% rename from src/components/signIn/Article.jsx rename to src/components/member/LoginForm.jsx index 17668c2..caffd4a 100644 --- a/src/components/signIn/Article.jsx +++ b/src/components/member/LoginForm.jsx @@ -19,7 +19,7 @@ import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; import { toast } from 'react-toastify'; -const Article = () => { +const LoginForm = () => { const navigate = useNavigate(); // 눈 아이콘 const [pwEyeOpen, setPwEyeOpen] = useState(false); @@ -81,7 +81,7 @@ const Article = () => { localStorage.setItem('Id', userInfo.email); localStorage.setItem('accesstoken', response.accessToken); toast('로그인이 성공적으로 되었습니다.'); - navigate('/mainpage'); + navigate('/'); }, onError: response => { toast(response.response.data); @@ -137,4 +137,4 @@ const Article = () => { ); }; -export default Article; +export default LoginForm; diff --git a/src/components/signUp/Article.jsx b/src/components/member/RegisterForm.jsx similarity index 95% rename from src/components/signUp/Article.jsx rename to src/components/member/RegisterForm.jsx index 1d089ef..bbb0dc1 100644 --- a/src/components/signUp/Article.jsx +++ b/src/components/member/RegisterForm.jsx @@ -11,16 +11,16 @@ import { Label, HelpBox, } from '../../styles/sign.styled'; +import Toast from '../global/Toast'; import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; import { OnChange } from '../global/onChange'; -import Toast from './../global/Toast'; import { useMutation } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { useNavigate } from 'react-router-dom'; import { toast } from 'react-toastify'; -const Article = () => { +const RegisterForm = () => { // 새로고침 막기 const preventClose = e => { e.preventDefault(); @@ -83,6 +83,8 @@ const Article = () => { } if (!userInfo.team.trim()) { errors.team = '팀명을 입력해주세요.'; + } else if (userInfo.team.length < 2) { + errors.team = '팀명은 최소 두글자 이상이에요.'; } if (!userInfo.teamposition.trim()) { errors.teamposition = '직급을 선택해주세요.'; @@ -100,7 +102,7 @@ const Article = () => { }); } alert('회원가입 성공'); - navigate('/'); + navigate('/signin'); }, onError: response => { @@ -111,7 +113,8 @@ const Article = () => { action: '회원가입 실패', }); } - alert(response?.response.data); + // alert(response?.response.data); + alert('실패'); }, }); @@ -125,13 +128,6 @@ const Article = () => { } }; - const onKeyDown = e => { - console.log(e); - if (e.key === 'Enter') { - handleSubmit(e); - } - }; - return ( <SignWrap onSubmit={handleSubmit}> <MainHeader>회원가입</MainHeader> @@ -141,7 +137,6 @@ const Article = () => { id='email' type='text' name='email' - onKeyDown={onKeyDown} value={userInfo.email} placeholder='이메일을 입력하세요' onChange={event => { @@ -240,4 +235,4 @@ const Article = () => { ); }; -export default Article; +export default RegisterForm; diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 6c863a1..21ec670 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,24 +1,35 @@ +import { Wrap } from '../'; import { GetUserInfo } from '../apis/apiGET'; import Calendar from '../components/calendar/Calendar'; import CompanyOKR from '../components/companyOKR/companyOKR'; import Modal from '../components/global/globalModal/AlertModalTest'; import Portal from '../components/global/globalModal/Potal'; import DashBoardCalendar from '../components/mainpage/Calendar'; +import Menu from '../components/mainpage/Menu'; import DashBoardOKR from '../components/mainpage/OKR'; import DashBoardTodo from '../components/mainpage/ToDo'; import Tutorial from '../components/mainpage/Tutorial'; import TeamOKR from '../components/teamOKR/TeamOKR'; import Todo from '../components/todo/Todo'; import { accessTokenInfo } from '../store/store'; +import { StMainPageWrap, StWrap } from '../styles/mainpage.styled'; import { MenuContainer, MenuItem } from './../components/mainpage/menu.styled'; import { useQuery } from '@tanstack/react-query'; import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { Navigate, useNavigate } from 'react-router-dom'; import styled from 'styled-components'; export default function Mainpage() { const navigate = useNavigate(); + // localStorage에 accesstoken 여부 확인 + useEffect(() => { + // console.log(localStorage.accesstoken); + if (localStorage.accesstoken === undefined) { + navigate('/signin'); + } + }, []); + // const navigate = useNavigate(); const [uid, setUid] = useState(null); const [accessToken, setAccessToken] = useState( @@ -37,7 +48,7 @@ export default function Mainpage() { useEffect(() => { if (localStorage.accesstoken === undefined) { - navigate('/'); + navigate('/signIn'); } }, []); @@ -45,21 +56,18 @@ export default function Mainpage() { const menuList = ['Dashboard', 'TO - DO']; - const selectComponent = { - Dashboard: ( - <> - <OkrContainer> - <DashBoardOKR /> - <DashBoardTodo /> - </OkrContainer> - <DashBoardCalendar /> - </> - ), - // 'All OKR': <CompanyOKR />, - // 'TEAM OKR': <TeamOKR />, - 'TO - DO': <Todo />, - // Calendar: <Calendar />, - }; + // const selectComponent = { + // Dashboard: ( + // <> + // <OkrContainer> + // <DashBoardOKR /> + // <DashBoardTodo /> + // </OkrContainer> + // <DashBoardCalendar /> + // </> + // ), + // 'TO - DO': <Todo />, + // }; const [now, setNow] = useState('Dashboard'); const clickNowPage = e => { @@ -68,53 +76,31 @@ export default function Mainpage() { }; return ( - <Wrap> + <StWrap> {userInfo?.firstLogin ? ( <Portal> <Tutorial /> </Portal> ) : ( <> - <MenuContainer> - {menuList.map((text, i) => { - return ( - <MenuItem - text={text} - key={i} - onClick={clickNowPage} - name={text} - className={text === now ? 'active' : ''}> - {text} - </MenuItem> - ); - })} - </MenuContainer> - <MainContainer>{selectComponent[now]}</MainContainer> + <aside> + <Menu /> + </aside> + + <main> + <OkrContainer> + <DashBoardOKR /> + <DashBoardTodo /> + </OkrContainer> + <DashBoardCalendar /> + </main> </> )} - </Wrap> - // <Modal /> + </StWrap> ); } -const Wrap = styled.div` - width: 100%; - display: flex; - height: auto; - /* background-color: pink; */ -`; - -const MainContainer = styled.div` - width: 100%; - max-width: 154rem; - display: flex; - flex-direction: column; - margin-left: 2rem; - /* background-color: pink; */ -`; - const OkrContainer = styled.div` width: 100%; display: flex; - /* background-color: skyblue; */ `; diff --git a/src/pages/SignIn.jsx b/src/pages/SignIn.jsx index 1b80497..f89ffc7 100644 --- a/src/pages/SignIn.jsx +++ b/src/pages/SignIn.jsx @@ -1,15 +1,6 @@ -import Article from '../components/signIn/Article'; -import React, { useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; +import LoginForm from '../components/member/LoginForm'; +import React from 'react'; export default function SignIn() { - const navigate = useNavigate(); - - useEffect(() => { - if (localStorage.accesstoken !== undefined) { - navigate('/mainpage'); - } - }, []); - - return <Article />; + return <LoginForm />; } diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index a1c9b49..0ca4a25 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -1,15 +1,6 @@ -import Article from '../components/signUp/Article'; +import RegisterForm from '../components/member/RegisterForm'; import React from 'react'; -import { useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; export default function SignUp() { - const navigate = useNavigate(); - - useEffect(() => { - if (localStorage.accesstoken !== undefined) { - navigate('/mainpage'); - } - }, []); - return <Article />; + return <RegisterForm />; } diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx new file mode 100644 index 0000000..f28747c --- /dev/null +++ b/src/pages/TodoPage.jsx @@ -0,0 +1,20 @@ +import Menu from '../components/mainpage/Menu'; +import Todo from '../components/todo/Todo'; +import { StWrap } from '../styles/mainpage.styled'; +import React from 'react'; + +const TodoPage = () => { + return ( + <StWrap> + <aside> + <Menu /> + </aside> + + <main> + <Todo /> + </main> + </StWrap> + ); +}; + +export default TodoPage; diff --git a/src/router/Router.js b/src/router/Router.js index ec68c98..23469ee 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -1,8 +1,10 @@ import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; +import Menu from '../components/mainpage/Menu'; import Mainpage from '../pages/Mainpage'; import Signin from '../pages/SignIn'; import SignUp from '../pages/SignUp'; +import TodoPage from '../pages/TodoPage'; import React from 'react'; import { Route, Routes } from 'react-router-dom'; @@ -11,9 +13,10 @@ export default function Router() { <GlobalLayout> <Header /> <Routes> - <Route path='/' element={<Signin />} /> - <Route path='/signUp' element={<SignUp />} /> - <Route path='/mainpage' element={<Mainpage />} /> + <Route path='/' element={<Mainpage />} /> + <Route path='/signin' element={<Signin />} /> + <Route path='/signup' element={<SignUp />} /> + <Route path='/todo' element={<TodoPage />} /> </Routes> </GlobalLayout> ); diff --git a/src/store/store.js b/src/store/store.js index 3e93b46..e908aa8 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -1,7 +1,10 @@ import { get } from 'react-scroll/modules/mixins/scroller'; import { atom, selector } from 'recoil'; -export const NowState = atom({ key: 'now', default: '0' }); +// export const NowState = atom({ +// key: 'menu', +// default: 'Dashboard', +// }); export const ToggleStartState = atom({ key: 'toggle', default: false }); diff --git a/src/styles/mainpage.styled.js b/src/styles/mainpage.styled.js new file mode 100644 index 0000000..1228a75 --- /dev/null +++ b/src/styles/mainpage.styled.js @@ -0,0 +1,24 @@ +import styled from 'styled-components'; + +export const StWrap = styled.div` + width: 100%; + height: auto; + /* background-color: pink; */ + display: flex; + aside { + width: 28rem; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + margin-right: 3.8rem; + margin-top: 1.8rem; + + position: sticky; + top: 20px; + } + main { + width: 100%; + max-width: 147rem; + } +`; From eebd9b709f688d751187ce7ce9b52cbdb93e0f3b Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Wed, 26 Apr 2023 04:26:54 +0900 Subject: [PATCH 59/72] =?UTF-8?q?fix=20:=20OKR=20=EC=9E=90=EC=8B=A0?= =?UTF-8?q?=EA=B0=90=20=EC=A0=9C=EC=99=B8=ED=95=98=EA=B3=A0=20css=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C,=20todo=20=EC=A0=84=EC=B2=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20navi=20=EC=82=B4=EB=A6=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/bad.png | Bin 1532 -> 0 bytes src/assets/bad2.png | Bin 20966 -> 0 bytes src/assets/dropdownArrow.png | Bin 355 -> 279 bytes src/assets/emoji1.png | Bin 1203 -> 1764 bytes src/assets/emoji2.png | Bin 1113 -> 1804 bytes src/assets/emoji3.png | Bin 1113 -> 1864 bytes src/assets/filldropArrow.png | Bin 288 -> 285 bytes src/assets/good.png | Bin 1464 -> 0 bytes src/assets/info.png | Bin 0 -> 473 bytes src/assets/normal2.png | Bin 21545 -> 0 bytes src/assets/question.png | Bin 0 -> 582 bytes src/components/calendar/Calendar.jsx | 7 - src/components/companyOKR/companyOKR.js | 7 - src/components/dashboard/DashOKR.jsx | 104 ++++++++++ .../ToDo.jsx => dashboard/DashToDo.jsx} | 30 ++- .../{mainpage => dashboard}/Menu.jsx | 8 +- .../{mainpage => dashboard}/TodoItem.jsx | 0 .../{mainpage => dashboard}/Tutorial.jsx | 0 .../calendar}/Calendar.jsx | 12 +- .../{mainpage => dashboard/okr}/OkrItem.jsx | 183 ++++++++---------- src/components/global/Loading.jsx | 22 ++- .../global/globalModal/AlertModalTest.jsx | 49 ----- .../global/globalModal/KrPatchModal.jsx | 70 +++++-- .../global/globalModal/OkrModal.jsx | 50 ++++- .../global/globalModal/OkrPatchModal.jsx | 6 +- .../global/globalModal/ProgressPatchModal.jsx | 2 +- .../global/globalModal/TodoModal.jsx | 2 +- .../global/globalModal/modal.styled.js | 105 +++++++--- .../global/globaldropdown/ColorDropDown.jsx | 34 ++-- .../global/globaldropdown/Emotion.jsx | 77 ++++++-- .../global/globaldropdown/dropDown.styled.js | 74 +++++-- src/components/global/header/Header.jsx | 6 - src/components/global/header/header.styled.js | 2 +- src/components/mainpage/Kr.jsx | 19 -- src/components/mainpage/OKR.jsx | 135 ------------- src/components/teamOKR/TeamOKR.jsx | 7 - src/components/todo/DetailTodoItem.jsx | 6 +- src/components/todo/DoneFilter.jsx | 2 +- src/components/todo/Filter.jsx | 2 +- src/components/todo/FinishTodo.jsx | 6 +- src/components/todo/KrFilter.jsx | 2 +- src/components/todo/PastTodo.jsx | 6 +- src/components/todo/SortFilter.jsx | 2 +- src/components/todo/TeamTodo.jsx | 2 +- src/components/todo/Todo.jsx | 89 +++++---- src/components/todo/TodoNavi.jsx | 83 +++++--- src/index.js | 22 ++- src/pages/Mainpage.jsx | 89 +++------ src/pages/TodoPage.jsx | 2 +- src/router/Router.js | 1 - src/shared/useSomethingQuery.js | 29 +++ src/store/store.js | 36 +++- .../mainpage => styles}/Calendar.styled.js | 0 .../mainpage => styles}/OKR.styled.js | 76 +++----- src/styles/mainpage.styled.js | 5 + .../mainpage => styles}/menu.styled.js | 0 .../mainpage => styles}/todo.styled.js | 2 +- .../todo => styles}/tododetail.styled.js | 14 +- 58 files changed, 829 insertions(+), 658 deletions(-) delete mode 100644 src/assets/bad.png delete mode 100644 src/assets/bad2.png delete mode 100644 src/assets/good.png create mode 100644 src/assets/info.png delete mode 100644 src/assets/normal2.png create mode 100644 src/assets/question.png delete mode 100644 src/components/calendar/Calendar.jsx delete mode 100644 src/components/companyOKR/companyOKR.js create mode 100644 src/components/dashboard/DashOKR.jsx rename src/components/{mainpage/ToDo.jsx => dashboard/DashToDo.jsx} (76%) rename src/components/{mainpage => dashboard}/Menu.jsx (68%) rename src/components/{mainpage => dashboard}/TodoItem.jsx (100%) rename src/components/{mainpage => dashboard}/Tutorial.jsx (100%) rename src/components/{mainpage => dashboard/calendar}/Calendar.jsx (91%) rename src/components/{mainpage => dashboard/okr}/OkrItem.jsx (71%) delete mode 100644 src/components/global/globalModal/AlertModalTest.jsx delete mode 100644 src/components/mainpage/Kr.jsx delete mode 100644 src/components/mainpage/OKR.jsx delete mode 100644 src/components/teamOKR/TeamOKR.jsx create mode 100644 src/shared/useSomethingQuery.js rename src/{components/mainpage => styles}/Calendar.styled.js (100%) rename src/{components/mainpage => styles}/OKR.styled.js (82%) rename src/{components/mainpage => styles}/menu.styled.js (100%) rename src/{components/mainpage => styles}/todo.styled.js (98%) rename src/{components/todo => styles}/tododetail.styled.js (98%) diff --git a/src/assets/bad.png b/src/assets/bad.png deleted file mode 100644 index c4f05b08414bb0b7bb94e3ece5ce13287d2c11bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 zcmV<Y1q1qtP)<h;3K|Lk000e1NJLTq001EX001Tk1^@s6O5yU?00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1(8WaK~#7F?U!3@ z9Mu`ee{<WNnZ0?9?Rf3DjZ2ya+J?4L+N!Ehi&Tk96)jbzioO7ERUZmS0SO@lJo7*h zB3vF2Jn_K&8ZNmi20|Q?5J*U(m^g`v*Y;*TUhjHmW@mQz#vySMOxV~!Uh<b#=bYI& z=ls9_`MxvXr*IacC~EV4|2AoFk>N7FV<?KUN18p&X7d5dvWCw*Ki!edZ<asTO1F*g zACCMUFimsq84|AR-X_gjeqgAodP^dact)w$>&rx@-TW{LoDV0NO!lkNx&IOoh|wme zaJwohT*D=V?0>T&Od>8ZR2GR>Kdp28WN^WEp4%TVI1*eOiLe>5;Xs{l!+51hqupYl z_|0OLrbFr}gWVPN;z$gB(ZFf57#jDv5Z*e{puaas)lTsFSmV^DmGGQ*HVg+WEf|>X z2?mD!)=0>0$xBB(mM=}Rd31gYJvU%%w9a4!mL_0DA;F6WeVGdzWzOL7Q=7$#zUS!t z#8&uqx5l#v=RXqt{0Cb<uaoPr>Cs>)&^TEOxFV$!hD~<w9Or{ACpom&B{EX%`&%Ec zAA=KB*u1?)<ui}#Z|&y&eN|TX!KB+{&v?kDBTyG!Lyjvu*xycKXQ@e)RvE3qOla`& zi3$bJ<H<)3QZ@2u$8~JI1G{N5vUi-joRH8D`BTwjXnC5xw8DWdoAo=&{Pnk43Ra!F zUn`0#E_Ys|(UKC&I+NTpFwLv`Lp;af%HRZRpFf6`?ct_}R<hy2QF0{{JyN;pu)${& z74p7L8Vjd8MeG@!S&c^?pCCEn@znKK@X9ftjGp9%<#uZ%{@HJcyaD@%i})kQS--hR z&gdYudI>9kYO&+GHkQ4X!fgfw%_g0d)a*Pb5%BV%DN0Hw<w^r<+GpeX5$e+(|Nc)8 zx^WTFp~@%i|Enzi*Q+x%FiKJ^>~1Tt<ho8e<?a68<tXJmx{@{pJ53>#q07p!LTTgL zy*|6Q93<F2!e6Q#D6YZIfeAj|GR1|U&-bt@?4N%46B?e*FY;I7cIEL*lLO)>Q{t?n zcEnY_f|Zm7WCd58t|sGuO?U9i5k-_UF_SuZOJk^Zm|YvnEMJu-x5S_&C1PxS^C)9S zeX_dE%G{6X3Qb<v>+s*VJs$g@OvY1ZlYp2+J}v%kffk#i>WsUS%mf}<q|v3flhx8p zPP%;hZk3jgqatCn`ITYZM!<^PQcPJrQLgcuZDW{Q4{_rs3Rh3s1gG{SDffgf2CA{+ zYbw4(LD`#<`65rK&}%NCG9y>}K9{Lt&>D$-AB|HSsZkGI`Z8Vkp+DPiKkD$aT_^c{ z(WDVIk$Xt~llYIrK~&L%L=Y)t5*lT{N?p|O{D7R6r5Oa2oEl&3YP3dT+q*|d=H)}5 zO^S6YZL8$={IkN!)fR>wFgY`W-d&^r4`ONmA&%MG_|YFddanx5%z&yFP`DcUt_`q% zUcohIgk*%#9*BXZc}aZjQyw&$a=r>-5Xmhma+`BJ>-7NNi^%5mI1ga`Tko)AaFF}% zz30?iKax~2B%Ph}_edmj>miohy7Aich3eO$<Md0qq0FB3*|02Kesg0@&LES?%*{<G zq!Z^ZsYuMn1kPUjd@L%TFbo~Zm{}|qMMAP=3|(ijh)E2yKuCf*dnAj*9#!&(XILN< zMHMGr9ErFpQzbg$qQ_w&i0=n=Q6!wWBvkYHyd!Gd(aMZ+xy<$tcbpl=S=d}5xggBe zq_d7Gou{RViCj>TiHQ;$H*Jz{!Q|}Nk$gj6m}AC<-+E3hdKz&_D9!y}6-2)}f2I`8 zJo?xZBn*Q>p_>z<MQ;4Z4fOW(&?1IoAB;DbJ<b?>(PFMyvnDlGn*4jz3_G)F`;B$$ i)*a?DF5@!3CwvKPT}>;xkFF>H0000<MNUMnLSTYgb?C?d diff --git a/src/assets/bad2.png b/src/assets/bad2.png deleted file mode 100644 index 40150556d3ebdd6f3eca04dd411dae901c155e8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20966 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 X=KmK=JF{z!1;9;n>+7FPz3=@G<L+p( diff --git a/src/assets/dropdownArrow.png b/src/assets/dropdownArrow.png index 152474578884545349b8de1b62e2d3bdd5bb25b1..e09a4e1930ea2f1ec11bbdc70f2e44630cea2c5a 100644 GIT binary patch delta 236 zcmV<I02BY?0+#|IiBL{Q4GJ0x0000DNk~Le0000E0000B2nGNE08fRyVv!*=f2>JF zK~#7FjgX5G!XONWOO64$fvX4{gLDI(K)Qk5z(v4rA{*ER07I|#&>BnbxIF&*k`UIQ zS!++|+NQz);3<R{_>#Abu}cjYW9;V!OP4D;U%`2$lvzO>Jz=Nw9)(+(H7*6`+#TJK z;6^E>cqdRQA%wo6r*&oi0cx$sLX^_*1G?dNJPFPP0E2ESN*UN}vH|m<%Bea2p7z)9 mP>=j5ol^oHs^gp=DE$T8JUO8UIk9*E0000<MNUMnLSTY^>|hiC delta 313 zcmV-90mlB90^<T9iBL{Q4GJ0x0000DNk~Le0000L0000H2nGNE05XQ>fRQ0JfA~p6 zK~#7Ft&-ajf-n$8H=z;jfD(iOzO@89kPe^(JHQV7<^%0OJ1`|s01r0|U<?ov;Lb2N zkKM~M2a=|#ZCTb4HWH;YA$*Z#*#~V0>&0Bx-BZ3Q%km5xsH&=vdlTyW{uAv6D?|uM zJkPuLq3z)XEr(@d_{80&4|N<Tf3NF0h6TdDEB3Q)PvioG_CmA4U`h^0JfLy~LJPq_ zMNypOvq7i{G!7>Sg7<7_TdV_(fdFSVR0kTqI1=If-KiQ8+5_z{ay5V>ih@E2ZFE|k z(oyv(Lpe154@!Z_)MsmjHU*SM@Po!+0*+Cr2u%fNkq}y<Tl)ntB3Kq74;U~O00000 LNkvXXu0mjfVTyNR diff --git a/src/assets/emoji1.png b/src/assets/emoji1.png index 821a2620fe2f0a6a2ff79400cd74f9b531d4b4dc..7a39e035368c1812e21eb6ff23a21c3143ebaef0 100644 GIT binary patch delta 1734 zcmV;%208h&3FHkSiBL{Q4GJ0x0000DNk~Le0000X0000V2nGNE0BMw@vXLP)e+GF; zL_t(|0limQY*bYk{?6SxcRHQ6P^b(lP!m$3f{G?YtxLqXB);f_m>5NU(3lwY!7V<h z@j;)o&l<M}pNva_!37nABnE;kf<{Xsl%+svJEgPSx!XB@=iauA(&>yu{gZ#r+~wT= zJKw*ZBTy$wsjeUhp5(ZZm&@@le~S=eFNeKS%2!<1Jv@7V<`0cO$cKac+lBvLCaJGv zGMT|y5VczENe+YfzeFib3k<{9=s3;?!t=c4q-hV%g8>-@P%?rrZ5XD7I$~P_L78l8 zYg?gbzT7GR8CD_3e+7!$ASydx#ecvwd`RgaG*$ra6_7paVJ%z@VY`h#e<WtXcF_w@ z3I1pnuE4y&72-pm!5n!TZTVq{r2{~I9pLowgAQK^8C1uB@-C=j-yxjpMzHV^SSvR` z7$%y?VGTmf3&0ykbl?qS<BwtV-3avF2bfD}Jj18jfL@iP##DldP5~2}A%{LiP2LW* z`bAjnJ@c8sydYw~0&Kk(f7u1U0Bc_b+Gt#94?3v|>nsQrr6Ay^*TG3(-y5inbwLh% z1k>&Q=OCnCg4*^NvN?Kd&7(m3f^_A==BU+5M^O(#YmoleS}g;=e~9Yng}}}4!E~~7 zg0Rp)<e|;TMq7Zs2Q*aP80AP1%1*~*s=hW-5D9?zEEr}D1g|eze-HQ6yD0zs7R;-k zYMqI&cm(E`x52&iVqnQCy1`7<qS^$ZW{hjqOsEuq24he|vJr9g3B>1k`Urx3yW!vU z6P(<_b3hn#A(KNN!)=?O;SREUnmWc0k0Gj^#Akz>aNvg>e2YGpC#WOoh*KEawHu$l z`8g_M$J05%crp)`e?{X8;m*O<+@WL)Is6q=J`WMmrvU>^7|DnBe18-}+YjR4&Likw z+YZY%XNjmx2H5iMPE^NA=wUJp+_8*v<CKYzjI?(%#lMD(Uz#p#^MDA;L|*z0=w`9; zr|5QT8ia{zaSDaS2Bs<@YLny0bvP*kiZ@Y%ta>Q)T9`Oqf8<=&zd&aRpZg({;Q!h& z1QWx^EV^WVcf?aC7*l1anCTWWAVZHIqSmTdRB%wON@Vg5vKg*2U<wD-MB8&Q7F^)M ztHda*aHr>0)47q)c%@1Lt&F0nJEF=M0Yr#nABLteOrj)VV^zNk<AGIJNHz?Q0F9Y7 zD7akkU61x*e`Gko%04q$eZoShl`iIjB7PT@@#Y{D(=Xy8WByp$c1%Mi9Uln@CD6Z& z1`IKq3~5Y=#4CA2A-~*8jYpg(Rr-#OGpbG))3lp|u=52}qc%iA2qz5L8c3}M64iOn zR4EJfO;d+PVpJu75$jPUsj8T=`g=iOA~#3nJO_l;e_22%x)=`Qko2jrGc1Z(l*=JX z3_PJ(nQ0k+2cc5qiY#?9XtTDJ0Eqb=-;?m;c68>Kwg4iNgIchL755vKi2xa=!WQA+ z+pQDWy=ye7Ros7Iu3DdXh8;H~69d;R!TNzb6oWUaF`Fs`m+Obq+1nh1HjrDr0aKg5 zU>4Xke_G?cGr0ApMOb(J(j-38Vkzcu2X7ICuG~FYrlmIl$*ii9g-S7id&B+oqSYLP zmX4LTpt${Nl#2UUqfBI#2bbZWwb+1cst&Hi9d$s|bUf(P7EH@(g;`pIM*yXX5TSc1 z3TyA3%iP=`>})3%uYV4spF9N1iIVixKrDxWe;Ttd7%WnzlNK?p8h{Q2{Y<hRgnkl; zUQMEWhOu-yLhn7#a!RIk5D6Rox1)N^6FBqZ>!}TCqm6hRyTY=|fHlpun+h=<lu=sp zV~LQp!S^+Q08^)ZbYA-mI#%7;$W&txT6%ANfj%vxy#Jk~;$?C++>FUM5zP0vZmXz4 zf077l#FX@EF)L?;GJ9a|%E!s-^JK5FDc#Bsq2WO%&4J0?AL7)eXOPX-;C8Sh5{PB7 zYBES?8+lUTB>P<qzZ9Zeva$G%*U)*@26|6#W*Y9q_v$VG%gl(EFt2c<TN=UW_P5~; zZGtKflZ}X7)JT#f*<l9S4F;rBK>KBPf1_vJ!?3%Tq1iEjw%-@UVzG-yGR;O;Gay=Z z7xYH<!#lc*z)sS5nJaCFnO%%b;d12qu7%xs;q<nz={aPQb>+(BEwZtZh~BF^l(Zm? z_Q$QxPvmKR6ik`{nRs8{Ab`o%=Zgl~l4u4V`pa2#M)Z-8gN~6kXmTJrPdQBE93N=o cqHe)|0zN$x#)~rtC;$Ke07*qoM6N<$g87~~n*aa+ delta 1168 zcmV;B1aJG~4YLU$iBL{Q4GJ0x0000DNk~Le0000V0000V2nGNE03WUvIgueWe*{QL zL_t(|0j*bEXk0}U{^suP-A!(5ZL^ynsx&Q4BedBhrX@-wCYnDjXtiJqMUhspPlCRP zMWj{47cJ5UD+*GiQePBb6a&$Xw2ETfN*kmGQxj^^O*UPUZ8q-Tz0))IwwvC)cX#hD z`CxW-X3m^%&Y3ea=Q211pG7xZf9M567d3-a*BJv;vY5pRCJ@IDQ1K1hgK;N1St$WN zgMP?3Mt^%s$<iW#dA<Gv8cxw7K1U_wJc=DueM03?lmp?3IVx$r^*1C8v35+^iMqwl z!hJ7nPO5l~gFQ>lMVCJ@mAy9nm>N;;iGSP*b!Hu0wJWIJKLO?G$%4Fzf3KRb^6fT5 zKCp~+d#^P6TCb1Kwmo%Dol_nsktN3Pr%Pie8X{+=*uV8JHo6%P(Lm$firD%z_)XbD zpd7q{jmLho^e>(4z|AweEd5L&Jqe4RDK}@ml851VKCyruv2NX$4<Pk>y{Ru1uC*oB z^(1WdG-eq8RMNP12xTHQe^zH|Cx5yh<${9kVF_yho^qiAC=z4r0?LGY`=Y5`)q4$P zgJV=;5_^?ZWz$aQ_#T=?b^o-f&)az&RejS=RY0O3)HLY`<MU`wUk-$$M+Qr}&$}lA z|3@QWUez+j(=J304<dajP*ex=s0e)U9pt81r$jf=emNM0|MZA{f4mAoZi%Ai!;mep zu2fca9b$onAS|wVGX!~C48%Ji(S6;eTeUlaz-fD{gu=jQ!;sb&-yJb779j76!p>s< zd&BT`%orUUUBdF*0k!jhATDOHg(OWRZ;=Or5tGIKw?_<%SJA@g4(Is_#J-6b@a%}` z7CRyqB1=@3ZyT1Oe;9aU5ShtM#vYrAjfL`mtmFczv3hu#W4bG^{wL$-a20GJW(!B9 zR=Wn;5~#a33yp5K%+*csw%EskTVJgWyiE}i6uLFZd4{uRH^3=^HA&RDv-F^);oTa^ zc_Sa<hMOs+Y)eB1icf<R)RM(Jw>Y{s76kd_Qc_A*!*h?sf8hi}4<_K2xD(NFiT3Q5 zq9XrONdO1C<LGZ+E-E_Ewv0nPOK=1U=NTVECp|I078JUHJ6Va2FG3qId{M#NqC3|o zw&VbL=0LYI@92=xuBTBvj1YOC$08uMdCod7t1<jFZM@UfK8}WsA|@QU+JJ;h>`Am5 z%jb9pb_rs}e}1mm)8N(=Du#xWqRJ(Zw$=;%F{~{ZCfQzW7k^ii2@hTZ@=kq4IYLq5 zB*jnPoo0@lwLqk$hfTt6ILPeF!t3mr)im0aMzIcjP5W`&B(7j>z;S}yeaggVD;LI5 z5`JH&77@Py<Kd``G)^8o%AUZv{Gq~MEEg%AR`ESaW;E+je*-`nr|C9EY5vP(@r2!A z>2I|#o~K2;Ld3iE1vvA-D1EQJ%l2WUn2_UeB2Vljh5P8L?V~HViMC_&U7iqc<~V7) iKqur!HiYv|blw8BG;iQK^I-7+0000<MNUMnLSTY6Wgq+i diff --git a/src/assets/emoji2.png b/src/assets/emoji2.png index e8bd5c63842825654a117283fd92d5cf49e881b9..5f6e4eb2a70f1d756753a95c215ab1f77f2641e5 100644 GIT binary patch delta 1774 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 Q#Q*>R07*qoM6N<$f_r#QeE<Le delta 1078 zcmV-61j+l14%rAHiBL{Q4GJ0x0000DNk~Le0000V0000V2nGNE03WUvIgueWe*^AG zL_t(|0limSY!p=({?6>QW!Xwgw3eX3#R@@FY85I8)X;)Onh+Z`F)_wc8)HNhqlr&G zC>j!<nrI9$*ayLwnD_uZ8AC;?24V!FHp(q6T@p%fgtp6W>0UaAZ+3Qe+s@3{DOvcE zGjq=QFW-OuIhQ#CJ|VB+Sp=|+f7M0^tY@jV1T3={MjRIr#c|e;iU$1W$EPTyAcxR` zQhdZ}Qz2cXS;jKKoMHKjL41chA(v6CMFQWjx)qConTb)BWTt+J*?L|)g@~J~=4wBR z-6TG}XkruQa309M1qWc@oIHbfe38p>e8S#?tS-ZyLZ4?HWDxu1S^9N}e=|=!hWFU> zC5i!q<*K9ib+G~8JILh(!bsr)d&*EOT!S?U^O$1U$N>7yMn3H+E|X#sn+Q01D#+1o zH!|c*cLzHk#l3(;6DMGEj-2=acLPa}ehnX+FCnj@p2_|j#l{S*4aW;<H0WFwFWc={ zOv9;DK~Mb^E7GW|OL)rrfBMQWGNN0J>1+UVu%&()p{3Gl1h7-*qtO<|;~KiU?)P-w z(h^saA3Ii#o}Q4W{K?M~B+pKNi7h(UW3Bz=Q>Du=@bvo*qx#B!(YEp^YHE^DVe{r` zRNt4zq2Ufh5|23KsnUIX-mn@0)C%rs(iTSIVXXdX&|%aOK8SA{f8Kx+v#?fi3}`-g z0=+kz94dqLs}U}X<l1`1z{V{P$H}Z?8)oLs?3ufm%*tmL1mcD`=B)tT;Z#L#PNHa* zPz4paK9?LAVtELKFoFE&^h)62-9Ts!gW};g^aBG*Vv!ivIf_2+Zff!w<cWivNSl5p z@w&Wx&0gT-CT3_1e~ZBXCizK{w<^`<r1|jaRT%ue+o4jW)uDaEFYpbC-*hfB4g>rA z=#NeYaNx%)tX*-Hzpze2WypXp7&xr)cst9H_xjNv7%o-H|GE@}Py8d=(5Gdi_{@(* zETN%D_`-Z-yorrC;b-&@R-~2k>Poddi_2mc4&}%*D8ZYCf7B*bR%=(L5L#k*64!+j zDs#>;F~gsh?RGmyF4kk<cyxQG%6Ms+fzIdL<9nqs3Q^z|&~H5Up?ER>8$ItMzSY`& zgz4X_a<J=}7}}esusmdKV`e7aZk@>VD?z_IUh3IDw@Y^@?Gc~iYdOM6*hK@^^YJy3 zzq&Pw@u>hRf68aEq(rgbN=$Nyo%DNTp~!vu?hywlsioohT!;%&s%a9{%hQF3d--f| zBlae@0*K&U@dPu_ULKtO6IF2g8+Aoh;Ce5Kx6!_trQb`h;6>2}Zyb+PyN##X4({_c wJh@iowq3znDtI$BxK)?nSFsa+`0;rgy%{NFsz}Ac3;+NC07*qoM6N<$g8H)zb^rhX diff --git a/src/assets/emoji3.png b/src/assets/emoji3.png index 181ad8d36d931909d417d074372cc8973db6f754..a073cda9b9703097824bcac71b8bfef6ac93ac94 100644 GIT binary patch delta 1835 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 Z0K@JYcq>3MQvd(}07*qoM6N<$0fIrSQLX?0 delta 1078 zcmV-61j+lz4%rAHiBL{Q4GJ0x0000DNk~Le0000V0000V2nGNE03WUvIgueWe*^AG zL_t(|0j*bCXjDfS{$?+UxXC7J>Kc4$>?OstmUt<&3vF6jYg<9vJ{D0*p+<@?^#TD= zAAD21fEY!@8~T=LK#+LXAc(FST@Z~SUb3qj;~G~t8ne5{Z_Y_}bKG-F+z$?C{+Vy) zoByBx%*+vR2qlVd;l}q62-2Lve|JD@;FCfW{kVe!P9cpWVh+Mi#uRo0C4!$&ga#Jt z?6{l+(4)RX$Y2{Mu^(d*SDxTgzIO5X4x@pLM2ycH)w&HA=80O|Gorc-`^T`Dugjwr zmXPjLVA!o{Mj)(Q#ZovCr^jnqyO%{j#tM(Fw~x`-p@cZD!8~)qJy_0~f2}A4GJLx8 zY8Q!FIG87{Ji~_=#4Xm0L!l6bmV`MxXY$SxU!YSOxv&rNGcghF?DQfQbHfReNrCqE zV$I0!QbwKK!-gu(a4(_oG^4?GHcr5@WtCXDGN2A@1v$a``bw-?6+mNSxiLvW9oPSd ztT^$%*<el0r9)*8T3W1gf3U4>yvmbkZuTP)cNr4})~Mq2x|YW0#^N5G9f^2gg|4n5 zz1{6KCQ9$G<0}`l@=utcv^1l$OG+}Z!n^IoUJG&tb6re|pjmrW)gY!%AIRDZ7QBEJ zg2Dc5IZ%<pXVV7E$qIskyV(=2e1#cDhQ77chnkuJ%$)fec4%uIe~+#XFXn!eL|{_N ziW(8z(G(N{X~?e_c<H>0N9{0L$Y@HZ<PyuN%R|IIDDNpQmozaXSOCZmF=ES-VtvrU zS|DMfSBl@XVuZrnab=Rff@3J0V5r0PhzPsr$wjl)6Bm7G*g6^iZJL7EGiQ5ytj~=V zdje=UFd4_Ll$aA;f4Cq$Z#8S5Q9Xdb#1uNBMOeILDmEXTi0)qFUG5?451c7O{q{<P z?-wIbp2F;pEV9spCiSG?P2-H*^707G=J;JVS}v8~@cFWAbtNbCfj^zKqj5KS6WXMN zQ1HjsFY#C1bNI$(%)GuKe#MuXxOU2%$|K27Dy|h{eI6V-f9FSgS1}&N^Y_h3{uF+$ z?Z^B%FIY~)21~?z?8{vyjJzKqJ`#ONHy-q8o_hJ3!Vpg=wH4GL&?$by$Fi7PKrjB` zW)Xrs@P}cNW97ay%BviT>4jfY<Hun$d*BXTZT{AgJ#cWd9~D-M-*eY!-D%IuT@#aR zosRB9VW40=f5W{^r)S8M_iP0lRcV>9z0eMhv56)a!KLCC9DcXS{Ey`tZ?kC}C!?B| zKHw?FvbCON|9|Q69ivA3f3>Sv#7Qit@N9Jg&LVJ@r``s!5GSojj?;;esNsMMkz}^M w!Y5pgsUsrsm`|9awebr%E#~2ZlQG`{=Y={v7hroT3;+NC07*qoM6N<$f@nbn2LJ#7 diff --git a/src/assets/filldropArrow.png b/src/assets/filldropArrow.png index 14b14e1565b3e3cb7c53fd8948b2cc779b07e090..df64726508c05191f8d338a092b31fe331c63957 100644 GIT binary patch delta 221 zcmV<303!dO0-XYo7YYjq1^@s6Pldc<ks&pIvPnciRCoc6kiiYYFbqZQ&;i(hDS#`C z!UixvL`oMR8?XsIBH+LVWCMBzrN&J~2@R?8rC74RUVdT(7VYM1AR0r81U*n*bmp1{ z60l7I0dvQ<;B(K_Bv1zBS#=<)TLoY@383n7{V5gGBaasU87ld2%TFhIW)3mg(aLW~ ze?XMil3^WEctCYBQLw%FrMOn!#DK-%B?0IbRl_$GQTNjZMaAsioS2`*(VCYbCNcL7 X-3&Lb%et`900000NkvXXu0mjf@{C*| delta 224 zcmV<603ZLI0-yqr7YYst1^@s6A4o0Hks&pIwMj%lRCoc^(7_GDFbn`dJ9GdxU<%+1 zqp$%CP?6FF$Oddep9pxc0oj1QL8)<4Q9?sdzF4Xy+qyalz~2PgM4Ranh=xf*&<*pG z%3NWQfOQfCESzuQeal%VD2@41b`a&I1~97xD7(FWm&);;TeI(mD!$wNRf*oPfLNGI z!NM;;Am-<au?iLLP#$y?wts#|&b8OkU@$mI0Nq11@ZO53`rCd6m6NOeV)HCc8-5Hi aicO#0w>Pe^z^g0(0000<MNUMnLSTa4RbhVs diff --git a/src/assets/good.png b/src/assets/good.png deleted file mode 100644 index 732c4c011514414eb3ff99338f60e847f25f24da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1464 zcmV;p1xNacP)<h;3K|Lk000e1NJLTq001EX0018d1^@s6X_Tb000009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1x-mrK~#7Fy;oao zR7Dv6X3jZ#>C$$Klmc?uR)`NqEs>~50`Y<-1Q10-e9%H-!jnN0jZX%6F($->7bP(< zLc)_k(o~HS!3Pi}1_K(1auJHvQUu!F?RNLv$8XNowOn?$S(HDSojGS_{{Q>0XMceS zq?Ag#uDglzdOl|GACnN`1g8^W7;a4_ll_(V|12oHhnw5EOymEjEXUSFBC)*!!nW;A zoVMc*laz9OEEd}(N~KbUW;%`rEfBbQ7_k;KNZEKi-YL1*g4=L`Ke`QJXrn<&(+jUl zTH!%7NN)ZpnqtQhj2=OwMEO1165VK!%))07g<;72KHLUnWUbwxG>D*Z1S+`M+@YO^ zGvJ_jX&L+>i{}P!I-^1t!Pt)+zts{0L7%8<n=0@T_HTfhauCR;pjw`Tk!UaP`3}5m zr=jd?5b-vccijtVCCdQEE<+W*fFTb+6+MI<AM;-I;5AVTp<zPBpMg>M0Kt{LQ1c&# zSI8q6+5=M^Lvm^>L~06@HwOFERk*4f=De2~ETd2-cOy2d2&ZWs%tTA$mWZ@+^6(F@ zhOy`q__=ei#@<I_&I1tUL%f~h3GGp`P&r!eXOu1;gNGhivzH?Ht_Q}FoiJK5xGfNx zg6tpk`FU9OJBZI%0wFVH!I*ee=ul@IoQHq)2*z?75u3XdMtW{N_O;znVV{}?oZE=_ zJsmWSM?q)whvtSul^>X`GhvPFCd4Nv!+vrg?9+SD+(AEkCWL>sEK7rk=7}d&`B^9= zI*J&*uovdS*Xr`Gnxcvty8~Y{CW<VshaeoEk$w%z87>cZWPEV#jSqKx*du@w0EMG` z&n&vw7xA04B{Y+8<Z~ET`XDY2K(6>6YWO6=DK3LiGFvP#_n_#1p)FCdhALYp2qC-x zp&LM5J*mG^kf+{-$bE>Q{RN1rYarv(s)JBr2>;K+Fh&l*z#x1<L+Rl-%zdAyx%NXK zW<|`ev*S1b5CBSy8=Ezz;4otdhObO!nHoF@zYv35@Je+Mf{d-sXQ48y;9WWjKl>?U zDbEkobcDs<D<G7oAS?q)mQgS#A_Ww+*KUJN5Co%)j%Y7PEQHhXBIL{^u&g-hx+7vr z?ZvFekl;{?+NBrM66YXd6zq|$jt|Q$gVN_ig7B#>wHKaWww4~LZr({EzI+F2(WL5x zH*^+u?{dVa^1%=YDO_0PxQLP@2qVq4U>Rt3A-qwpAK!<j1&iykpInNX)4PDq^$3SP zqHso{OCTD6-i+e0oSJfcR<w-Ywg&0>k4%O=WW56_3{dFpL2B8Xu#+q33PoXB;{cMH zYb$7XXaFn^tYr#Ce-T<%zQ=p(_*|?fqCSY=uW!+m`~}4?UnS#h@aDaZQtmF+4^<H^ zbxgPlrC|$x=UZr5y94&YjcA&}5<bvZPegrpsLQ<&tqH_}D{xPLh2|$VA$W8H>|eiO ztQ>>T#mPuPws)iX{uMA%ZLojZgP2+1Cq51%w;y4!7Sgb)%BUHb-bg>>S^f#1u_{V0 zVI?Yi;n*;>JOo%xtO+?7cQ1ySp8YR)-=zXSKwavEn#cbn?f0P;hzqFF=!Cw<+F?ZX z<0cESE;##Nf)SiyF0{jZx{v?56SowiJo`EYZlDu%soGU-SDMx>0YvEe-soBl*-BS* zJzo_-bk?e|$F5A$61wThq5(28E19lMkaJd}LCWfuP`0(TWoeB!&;ZGJE8MQlFq&tf zL5h0PN-wIL5KfzMhk8-1I05X`4`SkuZV5SU8E=Rh?ni1+zm7rO2vbHS1pWq28k0G* SAS&Jf0000<MNUMnLSTZRkC&YQ diff --git a/src/assets/info.png b/src/assets/info.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e2ec1ba1fb97a2d4ded3bde991a8f07ed5cc5d GIT binary patch literal 473 zcmV;~0Ve*5P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0d7e|K~#7FwUs?m zgFqC=|GVP>(x<V?M`di1R&#-Pgm?nu2~3sNI2^#?0$?tHwp7ybQPI%n0)X!^ON`^d zk`R6~8zAidVBfxd2-M*F{+$rwf!cyDd#W)W{pY1=YL3U_ud4B)N-Cv%r_*cbiK(rJ z!=b5_M^W^e=lKdJLNnP827~8Hc^HP@beQ0LJet96c_GUae&d#6W}-a5a*FX%7Yfrf zF`v(|*=*{%fjzut2RSX?3pBW{izG>khv-nr0HHGDQ#XLcmStf!n_)Vg>bfJ#vU~E% zB^ts~ns%eUyg#n!c+;e_VHmJ&8~uJCj^i|uFF59HGo*^1M0XVOJvyRGxhHA$cjy4} z7V-~t0C`QR>T!(A60^6+7TQgZxGZb_Ih5QW2)2~?PiP5+<83q=t^UZF&gwbCH~7go z10HuQ{wHU6N@@*aG$ZB;Scc*lQ8!8z{UudSE^cMG_Vkv#@phcXbzlD<$?%))8EIxa P00000NkvXXu0mjfyJ^th literal 0 HcmV?d00001 diff --git a/src/assets/normal2.png b/src/assets/normal2.png deleted file mode 100644 index 4671db800fda1d57f99b6170d9f00cb3a9e1f151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21545 zcmV)RK(oJzP)<h;3K|Lk000e1NJLTq005u>005u}1^@s6i_d2*00004XF*Lt006O% z3;baP0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00007 zbV*G`2j&9^7AO};`1G#;000JJOGiWi{{a60|De66lK=oyElET{RCwC$y?LBvRe3J_ zylbt!_nB($>bdEr8yaXCWfVk2WJXX1<E%H)I3`y!{QQ#K<THthH^vxaV&YBijbrpi z6hTE4ML`7_1!QbydLFB~rgP37)_T7`*4oplQ`LjeU4E(k`$2bA*Kp3-&whvJecty4 z=CAo{{+hq$ulZ~Kn!o0+|7sV_AHjiNH@*Fo!DdAs3E-~z(>Sn8edFDy&!55pUZX~x zy!Pz1@A}>szw=H2<MStS004aK*=OcY;Q+6bFFW(<qhE8(HQOHe`4<4(IDaAs0KgNE zADTaf1GuIpqcta-x%d)M8O8F`j(+n!pL_f!0A~JV_7i|xADKUd1G$d>t>M=<mWkzh zd^47vI&{(cn+8q-aNqpN>?Z(w7Z1#z!hT*n(q6D=c+DG>KMCC&Lu28hfh8x`-#8Dz z0|4NXlk4-Ru%B1EnOrn<L~tC!JrE)R=_Zaickp#LeeCC-2C!lNg!Th~Pu{tH{uK7( zdiC$`^bwu&2BAWtB!Z9tM-y1Is(<zHOIBV1;2-BtX+Hos{F0UPr?4N_Gv6IN{lvHS zo+CvIqzoVkFbS9<tbSSFHUIP7cYY4Q<orqPBLKhl`N!r@VLz_-{qBj^)CWYvv?7oM z2n@rFxY@+A6MIkp)L9G9!8|3i?*RPNSqtY+VIQyCmNi!`IjQj)m=Ht>1ldB8AO<H9 zf{N#FIe*bLPygGd?*icY6Wa#>-uGNQe+v6}o%)vk%lZ#ft8_RCDKtO=U;+_9Fc482 zy(jlysP7tE2VkDy+7|%o<9p^$VIQt-_s8`kTT8AA8f|ctfCK<CAQ0FP1OVNRQS0#+ zFFsYhb{>HH2*Aass`*pchwF|l6KB2kIR6YCwjhK70ig8%46p&n0Md^zw5D;z#z!Cc z7XTykC$|>>Hp8dpPhlUfSD$mtRa}cJ2qTc6hIecuJr*DbM3J;Hu*g60wtqhATmavg zKe@dC@R?hWnm>iTTt_~)W9{LeY+P*OHVBcmd+gE-L)QE;fj}^!fs&DT)*BXHRbBqk z>jCKb6PyKrul|F7oj--WT;b>5cv;U9vjR~YBsDmpTuI5W5(FlY5g-Q02=ol@c(vYh z|M39spFhD_07!f0&u6ylx{rUd@BH^IxT>PtFgkX`a|gr10JQzQFaRfvYQI1H+#R2N z-8=yI0>E8QeRlp7X1Uh+?Q<5b!YMk8Kx9CgKq&w@jROf_0&ANQBQa1?puT9&<@MEv z{}X^6^Cvk202jV&UJWzT^@HDeMjU@d<En}m`X-7YJOBy101yB(tS@Hgf(bALVg`~n z`UY#qZM^;H3jln1{xoL*;MUuZo<D^duAXIEj$L@Hx{$*V0vco}!`?IyvH@5)00Jgq zRC@!_E5CnLe9I&M31FV_?*_o?t)HAfg&D5H)}DMtZ(qEK+X={Hzz|ZKXF*sD0%1XD z2w;FT0bz)NHMLhhe&?~L0QmX*iFN_tNd4IPQ|NMyb8YyTBa_#1D*_u0iWnwE9CyTk z06><M2Dx~U1sDV`K!0_0<;q`20N!%*n81tNW}xnPDtyu3$g<VFm!5LvQA^^H_`3kM z{5l*y-SO~wRb@_$c4&YZf~@id3^1nzbnzQ32uTu15Fji7DG(T5;azt7warff*!=78 z-q)Oe^hv6Q^Lne3Hv)K3<x;A*Dqr+BbpI2(#ASnPKRtEC+TV#rlAGkVr@!;>)pd6R zi00xAIObDd_Sc?>H^sYS5hn)1<rz-;2dx=G6>I|mh6z#-gkrED2uWZNm;@TN<mkbb z<_ZA+JXb+iTeNhzZ`EPv46I%GTCdT%X!MRpHu;<Ir5D`=`<q_;H&>seAMU>U>3fDQ zYP}*@zUFvde#(2V-X8yC;>oAJ*(-Ma5OYk%zNxQuQV?K8wA<Xxnl}((7g&skQPi#u zhFtCQFtsfJ*+j%J6Y8~4gmFyac*6@MRSj`36qZ5Y@MJO^8mv_=daQTo%a}v`!|MiX zBt-8?J*!v0rn+$Wl1d++B6+i*k!SGe?c4sg?-XzQi|%Qzf9G)rC)f<d@1FD9jenp4 z0(us}uP;YTOVJvakLYmX#&E~R8_eXcy8$GJ`o`?I_P)ax9ozCLl3SxGZvqFX?F*JA z0WAvqTaPye!V$4}=>?+?0oZ-0-`}&3o-(xHC2P(TgUhb04)(sXQlDHTlFi_W%|J4R z_EXsY2Y>YJc{m7)9{O+VmK~Hgecs|lN1XTW`j7gLQ7c#hR574R0QQ$aV;RC`V}!%_ zwmnZj`}Jt+#vcIKIiCu>uvh=#!|M_;bg4Hm{M!1W;0z^q2@!1ow|0Re0~iHL2+!R% z{*_ywc<gOB2z6}wm)|*fdcc$VkNvlkUhBQn_#Q-6f|LPMYzqlqKa95miC)CfINv?F zb;}K5YuC2{JpAi=!^O?FrA6aIrjGW{Iw6>9)?VJX=7_87D;8YjRa>hhZw7^%fusq+ z63hy$0cZw|82!!9Z+s(wYY&QN9EcVlw8Qw$UE8iZ@s%syCKehWY2jXY05dq;18VJp z^lIeyEk3>4zx?!8xa>XA!`pAd`lr6$u8sc`K=|tfKtl}3LxVkW`pcI1eG4uKmMpub zzdv}T=a1Ayd^f1M3&aLQ9!Lft&0uC|21po8J(oOq!_9kse9+j2Hy%EG&<^EDZ*9+e z|4`jHcqYzf;XzgaQqDdY1{(%*3^oy%B-k5*sjWh!ho+LPQ@1|2$$VqQ;BDXkb)j+& z#TDJxIHCWTBd(|%w&aSSH+iYVR)}O1C>a9@0igl_R=)@qfCe}rXw5*#*zg}Ce+J+$ z4;lcU_<v43s0Z}$ZhYvHclCUddOU~<ffQ#>inRfZ1{(k-fzc6|4OsPoD=PqAgfNy5 zB-_Ssxbvs$zXjkIhw4Tj&Cf_SP$WQxV1y?U9HQAUCho0Qk6L*S4K2Q^vY_{ZYHxeF z&>MkxD+ISd%7aiINJ@Yl_#naB0#HW`0%PZTz4Os)pFSVJg9i<OKX~i1gL+v1agTSz zr~Yci4{PhhN>&0gV32UEu4cd(AYrgJ)*>1P>lh}90SaI$%Yf<%Otc$Yo4?%tgX+`I zUpuD9Z^aATi>t$(l8hYod*kJmzSc6cNiG>l{KGt-hbk4Sv!FT=swAM8C?Y{qY%rx0 zp3<7PQiA6ZV;gI+8Je~L*z<zNPYZhv6TL&1R1aHrb#+no<(@woh-3?(cS9%!DIer3 zON>i^qyPyCKmbO86A9J~9WxXg+<SfV%Rjzp=i3kFgG3)Yd(}aIV$V2h;Xj`JM(+bj zpdhONNdqDSXk$T`7#kEbgJTO!W&<`F9LHAjR2hT`4#UKrAZo7Pdf(KBjbG8@BVYVg zcs3!`a_QrEB0g66e7f-HNI_T#A%>_TRNxD+6ktJ+Qh<~zy@3G(7;Wr>6C0S&Ac^#p z3C-@L&0CX}`6U@~Z<2_IJu&&{uL4Ld`d+U3>eo~j^}o8hsJ^b!8$x0PLbM=!0SbHw zPl7xFQUXw9JNSeJAs_)Q!CJy31U4G&?K-~Yv+b(@eEVQxK^?X9;E!j!^Ouv~IO&}J zcT`vE2FGLxU10#$V8glIU7JjFVn0P-_Mo*!vU3~SyPt;{^L!OmPUs2Z8=4CS_FHk1 zY#&=rKAkN+T&${ms;Y`rsv;}0>OoZkP{o7v6@>4Bd<CH-AceCg1R?@6!x&@jMq<E; zhHgjDVO-~STu)lzVaZf@dNLWmD{h(*wB?hVwl4X}rd<nfKGMJI=K!Ym_4W20yM+8& zWsUNZw~C1^111a+_YmY@0MSqoMuK7nWef^iizfiE02{XFZ5XVrx?2)s<3sUXPe0wd z?O<bp{`Qo02OWU2DuN3yuYF_f`RY>b1G2&(QLuopRuGAE$;Q#shM^;kWFkR(cZ_f( zLTf7gS=5UD5Wt=L`ukhkYm$i169HY}_lQ?|J!+lb<H75#K=o9h>Q%^E09gqv@H}Y& zC#7r0w7>)9;)G0>U;tyBB}_CpNnpYVdMZRR*+w$iLOkAv8J~n6Yfg>rkoQ&>$2W~` z@V~P^#P9IoI7PtxmGa~Tsv;5eDfs;gUPFNb3GxW=1R%-%T>?@%`Jx1j1RDvh4WeCy z^><Eu5WqhibO7G-u@eqS5dZKKBX4`dTb6&G7BUIXfFxTXCp!>oW2NuL0uM1mhX(O@ zgm6cU_E>^A)c@3q!;b>kr;^d+GoCLLF7~VR4!=iS=nn?fV6Xyzpbpj7fa<A2Rs)FC zg$ZZn1Z8HJQmc}>-ux(?NXGtYvrGmvz}i|H6DQE^*n)9<67lE+qTNk2x3>|F#2dmf zbDbHF{{z6i`|^Gkob2^Ufj^XzKCCK2`3(ub--FldfdT>Y1)v-VeE}%x)H)K(0wxh4 zW^B8Mp4r@f_Iv;beO#_e8iz(L9_~2udt=Y)2L}ei6OADV-z6i)SwF)WJ%hwRw>9Fi z80{S~!pXR$TJ1koz~AkQmSXGXDlzlxf?j@C&?nBX4Eiz{t|J)gh1Xw)?5$dN>nUsL z$c6<>46+?ZD0CmW|B78n7I@YmI_n5>bcX;-0-zu(3aSx+`)km{4d|(UBx6lfmrWqt zIeu7sSM!6d?ewN_#9TKyj(^)*mcQv2JO<!@tUQ@Fa2p?o;XWHX175FJ2wj}2$^eiG z443333~2<OyleZnfZ8FM)vTHi)(!~(k6f~O$F@h8Ue~)upGdvJii#!MehZUxgNO}u zD?z*`Mr&7$aCfp9{m~!BRq@q*`8~US8Jwa5{yo1}yuLE%$zVYZ!Gd0RLk*~&8f3)> zDe2-lq`n@oS{4T+7sSH@pa622qz$an)BrYfO5ESmxPcuYg{45qS|#E8P*o3JUlsmP z9l>w|mEGg0E}UH0+R=QEw>`OBJQw{-?YZRN_GaPDbNE+W?Qf1l`V@0=gf+wjkCb~f z0EWmtOd1PngI&)|?Wrt2_gWmHOH~%1d&o%BZ{L2$H{X6-@V+JM%wod;lszB<+bX03 zUo;va+?604OP(}Q@?Pu^x9sg_@80e&kV?O=I>7I#40=l{3u*|48}NpE;PuxaDn3X` zE48AeVBN^F<5U4q1E>b38i*<YDgXrlc{Y=TNFiXs#xcMVfHs)hAf5tv%Kjap{Wo?o zq>%PMB_V?fRF8t{ufQLuAs84(WngmY)Uf=^=JMn+47Wc4;On!e#_^4H_O>B1|Bi{| z_%u|=EFo;NM1}#f$p<ko@tC<~;_2o+hYWxdPd5)80FQm*kqdVpdE>Il+HWN_4ap{z zIOX6QiP7E_Bc6yK_d@(Pkl1Uov2BMsqf*x&uMCK@D?=4j7S`b}Y(NdxA?p>8k`TlI zVpyFs0Th6#4p1LR3;@&*Py?VUhyn*VnOnqZD^|GVstF0eA;2wwCjcG;n^Azr0G<Rn zDI}4lc7zo0{3>K!K=mkiJs$ktDYSZ8r%!GbU!g7f6|F6;j{(>^V-*D9eFLuu-T>DB zjtQKR8g7p~FcU}-SZFX9!~`B!`djzK*8=w(vVIl%yGxHeq@|<RUDLjx-z>box+bbh zk0GSXcH0TU(HPN=2-MQgP!zs-UozdTJ8SRu>-x_s18QkyK^2unHF%5akbO0Xz;{)E z)Y?ga>VQ}Ph(&-H0#QGJs<U#U%Wv41+HMCp$vErS1oIeRb^*KtFuMVsvMxJw^8&0B z=!q7RT~mm5G|}GKL~A6(*lvA?cr^JifS=9w+j~yMYNhC_$`_|q`V@i%K2+VanJ@`x z2ndoGx!>ILe?R@i#W;i#G5Y(%tA`YTef3q<lP~peIOhE1eB;56yiF2BqcOrAF<N_~ zZJT$-ZwBzA*?vy1?CFI_{=Cw|AFK}fs0>#SEUrN<Y(UlmKnQ1D+0qcy3&_PFu^bQ! z?Z;3B(D8l%ZePGi1$P|-JPGi2u-OclZGagENW0%}qfZk?(4$jGwoReEqm9<C5bf>B z*7nxqF96Ki(A~3|*GY+Q_<=my@AnW41rRj_2njX>6G{B+o5_a(eEd+}f3@!1)i}gg z%PgL}wz;Koer0h4Ef~o}f^bI!YMJ(qaq~ehkh6lXqHBw!pM1L7N3X982B<6w;4i5| z4%IA=N2Xw98h}^^k}CnR*nSLE0Ed|cblhRx3Vp$Qvx241sm#TbSOl1DVEsJ6TP!fa zAP9&+f)+L)DgvTHkUl~9;Sy03|J2;77q^@ImzY7b*M0_%4zJelk3;iKjOkt>V<-^F zw=--eH}l4kC)(E^>YJ}do@gKH*MM_hzWv6LZMDa|ejJlT38Ik*;g~i9y8S0dH}Idc zeee3+eXD}r<g<PsU053m5G=01Usi+ctJwyjOknK;Vi8EJ2E<{`;z<XdxD29BJP}XF z9~Usi9r)_jyV?1@8CBB&#Ni+s0`vl~c^2U903r|^57}P<RR|Oiga;@UNfP@1rJd9l zj(L9qplcw%`&s;G!Rprg5$gX%V^m`)A!`Iy3RAx{H=cgH|HL5&;OWQvha7;L?p?8E zJ6hMTTPThRTOq=U7-Ym}N2xk%)ABQ$=*We`@#m|9^32MRkIJ$Nyrp%>hVR_1tEp21 z5Gz6QNPrevFv3|y?iSzC%z)&XLPE;hHD~hNJd;%<06l;_5+wS-<|)8zC|kpd2XA=~ zgijEjCC8-<KL`^y;-vB+%pk@X+1mK>;F8HzQA__NkHrW8v=f@t_tw6KIdCa`Z)GmL z4*cWTuCM>Yvc7l4GF}ihlb=hXkIeS<d&aA)77is}Yz)dXDhmQsRs`^tH6W`Fd~BS{ z9R%bWkX#L*&)w{3HYCmBN`IAju){nSft&Rf3jhm2G5}Kz&`$w83P9WB$(N9ed*FKl za1|Oh?RQS@Ny5h`Cq9T7`f2)&_xBv@mthi@C`H({QU2tC*5vJT0)Th5=Eg>W6Bbq< z7}>6G5Bm7L)=29^n5`!y7+e(8;{V+kRA*F&15{R4;4f`JRJ?-a6E3?w3M5uoPA_$} z2ZW<;{&yd<;AuX(_#t(C83Cw+#A+}+K(7aQw*?`SRksY+;EUYo8WFyK$rx<|@X>Cs zX3LgjYVi{F0Yv83)~G&g+ivr<#b?fqmRPm;%(<~&Z!tXc%<kk%CohkFT<h^?+`s$m z)79So9{ri>pg6Cxz(-|81^&`HL`At|!_8<B3jnbeB$hc!B`i0S(+mK~aK^LXk2+#Q zXT{R`@QlBsgVr&fUsL?R1JN>9MSH^1Hfe=M5adt|KCE8SXoKZb)j!>{0b2n4d$)6& zd=}6493KBwxLv<{?HxORh&ghpwRg;&=CgN<>Kky|>}{E!yejzf%7D14Ivk*~Jb<^f z22qhY_#gl=1c)O*VzC2NSO7++3+xj6aVIFa@Oj#|cn~PZgfnHv-G|L&ACp)NCJkt9 zc|#aGm0t+ZU=4`b7GV<j9^y~L<L0@UD63i+erZ>`cCYYg>s-0#^z2Lf@auAooLPIz zz(RbkzBEwP!>R}luS50(uBzcI5Dfrg4M594<hfW7GZV^LM!FZPcffHU&y*g|;<>5x zNk$BqErpoSj%i>BaBPrlnMCWkHYPW<(caj4NNkBN1+ekg;hrk<Yce8wdtdFi1q1k4 zWr44Pg#m))6{sxRO|4TM5X%8t0D!?9cCkXUg>*b4PJi{}V;@jmQg@X>2pR%p3rJ#{ z@G|Us_XO0U8iL5cL<Zc}$8DYR|K_o+z3;#r9eq*);7^-N=REk1Ts+Yj>NlULEs)DA z!#;v#70AAdGcXQ(WO+W&pu3R{e6!^ZyceYLES&OeU(4NMJDwp4nE{{N!5<O<7y_v2 zL=9p7BLW3)Q5B|TpxXuu+O0RP8y~+Nz-Q(>0N2&W=R5#Kg@3!+PZtD(K7u7a)KFjv zT28YHX<aXdoc1j&yV#Q9;Tb?U6U)4xR&Z|>ycr*ey~LKBO1cJJ8E>asPGYes>K?qs z0V++6q@~fnC;a2d`@J9GMV@Z;D+5q%7IPYW6G!Qzm-Nx^`2!yO1s=Qw6$oFtYN@+1 zqHb>tR2h6-N#rhf_XY1ApP@WQ1*(N-03mf)%1%p4%7L&6U?O`@L<HFvz+V`nGG!2t z>!p)x!w+wNuKk-hMD3#c1i<b7*qjAlWo3^X?2#X?4Txp_pa*~0hp2l6L&mUGja~p1 zt2hC7&p>IGSZ~G{kPa{t*-M<)$^R9<el~tQ`@X=I61nZ%u>go6l!P3tz#mUgnefm% zf#2A%p?NLl@b*qcV$MDssCnYm^*-?i)i2=>c~Jd<>(3}qB2)!Xb82KgOVZI%&+S&f z1<&Y(_bWRt(lOM<EqDEXn&AN`TI%A*Re&o_0GktvqVB<45FnV)h{jB1(TbiAk8Gsd zFh_S7D-XSM5`6v=^6E8uZ_q~-zhA){^sVbPg(>y$08w>~HihyUb#uGa5f^q&y6<+A zySd5Y&!D|0E<A&a=8i9>+2X=(z$AdH))iA+niMSi0{DY5{5=}A#p>*MNBc?uU!0Qw z><Q-P@b-wkbE*xx!0(grhkVF}R|v@6O%Q<vp-E=;SzHLVs6Z-rC7t(&|Lc;dQ0Jd% zWu+LCQulCxv3I_ZI;<-^>yAxQO0dY6kOMw~!3332jdmY?yK+bKy18ftRo^4cIS0NC zr!?eHoqp5nrK;B_p?W=#lJ3@|08$`$wr`jm-9<cm2FlzWK-@*=$NK`nPHRbBKvl?M ziOWey(PDSH>2BmWcL6B-E*4BOOG-o#bq}gfq0*lqSmd3t`=tYy0QlOR1K{qL&b>u7 zo)@3i=o6RteF9#eXO+CA`(d*|W&$CeZhiJ<wMt;v8?N>emvwc+GX#*_Q9CYL#Ll0^ zGdw^<U2-T1;>5O*vTHu_BvhXduRlgGtYqJY_S=^Kc<h^)WBW?fOKzQegGkq3x!^TH zpXl>?t@RU1xc*iyl+J9gD|4J14C<CO&Oj8;NXvA_jW58JTG&$Z(@~S=y}jNUVo$On z2TmK|Q#ULCSy%A-6oS44;R5mU$Byec3BcWR3V@FtH@7yX>lMMkV2`>`^$4gQ30al) zxQ!`TLD!GVaYxAtdr2TLz4|dDVLXFHBJ4kJ$lRTiqz)I&-C|f^dNX|fjhV4!x2=iN zrYm8sU_&A3mGB2uUo<2xnsWe*hWxn&K-Omk4ewah5Ks*Tp~UnXNX5>!&V-|b0+|hs zjJ>0&)1n&e1&K2WSi6wpJX?PW&7Sbg^kR$q>m)(eJg7zpuTNs25?`vfMgIU`&XB*V zcTa0h0njXLTrBJGRb4<-(pe^*8oRW~2-9n)G*dvxd$*3*7mGOyF!sp=qoXWHT}X49 zIgTv+0Ol?(I{Ol1Co%W}vM%BE3U~wZgvs6hnE-B@GXQLPbH@V8B|(30jm}UtK-KJg zI~bE|3Mh@kO_?+%fQhn!K-eFQ%xFovSfkFKk9{GdyD4tEWxZJ$4%5qY+>J)0?saDu zD>K=1VnGm91yv{by&|9*pFO7lNVS7s3-;^HuKtUKw@&$3tpeW;S`_IPN-D(O&JPyD zA)*2Z(Y;%;nE7U&jNJb_vto9i%~j6Xk7Uk7IN3kXX63j`Jjna;J%!gxtWla<GYzD6 zPn}@_VqxdO01&=_tV#q`g4d@{xw|nDzzuxAaCC9@8?Qb0IqzU+$?CRCw;hyUbkXA{ zR?r+dmz(2lPH=12xS#a#(x-kAkOg4sNs2)@F_@@)V+uDn17T-OMx2L8B^St<#p4b% zaEE*BYH)b($p`I^<u%B_Z--2}VMh=EDu}rTtvwhP&PwNq6)+%5AQ3@P%T<R2SP^6Z zP@PZ>=%|-G-?tLL69BLYt?V6K{@l>Tjfue%?wyj?;UFxj0RXl3&KGxI@T$Rq!v>EV zd9_&<UL9_Y&W&2;_uygL8h|LOlP~nCB9IUPK`64*v5Gj#ELg$xq?V1SxI5b2bSfm0 zGx2ORLsgAtPDHS;E}n8Amp;og<R)&86@_+SlBuAXEXPE07$%YxXeLV#@c<I;fkt5a zhErh;GbBZjXu%ib@M#z7Vlx_IBdW9!p0^pE--KVs((2~;xD<e;0>HZC!ea*?|Huie z2Hx2;;-(6`>yv2cb^sGE8UT-3v+xD~p-V40K}OrQo)(WjemNn&)KlJZNp%8o5;GIJ zHbYAx8p=!736=J}0>pNv9j6nesDp_R#kjB#M~O5*=jllV?M<c9iKZE9!!r&=*gJ7O zQ}Qh+0w_VKhp{_67CXZeF`gWOh=)O<1|b!c1e7FrZai@DB^YLC157eQ8^VqxgyabX z*o>a~FHs%(8PvA>lo%dc-t7pE+V$uY$uNyJ2HS@%TvmN|O!T%eocg)>Wq3Vt?Ir+E zz2E@s8-L*@BaE-!v1nIM{rtf#4_)D@=-gn4hNNjC8H*858BmPv-VBQgLzqQEVOV+u zsoZce%{gAE$Uzq}W5FFYSF%f^r|Iar#a7Ps&L$k_CSvB!@)*x5K;_K7bqFHd&lX4k ziV*3A*wQ)^Tf?(3X%2@FRrnsz>k&M~kkUX30VyaO6I^_G#zhmx5z<Eci1ZNJ@dE5n z$AMN~jKKdXWbm_>c6+IZ{o)r>TNX@=B(WYc%>;fORlhHORdQbNDjo6@JGYCQTJgm7 zODggXyg+h)C64*kX_zVHpA>lguNmy6*DUdHil7n5!~l_1NeS&v$M9AG+S%O#>SaRm zu<-28-87r)jHj3grF^7_17Tw)X3nf7Q-@f<lsP?~jaa5~Mrzp}F5!2E#le_X4+eEL zmXcavu3$^^Ts+^p2$SY$_?|*f#UM}&&y!G6I^YQiNf0EmXUYyq&wmlSvB1U+P7jz- z(*|+E2=ySsBd$R6u=C&GSF3TwQ=b6vc=mE$b^i$e_zxbX_KqWgik+Pp6MT-qm1OO* zBmA`nJ^!sWC4V}xnXaoYz2pb@6`P+_GW>=E`o<?d^1laLZ(4WG87G@7`^28}d^x#9 z#tB5EK?#A30HDEaU|jTXh<9i~UDXe4uvB`~V^<$Iz-a;t?f@GD#)jxrr2A4sBrH#8 z$hvVWm9tio3uq(vP1LDhr7l*gm^qvDd(*_TOTTaS^Jg}x1Pvitn2Zj`lasH-&g4ue zua3T|M&L0#<-zk5l$20XKuG~1gnNlpq6|~u*@6*gF`+SRt)VpVl!UJ}Dv3d;Dt@cg z{H^gx{qlOn|8oFe1%UhNYm+78J2zm^2eez#E!i&LHUyDqunK!+zqqtI=v^Aew>><% z12?ws*!``6jjg+I0Lu*(zVILW^$qbcJ;&0k=(1xzvhs@FW#gxsD3LPOptc5SJM59j z(FB5Es6;)CstR>A-P{&Sh0>Ib%1ysV11z{iG^g|kr-?^8MYmWe5U~41I!z9BWW3X2 zxfz73nUJO9dzogT0VyB2SuoW?gdhU8G|$G9lUJinN1~^0Q1uLa&xh|RC?()Y1*I$i zDV@yUHEeam&>0ZIW&5xe&@f<(fMf$HC8W@hB7r9=m}*5wjW@$DdVc+wcJ%yT07zB} zGocOa;zAI}y}!((FhB`I$^^>ab!_GE%CX_X+PmVBo?EB3>+7ihf?ELWGqs|ktKYcS zFZ${){;~4**DO1i_Vixe(@+=qeP+2Dj6stcBDP~+1;I{ZcTb>=eN4fP8DN$rGQy() z60q)<U^gVC^Oa3GK+CWwI8R10?l>oOQ<lPxr!6bLNuX;&Kzpl@>{lH)uho)!ZBn#h z;Ngk!*Wj7v6$mQ*7^-UczCz%6@Rfv83Z4U=be6BvqE0Vqry#T;2!kMq?5uZTpbde@ zHnj^ukiyQZmQtu@JN(mx8jF`T@BM&O{iAU_0_MPmO>PK08Mag9gdLI1#2_QVp+U8V zLB9`IR+fn?!{*N)Xpiv?lTSBq0C4}_D<NBEp3-pNEgM%<PaVGGEf>Ay>Uv$Ct@=5T zQ3SLMgaODnvR1%$s5x$p*kpto7X}iTSp<=BoYbuKvyU=4&}Ebgb(E@7a=6Gm+te8> zL{8xddstj_Td)A{&bSnKL(`FY&y+P66fRV#QM0qOL;}VDidu+G6^~8)1~!G4pi%SD zs2Bu+kHGWbc@mzK@RYTDLJ))?=T*p6=(tNMn_-OONC6nO6c&^19Avh`ISmzmR*^(y z=&<))dn)H8UiF4(DEhIDj}1@f16(*m(s=^{jAl@xA;Iu!V<%Q?^2A!Ne78ybn@6AT zyH-Eu-2$N1-34!+o{@ViH=bA>Y+d!L-(7j-!lh~*Ckb>Ifm+7>en*oOv%l<ybDoYB z3*-z$K4wh0{e&8s<6;MBW8=Bh)lxA&OA`vRH`>xK+6IBCDnu|~MCOu<@f~wnxLh)U zro*a=8E8Ld5E2L^w(P|c20jeig)jmJ0x`(MAWD#MFCH3uGqxrdW1t~XuLuOb2S2lX z0-oo&c#j~-@_f_WuS+s0)oHNxK&cfJ?tPfd8Zv~9!R^m7ZeJ$39ViTdL+la$dw0L& zs>%L`AArzp0KU6-<x(USC1nDTt}e~SZr&sVC_h=O{rGM2@bFD$L2%pMx9<Gv_m3R> zE;?phtIw{s8vs^+ano>pwL0t6R}Egh@G$jiRc|cvgh4bCLcq>$CICWYH7UDl6>jYl ziuI}Klm{t7^nAN(ndh+0K203Q4ZBanxe;UBHljQL%dDZub%ANXjg%83H=Jl%*)Fw^ zd0{PA&rRb@>{w@4@?wK&YI&jv0tsU7#h5-4Q)VSXUV;SuVDce^fTRS9CQ-pw)ae;K zJ9a!ahv#GQppROG5cnRHi}O4sa?3~7@(BkzQQXRe)X?Xanwbh^;56a0AWM@HW9$HU z5)9IShRJCh=em0lV{G9o8e7)<HhRYY4P;{ELp-TVImj&+DrzX4)ioLr2~dGnW?<^P zS6<nF-Z6XhBh``c#wYKd{MublkNg4vs}<j}S$J~_3(i@(_`J1#{Q6{1)8nRuQ3Aqq z%kGTZ?OTkYisD>n_KVvNiZ3`JU{TyXU|)Fq7`4_8dPaCDU1LElI!kTtVKmMfrj{;s z$tDMEx|@ZHDh8(z$v~KXAET6Ukc*vil}!$K;sg?Hw9O*yNKVJ@<TNz-a2U}CAuG;> z3V2FF2!RlU7GmtyV`x@@KF`jG4*WVQz7HaTrzE73Hr^|MPY9Q(cbTA-CpT1LjNo?H zrCCWzY3a0%?P}QsAOS;yp;*Fa1!D~2ionhlZ$R(%9aybza8^*2hkg|o0;EYw8g3Z- zz!JN0@Ua0mHDF>aYw=4)Csj?f>2XDTKLA$By%Dt>kL`FY`u#^A)n8h<Jh=M!HPP$5 zrRoS%je$Ud0|^6RJ(*<3hw(luO(<a`hgDR!e|z@7S4=Wxru>+}n#)^~$d$5Emk%n? z4wPF%$I+1x&h@4OhddFnLw$I534bxp>fo0px4=-?62A(Y;!82bM?p#tzHd-ffTt38 zis5?-z7kN<x<<nuG%rL?BSEX(!q{XJW0Os&euY}aw>+P7yTVmC%HX4EYOQWH!IV58 zqHKju`ZlGMcA+BM_<|Xb4n-^hHU`>LsOk_=P{H#<Z^7W6XRyFLhD7yb1VVXflqj8% z^<0+wHEh6<0Z%c^B%56ulb`+Mo~i#7T)A<ni8dT3dKm!JaiZ9k8AppKzPr7-efQ>j zCqDc5F@0B@b$s7d_2KYLQP;!`2@ZtKh7=$qm)MPNZG}az95c^2l7CB&m|WM?ZiBZ4 zBDs1yQOf<fK)+aa)0qgw{yxKn`mp=E>yyZZtOfd}>*Uf-Nf$v<6A=&K+2|T<)fYm@ z8Y*4{PexEm!dJ>=vZ+h87Em~g#9$;^z*98@zK6+X8&j<|d?n#~p0#-HKPqHC%!CdP z+(pEZ%d^r%C5;;mb4Gy+L4Xl<F=W=#ARw7xq=Kgm5~Wa0LhK2a;_3Pu(bxW4NRGkq z!A4luZ(Q8Xsc6HI-_CQHgh6e9$FZk98vY17%zu3I=E<7@OagIf@~C=nd)W0&Jt+KV zu)g*8t9Z@7k74)uN57PQBWO&X8}!Q|(GXxC(30$u!E~=0PbXoiAP5jZV@ASaWKq+s zcow7sx7?4*a;x-oMHi`E3N9BE+mD6YJ!b<tb^#<6b$5FavXCq7DQco=mf-R5T^Qvv z5O^BC456fi=UMOtzULAOX}LQg><mBTl?f>fv}On*cv7Mr#R%gBo|ixdeg>K};mH4- z33$0TC`KC795&^he<>X#T)kYtX30`Al(8AOCll0Ugk8aD*qpoqtISQ%BCx<q+&y5& zE-=7a+mI<?pheIlwEpRblW#v2Ph9`Xmxn*c5X{?;nSq9R`+raNaw{GfTLFB1qPg(8 zozI(7y{CIGA6h(lS>GZ$KJgh;Ww+CXGj2_2Co4*uWZa=LX6}MtuD!`A&1fW?ZAwpj zkJ2aFX4|R$&t$=OsS09{xn_1$4pE+$Fwf8%RIDWzFfY(Tn}_gN_#TYnbkzJdJP9bN zto8D9@CCktC#9oMMBxFkF3A`HK?dYptq_!z%#1NmLKc9<CE#&EN0II*o{>`(l$GQ< zsVnOgY@$GEqC$Wqa-o2RrzE^2fsj6)_b$Yu@D~X57&K(Yb{IC+CKv`sKzo#0;coG> z2OemBbCqb`Q~{nl7Qn8X)a*Rq-o7BeMvMpC1x()c!+ZEMG*CbP+%x>Ef?>Qu1>7eB zlPwoAZmlU5={Z}g9c+>BcPnJaa^u#%Ruvo@yCvNvA!G`wE6Tx_Sv;mJsmPkos9ct1 zm(@D2lhuu_evtDYZputFA%-CzPeyOX2%m<!--0J?g5fEJz*nebmQT4X*4AuEPziv7 z35JZNSByX+1e6fgMG|E@hl_Me8FWQ3atVaxzfadGmcUARgh2(DPr}kCQVM6mB?1v+ zOdW|W(WzLSd>5Ql?0FeL8b%ZWlRNOt#13)u<fwmrG9hnUAcOWK`uDvQH%a?HAMnU! z*aF}S(ZH^+#P=jGYe&`B^sW<^RC=(^ZzM2+VMP9B4G4k&?fJu-R~}vK2Eg_Mw{JbM zzY&?p_?#FUZy5KqI@86XNP`r!*i2TEfr^lp>Z~;+$5p1E%Pc_}%80yAH;tntVmudL zjBWZ=sQMv1MGkz{@>K#472k*N$*giA-1K^y<~r?-mX2&E0*teODF{Ty`|Vq1M>F_l zV=O?8G0q|iXk(`N=PZ<VF{dC~AyFc&KQl;p*eqU#CE?Ey=ny9K(VCLs$R7H+_f+)F z?c@IU>=5hr0X4BInwr9aUOT>9jRE`wz)z|pd;Y1pp>~m~d9SN4)Gznzab0)@TDYu8 z2}lzyS$zNcVE}tNf7W*PHpQ{o<;7TvgzeI5k;i-lxX+~$Dwj}*!rM0aU1!6Yh?SW# zGC9qPnb<B0OyhlBDC-g+(Z&QHjt$9WP)fm9F{HHO0N+!n_|^iZNrx=dYpIJ`+LpkC z<>ON8Bgl62lCW=8(2SreTDoa9;bL`!r+>YT5y^FKnzAU!SwZ9eF4NcLN`Rh-u}2+= zk*On0b<<s&MuMJO`h8sY)gS5GtWY)l)#O;;-}9^efb6=x`aHn@YhBp>;>k<Av%JOL z>w@LtLa!07Axf+Zj4&{~Zgd5JCp*8rXJW;caB9~s9VJV3q@WT8ODYHtTs&twI8o!0 zphBj@j+e5TaL3oDeoatL6pCWMw{yz`Y)Z~WNGs6e#Zc15cfP0K`yPVK<>nL$VQ&B` z+;rrbJD4GabkxiA1Y>`$qB<tEq$VZxiz*&;h%Hjn>i{UFeLadaLRH1H-qk;SoTom3 zHXcSBSa8k@BuHIw&WaaQ;kpB8-30s)zz_YKo;~X1zT~2X$JJg-iq9gBf<(%r&}E8y zGQp$Tr;R2w$D7Dz!JHP73$dL`a4pFyD39qf4#H$2Q%dV>X||TS8&_{;5-u)uO-Lf; z`$A06D(ujw!4DXovT~@*{d$%<@sxs0Nn;W-XQ+i3Ewh5f*30Z`I{`$~tXb#3bpo_g zLRtL%JWB#oT0-kW1?50UI>heb<ATcJf42SwS43CN`!l>~*LhffKd}DHFMjBAA-r=0 z>$f)Vi~HhM7qMJ@cU&7y?oEchOHJFrL=5s6Rv%dIgS7<^2I-C{olUNWW>-VbdNK;N zyzD<y=+~gUl0q80%<*W`67+jIE0-zdXctEu%Z?gtH{;i75s7S|&&)8IOC;`Waou#F z@pLYb%L<(CKuhChF4Hzt7LN--R*fSh1PMeual#TFJRN&k6}#U6T*8BRv9D*}`h{@- z-#+{cuf7q!S(HGEZsNtpv&sGAhkLOOjb|baS#hqCxR7L|opH#;55><hXReov<Z@~W zQOJ71B|$4QAV?z-HSE^MKm;B<#Tm6?#i0^HN@q!PX?&UtrK*+Lz|sXZT{GYP5`HnJ zQ7@fVGE=J+9vmslab=ne2@-{vlwq`~PBh0>zu*9zXdb*N4ZpnR8wRs%{0={P$wNJp zv`P1v!%f?OYYfOdnIKaTMW#XplWYGn7mLo~22XEjN<pWsD`!fH+6YZvj0rvrfr6F7 zOX2=Z1p?NB7&Z`@<ZADhtBkkljVPVq+n@L^E&tAhZOViV_B|Oxh!c%CP7oytlEffR z5@=(PBnFArNVEYnLmPuIN>Hl=@&$Lno|Kp?SIdYE!K8U4Y2k3)GBA;bP)?+pHV;up zDXl;_l4Iv{egS|mCHI}lKa9<!?ZQ7U7)p&PT8s$2s4L`_&-G+vR>jdB8pi4mol+<j zHV{pZ^ot;2SEHl?X-VD2w9Q(nnW;Wp7Q)($+h$r}9Al~#q7_C6qZmnIIwiE34$zYd zjhc-GgTO=8_phl2ekcUpuatb^KqUCn0Jwbd(3}Av{{HTy=lbJ+(0(kq%<p4(p@H$- z$PH2G;c!Vr?gEi#yd8-L6(^KZUfN^ijq2(53q+7Kjw!ApmK7+O{#q`%IjtGY+SYlc z)!H!&NC>;NiNy3#EsU;7ME4AK?{2tzyopl%n88_cG}UZlY_f@FJ3^xEYgfu<^@6BG zoEI4b<9bU5bp!1%y0{(27l*OlE+TQK@2TshpzmQnB>2++X!P6~Qr=8(vuT+vNt2f9 z7C{Cg7r#=bv3DiDoIc3=LnxylY|KMhotj0eS<7`I1PzG@5DJl6gh}rdOv$s+7u4ZN ztEY=%4Xq8N76@ZE?m~!+6ZDjXkrIZDEoWur$L`>>3TB>`z@(uCy#QkgQ#H-xR2w7X zlW4X>Yt@uOy;8~IyOfhG4ihV?XxKG2Nh#n-iNNy^#_^&sjIU^g(G_g?m!2oTSgTaN zWJ!?y1fURdP62T2PVq#eVSXAn={J%VLDdX|6uGONrjh4@7=bd0DW_at+8U6x2RJo1 zX$Wq?hz9lqr(vveCYsfk!UQW(tu`>=+p2)b#@<?KeYrG7S&U@AOjzBWvpi{qV>YTJ zjnC4bx3AzU|J<^cQ3^sUjIeWL9OF|hNFi*+#>xCsz!jA@sno5w$^;A;Vb50@f_6PB zz7t?Xae{UfA0I~XC!%=r_0>x7w*bDrU%cg=zkCvN?F#<lq__AD?~9Ekp!y;YUXOIs z5(*<Y^2XRK2`Q^*kaw`9V96?TEs!9LRZhY7`fD*&I|H&hjC!C@^9jCUM?u&=T!O7s z5EYu(4QFl~h0Id8cq<o`ic$<{zm+q~Q?!CbB6|PGXA8zuIlXIi0y{?bfSFORRN#Bc z3Lpw%*Yvfb)8clHw|143w8hh~fz}4GOIo5hK@`Vmg)!P;Y^s6(&pq|(U(c3omMma3 z@aG%=o00rJTKqsViIb8Z4H-CwUKOevS!PS6!X~G!kfK<Q%TNP>CSq?XwluE6&feER zR+pfs!l(yq`*EePB{yYDQ8JA^o#o88gE^~e3gJLOEX$l%Z;DnblTJ;`kf}f%mutak zA~91|%+5t7iN@ybqZpl-M6D8_7WlSG<2cKVS`pOs0mxr1cM+Ph8~s5La5ZB|S;M@P z3Z9Z;s@eWP7{@0oCEp9+!M#2_x83(B=Hey){PYhFEf9a-vsj`sETI}?XGLeN0J&s| z3Kot#EMr>6BWMWI#CYvwJU{ROG#jU&5fB;`pqi;!Y)fR?4q1+oG77h2-3Ys`Q7*+# zaCKFp&TwHGOOyeDUC^Hr#(6^$O4AUyL|ogiZnYz9-Z6q!J3?Qhioo}5AF#}UCklGQ z+>vxyGl7D-$Vso#ha;7a83Sl`bWN-g#TsE8Ba9MEwc2P$@skVsd*11^0yA5{+8nfi z05BPwueF=>9)H3drD_D}3#S2eWL6>8vjF1~jghrt5<svc%Xao$jOPa54^vx(UOz!C zkf{0r0$*hS6e;H?#54}A6d$FA!fES3!hw@J#<%f4DOwV(ojXgAXl>QSaPlZ2ZE4KK zUTK{+eLWMCEo|O73d4-SzPbgU5Cs5I7Qa$D*P%-*0wJ%Zr_KA!X=kB*(4^Bj61mA0 zQsgyo_u#t+=g6^%=9l|=s&50jkK+RXy6531F;_4CA1D7&V*r2MSR_$fAfOrol*WQZ zGB=B5O0xpo)2$&m!uI|v@!Y}>LInM&doikkhe{Bj7FZ#vbX5*ZI#Z_PF1f-kt|}iA z&ZQ|;G()AMGro%A1g$VaJB$!T8k$YkTTz_<k{T*0gjM4N9x8#4C{D0zbOJ&WdTQ0I zzgUV+iC0I)jbb}f(e;-_yQx)9<G?I4HU^rF<w8vw7iz?bcJC#|R69bm9X{XRQ@<L( zy<II}oXp)_acuDUb`x*(Cd_eO1rQ!`%Ty$l3u9@^MFs<Dn%L2Q8J-#bAe7&SnhfE4 zwh_E!`J5W1?51W>woDTb<TGPLaY{iKZjAv%QH+VHHYQtbB-*&zt3;qY2!Yb<KUWGv z;{J=`HYS^G5D{XXpyCJUZ`9xy71=Y&`t#RVp72QptIk<wY?y4%2s<0-;%Xr%>%nFS zumF@yr%-T#tT!vCTJ6s+UNCSufGyL`@u4R-U@l)1e|YSh`g+Y5>kFl<Es*ef-1Jn@ z0m2S=FbK*_Vytlr9$)q`aBUfCGDP6}s8xJa10O-)*=8c=debbi6MTEiO?igIz{X0P z^*OQQ|E5}PjE+wsiW3B$LM2E$<DA9nB!vrvaH4GtrVS$uBM3nl=xbPAqLf+kl<}NI zv#w8>{#fOIO>4_(+0iy0rSHiS^66_aMnfBh)&|-bOVNZ8+EI-0$tHZy`@*83zTfJs zo+u^f_P$`vxVGKKRcb<CDJu?q(o8RP6|+z<q-i1Y7UH=D??+NujykpADXZg4<?~*q z<r5{#hkd$PGk*<t@O$iTTA~dmn=MQ>+mKRVsMfHRi1hboZqrSH&XCI)2tD_AoiL;z zTOtcQC!LbkdS;^7Jb5Y<=|FqiNtYFr^4?XEl|pSSZc1f7w=Bo0))~kewhS|Bl>ie{ zt+$RhTQ>vvN(q4D&DNX-p#N9*#rPkmd@PyJ=R|=XQUUA$%T&uJy7fC42xx5Ue;vje zr=m`+5`mf?j!NUbS@^dD*_V{Yf0;ZAK&&+;rdo&-jYhqSif>17P$pzWA@0moJe;~T z_r7GBaI;2L`ltq0mzYyV<>UrM3&=(A5oTRu(XGzM_QAJf@5t4@DI@FIeaz02C@GOh z1K;=H$B7u9X#UBfp}t!HY|nW>-@}~0KK|gnoBsNkkFFdSe;@e-Dcyo*zhiii$*tdH zbuG5_Uk*<KQo;&Joz?RS6#?ofzD_Ih{|YZVYvePGFp43CK&_{eRU~Hq`5n{O$qFV! zW)%VHT0gB7m#$`AaNQl#Q;QD;&9K6*TNqI!qjQU#zce8TT9>CaP^!3b<;p}D1ipuf zsn)uQsn$CH{7nYHiK!NT9j;9S?SEdnwR(ye*Ka0|0BPV`e*+R+m_cqc(4D>KqaCb7 zjY8LCV=Z4k0z*tQZ!c6Gwo`zRXbq(#YSq9cQIri6LMe+b|9-2Z;Br;ReXN{Cw}R2a z_Yuwd;1G37&Uu>EFAcn$w&RDucI;?5X3UxuEhCYRflHM{o|0&`qu(4J?E8Fb1y#LP zoiiY7|H;WzKQSsT#7eKzh8j_8qxoZQ;yB^!<AszElA-M4Oed#jkO>j`OEA)NHlzR~ z<?)D+RA?T`3FZP?@PZ=HQ8FU6R6>+Dh%uF{9Cc^}bF1ZUH|Lfu)hMRDC|%_@Gins~ zkEcv$E0)?nkxx-B&J9Qhl-l{E0zw!FY1P%9r_gMLYujOT34qT5fNF=)+yNkhlj|Iv zd(?)>PokUFYycbX+uitmlKd4?dRRy+5I~hI2qhp9VWf5(n!#%L6uVNCEznCL%e@a> zTn-gy&+NsT?A-!7U0q6xbWE3<X(zR{c9bO_S?3xX*Q$!F7iC(m-qB~Ww<h*(F>mgA z3q2)<3)PXL>^~n7m;G8U(>{5-r%kq+t>}t{Lp@&tkf=s2m@@zzse7+oIqCnw^CQ(~ zXHr!xApJxCCFX<8N7ZMAFg+vy9|T!-vrfpvc=dP~)qtcHgzz9m*;S==SHpQcLqcRC z(-*=Or#DDAi(6h$-CcWUUk7ESxGWP*8;T%cN+f)4F{u#47Lh$0_=<ep^tdmN{W_QR z6h*bA-YVq7(ehC!?){3i+fE=(l9z>XvKqh>DvXmk0lwG2?egJoU0^P)D=*l*#C-Iz z-tZv+-Mg^%h_9T!J{f49BtJz21(xu^P(gw?=*MJbEy&Hk>*V%|ispRCQCYQ&!i_J^ zgr@zlB1JcvbzdT{)^t)M#ck*5Z=>Qecf)SDkn27b)a3>7tmJt&P?}<iF$H=`>=!0W z*@x3kLp8;EI2T9Sbxd3=seW92TnI#QvasEbPX_RWYPaXc0`1>_)v}A$tZ5%VHp=L0 zo1;!2p-<F}c{663D}5Y3vt!Z>N~8ZG9b+nWg0M1-mcJa5OqYpMd2wB2Q?pVgzfhnr zG9ex6<(YO6?rm=&6-r-JN^}dZavFdNAawO_Q50Ku#CctNN>UnzxjT8z#m>C+Pg8nF zCY^j$80nc!Up1y6v?#1Y>wFm9<kocFwK04GfUhcJ_>hC|hPPklzx$2V*He!YUd*V( zK+BlRS}pSt0KYdQNj(*ORECIJru7jvToF-%X8&Sn)eA{no;1~^4r{a(yJ};=Bp{u9 zoziWS>D(CyLess5KmEpX`t+A+Uvz^p6+no+HMJ8uQ_muhy7mee0k-$xuM`KSrNo?u z;nEb=a{asPip#xMg~dAVNsQun4FISpKJ*rFPhaw~<!j_C4JVLQg}^YN4I;(|+Z)@P z0sLLpcn}He1b^e#XjD&_ziCCfe=-?>5f!L(!C!GWCEG5zRHiS|KtBz#sk_B+>u*ZI zeYesU7hLM}=A`aiU&or0y%53f^`*&DhZmkvFW6y;d76nz)#6+%t!D$~i?JdXEFl-b zni{eqSWU4Fp_tSWkZ7|I08}yudO}`v&hl$2)t!x2C?R|a#RjYuSR0BD3;trF74HV{ z`B{F%zdn3F_MEYX|2B+khe3KEPRblr28?`ie|q3)rl_?6-4i10v2|2IPW{hiss!B| z$az{k*O81&%M8)6KbU6S;F={Zh0++&>=hfHkyM@z)~rdrKpmxjnoRj!6j*RcXkod+ z0$H6t??nX-6*>WJ7}N^@%J88D;EsRz<0CG)GPyJ&&ovD(M4;fYNyl^4yqG_cv`h=Y zf6nxC&OBCpZDJ#yZH4NeA>=7AF^b&|nfpk$Hf3}MAUGQ>3avGWWHu+7GID$7fk0FM zP&Q6vdg7ZQ!xXCqpjoFPbP9Y*o1A8_bhBAR26v@gIyiARSu5vSisxraBy}0c`9sdx zT*P#CcwS8*7-M`3z(X7Z4ptt!d|+^BRos+rEtjR!Wktc`Z0_(-g7_cfrp9a_tSs-l zXQ#j5n*dJf1YB`}i(!T|0HpmpjI(^s(ir1*pA<;yG<ThG*=9k>Y^IkEy2`RT>$ar{ z1+zGA?np9b1KmuMvr29?-Iv@E*KuL&a_W||g@}erT0t(wj>!5)@+CT4`nU8+P&kD6 zd(Y)BANbz?Jm&R6+8Kh`RvtU63<?r3UU~?_AbciiCAE}A?+S$DFEa?I08f+~YD~^) zX=4B>AWb?IA$JdUMvUDoB&2I9$`-13w^Y;IS&53FX)5WN^5o)t=e=du3`|>G(^+Qg zoR-izsHj-$O=k&a8{ttFqn6!wZV8JPF$0(rshYxruerR*iHKSNpy&lIJ?+o+$Cs^q z^_s)g$x#&9Aw(8^AZV~Az!#9L;OA~^C<H$3u^F5xG2vQo2pxl2Wb{FHSj;eP?4U86 zjZGCG7~zr<V&{4p##q56xh<Ueh_mTrOg@XRJd-AMODTXesV5b<M$j}6=GD6CqJlj3 zDjPs!xRfwu0Hi#*Foh*T*-nvk6`Bh-4Cf##63-_6`m{#`9Yi&!JBzJm5e8Nxm@25X z$>K_-<R}0raftMQ`ipN@uRgo~8uBBhTL6?mMszr(ErCG3069bLI@20@GWo=_<H<6< zaq2Gtj23_HqIcIuw(cAS6c;-CjTKNDcFX)+dl98EN<J$&UptcO+!&-O8#qoyUa*j# zn3DVA5~*7PMC$YmvR27bmRpD^sVGJ$01_FHrt^gcrnJp7p8(-rgW-;Lf`ZF6JgpR$ z^M5uj<dP-JD=)=|JY@lFdw~UG+Ete}HTlZl0szWaho&*TFCIO)zO4Rg7=Wb6hBext zyuh|9H>sZ81W`q33xQQcAHpR)s|Wj{KLYSr`g5mNtlG47=V+w0@ujpQ(6qMG>7_6* zhO)^9FmR<U12%cDY`PJun5cm5Q1q<fj>;8;(qz_bUNvW9r*#)z4(T*GQLur<u&&E! zw{F=c3M~Nk#}*R{c9zK$lA!4WkxT(tDf;c_Oo@0l=`N6>)dRaB?1iqmf+F1Z6kDaV zc0g28tOpLEBHCZQ@S1^sGhmudSXxvybDF){`YuTTfmMEZ$}Y4H1<;ao#qNlX`u?Ng zp8>cQ0ABjULr)mtZDsIEX4^QUjc|t{kdP_IafYB_C;SW7NoR}ilu6r->w}<d_<FhD zBCBAe0d{It%yc@YnDN>sdCun@rj{=yzOz!6aQzwR;MzL&Bo&G1g8K)fw3e)xbaYq7 zI50XOq2RiUqzStPF~(R@Uzb2vXjpRYmmN5Xprw@e1Avl;U^>>v-+JC*pZn`Imn&{V z3*lx;8j!F}FzI%|Jeo1t$Aav{HlGMA1X?5U(HE`7SK@YbesgT{6JPt&H$J`m9slsq z(W_UiG&;_n+Vmhm1VQ#=nNBTm6Y}jgNn7sH?j{h~&u3Ev;3l&=0bJ_tO#1i2s@Z8o zByytLuyK<XC|mlN%9%R*g^6`(GkPkbV3eg%x$=ebuj}9>)0RuPDOg2vx-&7+CbybJ z{xpTNDKxAb$D`(nUk*HN3=;Qok{Bo{pRQKCUjTrrRt~-*`VANLzoyz}jx>?G0pzxF z3wFE42rN@qCxFC8+)RLRQhezVs&znVLTgm1kkzRM?KM~TKJmo1<%@4`x5LY%00bFm zVUP#|DeR5Z1<#iD*A`1|Y|=mTf#NK3GFTL1Cvp?{i|#7Fsiw4_J+pj;EY<>^N~4;y zjJ7!0t6Sw_+LW!-`cg+-kjf>r^wI95Pmr&%HO!^tqdZ(GZ%#5<qms!VcAWw*Z`sT~ z)*AI{?MI_y%^d)sM#q{56?_lh@~Zj;C#}BPQwB-w+?XV=GERI+b{c*n(&r3JcDETP z8X^Q_0+>i3oCrqS6ZKohC;2~<XzEr}mhA$7mmGfN4<3H};XjV0>=9&;IN;gFADwMq zWo8IYo03vM=I+HV+)FcK$|v1tH-yR?%S%%e@*AJ^QWOG5B64$Q2wHPt&=(beT2y+M z+2)i25yd9ow5pRzW{NQ)im$J;OjfRda1n6D2?<$z>qgWepBGcKf<?ERgU?P;08w14 z2G^x;N7bqaR}Z-8!IiIAdZza>Z4#S&qzebrwMf}KJ{xbCgn*bKB0#i(q$M%FQ$04e zUEHWcbwdog1AviUuIzq5>j&GF%8x3o))htxXl>QGT4*GR0Hkg1Nt<}mT^+(b07BSR z^>*KgbB{vURl-KkTvzQT$#QXA>fTfHM(jY1eAk;0gnZ~oKC9X2a^qEThKw!=T&djs zMmZH!Op;PiQ2}(*L<=2)hO8{dxyvmLEy_U0&_>&sFzaR3&i!fxzIUtdscc+_@;!CX z!1sf<{Vu)wP1UPwbsgvln@o_f^hY{lnT-In-Ihc#L&XMY8ARh0P3)-LK~IL?*s@35 z2=KE&cOk{1cb}1b?_X~I+{@N)xGYYzwD(3kU0?!cX>W=Yxo}hzrU)1+^jWySvzb=> z@0<x!BztpLo<oW|wjyQDIcr|ZyW<S!3kEw?$oUh{F%w!?i5cZg<a9wo*HLlPt0y_n zhf-OsG$kPgqc$$fwHDAg?k@#jqAmE0Vck=&ex}(Dv)v%7*$xjH08ct;V(npT`9c%r zPiMB@I)UXXG=pLT5gKp{XpPdg=C<JGJv->@<00J!rN*&f@4xGPOBa3bp-sDfI59PK zp%fKptr5FMAm1(MV<SPrmf<8*zERxW%+i1$*at?q+HF=XD1xvAtUNI&TBpu641x;7 zUb!Q2A;6@QE3z`7$p%@LnwrS214AYPE9E^i)P$*&%ycF>xhTQ9bZrXpUn$w(y!zol zm}reSNwP-zDAK6cf^RpfmG2f`hiX(S2MvH?dF#@izF-+g`3^XwB{IzrS_82`JPx#W z%U_Oep>I!(iEje94*>QjTG;TuGs5}@zV|mHlN-;DbzCFi0Xom>q+}S$5XNqbG@NpP zF7q_y=~Q;yw1A$r(UrT10LpeJ8v;pX)e4n1q8A1S70BpLcUW|po%P`2BrlY7f<-V= zrhZAwjwn4$c^cCxI>?tUaw+M^+^|bD60MOW8cC8)NzfpHUHv`vKW}&F|5Q6VIC{Wu z{@M9Gzw;X_UMq}&iKxg409u1%gZ3C&6WhdX;U4eW$uYhez@}fNQs{l=k{_>l|2sdk zaoeeXD9PBx%xNjeNVh`OxkiD~RMTRsBNZn?rN*hSmbgeyly#WS!jLH_pQpQCQDC<7 zVqaPHk}aCaba@3j+3mi|etu!47Zvo4rCBy5p#*mbC(^wvTqwU4#*MJa$mqQE##xqY zOgZk0k^~C}dOy+*qX#<g(Lw8q>kIs|28YCHdMdK33fWk~HDTyU`P{C};`?LUab0T) zKLyMS)~tN^@*jR|+sLa<3*(V<0-}O4#vPzA(CI`|VQd_TyottIkd!~9(mYHq)IU4j z+q8Z)D$_A=GyjO(&h3tF_*|w{<n@q&fslhDbMakzoO5H>Id3MPl2vTAOs#DC`*l_? zE~;NlR;IIYA+lPp&2|m6wzFcwI7Xuqe72`n`E0lQqk3uw#|2+;#_$zdhk=;V5SkHA zQPkXp+c#}B-`YOT-_OcvFR(UZ$L~KmdhA~gz4xK@qu*#p$uSjAI`G+P&VmKVHT*~t z*>qJh<mej8rVbR{<#d$^rcXF6jPET<`Lc=!=|Y^Dzxi?kQQmxHxcK=(`K-`^CWtz_ zGs{+&xx`Nrb+L#uP&37noH518sm58pJPvF{F&dTNhNTM!Ka3exI?(-(J^P}A?{mL> z-cf(`-lexQw}z&+<GImo;s-Jo*SE&ZPXSCEj0fQPD}VoVG?xAcqrS$M<$2C_zb{I& z^g3N+ks2v=FBP*$rfHdJcC)ECmA<5Z$u}6G`wTx*D3Kx6<aN}4yH3BNT*H{{QZDW- zLHXZ{qqmFNzGD1Y0%DqcuoWBVLisHWW7Mj_cNP!zzYDXhaZvgoNb+AY?7wW!bJ4@& zJH$8Q(EC1sCjbD!!7Br<yz$d_wSV(p-n?Z*{CitXt@D)!76Q!LS}o(oNfgK7x;vut zqHDgT2_5kiclLGUU1G+$<b1+vuKb}gva=6_%W}C$b~}pHAYZ|1(pb=Oi^X1I%rKgb z3JFm@!YwCn^66ZR=}qVb5W?-d<8)k`L98|6SfjU5{lf4-?;ilzHQRlmdmnlF#kW3x zboq)!eLWNCvM2apU*Y9nJ|<eS=kF$)@x_5>C!-eUCZ{e|fMyH_irrsXJ7vc86?<&+ zY6ulMw`?z60b1N4dr7Mt9c*6F1*dUZH!GL|P|$R@UX*)v#*3wWAzaM3P#RE_CPl@1 za1<o~p;ZmMj}P`W{t7b@wZ*sk^9R@CzuGlWtMraF!w+rQHTt{8@Sx|ZYz>#7!fZUw zEkwDKA~$`dK|jQ$;ypT&{Zdh^gH%p|oLg8%$?<o@a$MN!k@xjbmYftvW8^<?`e@#4 z(?F3xFZHNQSIl${+|-H9c%_v04)oSP0^r7dy%%)rJ&)kO>P3oP-fo5;YKO^X2J9<0 zHLKKt#^??{6#IkH)Y#+-V$LlVcT5uCqCTro7V9*E#SC`Z#I`~VS9GP_me-(zcg%rV zlz?^HQ&I$Axtv#|Uj&H_^;+<`TE+ig*vI`K*>CviFCN2x<!kA}elapKapCrn$u}Ct zxkl1*GA8SkBO&ZqNM_^$KX%5ByCx$=0=Z~0N=ZqlNC1V*xmc*9?f{~qq^3xE&q$AV zwsw|(elh7Pa+pQ=eyWy9Wm;0oCw)(S!}sKu036W15BlMqzr_4yFNuM**s=c1s9HNS zuGNl$G0TM3OM$qmS%M*9AnYg)2seO-iY*a&V>ba(8X#&~(zw_!+l4PI(l^v)?gtfS z#}wUbaq&$j*H_Z1a*;hxL%Zp-NIDa#R6FP%fP{g~z9;VrJn#EbiXQ^_m4=M}mv+Ik zT}e&UWu?|LdgINf9m(JM?BJTdB_S#>%7+mOh7=5WFi=h|M)vPcPA1|6d!~jT2$#M5 z7FF>K8x3JgDVm64cUOgB_Q6nwjbuQwVQCCY!$t}s34$_KyrY;|!FDn#!z>xBh#<j` z40y~e(|>0`5<$Ap31&zKNm0OSfsZC*UmFqv5`aP?ObH=IloVT;@syPEaUt+9fahMY zFzA-M9-2qnUarHwbJ4%9KCb?*SOV-3goNEyBB?ahfSJGvpb~?4XO!Ib(<N_$YZZ7Q zuEy{DA2Q6sXcn4{Fw7+FK2|b@1v3j~2*aA#z<!>Yn3)W-8#-8+LS0DE31lah5V0WA zLXwd}#!`wltR(nFxejSt=C8{oj#l5;v%B{#)x}9wyD}ZQDGq5ri@m?LYmNnD=kD4A z8y?wt%M1EK-g7y-ih}<C%h{?Y-~YOKgze>eYMJ`kD^KIQRxP7fvRm=u$U;Ea@or#% zv~8o(5%9<}+pk}7GDhZ4Z!Z8`adLD16!v~i?b?XzRvbmI6aipZ6nHeZKf_qjst_8J zyS;6D9$#|9{ITr=0QWq;Wd0QP;o7p$d}sBD_`ShpSjE}04BHtekoQ(-3Ni7-qMI-M z>Hm3j{?zs%2^o`{=TBiDue(3+n$NuILixUk+?Gh;+%Q=|EoqI`SQI^Wecx38zB7Mf z`(Obd`HeTspTa&~x86Jc^>bdn;2okz*G!=)oLy=lSzy<5>fVPpZU4#qY3(BbAKtWm z{uK7{y6egDJ05?s?`OxJ=3Njaj>|BdHt`_|f$bZU>(-r68J|C`eFWgT6Dsqku#eYA zPFNg1bboa1F~@rskOw<-(d{M>Fxa()H|^Ze_}2VM?FRsNZfMM(!hT%GUAXAG<9l|j zuMI{=5#0C&ZD10EiP7N3b*JOW`BT~-3wZiG5xrm6o*i2r*_d2++8OjmtnAn;(gr;4 zwQgG9{?GXX+D`!9w7xxm3j29&esa^br<`#3yQt0!bY$R3!uIF%t?O@i=8pN(*-rqj zzu}qrQ`pbz+!gx4=O2u}xAJuL78rvtR(!`jQ(t+-*~`QE)7eh|zT)iV^QW+%mj=v3 zchtW!^peTfH|o;g`9%DndT{$q^Cxov08|go(=Z2e-F52FkB{Es-+uJ+<lLvX%KtlX z`KsOXr*Z%Q9JqYd{3#s3brG6v@6L&9H=k8K;?s9N|IPUmIY0n@`p#$PPvHQskM6{G zZlwjgTRW$onm>&LyZ%3=BSDegs2LXk001R)MObuXVRU6WV{&C-bY%cCFfuYNFf%PM zI8-t+Ix{&sGdC+RFgh?WU1YP=0000bbVXQnWMOn=I&E)cX=Zr<GB7eSEif}JFgR2) gGCDIkIx{ybFfckWFf2I>XaE2J07*qoM6N<$f@IN#<^TWy diff --git a/src/assets/question.png b/src/assets/question.png new file mode 100644 index 0000000000000000000000000000000000000000..bb187b15772f554c509f6b2968057bb2f34d131b GIT binary patch literal 582 zcmV-M0=fN(P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0ozGLK~#7FwUs?@ z!Y~kqFA*z<ouys)m`W$s7O^+t4?uTN>4sR!0&A%dbCo{;<p-d4hN0Q`m@>eQU<P`x zl~5|MlhF2&9LLW2wSD$oG*U1gk8d<hGq~JwGwKvzai6u>Y|K<D^&uOt$wYNsf92N; z^2X*;Pb3nir}%6(d*1DK6$%LNq!o|HAEn~c>GYGUG@XydJGgcmy8D6^|56yF9UXyK zIs3Ti`1mBN)ruC2g{VO$lOYw`?e-Q29YTYJpJayJZkL+PCau@&eP1jVqfVzoEO2s+ zv(QV;xf$;=@pijSlgWf~xttKi4jPRH4v<Ep5vf)mV&NhwD3{AeeY_wtO;b#S2~UCe zz=2*-K<4wgsKeo~)CPeE@jy2OZW;^*R45cE5{alxqag}FwOXZKuP20SwVIc?5MR=F z&X9sz17Vy&sZ=6A=#IE2!{Jc4!LKl5g*cD&+4&D%mic^MTt~mKuBG$i&5v<1nUn^N zMBLP!d~ACe8-_vIY*x6(2R3v?;^Jt!r@y6+$3Eq9h__U}cN3SFYuFtx?83?qaqw^X z9N+_HrZd2}L*XNFfGs&^V3R*=WI)#yhiIx%NXJ~^M}p+$x@*a+MBw#tja7gDFU2v) U>y8-4KmY&$07*qoM6N<$g0vz4vj6}9 literal 0 HcmV?d00001 diff --git a/src/components/calendar/Calendar.jsx b/src/components/calendar/Calendar.jsx deleted file mode 100644 index 3dcd17c..0000000 --- a/src/components/calendar/Calendar.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -export default function Calendar() { - return ( - <h2 style={{ fontSize: '3rem', fontWeight: 'bold' }}>Coming Soon..!</h2> - ); -} diff --git a/src/components/companyOKR/companyOKR.js b/src/components/companyOKR/companyOKR.js deleted file mode 100644 index 6da4156..0000000 --- a/src/components/companyOKR/companyOKR.js +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -export default function companyOKR() { - return ( - <h2 style={{ fontSize: '3rem', fontWeight: 'bold' }}>Coming Soon..!</h2> - ); -} diff --git a/src/components/dashboard/DashOKR.jsx b/src/components/dashboard/DashOKR.jsx new file mode 100644 index 0000000..11e2b89 --- /dev/null +++ b/src/components/dashboard/DashOKR.jsx @@ -0,0 +1,104 @@ +import plus from '../../assets/plus.png'; +import { getOKRData, userInfo } from '../../store/store.js'; +import { + Container, + Header, + HeaderBox, + OkrContainer, +} from '../../styles/OKR.styled.js'; +import AlertModal from '../global/globalModal/AlertModal.jsx'; +import OkrModal from '../global/globalModal/OkrModal.jsx'; +import Potal from '../global/globalModal/Potal.jsx'; +import { NotHaveEl } from '../global/globalModal/modal.styled.js'; +import OkrItem from './okr/OkrItem'; +import React from 'react'; +import { useState, useRef } from 'react'; +import { useRecoilValue } from 'recoil'; + +export default function DashOKR() { + //모달 상태관리 + const [okrModalOn, setOkrModalOn] = useState(false); + const [alertModalOn, setAlertModalOn] = useState(false); + + const info = useRecoilValue(userInfo); + const okrData = useRecoilValue(getOKRData); + + /**모달 닫는 함수 */ + const onCloseModal = () => { + setOkrModalOn(!okrModalOn); + }; + + /** +버튼 누르면 OKR 생성하는 모달 띄우는 함수 */ + const createOKR = () => { + if (okrData?.length < 4) { + setOkrModalOn(!okrModalOn); + } else { + setAlertModalOn(!alertModalOn); + } + }; + + // createModal + const modalRef = useRef(null); + const modalOutSideClick = e => { + if (modalRef.current === e.target) { + setOkrModalOn(!okrModalOn); + } + }; + + /**모달 닫는 함수 */ + const onCloseAlertModal = () => { + setAlertModalOn(!alertModalOn); + }; + + //alertModal + const alertModalRef = useRef(null); + const alertModalOutSideClick = e => { + if (alertModalRef.current === e.target) { + setAlertModalOn(!alertModalOn); + } + }; + + return ( + <Container> + <HeaderBox> + <Header>{info?.team} OKR</Header> + <div className='btnBox'> + <div onClick={createOKR}> + <img src={plus} alt='plus' /> + </div> + </div> + </HeaderBox> + <OkrContainer> + {okrData?.length === 0 ? ( + <NotHaveEl> + <h2>설정된 OKR이 없습니다.</h2> + <div className='btnFlex' onClick={createOKR}> + <img src={plus} alt='plus' /> + <div>OKR추가</div> + </div> + </NotHaveEl> + ) : ( + <OkrItem /> + )} + </OkrContainer> + <Potal> + {okrModalOn && ( + <OkrModal + onCloseModal={onCloseModal} + modalRef={modalRef} + modalOutSideClick={modalOutSideClick} + /> + )} + </Potal> + <Potal> + {alertModalOn && ( + <AlertModal + onCloseModal={onCloseAlertModal} + modalRef={alertModalRef} + modalOutSideClick={alertModalOutSideClick} + /> + )} + </Potal> + </Container> + ); +} diff --git a/src/components/mainpage/ToDo.jsx b/src/components/dashboard/DashToDo.jsx similarity index 76% rename from src/components/mainpage/ToDo.jsx rename to src/components/dashboard/DashToDo.jsx index 0f3c38e..ed1cdb7 100644 --- a/src/components/mainpage/ToDo.jsx +++ b/src/components/dashboard/DashToDo.jsx @@ -1,34 +1,30 @@ import { GetTodo } from '../../apis/apiGET'; import plus from '../../assets/plus.png'; -import Potal from '../global/globalModal/Potal'; -import TodoModal from '../global/globalModal/TodoModal'; -import { NotHave } from '../global/globalModal/modal.styled'; -import TodoItem from './TodoItem'; import { Container, Header, HeaderBox, TodoContainer, StTodoItem, -} from './todo.styled'; +} from '../../styles/todo.styled'; +import Potal from '../global/globalModal/Potal'; +import TodoModal from '../global/globalModal/TodoModal'; +import { NotHave, NotHaveEl } from '../global/globalModal/modal.styled'; +import TodoItem from './TodoItem'; import { useQuery } from '@tanstack/react-query'; import React, { useState, useRef } from 'react'; -export default function ToDo() { - //모달 상태관리 +export default function DashTodo() { const [todoModalOn, setTodoModalOn] = useState(false); - /**모달 닫는 함수 */ const onCloseTodoModal = () => { setTodoModalOn(!todoModalOn); }; - /** +버튼 누르면 OKR 생성하는 모달 띄움 */ + const createTodo = () => { setTodoModalOn(!todoModalOn); }; - // 모달 외 클릭시 닫기위해 ref생성 const todoModalRef = useRef(null); - /** 모달위에 있는 배경이랑 ref가 같으면 modalOn을 false로 바꾸는 함수 */ const todoModalOutSideClick = e => { if (todoModalRef.current === e.target) { setTodoModalOn(!todoModalOn); @@ -37,7 +33,9 @@ export default function ToDo() { // 임시 const { data: getTodo } = useQuery(['TODO'], GetTodo, { - onSuccess: response => {}, + onSuccess: response => { + // console.log(response); + }, onError: response => {}, }); return ( @@ -46,7 +44,7 @@ export default function ToDo() { <Header>오늘의 To-do</Header> <div className='btnBox'> <div onClick={createTodo}> - <img src={plus} alt='' /> + <img src={plus} alt='plus' /> </div> </div> </HeaderBox> @@ -57,13 +55,13 @@ export default function ToDo() { <TodoItem getTodo={getTodo} /> </StTodoItem> ) : ( - <NotHave> + <NotHaveEl> <h2>설정된 To Do 없습니다.</h2> <div className='btnFlex' onClick={createTodo}> - <img src={plus} alt='' /> + <img src={plus} alt='plus' /> <div>To Do추가</div> </div> - </NotHave> + </NotHaveEl> )} </TodoContainer> diff --git a/src/components/mainpage/Menu.jsx b/src/components/dashboard/Menu.jsx similarity index 68% rename from src/components/mainpage/Menu.jsx rename to src/components/dashboard/Menu.jsx index 1cebb88..c1c9983 100644 --- a/src/components/mainpage/Menu.jsx +++ b/src/components/dashboard/Menu.jsx @@ -1,8 +1,6 @@ -import { NowState } from '../../store/store'; -import { MenuContainer, MenuItem } from './menu.styled'; -import React, { useState } from 'react'; -import { useLocation, useNavigate, useParams } from 'react-router-dom'; -import { useRecoilState } from 'recoil'; +import { MenuContainer, MenuItem } from '../../styles/menu.styled'; +import React from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; const Menu = () => { const navigate = useNavigate(); diff --git a/src/components/mainpage/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx similarity index 100% rename from src/components/mainpage/TodoItem.jsx rename to src/components/dashboard/TodoItem.jsx diff --git a/src/components/mainpage/Tutorial.jsx b/src/components/dashboard/Tutorial.jsx similarity index 100% rename from src/components/mainpage/Tutorial.jsx rename to src/components/dashboard/Tutorial.jsx diff --git a/src/components/mainpage/Calendar.jsx b/src/components/dashboard/calendar/Calendar.jsx similarity index 91% rename from src/components/mainpage/Calendar.jsx rename to src/components/dashboard/calendar/Calendar.jsx index 9b18faa..e637a03 100644 --- a/src/components/mainpage/Calendar.jsx +++ b/src/components/dashboard/calendar/Calendar.jsx @@ -1,9 +1,9 @@ -import { GetTodo } from '../../apis/apiGET'; -import { patchTodoInfo } from '../../store/store'; -import Potal from '../global/globalModal/Potal'; -import TodoModal from '../global/globalModal/TodoModal'; -import TodoPathModal from './../global/globalModal/TodoPathModal'; -import { Container } from './Calendar.styled'; +import { GetTodo } from '../../../apis/apiGET'; +import { patchTodoInfo } from '../../../store/store'; +import { Container } from '../../../styles/Calendar.styled'; +import Potal from '../../global/globalModal/Potal'; +import TodoModal from '../../global/globalModal/TodoModal'; +import TodoPathModal from '../../global/globalModal/TodoPathModal'; import dayGridPlugin from '@fullcalendar/daygrid'; import interactionPlugin from '@fullcalendar/interaction'; import FullCalendar from '@fullcalendar/react'; diff --git a/src/components/mainpage/OkrItem.jsx b/src/components/dashboard/okr/OkrItem.jsx similarity index 71% rename from src/components/mainpage/OkrItem.jsx rename to src/components/dashboard/okr/OkrItem.jsx index cb49902..bcc13e5 100644 --- a/src/components/mainpage/OkrItem.jsx +++ b/src/components/dashboard/okr/OkrItem.jsx @@ -1,15 +1,13 @@ -import { GetOKR, GetUserInfo } from '../../apis/apiGET.js'; -import kRAdd from '../../assets/KRAdd.png'; +import { GetOKR, GetUserInfo } from '../../../apis/apiGET.js'; +import kRAdd from '../../../assets/KRAdd.png'; import { patchOKRInfo, patchKRInfo, patchProgressInfo, -} from '../../store/store'; -import KrPatchModal from '../global/globalModal/KrPatchModal'; -import OkrPatchModal from '../global/globalModal/OkrPatchModal'; -import Portal from '../global/globalModal/Potal'; -import ProgressPatchModal from '../global/globalModal/ProgressPatchModal'; -import Emotion from '../global/globaldropdown/Emotion'; + userId, + userInfo, + krDataAtom, +} from '../../../store/store.js'; import { OKRBox, Objective, @@ -17,38 +15,27 @@ import { KRBox, EmptyKR, PersentBox, -} from './OKR.styled'; +} from '../../../styles/OKR.styled.js'; +import KrPatchModal from '../../global/globalModal/KrPatchModal.jsx'; +import OkrPatchModal from '../../global/globalModal/OkrPatchModal.jsx'; +import Portal from '../../global/globalModal/Potal.jsx'; +import ProgressPatchModal from '../../global/globalModal/ProgressPatchModal.jsx'; +import Emotion from '../../global/globaldropdown/Emotion.jsx'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useRef, useEffect } from 'react'; -import { useSetRecoilState } from 'recoil'; +import { useRecoilValue, useSetRecoilState } from 'recoil'; -const OkrObject = () => { +const OkrItem = () => { const [okrModalOn, setOkrModalOn] = useState(false); const [krModalOn, setkrModalOn] = useState(false); const [progressModalOn, setprogressModalOn] = useState(false); + const setPatchOkrInfo = useSetRecoilState(patchOKRInfo); const setPatchkrInfo = useSetRecoilState(patchKRInfo); const setPatchProgressInfo = useSetRecoilState(patchProgressInfo); - const [openDropdownId, setOpenDropdownId] = useState(null); - const [accessToken, setAccessToken] = useState( - localStorage.getItem('accesstoken') - ); - const [uid, setUid] = useState(null); - const [position, setPosition] = useState(''); - useEffect(() => { - const decodeToken = jwt_decode(accessToken); - const extractedUid = decodeToken.userId; - setUid(extractedUid); - }, [accessToken]); - - const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { - enabled: !!uid, - onSuccess: response => { - setPosition(response.teamposition); - }, - }); + const [openDropdownId, setOpenDropdownId] = useState(null); /**O 모달 닫는 함수 */ const onObjectiveCloseModal = () => { @@ -62,18 +49,14 @@ const OkrObject = () => { /** +버튼 누르면 OKR 생성하는 모달 띄움 */ const patchOKR = (id, objective, start, end, color) => { - if (position === '팀장') { - setPatchOkrInfo({ - id: id, - objective: objective, - startData: start, - endData: end, - color: color, - }); - setOkrModalOn(!okrModalOn); - } else { - alert('팀장만 OKR 수정이 가능합니다.'); - } + setPatchOkrInfo({ + id: id, + objective: objective, + startData: start, + endData: end, + color: color, + }); + setOkrModalOn(!okrModalOn); }; /**KR 모달 닫는 함수 */ @@ -83,17 +66,13 @@ const OkrObject = () => { /** +버튼 누르면 OKR 생성하는 모달 띄움 */ const patchProgress = (id, value, state, color) => { - if (position === '팀장') { - setPatchProgressInfo({ - id: id, - value: value, - state: state, - color: color, - }); - setprogressModalOn(!progressModalOn); - } else { - alert('팀장만 OKR 수정이 가능합니다.'); - } + setPatchProgressInfo({ + id: id, + value: value, + state: state, + color: color, + }); + setprogressModalOn(!progressModalOn); }; // 모달 외 클릭시 닫기위해 ref생성 @@ -127,8 +106,12 @@ const OkrObject = () => { }; const [KRArray, setKRArray] = useState([]); + const value = useRecoilValue(krDataAtom); + console.log('value :', value); + console.log('KRArray :', KRArray); const { data: getOKRData } = useQuery(['OKR'], GetOKR, { onSuccess: response => { + console.log('response :', response); const newArray = response.map(data => { const newKRArray = [...data.keyresult]; newKRArray.sort((a, b) => a.krNumber - b.krNumber); @@ -144,58 +127,56 @@ const OkrObject = () => { }); const patchKR = (id, KR, state, index) => { - if (position === '팀장') { - if (state === 'patch') + if (state === 'patch') + setPatchkrInfo({ + id: id, + kr: KR, + state: state, + }); + else if (state === 'post') { + let index1 = false; + let index2 = false; + let index3 = false; + for (let i = 0; i < getOKRData[index]?.keyresult.length; i++) { + const forNum = Number(getOKRData[index]?.keyresult[i].krNumber); + if (forNum === 1) { + index1 = true; + } + if (forNum === 2) { + index2 = true; + } + if (forNum === 3) { + index3 = true; + } + } + if (index1 === false) { setPatchkrInfo({ id: id, kr: KR, state: state, + num: 1, + }); + } else if (index1 === true && index2 === false) { + setPatchkrInfo({ + id: id, + kr: KR, + state: state, + num: 2, + }); + } else if (index1 === true && index2 === true && index3 === false) { + setPatchkrInfo({ + id: id, + kr: KR, + state: state, + num: 3, }); - else if (state === 'post') { - let index1 = false; - let index2 = false; - let index3 = false; - for (let i = 0; i < getOKRData[index]?.keyresult.length; i++) { - const forNum = Number(getOKRData[index]?.keyresult[i].krNumber); - if (forNum === 1) { - index1 = true; - } - if (forNum === 2) { - index2 = true; - } - if (forNum === 3) { - index3 = true; - } - } - if (index1 === false) { - setPatchkrInfo({ - id: id, - kr: KR, - state: state, - num: 1, - }); - } else if (index1 === true && index2 === false) { - setPatchkrInfo({ - id: id, - kr: KR, - state: state, - num: 2, - }); - } else if (index1 === true && index2 === true && index3 === false) { - setPatchkrInfo({ - id: id, - kr: KR, - state: state, - num: 3, - }); - } } - setkrModalOn(!krModalOn); - } else { - alert('팀장만 OKR 수정이 가능합니다.'); } + setkrModalOn(!krModalOn); }; + const [showEmotion, setShowEmotion] = useState(false); + return ( <div> {KRArray?.map((Obdata, index) => { @@ -204,7 +185,7 @@ const OkrObject = () => { <> <Objective key={Obdata.objectiveId} color={Obdata.color}> <div className='left'> - <div className='title'></div> + <div className='title'>O</div> <div className='nameBox'> <div className='name' @@ -252,12 +233,13 @@ const OkrObject = () => { </div> </Objective> </> + {Obdata.keyresult.map(data => { return ( <KRBox key={data.keyResultId} color={Obdata.color}> <div className='left'> - <div className='mount'></div> - <div className='logo'>목표{data.krNumber}</div> + {/* <div className='mount'></div> */} + <div className='logo'>KR{data.krNumber}</div> <div className='name' onClick={() => { @@ -291,10 +273,11 @@ const OkrObject = () => { style={{ width: `${data.progress}%` }}></div> </PersentBox> <div className='percent'>{data.progress}%</div> - <div className='emotionBox'></div> {KRArray && ( <Emotion + showEmotion={showEmotion} + setShowEmotion={setShowEmotion} keyResultId={data.keyResultId} emotionState={data.emotion} openDropdownId={openDropdownId} @@ -343,4 +326,4 @@ const OkrObject = () => { ); }; -export default OkrObject; +export default OkrItem; diff --git a/src/components/global/Loading.jsx b/src/components/global/Loading.jsx index 731d846..0759630 100644 --- a/src/components/global/Loading.jsx +++ b/src/components/global/Loading.jsx @@ -1,12 +1,13 @@ import React from 'react'; -// import { FaSpinner } from 'react-icons/fa'; +import { FaSpinner } from 'react-icons/fa'; import FadeLoader from 'react-spinners/FadeLoader'; import styled from 'styled-components'; const Loading = () => { return ( <StLoadingBox> - <FadeLoader color='skyblue' height={15} width={5} radius={2} margin={2} /> + {/* <FadeLoader color='skyblue' height={15} width={5} radius={2} margin={2} /> */} + <FaSpinner /> </StLoadingBox> ); }; @@ -20,4 +21,21 @@ const StLoadingBox = styled.div` width: 50%; height: 100vh; margin: 0 auto; + svg { + width: 40px; + height: 40px; + animation: spin 2s linear infinite; + + path { + color: rgb(255, 131, 54); + } + } + @keyframes spin { + from { + transform: rotate(0); + } + to { + transform: rotate(360deg); + } + } `; diff --git a/src/components/global/globalModal/AlertModalTest.jsx b/src/components/global/globalModal/AlertModalTest.jsx deleted file mode 100644 index f384cc0..0000000 --- a/src/components/global/globalModal/AlertModalTest.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import { ModalBackground, ModalBox } from './modal.styled'; -import React from 'react'; -import { ImWarning } from 'react-icons/im'; -import styled from 'styled-components'; - -const AlertModalTest = ({ onCloseModal, children }) => { - console.log(children); - return ( - <> - <ModalBg /> - <ModalContent> - <ImWarning onClick={onCloseModal} /> - <div className='contents'>{children}</div> - </ModalContent> - </> - ); -}; - -export default AlertModalTest; - -const ModalBg = styled.div` - height: 100%; - width: 100%; - position: fixed; - left: 0; - top: 0; - background: rgba(0, 0, 0, 0.15); - z-index: 20; -`; - -const ModalContent = styled.div` - position: fixed; - width: 71.5rem; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background-color: #fff; - border-radius: 15px; - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); - z-index: 21; - text-align: center; - padding: 20px 30px; - border: var(--main-border); - padding: 1.3rem; - .contents { - color: #ec5a00; - font-size: 1.7rem; - } -`; diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index 720c9c8..e5eb9fe 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -2,10 +2,11 @@ import { DeleteKR } from '../../../apis/apiDELETE'; import { PatchKR } from '../../../apis/apiPATCH'; import { CreateKR } from '../../../apis/apiPOST'; import close from '../../../assets/close.png'; +import info from '../../../assets/info.png'; import kr from '../../../assets/kr.png'; import trash from '../../../assets/trash.png'; import { patchKRInfo } from '../../../store/store'; -import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; +import { KRBox, ModalBackground, ModalBox, OKRBox } from './modal.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; @@ -72,11 +73,6 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { keyResult: krInfo.kr, }); - const onChangeKR = e => { - console.log(e.target.value); - setTitle({ ...title, keyResult: e.target.value }); - }; - const { mutate: deleteKR } = useMutation(DeleteKR, { onSuccess: response => { if (process.env.NODE_ENV !== 'development') { @@ -135,30 +131,72 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { } }; + const [showTooltip, setShowTooltip] = useState(false); + + const onMouseOverHandler = () => { + setShowTooltip(true); + }; + const onMouseOutHandler = () => { + setShowTooltip(false); + }; + + const onChangeKR = e => { + setTitle({ ...title, keyResult: e.target.value }); + if (e.target.value === '') { + setShowTooltip(true); + } else { + setShowTooltip(false); + } + }; + + useEffect(() => { + if (showTooltip && title.keyResult === '') { + setShowTooltip(true); + } else if (title.keyResult !== '') { + setShowTooltip(false); + } else { + setShowTooltip(false); + } + }, [showTooltip, title]); + return ( <> <ModalBackground ref={modalRef} onClick={modalOutSideClick} /> <ModalBox> <div className='header'> - <h2>KR 추가/수정</h2> - <img src={close} alt='' onClick={onCloseModal} /> + {krInfo.state === 'patch' ? ( + <h2>Key Result 수정</h2> + ) : ( + <h2>Key Result 추가</h2> + )} + <img src={close} alt='clsoe' onClick={onCloseModal} /> </div> - <OKRBox> + <KRBox> <div className='kr itemBox'> - <img src={kr} alt='' /> + <img src={kr} alt='kr' /> <input type='text' - placeholder='핵심결과를 작성하세요.' + placeholder='ex. 매달 가입자 수 50명 추가 달성 할 거야.' name='first' - maxLength='19' + onMouseOver={onMouseOverHandler} + onMouseOut={onMouseOutHandler} value={title.keyResult} - onChange={event => { - onChangeKR(event); - }} + // onChange={event => { + // onChangeKR(event); + // }} + onChange={onChangeKR} /> </div> - </OKRBox> + + {showTooltip && ( + <div className='krTooltip'> + <img src={info} alt='info' /> + <p>웹 방문자 수 150,000명 달성</p> + </div> + )} + </KRBox> + <div className='btnBox'> <button onClick={onCloseModal} className='cancel'> 취소 diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index 4d72b6d..b20b3c1 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -1,6 +1,7 @@ import { CreateObjective } from '../../../apis/apiPOST'; import calender from '../../../assets/calender.png'; import close from '../../../assets/close.png'; +import info from '../../../assets/info.png'; import object from '../../../assets/object.png'; import Toast from '../Toast'; import ColorDropDown from '../globaldropdown/ColorDropDown'; @@ -135,30 +136,66 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { }, }); + //튤팁 + const [showTooltip, setShowTooltip] = useState(false); + + const onMouseOverHandler = () => { + setShowTooltip(true); + }; + const onMouseOutHandler = () => { + setShowTooltip(false); + }; + + useEffect(() => { + if (showTooltip && objInfo.objective.length === 0) { + setShowTooltip(true); + } else if (objInfo.objective.length > 0) { + setShowTooltip(false); + } else { + setShowTooltip(false); + } + }, [showTooltip, objInfo]); + + const onChangeHandler = e => { + const { name, value } = e.target; + setObjInfo({ ...objInfo, [name]: value }); + if (value === '') { + setShowTooltip(true); + } else { + setShowTooltip(false); + } + }; + return ( <> <ModalBackground ref={modalRef} onClick={modalOutSideClick} /> <ModalBox> <> <div className='header'> - <h2>OKR 추가 - 목표, 기간, 색상</h2> + <h2>Objective 추가</h2> <img src={close} alt='' onClick={onCloseModal} /> </div> <OKRBox> <div className='object itemBox'> <img src={object} alt='' /> <input + onMouseOver={onMouseOverHandler} + onMouseOut={onMouseOutHandler} type='text' - placeholder='목표' + placeholder='ex. 독특한 관점으로 세상을 바라고 싶은 사람들의 커뮤니티를 만들거야' className='input' name='objective' - maxLength='17' - onChange={event => { - OnChange(event, objInfo, setObjInfo); - }} + onChange={onChangeHandler} /> </div> + {showTooltip && ( + <div className='ObjectTooltip'> + <img src={info} alt='info' /> + <p>Objective : 우리는 기간 안에 `Objective`하고 싶습니다.</p> + </div> + )} + <div className='date'> <img src={calender} alt='' /> <div className='dateBox'> @@ -170,7 +207,6 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { weekDays={weekDays} format={format} placeholder='시작일' - // readOnly value={startDate.date || ''} onChange={convertStart} animations={[ diff --git a/src/components/global/globalModal/OkrPatchModal.jsx b/src/components/global/globalModal/OkrPatchModal.jsx index a591514..fdec3f9 100644 --- a/src/components/global/globalModal/OkrPatchModal.jsx +++ b/src/components/global/globalModal/OkrPatchModal.jsx @@ -175,7 +175,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { <ModalBox> <> <div className='header'> - <h2>OKR 추가 - 목표, 기간, 색상</h2> + <h2>Objective 수정</h2> <img src={close} alt='' onClick={onCloseModal} /> </div> <OKRBox> @@ -186,7 +186,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { placeholder='목표' className='input' name='objective' - maxLength='17' + // maxLength='17' value={objInfo.objective} onChange={event => { OnChange(event, objInfo, setObjInfo); @@ -260,7 +260,7 @@ const OkrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { <p className='deleteName'>삭제</p> </div> </div> - <Toast /> + {/* <Toast /> */} </> </ModalBox> </> diff --git a/src/components/global/globalModal/ProgressPatchModal.jsx b/src/components/global/globalModal/ProgressPatchModal.jsx index db3b7ac..727fd81 100644 --- a/src/components/global/globalModal/ProgressPatchModal.jsx +++ b/src/components/global/globalModal/ProgressPatchModal.jsx @@ -6,7 +6,7 @@ import close from '../../../assets/close.png'; import kr from '../../../assets/kr.png'; import { trackEvent } from '../../../router/RouteChangeTracker'; import { patchProgressInfo } from '../../../store/store'; -import { PatchPersentBox, PesentContainer } from '../../mainpage/OKR.styled'; +import { PatchPersentBox, PesentContainer } from '../../../styles/OKR.styled'; import { ModalBackground, ModalBox, OKRBox } from './modal.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import React, { useEffect, useState } from 'react'; diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 2efe4e7..c115898 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -254,7 +254,7 @@ const TodoModal = ({ </div> <div className='object itemBox'> <img src={memo} alt='' /> - <textarea + <input type='text' placeholder='Memo 내용을 작성하세요' className='input' diff --git a/src/components/global/globalModal/modal.styled.js b/src/components/global/globalModal/modal.styled.js index 62ab58b..ed7cde2 100644 --- a/src/components/global/globalModal/modal.styled.js +++ b/src/components/global/globalModal/modal.styled.js @@ -33,7 +33,12 @@ export const ModalBox = styled.div` display: flex; align-items: center; justify-content: center; - margin-bottom: 1.3rem; + margin-bottom: 2.2rem; + h2 { + font-size: 2rem; + margin: 0; + color: #4b4b4b; + } img { position: absolute; top: 1.6rem; @@ -131,12 +136,16 @@ export const ModalBox = styled.div` export const OKRBox = styled.div` width: 100%; + height: 16.6rem; background-color: #f8f8f8; border-radius: 7px; - padding: 1.3rem 0; + padding: 3rem 0; + display: flex; + flex-direction: column; + justify-content: center; .object { - margin-bottom: 2.6rem; + margin-bottom: 2.7rem; } & .itemBox { width: 100%; @@ -144,7 +153,7 @@ export const OKRBox = styled.div` padding: 0.9rem 1.4rem; display: flex; align-items: center; - /* background-color: pink; */ + position: relative; input { width: 100%; height: 4rem; @@ -165,6 +174,24 @@ export const OKRBox = styled.div` margin-right: 1.3rem; } } + .ObjectTooltip { + display: flex; + align-items: center; + justify-content: center; + /* width: 44.8rem; */ + height: 4rem; + background-color: #4b4b4b; + color: #fff; + font-size: 1.7rem; + border-radius: 7px; + position: absolute; + top: 4.8rem; + left: 78px; + padding: 0 13px; + img { + margin-right: 8px; + } + } .kr { margin: 0.9rem 0; @@ -356,26 +383,58 @@ export const ErrorPopUp = styled.div` font-weight: 700; `; -// export const TodoModalBox = styled.div` -// position: fixed; -// /* height: 470px; */ -// width: 71.5rem; -// top: 50%; -// left: 50%; -// transform: translate(-50%, -50%); -// background-color: #fff; -// border-radius: 15px; -// box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); -// /* box-shadow: var(--box-shadow); */ -// z-index: 21; -// text-align: center; -// padding: 20px 30px; -// border: var(--main-border); -// form { -// } -// `; +export const KRBox = styled.div` + width: 100%; + background-color: #f8f8f8; + border-radius: 7px; + padding: 3rem 0; + display: flex; + flex-direction: column; + justify-content: center; + .krTooltip { + display: flex; + align-items: center; + justify-content: center; + /* width: 44.8rem; */ + height: 4rem; + background-color: #4b4b4b; + color: #fff; + font-size: 1.7rem; + border-radius: 7px; + position: absolute; + top: 4.8rem; + left: 78px; + padding: 0 13px; + img { + margin-right: 8px; + } + } + .kr { + display: flex; + padding: 0 13px; + img { + margin-right: 1.3rem; + } + input { + width: 100%; + height: 4rem; + border: 1.5px solid rgba(232, 232, 232, 1); + border-radius: 7px; + :hover { + border: 1.5px solid var(--main-color); + } + ::placeholder { + color: var(--placeholder-color); + } + :focus { + border: var(--input-hover); + /* filter: var(--input-focus); */ + } + } + } +`; -export const NotHave = styled.div` +export const NotHaveEl = styled.div` width: 100%; height: 100%; display: flex; diff --git a/src/components/global/globaldropdown/ColorDropDown.jsx b/src/components/global/globaldropdown/ColorDropDown.jsx index a6bf1b7..c24e46e 100644 --- a/src/components/global/globaldropdown/ColorDropDown.jsx +++ b/src/components/global/globaldropdown/ColorDropDown.jsx @@ -1,6 +1,7 @@ import { GetOKR } from '../../../apis/apiGET'; import Arrow from '../../../assets/dropdownArrow.png'; -import { ColorSelect, DropIcon } from './dropDown.styled'; +import fillArrow from '../../../assets/filldropArrow.png'; +import { ColorSelect, DropFillIcon, DropIcon } from './dropDown.styled'; import { useDropDown, color } from './dropdown'; import { useQuery } from '@tanstack/react-query'; import { useState, useRef } from 'react'; @@ -9,13 +10,15 @@ const ColorDropDown = ({ setObjInfo, objInfo }) => { // 드롭다운 상태 const dropDownRef = useRef(null); const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); - const [finalValue, setFinalValue] = useState(''); + const [finalValue, setFinalValue] = useState('색상'); const [filterColor, setFilterColor] = useState(); - console.log('col', color); + // console.log('finalValue :', finalValue); + + const [onFocus, setOnFocus] = useState(false); const { data: getOKRData } = useQuery(['OKR'], GetOKR, { onSuccess: response => { - console.log('abaaa', response); + // console.log('abaaa', response); const filterColorData = response.map(data => { return data.color; }); @@ -29,7 +32,7 @@ const ColorDropDown = ({ setObjInfo, objInfo }) => { }; }); setFilterColor(result); - console.log('res', result); + // console.log('res', result); }, }); @@ -54,14 +57,21 @@ const ColorDropDown = ({ setObjInfo, objInfo }) => { return ( <ColorSelect ref={dropDownRef} className='ref'> - <input - type='text' - value={finalValue} - readOnly={true} + <div + className='customInput' onClick={() => setIsOpen(!isOpen)} - placeholder='색상' - /> - <DropIcon src={Arrow} /> + onMouseLeave={() => { + setOnFocus(!onFocus); + }} + onMouseEnter={() => { + setOnFocus(!onFocus); + }}> + <div className='valueFlex'> + <div className='value'>{finalValue}</div> + {onFocus ? <DropFillIcon /> : <DropIcon />} + </div> + </div> + {isOpen && ( <ul> {filterColor.map(el => ( diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index 963fc9a..bbd263b 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -2,17 +2,26 @@ import { PatchEmotion } from '../../../apis/apiPATCH'; import good from '../../../assets/emoji1.png'; import bad from '../../../assets/emoji2.png'; import normal from '../../../assets/emoji3.png'; +import info from '../../../assets/question.png'; import { EmotionSelect } from './dropDown.styled'; import { emotion } from './dropdown'; import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useEffect, useRef, useState } from 'react'; import ReactGA from 'react-ga4'; const Emotion = ({ + setShowEmotion, + showEmotion, keyResultId, emotionState, openDropdownId, setOpenDropdownId, }) => { + console.log('showEmotion :', showEmotion); + console.log('keyResultId :', keyResultId); + console.log('emotionState :', emotionState); + console.log('openDropdownId :', openDropdownId); + console.log('---------'); const queryClient = useQueryClient(); // 자신감 수정 @@ -42,19 +51,27 @@ const Emotion = ({ }; return ( - <li - onClick={ValueClick} - style={{ background: `url(${el.emotion}) no-repeat center / 100%` }} - /> + <li onClick={ValueClick}> + <div + style={{ + background: `url(${el.emotion}) no-repeat center / 100%`, + width: '31px', + height: '31px', + margin: '0 auto', + }} + /> + </li> ); }; - const onClick = () => { - if (isOpen) { - setOpenDropdownId(null); - } else { - setOpenDropdownId(keyResultId); - } + const onClick = e => { + console.log(e); + // if (isOpen) { + // setOpenDropdownId(null); + // } else { + // setOpenDropdownId(keyResultId); + // } + setShowEmotion(!showEmotion); }; const ImgBox = () => { @@ -88,11 +105,47 @@ const Emotion = ({ } }; + const selectRef = useRef(); + + const [show, setShow] = useState(false); + // console.log(show); + const showTooltip = () => { + setShow(!show); + }; + + useEffect(() => { + // console.log('effect'); + const clickOutside = e => { + console.log(e); + console.log(selectRef.current); + console.log(e.target); + if (selectRef.current !== e.target) { + // setIsOpen(!isOpen); + // isOpen = false; + } + // console.log(selectRef.current && !selectRef.current.contains(e.target)); + // if (selectRef.current && !selectRef.current.contains(e.target)) { + // setShow(!isOpen); + // } + }; + + if (isOpen) { + window.addEventListener('click', clickOutside); + } + return () => { + window.removeEventListener('click', clickOutside); + }; + }, [isOpen]); + return ( <EmotionSelect> <ImgBox /> - {isOpen && ( - <ul> + {showEmotion && ( + <ul ref={selectRef}> + <div className='tooltip'> + <span>자신감 지표</span> + <img src={info} alt='info' onClick={showTooltip} /> + </div> {emotion.list.map((el, index) => ( <DropDownItem key={index} diff --git a/src/components/global/globaldropdown/dropDown.styled.js b/src/components/global/globaldropdown/dropDown.styled.js index 4363724..e8cb179 100644 --- a/src/components/global/globaldropdown/dropDown.styled.js +++ b/src/components/global/globaldropdown/dropDown.styled.js @@ -1,3 +1,5 @@ +import Arrow from '../../../assets/dropdownArrow.png'; +import fillArrow from '../../../assets/filldropArrow.png'; import styled from 'styled-components'; export const DropdownContainer = styled.div` @@ -79,25 +81,30 @@ export const DropdownContainer = styled.div` } `; -export const DropIcon = styled.img` - width: 1.7rem; - height: 1.7rem; - position: absolute; - top: 50%; - right: 2.3rem; - transform: translateY(-50%); +export const DropIcon = styled.div` + width: 14px; + height: 14px; + background: url(${Arrow}) no-repeat center / contain; +`; + +export const DropFillIcon = styled.div` + width: 14px; + height: 14px; + background: url(${fillArrow}) no-repeat center / contain; `; export const ColorSelect = styled.div` width: 9.5rem; height: 4rem; position: relative; - input { + .customInput { width: 100%; height: 100%; border: none; border-radius: 12px; - text-align: start; + cursor: pointer; + display: flex; + align-items: center; box-sizing: border-box; border: var(--default-bolder); font-size: 1.7rem; @@ -109,7 +116,15 @@ export const ColorSelect = styled.div` border: var(--input-hover); } font-weight: 500; - /* font-size: 2.1rem; */ + .valueFlex { + padding: 0 16px 0 11px; + display: flex; + align-items: center; + justify-content: space-between; + .value { + width: 53px; + } + } } img { width: 1.4rem; @@ -348,15 +363,16 @@ export const EmotionSelect = styled.div` width: 35px; height: 35px; position: relative; - /* background-color: pink; */ + margin-left: 19px; + cursor: pointer; .emotion { width: 100%; height: 100%; - background-color: skyblue; + /* background-color: skyblue; */ } ul { - width: 5.4rem; - position: absolute; + width: 15.7rem; + position: fixed; z-index: 9; margin: 0 auto; padding: 1.5rem 1rem; @@ -365,10 +381,36 @@ export const EmotionSelect = styled.div` box-shadow: 0px 2px 5px rgba(150, 150, 150, 0.65); border-radius: 12px; transition: all 0.3s; + margin: 5px; + /* left: 50%; */ + /* transform: translateX(-50%); */ + cursor: default; + .tooltip { + font-size: 1.7rem; + font-weight: 500; + color: #4b4b4b; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 10px; + span { + margin-right: 5px; + } + img { + cursor: pointer; + } + + /* text-align: center; */ + } li { - width: 3.5rem; - height: 3.5rem; + width: 10.3rem; + height: 3.1rem; + margin: 0 auto; + background-color: #f8f8f8; margin-bottom: 1rem; + transition: all 0.3s; + border-radius: 7px; + cursor: pointer; :nth-last-child(1) { margin-bottom: 0rem; } diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 20a6c52..de5c7db 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -28,12 +28,6 @@ export default function Header() { setLogoutImg(logoutON); }; - // const { data } = useQuery(['userinfo'], GetUserInfo, { - // onSuccess: response => { - // console.log(response); - // }, - // }); - const logout = () => { if (process.env.NODE_ENV !== 'development') { ReactGA.event({ diff --git a/src/components/global/header/header.styled.js b/src/components/global/header/header.styled.js index 3f529f0..678fa61 100644 --- a/src/components/global/header/header.styled.js +++ b/src/components/global/header/header.styled.js @@ -5,7 +5,7 @@ export const Layout = styled.div` width: 100%; height: 9.7rem; ${props => props.theme.flex_row_between} - padding: 0 5rem; + padding: 0 6.5rem 0 7.2rem; /* position: sticky; top: 0; */ /* margin-bottom: 97px; */ diff --git a/src/components/mainpage/Kr.jsx b/src/components/mainpage/Kr.jsx deleted file mode 100644 index ada5f16..0000000 --- a/src/components/mainpage/Kr.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; - -const Kr = () => { - return ( - <div className='kr'> - <div className='title'>KR1</div> - <div className='detail'> - <div>체지방 7% 감소</div> - <div className='percent'> - <input type='range' /> - <p>20%</p> - <div className='expression'></div> - </div> - </div> - </div> - ); -}; - -export default Kr; diff --git a/src/components/mainpage/OKR.jsx b/src/components/mainpage/OKR.jsx deleted file mode 100644 index a9d7153..0000000 --- a/src/components/mainpage/OKR.jsx +++ /dev/null @@ -1,135 +0,0 @@ -import { GetOKR, GetTeamInfo, GetUserInfo } from '../../apis/apiGET.js'; -import plus from '../../assets/plus.png'; -import AlertModal from '../global/globalModal/AlertModal.jsx'; -import OkrModal from '../global/globalModal/OkrModal.jsx'; -import Potal from '../global/globalModal/Potal.jsx'; -import { NotHave } from '../global/globalModal/modal.styled'; -import { Container, Header, HeaderBox, OkrContainer } from './OKR.styled'; -import OkrObject from './OkrItem'; -import { useQuery } from '@tanstack/react-query'; -import jwt_decode from 'jsonwebtoken/decode'; -import { useEffect } from 'react'; -import React from 'react'; -import { useState, useRef } from 'react'; - -export default function OKR() { - //모달 상태관리 - const [okrModalOn, setOkrModalOn] = useState(false); - const [alertModalOn, setAlertModalOn] = useState(false); - const [teamName, setTeamName] = useState(''); - const [accessToken, setAccessToken] = useState( - localStorage.getItem('accesstoken') - ); - const [uid, setUid] = useState(null); - const [position, setPosition] = useState(''); - // console.log('uid :', uid); - - useEffect(() => { - const decodeToken = jwt_decode(accessToken); - const extractedUid = decodeToken.userId; - setUid(extractedUid); - // console.log('useEffect'); - }, [accessToken]); - - const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { - enabled: !!uid, - // console.log(enabled) - onSuccess: response => { - // console.log(response); - // console.log('통신'); - setTeamName(response.team); - setPosition(response.teamposition); - }, - }); - - const { data: getOKRData } = useQuery(['OKR'], GetOKR, { - onSuccess: response => {}, - onError: response => {}, - }); - - /**모달 닫는 함수 */ - const onCloseModal = () => { - setOkrModalOn(!okrModalOn); - }; - - /** +버튼 누르면 OKR 생성하는 모달 띄움 */ - const createOKR = () => { - if (position === '팀장') { - if (getOKRData.length < 4) { - setOkrModalOn(!okrModalOn); - } else { - setAlertModalOn(!alertModalOn); - } - } else { - alert('팀장만 OKR 생성 가능합니다.'); - } - }; - - // 모달 외 클릭시 닫기위해 ref생성 - const modalRef = useRef(null); - /** 모달위에 있는 배경이랑 ref가 같으면 modalOn을 false로 바꾸는 함수 */ - const modalOutSideClick = e => { - if (modalRef.current === e.target) { - setOkrModalOn(!okrModalOn); - } - }; - - /**모달 닫는 함수 */ - const onCloseAlertModal = () => { - setAlertModalOn(!alertModalOn); - }; - - // 모달 외 클릭시 닫기위해 ref생성 - const alertModalRef = useRef(null); - - /** 모달위에 있는 배경이랑 ref가 같으면 modalOn을 false로 바꾸는 함수 */ - const alertModalOutSideClick = e => { - if (alertModalRef.current === e.target) { - setAlertModalOn(!alertModalOn); - } - }; - - return ( - <Container> - <HeaderBox> - <Header>{teamName} OKR</Header> - <div className='btnBox'> - <div onClick={createOKR}> - <img src={plus} alt='' /> - </div> - </div> - </HeaderBox> - <OkrContainer> - {getOKRData?.length === 0 ? ( - <NotHave> - <h2>설정된 OKR이 없습니다.</h2> - <div className='btnFlex' onClick={createOKR}> - <img src={plus} alt='' /> - <div>OKR추가</div> - </div> - </NotHave> - ) : ( - <OkrObject /> - )} - </OkrContainer> - <Potal> - {okrModalOn && ( - <OkrModal - onCloseModal={onCloseModal} - modalRef={modalRef} - modalOutSideClick={modalOutSideClick} - /> - )} - </Potal> - <Potal> - {alertModalOn && ( - <AlertModal - onCloseModal={onCloseAlertModal} - modalRef={alertModalRef} - modalOutSideClick={alertModalOutSideClick} - /> - )} - </Potal> - </Container> - ); -} diff --git a/src/components/teamOKR/TeamOKR.jsx b/src/components/teamOKR/TeamOKR.jsx deleted file mode 100644 index 5501699..0000000 --- a/src/components/teamOKR/TeamOKR.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -export default function TeamOKR() { - return ( - <h2 style={{ fontSize: '3rem', fontWeight: 'bold' }}>Coming Soon..!</h2> - ); -} diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 4c27559..919192b 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -4,10 +4,14 @@ import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; import { patchTodoInfo } from '../../store/store'; +import { + DDay, + TodoDetailHeader, + TodoDetailItem, +} from '../../styles/tododetail.styled'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; import Filter from './Filter'; -import { DDay, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import React, { useState } from 'react'; import ReactGA from 'react-ga4'; diff --git a/src/components/todo/DoneFilter.jsx b/src/components/todo/DoneFilter.jsx index 5d999f1..4f5e274 100644 --- a/src/components/todo/DoneFilter.jsx +++ b/src/components/todo/DoneFilter.jsx @@ -1,6 +1,6 @@ import filter from '../../assets/filter1.png'; +import { StDoneFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; -import { StDoneFilter } from './tododetail.styled'; import React, { useRef } from 'react'; import { AiFillCloseCircle } from 'react-icons/ai'; import { GrClose } from 'react-icons/gr'; diff --git a/src/components/todo/Filter.jsx b/src/components/todo/Filter.jsx index 358f4e2..da292f6 100644 --- a/src/components/todo/Filter.jsx +++ b/src/components/todo/Filter.jsx @@ -3,10 +3,10 @@ import checkOff from '../../assets/checkOff.png'; import checkOn from '../../assets/checkOn.png'; import filter from '../../assets/filter1.png'; import { krDataAtom } from '../../store/store'; +import { StFilterContainer } from '../../styles/tododetail.styled'; import DoneFilter from './DoneFilter'; import KrFilter from './KrFilter'; import SortFilter from './SortFilter'; -import { StFilterContainer } from './tododetail.styled'; import { useQuery } from '@tanstack/react-query'; import React, { useRef, useState } from 'react'; import { useRecoilState } from 'recoil'; diff --git a/src/components/todo/FinishTodo.jsx b/src/components/todo/FinishTodo.jsx index 2cdd68a..f069e63 100644 --- a/src/components/todo/FinishTodo.jsx +++ b/src/components/todo/FinishTodo.jsx @@ -4,7 +4,11 @@ import badgeS from '../../assets/badgeS.png'; import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; -import { Finsh, TodoDetailHeader, TodoDetailItem } from './tododetail.styled'; +import { + Finsh, + TodoDetailHeader, + TodoDetailItem, +} from '../../styles/tododetail.styled'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import React, { useState } from 'react'; import { toast } from 'react-toastify'; diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx index 6a6dde4..3f7ee01 100644 --- a/src/components/todo/KrFilter.jsx +++ b/src/components/todo/KrFilter.jsx @@ -1,7 +1,7 @@ import filter from '../../assets/filter1.png'; import { okrCheckSelector } from '../../store/store'; +import { StKrFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; -import { StKrFilter } from './tododetail.styled'; import React, { useRef, useState } from 'react'; import { AiFillCloseCircle } from 'react-icons/ai'; import { GrClose } from 'react-icons/gr'; diff --git a/src/components/todo/PastTodo.jsx b/src/components/todo/PastTodo.jsx index 72dc2f6..7071bbc 100644 --- a/src/components/todo/PastTodo.jsx +++ b/src/components/todo/PastTodo.jsx @@ -5,13 +5,13 @@ import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; import { patchTodoInfo } from '../../store/store'; -import Potal from '../global/globalModal/Potal'; -import TodoPathModal from '../global/globalModal/TodoPathModal'; import { StPastTodo, TodoDetailHeader, TodoDetailItem, -} from './tododetail.styled'; +} from '../../styles/tododetail.styled'; +import Potal from '../global/globalModal/Potal'; +import TodoPathModal from '../global/globalModal/TodoPathModal'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import React, { useState } from 'react'; import ReactGA from 'react-ga4'; diff --git a/src/components/todo/SortFilter.jsx b/src/components/todo/SortFilter.jsx index 0ff9c61..4211246 100644 --- a/src/components/todo/SortFilter.jsx +++ b/src/components/todo/SortFilter.jsx @@ -1,6 +1,6 @@ import sort from '../../assets/sort.png'; +import { StSortFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; -import { StSortFilter } from './tododetail.styled'; import React, { useRef } from 'react'; const SortFilter = () => { diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index 8385b81..06f0b3b 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -1,6 +1,6 @@ import { GetUser } from '../../apis/apiGET'; import badgeB from '../../assets/badgeB.png'; -import { StTeam } from './tododetail.styled'; +import { StTeam } from '../../styles/tododetail.styled'; import { useQuery } from '@tanstack/react-query'; import React from 'react'; diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index d352ebe..49e5877 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -1,4 +1,11 @@ import { GetAllTodo, GetPostTodo, GetUser } from '../../apis/apiGET'; +import { useAllTodo } from '../../shared/useSomethingQuery'; +import { + AllTodoSelector, + allTodoListState, + testAllTodoSelector, +} from '../../store/store'; +import { DetailTodoWrap, StTeam } from '../../styles/tododetail.styled'; import Loading from '../global/Loading'; import Toast from './../global/Toast'; import DetailTodoItem from './DetailTodoItem'; @@ -7,33 +14,43 @@ import FinishTodo from './FinishTodo'; import PastTodo from './PastTodo'; import TeamTodo from './TeamTodo'; import TodoNavi from './TodoNavi'; -import { DetailTodoWrap, StTeam } from './tododetail.styled'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import { useEffect, useRef, useState } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; import styled from 'styled-components'; export default function Todo() { //todo 전부 가져오기 - const { data: getAllTodo, isLoading } = useQuery(['ALLTODO'], GetAllTodo, { - onSuccess: response => {}, - onError: response => {}, - }); - const [showLoading, setShowLoading] = useState(true); + // console.log(test); - useEffect(() => { - let timeout; + const [todoList, setTodoList] = useRecoilState(allTodoListState); + const alltodo = useRecoilValue(AllTodoSelector); - if (!isLoading) { - timeout = setTimeout(() => { - setShowLoading(false); - }, 700); + console.log('atom :', todoList); + console.log('selector :', alltodo); + + const { data, isLoading, isError, error } = useQuery( + ['alltodoTest'], + GetAllTodo, + { + // suspense: true, + onSuccess: data => { + setTodoList(data); + }, + onError: error => { + console.log(error); + }, } + ); + + if (isLoading) { + return <Loading />; + } - return () => { - clearTimeout(timeout); - }; - }, [isLoading]); + if (isError) { + return <div>{error.message}</div>; + } const now = new Date(); let today = ''; @@ -52,44 +69,30 @@ export default function Todo() { tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; } - // const { data: getMember } = useQuery(['MEMBER'], GetUser, { - // onSuccess: response => { - // // console.log('user :', response); - // }, - // onError: response => { - // // console.log(response); - // }, - // }); - - // -------------------------- 여기서 부터 이제 무한스크롤 - return ( <StSticky> - {getAllTodo?.length === 0 ? ( + {alltodo?.length === 0 ? ( <h2 className='notHave'>설정된 To Do가 없습니다.</h2> ) : ( <> - {showLoading && <Loading />} - {!showLoading && ( - <> - <TodoDashboard> - <TodoNavi todayFormat={today} getAllTodo={getAllTodo} /> - {/* <Filter /> */} - {/* <PastTodo /> */} - {/* {getAllTodo?.map(el => ( + <TodoDashboard> + {/* <TodoNavi todayFormat={today} /> */} + <TodoNavi todayFormat={today} getAllTodo={alltodo} /> + {/* <Filter /> */} + {/* <PastTodo /> */} + {/* {test?.map(el => ( <DetailTodoWrap key={el.targetDate}> <DetailTodoItem el={el} today={today} tomorrow={tomorrow} /> <FinishTodo el={el} /> </DetailTodoWrap> ))} */} - <DetailTodoWrap> - <DetailTodoItem /> - </DetailTodoWrap> - </TodoDashboard> - {/* <TeamTodo /> */} - </> - )} + <DetailTodoWrap> + <DetailTodoItem /> + </DetailTodoWrap> + </TodoDashboard> + <TeamTodo /> + <Toast /> </> )} diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 957f4f4..de03b21 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -1,7 +1,12 @@ import plus from '../../assets/plus.png'; +import { + DateNavi, + NaviPlus, + StNavi, + TodoHeader, +} from '../../styles/tododetail.styled'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; -import { DateNavi, NaviPlus, StNavi, TodoHeader } from './tododetail.styled'; import React, { useState, useRef } from 'react'; import { Link } from 'react-scroll'; @@ -112,6 +117,36 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { } }; + const [dDay, setDDay] = useState(todayFormat); + console.log(dDay); + + const clickDDay = e => { + if (e.currentTarget.className === 'include') { + setDDay(e.currentTarget.id); + } + }; + + const Today = ({ el }) => { + console.log(el.format === dDay); + if ( + Number(el.date) === dateD && + Number(el.month) === dateM && + Number(el.year) === dateY + ) { + return ( + <span className='date' style={{ color: '#ff8336' }}> + {el.date} + </span> + ); + } else { + return ( + <span className='date' style={{ color: '#4b4b4b' }}> + {el.date} + </span> + ); + } + }; + return ( <StNavi> <TodoHeader> @@ -123,14 +158,7 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { <div className='right'> <div className='prev' onClick={onPressArrowLeft} /> <div className='next' onClick={onPressArrowRight} /> - <Link - className='today' - to={todayFormat} - spy={true} - smooth={true} - offset={-500}> - 오늘 - </Link> + <div className='today'>오늘</div> <NaviPlus onClick={createTodo}> <img src={plus} alt='' /> </NaviPlus> @@ -139,36 +167,29 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { <DateNavi> {state.week?.map((el, index) => ( <React.Fragment key={index}> - {Number(el.date) === dateD && - Number(el.month) === dateM && - Number(el.year) === dateY ? ( - <Link - to={el.format} - spy={true} - smooth={true} - offset={-500} + {el.format === dDay ? ( + <div + onClick={clickDDay} + id={el.format} + style={{ border: '2px solid rgb(255,131,54)' }} className={el.includes === false ? 'day' : 'include'}> <span className='label'>{el.dateValue}</span> - <span className='date' style={{ color: '#ff8336' }}> - {el.date} - </span> + <Today el={el} /> {el?.includes === false ? null : ( <div className='includeCh'></div> )} - </Link> + </div> ) : ( - <Link - className={el.includes === false ? 'day' : 'include'} - to={el?.format} - spy={true} - offset={-500} - smooth={true}> - <span className='label'>{el?.dateValue}</span> - <span className='date'>{el?.date}</span> - {el.includes === false ? null : ( + <div + onClick={clickDDay} + id={el.format} + className={el.includes === false ? 'day' : 'include'}> + <span className='label'>{el.dateValue}</span> + <Today el={el} /> + {el?.includes === false ? null : ( <div className='includeCh'></div> )} - </Link> + </div> )} </React.Fragment> ))} diff --git a/src/index.js b/src/index.js index 25783c2..0630a5b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,15 +1,25 @@ import GlobalStyle from './components/global/GlobalStyle'; +import Loading from './components/global/Loading'; import theme from './components/global/theme'; import { RouteChangeTracker } from './router/RouteChangeTracker'; import Router from './router/Router'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; +import { Suspense } from 'react'; import ReactDOM from 'react-dom/client'; import ReactGA4 from 'react-ga4'; import { BrowserRouter } from 'react-router-dom'; import { RecoilRoot } from 'recoil'; import { ThemeProvider } from 'styled-components'; +// const queryClient = new QueryClient({ +// defaultOptions: { +// queries: { +// retry: 0, +// suspense: true, +// }, +// }, +// }); const queryClient = new QueryClient(); ReactGA4.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); @@ -17,15 +27,19 @@ ReactGA4.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); const root = ReactDOM.createRoot(document.getElementById('root')); root.render( + // <React.Suspense fallback={<Loading />}> <QueryClientProvider client={queryClient}> <GlobalStyle /> <ThemeProvider theme={theme}> <RecoilRoot> - <BrowserRouter> - <RouteChangeTracker /> - <Router /> - </BrowserRouter> + <Suspense> + <BrowserRouter> + <RouteChangeTracker /> + <Router /> + </BrowserRouter> + </Suspense> </RecoilRoot> </ThemeProvider> </QueryClientProvider> + // </React.Suspense> ); diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 21ec670..6e01b53 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,37 +1,32 @@ -import { Wrap } from '../'; -import { GetUserInfo } from '../apis/apiGET'; -import Calendar from '../components/calendar/Calendar'; -import CompanyOKR from '../components/companyOKR/companyOKR'; -import Modal from '../components/global/globalModal/AlertModalTest'; +import { GetOKR, GetUserInfo } from '../apis/apiGET'; +import DashOKR from '../components/dashboard/DashOKR'; +import DashTodo from '../components/dashboard/DashToDo'; +import Menu from '../components/dashboard/Menu'; +import Tutorial from '../components/dashboard/Tutorial'; +import DashBoardCalendar from '../components/dashboard/calendar/Calendar'; import Portal from '../components/global/globalModal/Potal'; -import DashBoardCalendar from '../components/mainpage/Calendar'; -import Menu from '../components/mainpage/Menu'; -import DashBoardOKR from '../components/mainpage/OKR'; -import DashBoardTodo from '../components/mainpage/ToDo'; -import Tutorial from '../components/mainpage/Tutorial'; -import TeamOKR from '../components/teamOKR/TeamOKR'; -import Todo from '../components/todo/Todo'; -import { accessTokenInfo } from '../store/store'; -import { StMainPageWrap, StWrap } from '../styles/mainpage.styled'; -import { MenuContainer, MenuItem } from './../components/mainpage/menu.styled'; +import { getOKRData, userId, userInfo } from '../store/store'; +import { OkrContainer, StWrap } from '../styles/mainpage.styled'; import { useQuery } from '@tanstack/react-query'; import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useEffect } from 'react'; -import { Navigate, useNavigate } from 'react-router-dom'; -import styled from 'styled-components'; +import { useNavigate } from 'react-router-dom'; +import { useRecoilState, useSetRecoilState } from 'recoil'; export default function Mainpage() { const navigate = useNavigate(); - // localStorage에 accesstoken 여부 확인 + + // localStorage에 accesstoken 여부 확인(리다이렉트) useEffect(() => { - // console.log(localStorage.accesstoken); if (localStorage.accesstoken === undefined) { navigate('/signin'); } }, []); - // const navigate = useNavigate(); - const [uid, setUid] = useState(null); + // accesstoken 디코딩 + const setUserInfo = useSetRecoilState(userInfo); + + const [uid, setUid] = useRecoilState(userId); const [accessToken, setAccessToken] = useState( localStorage.getItem('accesstoken') ); @@ -40,40 +35,23 @@ export default function Mainpage() { const decodeToken = jwt_decode(accessToken); const extractedUid = decodeToken.userId; setUid(() => extractedUid); - }, [accessToken]); + }, []); - const { data: userInfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { + //userInfo + const { userinfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { enabled: !!uid, + onSuccess: data => { + setUserInfo(data); + }, }); - useEffect(() => { - if (localStorage.accesstoken === undefined) { - navigate('/signIn'); - } - }, []); - - // const menuList = ['Dashboard', 'All OKR', 'Team OKR', 'TO - DO', 'Calendar']; - - const menuList = ['Dashboard', 'TO - DO']; - - // const selectComponent = { - // Dashboard: ( - // <> - // <OkrContainer> - // <DashBoardOKR /> - // <DashBoardTodo /> - // </OkrContainer> - // <DashBoardCalendar /> - // </> - // ), - // 'TO - DO': <Todo />, - // }; - - const [now, setNow] = useState('Dashboard'); - const clickNowPage = e => { - const { name } = e.target; - setNow(name); - }; + //okrData + const setOkrList = useSetRecoilState(getOKRData); + const { getokrdata } = useQuery(['OKR'], GetOKR, { + onSuccess: data => { + setOkrList(data); + }, + }); return ( <StWrap> @@ -89,8 +67,8 @@ export default function Mainpage() { <main> <OkrContainer> - <DashBoardOKR /> - <DashBoardTodo /> + <DashOKR /> + <DashTodo /> </OkrContainer> <DashBoardCalendar /> </main> @@ -99,8 +77,3 @@ export default function Mainpage() { </StWrap> ); } - -const OkrContainer = styled.div` - width: 100%; - display: flex; -`; diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx index f28747c..618475d 100644 --- a/src/pages/TodoPage.jsx +++ b/src/pages/TodoPage.jsx @@ -1,4 +1,4 @@ -import Menu from '../components/mainpage/Menu'; +import Menu from '../components/dashboard/Menu'; import Todo from '../components/todo/Todo'; import { StWrap } from '../styles/mainpage.styled'; import React from 'react'; diff --git a/src/router/Router.js b/src/router/Router.js index 23469ee..59222fe 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -1,6 +1,5 @@ import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; -import Menu from '../components/mainpage/Menu'; import Mainpage from '../pages/Mainpage'; import Signin from '../pages/SignIn'; import SignUp from '../pages/SignUp'; diff --git a/src/shared/useSomethingQuery.js b/src/shared/useSomethingQuery.js new file mode 100644 index 0000000..205abfb --- /dev/null +++ b/src/shared/useSomethingQuery.js @@ -0,0 +1,29 @@ +import { GetAllTodo } from '../apis/apiGET'; +import Loading from '../components/global/Loading'; +import { allTodoListState } from '../store/store'; +import { useQuery } from '@tanstack/react-query'; +import { useRecoilState } from 'recoil'; + +export const useSomethingQuery = () => { + const [todoList, setTodoList] = useRecoilState(allTodoListState); + + const { data, isLoading, isError } = useQuery(['alltodoTest'], GetAllTodo, { + suspense: true, + }); + + if (isLoading) { + console.log(isLoading); + return <Loading />; + } + + if (isError) { + return <div>에러</div>; + } + + if (data) { + // console.log(data); + setTodoList(data); + } + + return { todoList, isLoading, isError }; +}; diff --git a/src/store/store.js b/src/store/store.js index e908aa8..0cdcf28 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -1,10 +1,21 @@ -import { get } from 'react-scroll/modules/mixins/scroller'; import { atom, selector } from 'recoil'; -// export const NowState = atom({ -// key: 'menu', -// default: 'Dashboard', -// }); +export const userInfo = atom({ + key: 'userInfo', + default: null, +}); + +// accesstoken에서 userId값 추출 +export const userId = atom({ + key: 'userId', + default: null, +}); + +//OKRData가져오기 +export const getOKRData = atom({ + key: 'getOKRData', + default: null, +}); export const ToggleStartState = atom({ key: 'toggle', default: false }); @@ -56,6 +67,7 @@ export const krDataAtom = atom({ default: null, }); +// 수정 필요 export const okrCheckSelector = selector({ key: 'okrCheck', // get: ({ get }) => { @@ -70,3 +82,17 @@ export const okrCheckSelector = selector({ get: ({ get }) => get(krDataAtom), set: ({ set }, checkList) => set(krDataAtom, checkList), }); + +// TodoPage에서 모든 todo 가져오기 +export const allTodoListState = atom({ + key: 'allTodoListState', + default: null, +}); + +export const AllTodoSelector = selector({ + key: 'testAllTodoSelector', + get: ({ get }) => { + const todoList = get(allTodoListState); + return todoList; + }, +}); diff --git a/src/components/mainpage/Calendar.styled.js b/src/styles/Calendar.styled.js similarity index 100% rename from src/components/mainpage/Calendar.styled.js rename to src/styles/Calendar.styled.js diff --git a/src/components/mainpage/OKR.styled.js b/src/styles/OKR.styled.js similarity index 82% rename from src/components/mainpage/OKR.styled.js rename to src/styles/OKR.styled.js index c70532d..31e352e 100644 --- a/src/components/mainpage/OKR.styled.js +++ b/src/styles/OKR.styled.js @@ -1,11 +1,9 @@ -import milestone from '../../assets/milestone 1.png'; -import mount from '../../assets/mount.png'; import styled from 'styled-components'; export const Container = styled.div` max-width: 75.8rem; width: 100%; - height: 56rem; + height: 55.2rem; border: 1px solid rgba(232, 232, 232, 1); box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); border-radius: 12px; @@ -17,7 +15,7 @@ export const HeaderBox = styled.div` justify-content: space-between; height: 5.2rem; align-items: center; - padding: 1.3rem 3rem; + padding: 0 3rem; .btnBox { display: flex; align-items: center; @@ -38,27 +36,24 @@ export const Header = styled.p` export const OkrContainer = styled.div` margin: 0 auto; - max-height: 485px; + max-height: 48.3rem; height: 100%; width: 100%; - overflow: auto; + overflow-y: auto; padding: 0 1.2rem; display: flex; flex-direction: column; - justify-content: space-between; box-sizing: border-box; `; export const OKRBox = styled.div` width: 100%; - max-width: 75.8rem; - height: 236px; + height: 23.6rem; background: #f8f8f8; - padding: 0 6px; - box-sizing: border-box; box-shadow: 0px 3px 10px rgba(124, 124, 124, 0.25); border-radius: 8px; - margin-bottom: 13px; + margin-bottom: 11px; + padding: 0 0.6rem; :nth-last-child(1) { margin-bottom: 0; } @@ -66,35 +61,29 @@ export const OKRBox = styled.div` export const Objective = styled.div` display: flex; - flex-direction: row; + justify-content: space-between; align-items: center; - /* justify-content: space-between; */ - padding: 17px 21px; + padding: 0 1.1rem; position: relative; + height: 8.5rem; .left { - width: calc(100% - 172px - 42px); display: flex; align-items: center; .title { - font-weight: 700; - font-size: 54.2282px; - line-height: 74px; - color: ${({ color }) => color}; cursor: default; - background: url(${mount}) no-repeat center / 100%; - min-width: 40px; - height: 40px; + color: ${({ color }) => color}; + font-size: 5.4rem; + font-weight: 700; margin-right: 16px; } .nameBox { + max-width: 300px; width: 100%; .name { - width: calc(100% - 56px); + width: 90%; height: 38px; font-weight: 500; font-size: 22px; - line-height: 33px; - letter-spacing: -0.01em; color: ${({ color }) => color}; cursor: pointer; overflow: hidden; @@ -115,12 +104,12 @@ export const Objective = styled.div` height: 100%; display: flex; align-items: center; + margin-right: 5rem; .percent { width: 35px; height: 25px; font-weight: 300; font-size: 18px; - /* line-height: 25px; */ color: ${({ color }) => color}; cursor: default; margin-left: 14px; @@ -135,46 +124,46 @@ export const KRBox = styled.div` border-radius: 7px; margin-bottom: 8px; display: flex; + justify-content: space-between; align-items: center; - padding: 0 14px; + padding: 0 7px 0 15px; + box-sizing: border-box; .left { - width: calc(100% - 172px - 28px); + max-width: 340px; + width: 100%; display: flex; align-items: center; - .mount { - width: 34px; - height: 34px; - background: url(${milestone}) no-repeat center / cover; - } + /* background-color: skyblue; */ .logo { - width: 50px; - height: 27px; font-weight: 500; + font-size: 2rem; font-size: 16px; - line-height: 27px; text-align: center; - letter-spacing: -0.02em; color: ${({ color }) => color}; cursor: default; - margin: 0 10px 0 14px; + margin-right: 2rem; } .name { - width: calc(100% - 220px); + width: 85%; height: 27px; font-style: normal; font-weight: 500; font-size: 20px; line-height: 27px; - letter-spacing: -0.01em; color: #4b4b4b; cursor: pointer; + + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } } .right { height: 100%; display: flex; align-items: center; + .percent { width: 35px; height: 25px; @@ -183,7 +172,6 @@ export const KRBox = styled.div` color: ${({ color }) => color}; cursor: default; margin-left: 14px; - margin-right: 11px; } } `; @@ -216,10 +204,6 @@ export const PersentBox = styled.div` display: flex; background-color: pink; //기존 디자인 없애기 - - /* margin-top: ${({ state }) => `${state === 'Objective' ? '34px' : '15px'}`}; - margin-left: ${({ state }) => - `${state === 'Objective' ? '29px' : '12.5px'}`}; */ cursor: pointer; input[type='range'] { width: 100%; diff --git a/src/styles/mainpage.styled.js b/src/styles/mainpage.styled.js index 1228a75..ee34bc5 100644 --- a/src/styles/mainpage.styled.js +++ b/src/styles/mainpage.styled.js @@ -22,3 +22,8 @@ export const StWrap = styled.div` max-width: 147rem; } `; + +export const OkrContainer = styled.div` + width: 100%; + display: flex; +`; diff --git a/src/components/mainpage/menu.styled.js b/src/styles/menu.styled.js similarity index 100% rename from src/components/mainpage/menu.styled.js rename to src/styles/menu.styled.js diff --git a/src/components/mainpage/todo.styled.js b/src/styles/todo.styled.js similarity index 98% rename from src/components/mainpage/todo.styled.js rename to src/styles/todo.styled.js index 7b0376c..a15ec8c 100644 --- a/src/components/mainpage/todo.styled.js +++ b/src/styles/todo.styled.js @@ -1,4 +1,4 @@ -import checkicon from '../../assets/checkFull.png'; +import checkicon from '../assets/checkFull.png'; import styled from 'styled-components'; export const Container = styled.div` diff --git a/src/components/todo/tododetail.styled.js b/src/styles/tododetail.styled.js similarity index 98% rename from src/components/todo/tododetail.styled.js rename to src/styles/tododetail.styled.js index bc5667b..ef41916 100644 --- a/src/components/todo/tododetail.styled.js +++ b/src/styles/tododetail.styled.js @@ -1,10 +1,10 @@ -import checkicon from '../../assets/checkFull.png'; -import down from '../../assets/down.png'; -import more from '../../assets/more.png'; -import next from '../../assets/next.png'; -import prev from '../../assets/prev.png'; -import check from '../../assets/todoCheck.png'; -import up from '../../assets/up.png'; +import checkicon from '../assets/checkFull.png'; +import down from '../assets/down.png'; +import more from '../assets/more.png'; +import next from '../assets/next.png'; +import prev from '../assets/prev.png'; +import check from '../assets/todoCheck.png'; +import up from '../assets/up.png'; import styled from 'styled-components'; export const StNavi = styled.div` From 107e1e06cd28cdf39b0adb6fa0c57a4a5a48b653 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Wed, 26 Apr 2023 18:37:23 +0900 Subject: [PATCH 60/72] =?UTF-8?q?=EC=9E=84=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/tooltip.png | Bin 0 -> 473 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/tooltip.png diff --git a/src/assets/tooltip.png b/src/assets/tooltip.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e2ec1ba1fb97a2d4ded3bde991a8f07ed5cc5d GIT binary patch literal 473 zcmV;~0Ve*5P)<h;3K|Lk000e1NJLTq000*N000*V1^@s6;40Lh00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0d7e|K~#7FwUs?m zgFqC=|GVP>(x<V?M`di1R&#-Pgm?nu2~3sNI2^#?0$?tHwp7ybQPI%n0)X!^ON`^d zk`R6~8zAidVBfxd2-M*F{+$rwf!cyDd#W)W{pY1=YL3U_ud4B)N-Cv%r_*cbiK(rJ z!=b5_M^W^e=lKdJLNnP827~8Hc^HP@beQ0LJet96c_GUae&d#6W}-a5a*FX%7Yfrf zF`v(|*=*{%fjzut2RSX?3pBW{izG>khv-nr0HHGDQ#XLcmStf!n_)Vg>bfJ#vU~E% zB^ts~ns%eUyg#n!c+;e_VHmJ&8~uJCj^i|uFF59HGo*^1M0XVOJvyRGxhHA$cjy4} z7V-~t0C`QR>T!(A60^6+7TQgZxGZb_Ih5QW2)2~?PiP5+<83q=t^UZF&gwbCH~7go z10HuQ{wHU6N@@*aG$ZB;Scc*lQ8!8z{UudSE^cMG_Vkv#@phcXbzlD<$?%))8EIxa P00000NkvXXu0mjfyJ^th literal 0 HcmV?d00001 From 72e5f452f2b6a9ead615fc24509933e4247cbc1a Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sat, 29 Apr 2023 16:36:52 +0900 Subject: [PATCH 61/72] =?UTF-8?q?fix=20:=20api=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20=ED=95=84=ED=84=B0=EB=A7=81=20=EC=B2=B4=ED=81=AC?= =?UTF-8?q?=EB=B0=95=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiPOST.js | 6 + src/components/dashboard/DashToDo.jsx | 22 +++- src/components/dashboard/okr/OkrItem.jsx | 6 +- .../global/globaldropdown/Emotion.jsx | 10 +- .../global/globaldropdown/dropdown.js | 4 + src/components/member/LoginForm.jsx | 2 +- src/components/todo/DetailTodoItem.jsx | 97 +++++++++++++- src/components/todo/Filter.jsx | 23 ++-- src/components/todo/KrFilter.jsx | 121 ++++++++++++++---- src/components/todo/TeamTodo.jsx | 8 +- src/components/todo/Todo.jsx | 81 ++++++------ src/components/todo/TodoNavi.jsx | 64 ++++++--- src/pages/Mainpage.jsx | 39 +++++- src/pages/TodoPage.jsx | 6 +- src/shared/useSomethingQuery.js | 46 +++---- src/store/store.js | 86 ++++++++++--- src/styles/tododetail.styled.js | 6 +- 17 files changed, 465 insertions(+), 162 deletions(-) diff --git a/src/apis/apiPOST.js b/src/apis/apiPOST.js index 1a9d4b0..5b7a071 100644 --- a/src/apis/apiPOST.js +++ b/src/apis/apiPOST.js @@ -24,3 +24,9 @@ export async function CreateTodo({ Oid, Kid, Info }) { const { data } = await api.post(`api/${Oid}/${Kid}/todo`, Info); return data; } + +export async function PostExpirationTodo({ info }) { + // console.log(Info) + const { data } = await api.post(`api/todo/expiration`, info); + return data; +} diff --git a/src/components/dashboard/DashToDo.jsx b/src/components/dashboard/DashToDo.jsx index ed1cdb7..28b5cfe 100644 --- a/src/components/dashboard/DashToDo.jsx +++ b/src/components/dashboard/DashToDo.jsx @@ -1,5 +1,6 @@ import { GetTodo } from '../../apis/apiGET'; import plus from '../../assets/plus.png'; +import { todoListSelector, todoListState } from '../../store/store'; import { Container, Header, @@ -7,12 +8,14 @@ import { TodoContainer, StTodoItem, } from '../../styles/todo.styled'; +import Loading from '../global/Loading.jsx'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; import { NotHave, NotHaveEl } from '../global/globalModal/modal.styled'; import TodoItem from './TodoItem'; import { useQuery } from '@tanstack/react-query'; import React, { useState, useRef } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; export default function DashTodo() { const [todoModalOn, setTodoModalOn] = useState(false); @@ -31,13 +34,30 @@ export default function DashTodo() { } }; + const [todoList, setTodoList] = useRecoilState(todoListState); + const todoSelector = useRecoilValue(todoListSelector); + // console.log('todoSelector :', todoSelector); // 임시 - const { data: getTodo } = useQuery(['TODO'], GetTodo, { + const { + data: getTodo, + isLoading, + isError, + error, + } = useQuery(['TODO'], GetTodo, { onSuccess: response => { + setTodoList(response); // console.log(response); }, onError: response => {}, }); + + if (isLoading) { + return <Loading />; + } + + if (isError) { + return <div>{error.message}</div>; + } return ( <Container> <HeaderBox> diff --git a/src/components/dashboard/okr/OkrItem.jsx b/src/components/dashboard/okr/OkrItem.jsx index bcc13e5..48a31ca 100644 --- a/src/components/dashboard/okr/OkrItem.jsx +++ b/src/components/dashboard/okr/OkrItem.jsx @@ -107,11 +107,11 @@ const OkrItem = () => { const [KRArray, setKRArray] = useState([]); const value = useRecoilValue(krDataAtom); - console.log('value :', value); - console.log('KRArray :', KRArray); + // console.log('value :', value); + // console.log('KRArray :', KRArray); const { data: getOKRData } = useQuery(['OKR'], GetOKR, { onSuccess: response => { - console.log('response :', response); + // console.log('response :', response); const newArray = response.map(data => { const newKRArray = [...data.keyresult]; newKRArray.sort((a, b) => a.krNumber - b.krNumber); diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index bbd263b..f62f195 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -17,11 +17,11 @@ const Emotion = ({ openDropdownId, setOpenDropdownId, }) => { - console.log('showEmotion :', showEmotion); - console.log('keyResultId :', keyResultId); - console.log('emotionState :', emotionState); - console.log('openDropdownId :', openDropdownId); - console.log('---------'); + // console.log('showEmotion :', showEmotion); + // console.log('keyResultId :', keyResultId); + // console.log('emotionState :', emotionState); + // console.log('openDropdownId :', openDropdownId); + // console.log('---------'); const queryClient = useQueryClient(); // 자신감 수정 diff --git a/src/components/global/globaldropdown/dropdown.js b/src/components/global/globaldropdown/dropdown.js index c219bdb..f37872d 100644 --- a/src/components/global/globaldropdown/dropdown.js +++ b/src/components/global/globaldropdown/dropdown.js @@ -17,6 +17,10 @@ export const useDropDown = (ref, initialState) => { // 밖에 누르면 닫히기 useEffect(() => { const clickOutside = e => { + // console.log(ref.current); + // console.log(e.target); + + // console.log(ref.current.contains(e.target)); if (ref.current && !ref.current.contains(e.target)) { setIsOpen(!isOpen); } diff --git a/src/components/member/LoginForm.jsx b/src/components/member/LoginForm.jsx index caffd4a..62f8fab 100644 --- a/src/components/member/LoginForm.jsx +++ b/src/components/member/LoginForm.jsx @@ -71,7 +71,7 @@ const LoginForm = () => { const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { - // console.log(response); + console.log(response); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 919192b..c63a8e8 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -1,24 +1,40 @@ +import { GetKR, GetUser } from '../../apis/apiGET'; import { PatchCheck } from '../../apis/apiPATCH'; +import { PostExpirationTodo } from '../../apis/apiPOST'; import badgeS from '../../assets/badgeS.png'; import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; -import { patchTodoInfo } from '../../store/store'; +import { + clickDate, + filterTeamMemberSelector, + getOKRData, + krDataAtom, + myUserIdSelecctor, + patchTodoInfo, + teamMemberTodoSelector, + todoDateInfo, + userId, + userInfo, +} from '../../store/store'; import { DDay, TodoDetailHeader, TodoDetailItem, } from '../../styles/tododetail.styled'; +import Loading from '../global/Loading'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; import Filter from './Filter'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import React, { useState } from 'react'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { toast } from 'react-toastify'; -import { useSetRecoilState } from 'recoil'; +import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -const DetailTodoItem = ({ el, today, tomorrow }) => { +const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { + // console.log(todayFormat); + // console.log(dateInfo); // const queryClient = useQueryClient(); // // 우선순위 @@ -231,6 +247,77 @@ const DetailTodoItem = ({ el, today, tomorrow }) => { // } // }; + // 날짜 + // const date = useRecoilValue(clickDate); + // console.log('date :', date?.targetDate); + + // const my = useRecoilValue(myUserIdSelecctor); + // console.log('my :', my); + + // const [krState, setKrState] = useRecoilState(krDataAtom); + // console.log('kr :', krState); + + // const [dateInfo, setDateInfo] = useState({ + // targetDate: '', + // teamMembers: my, + // keyResultIds: krState, + // orderby: 'endDate', + // orderbyrole: 'asce', + // }); + // console.log(dateInfo); + + //userId + // console.log(my); + + // const kr = useRecoilValue(getOKRData); + // const jkr = useRecoilValue(krDataAtom); + // console.log(jkr); + + // const [expirationDefault, setExpirationDefault] = + // useRecoilState(todoDateInfo); + + // console.log('expirationDefault :', expirationDefault); + + // console.log(mock.flat(Infinity)); + + // const mock = jkr?.map(el => [el.keyResultId]); + + // 기간 만료 todo 불러오기 + + const [info, setInfo] = useState({ + targetDate: todayFormat, + teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], + KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), + orderby: 'endDate', + orderbyrole: 'desc', + }); + // console.log(info); + // console.log('----------------------'); + + useEffect(() => { + // console.log(info); + expirationTodo({ info }); + }, []); + // }); + + const { + mutate: expirationTodo, + isLoading, + isError, + error, + } = useMutation(PostExpirationTodo, { + onSuccess: data => { + // console.log(data); + }, + }); + if (isLoading) { + return <Loading />; + } + + // if (isError) { + // return <div>{error.message}</div>; + // } + return ( <> <DDay> diff --git a/src/components/todo/Filter.jsx b/src/components/todo/Filter.jsx index da292f6..bdd975d 100644 --- a/src/components/todo/Filter.jsx +++ b/src/components/todo/Filter.jsx @@ -12,18 +12,17 @@ import React, { useRef, useState } from 'react'; import { useRecoilState } from 'recoil'; const Filter = () => { - const [krState, setKrState] = useRecoilState(krDataAtom); - // console.log(krState); - const { data: getOkrData } = useQuery(['krData'], GetKR, { - retry: 3, - staleTime: 60 * 1000, - onSuccess: response => { - setKrState(response); - }, - }); - - const doneDrop = useRef(null); - const sortDrop = useRef(null); + // const [krState, setKrState] = useRecoilState(krDataAtom); + // // console.log(krState); + // const { data: getOkrData } = useQuery(['krData'], GetKR, { + // retry: 3, + // staleTime: 60 * 1000, + // onSuccess: response => { + // setKrState(response); + // }, + // }); + // const doneDrop = useRef(null); + // const sortDrop = useRef(null); return ( <StFilterContainer> diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx index 3f7ee01..4dbd35d 100644 --- a/src/components/todo/KrFilter.jsx +++ b/src/components/todo/KrFilter.jsx @@ -1,7 +1,10 @@ +import { GetKR } from '../../apis/apiGET'; import filter from '../../assets/filter1.png'; +import { krDataAtom } from '../../store/store'; import { okrCheckSelector } from '../../store/store'; import { StKrFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; +import { useQuery } from '@tanstack/react-query'; import React, { useRef, useState } from 'react'; import { AiFillCloseCircle } from 'react-icons/ai'; import { GrClose } from 'react-icons/gr'; @@ -11,26 +14,81 @@ const KrFilter = () => { const krDropRef = useRef(null); //드롭다운이 보여지는 상태관리 const [krDropOn, setKrDropon] = useDropDown(krDropRef, false); + // const [krDropOn, setKrDropon] = useState(false); - const [checkData, setCheckData] = useRecoilState(okrCheckSelector); + // const [data, setData] = useState([]); + // console.log('data :', data); - // console.log(checkData); + // const [krData, setKrData] = useRecoilState(krDataAtom); + // console.log('krData :', krData); + // const [krData, setKrData] = useState([]); + + const [checkedList, setCheckedList] = useState([]); + const [checkInfo, setCheckInfo] = useState([]); + const [forData, setForData] = useState([]); + + console.log('***** forData :', forData); + + console.log('checkedList :', checkedList); + console.log('checkInfo :', checkInfo); + + const { data: getKrData } = useQuery(['KR'], GetKR, { + refetchOnWindowFocus: false, + onSuccess: response => { + // setCheckedList(response); + setCheckInfo(response); + console.log(response); + // const + // const filter = response.map(el => ({ ...el, check: false })); + // const check = response.map(el => ({ + // id: el.keyResultId, + // data: el.keyResult, + // })); + // const check = response.map(el => el.keyResult); + // setCheckInfo(response); + // setCheckedList(check); + // + // console.log(response.indexOf(array)); + }, + }); + + const thisDelete = item => { + // console.log(item.keyResultId); + setCheckedList(checkedList.filter(el => el !== item)); + setForData(forData.filter(el => el !== item.keyResultId)); + // setCheckInfo(checkInfo.filter(el => el !== item)); + }; + + const removeAll = () => { + setCheckedList([]); + setForData([]); + }; // filterContainer를 누르면 Drop이 보이는 함수 const krDroponHandler = () => { setKrDropon(!krDropOn); }; - // checkbox 클릭하면 해시태그 추가 - const addHash = e => {}; + const onCheckedElement = (checked, item) => { + if (checked) { + // console.log(JSON.parse(item)); + // console.log('checked이빈다'); + setCheckedList([...checkedList, JSON.parse(item)]); + setForData([...forData, JSON.parse(item).keyResultId]); + // setCheckInfo([...checkInfo, item]); + } else if (!checked) { + // console.log(JSON.parse(item)); + setCheckedList(checkedList.filter(el => el !== JSON.parse(item))); + + // console.log(checkedList); - const [isCheck, setIsCheck] = useState(true); - const onCheckHandler = e => { - // console.log(e); - setIsCheck(!isCheck); + setForData(forData.filter(el => el !== JSON.parse(item).keyResultId)); + // setCheckInfo(checkInfo.filter(el => el !== item)); + } }; - // console.log(krDrop); + // useEffect(()=> { + // }) return ( <StKrFilter ref={krDropRef}> @@ -43,45 +101,52 @@ const KrFilter = () => { {krDropOn && ( <div className='krDrop'> + <div onClick={krDroponHandler}>X</div> <div className='inputBox'> <div className='hashFlex'> - {/* <span>KR1</span> */} - {checkData.map(data => ( - <div className='hash' key={data.keyResultId}> + {checkedList?.map((data, index) => ( + <div + id={data.keyResultId} + className='hash' + key={index} + style={{ + backgroundColor: `${data.color}`, + border: `2px solid ${data.color}`, + }}> <span>KR{data.krNumber}</span> - <GrClose /> + <GrClose onClick={() => thisDelete(data)} /> </div> ))} - - <div className='hash'> - <span>None</span> - <GrClose /> - </div> </div> - {/* <div className='closeBtn'></div> */} - <AiFillCloseCircle className='closeBtn' /> + <AiFillCloseCircle className='closeBtn' onClick={removeAll} /> </div> <ul> - {checkData.map(data => ( - <li key={data.keyResultId} onClick={addHash}> + {/* <input type='checkbox' checked={true} /> + 전체 */} + {checkInfo.map(data => ( + <li key={data.keyResultId}> <input + // id={data.keyResultId} type='checkbox' - onChange={onCheckHandler} - checked={isCheck} + onChange={e => + onCheckedElement(e.target.checked, e.target.value) + } + value={JSON.stringify(data)} + checked={forData.includes(data.keyResultId) ? true : false} + // checked={true} /> - <span className='kr' style={{ color: 'rgb(69, 126, 255)' }}> + <span className='kr' style={{ color: `${data.color}` }}> KR{data.krNumber} </span> :<span className='desc'>{data.keyResult}</span> </li> ))} - - <li> + {/* <li> <input type='checkbox' onChange={onCheckHandler} checked /> <span className='kr' style={{ color: 'rgb(155,155,155)' }}> None </span> - </li> + </li> */} </ul> </div> )} diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index 06f0b3b..ac63b43 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -1,12 +1,18 @@ import { GetUser } from '../../apis/apiGET'; import badgeB from '../../assets/badgeB.png'; +import { teamMemberAtom } from '../../store/store'; import { StTeam } from '../../styles/tododetail.styled'; import { useQuery } from '@tanstack/react-query'; import React from 'react'; +import { useSetRecoilState } from 'recoil'; const TeamTodo = () => { + const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); const { data: getMember } = useQuery(['MEMBER'], GetUser, { - onSuccess: response => {}, + onSuccess: response => { + // console.log(response); + setTeamMemberAtom(response); + }, onError: response => {}, }); diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 49e5877..9fdb7f1 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -24,78 +24,79 @@ export default function Todo() { // console.log(test); - const [todoList, setTodoList] = useRecoilState(allTodoListState); - const alltodo = useRecoilValue(AllTodoSelector); + // const [todoList, setTodoList] = useRecoilState(allTodoListState); + // const alltodo = useRecoilValue(AllTodoSelector); - console.log('atom :', todoList); - console.log('selector :', alltodo); + // console.log('atom :', todoList); + // console.log('selector :', alltodo); - const { data, isLoading, isError, error } = useQuery( - ['alltodoTest'], - GetAllTodo, - { - // suspense: true, - onSuccess: data => { - setTodoList(data); - }, - onError: error => { - console.log(error); - }, - } - ); + // const { data, isLoading, isError, error } = useQuery( + // ['alltodoTest'], + // GetAllTodo, + // { + // // suspense: true, + // onSuccess: data => { + // setTodoList(data); + // }, + // onError: error => { + // console.log(error); + // }, + // } + // ); - if (isLoading) { - return <Loading />; - } + // if (isLoading) { + // return <Loading />; + // } - if (isError) { - return <div>{error.message}</div>; - } + // if (isError) { + // return <div>{error.message}</div>; + // } const now = new Date(); let today = ''; let tomorrow; if (now.getMonth() + 1 < 10 && now.getDate() < 10) { - today = `0${now.getMonth() + 1}월 0${now.getDate()}일`; + today = `${now.getFullYear()}-0${now.getMonth() + 1}-0${now.getDate()}`; tomorrow = `0${now.getMonth() + 1}월 0${now.getDate() + 1}일`; } else if (now.getDate() < 10) { - today = `${now.getMonth() + 1}월 0${now.getDate()}일`; - tomorrow = `${now.getMonth() + 1}월 0${now.getDate() + 1}일`; + today = `${now.getFullYear()}-${now.getMonth() + 1}-0${now.getDate()}`; + tomorrow = `${now.getFullYear()}-${now.getMonth() + 1}-0${ + now.getDate() + 1 + }`; } else if (now.getMonth() + 1 < 10) { - today = `0${now.getMonth() + 1}월 ${now.getDate()}일`; + today = `${now.getFullYear()}-0${now.getMonth() + 1}-${now.getDate()}`; tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; } else { - today = `${now.getMonth() + 1}월 ${now.getDate()}일`; + today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; } return ( <StSticky> - {alltodo?.length === 0 ? ( + {/* {alltodo?.length === 0 ? ( <h2 className='notHave'>설정된 To Do가 없습니다.</h2> ) : ( <> <TodoDashboard> - {/* <TodoNavi todayFormat={today} /> */} + <TodoNavi todayFormat={today} /> <TodoNavi todayFormat={today} getAllTodo={alltodo} /> - {/* <Filter /> */} - {/* <PastTodo /> */} - {/* {test?.map(el => ( - <DetailTodoWrap key={el.targetDate}> - <DetailTodoItem el={el} today={today} tomorrow={tomorrow} /> - <FinishTodo el={el} /> - </DetailTodoWrap> - ))} */} <DetailTodoWrap> <DetailTodoItem /> </DetailTodoWrap> </TodoDashboard> <TeamTodo /> - <Toast /> </> - )} + )} */} + <TodoDashboard> + <TodoNavi todayFormat={today} /> + + <DetailTodoWrap> + <DetailTodoItem todayFormat={today} /> + </DetailTodoWrap> + </TodoDashboard> + <TeamTodo /> </StSticky> ); } diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index de03b21..bbdc568 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -1,4 +1,5 @@ import plus from '../../assets/plus.png'; +import { DDay, clickDate, todoDateInfo } from '../../store/store'; import { DateNavi, NaviPlus, @@ -7,13 +8,14 @@ import { } from '../../styles/tododetail.styled'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; -import React, { useState, useRef } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { Link } from 'react-scroll'; +import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; const TodoNavi = ({ todayFormat, getAllTodo }) => { - const haveDay = getAllTodo?.map(todo => { - return todo.targetDate; - }); + // const haveDay = getAllTodo?.map(todo => { + // return todo.targetDate; + // }); const today = new Date(); @@ -46,13 +48,21 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { let format = ''; if (newDate.getMonth() + 1 < 10 && newDate.getDate() < 10) { - format = `0${newDate.getMonth() + 1}월 0${newDate.getDate()}일`; + format = `${newDate.getFullYear()}-0${ + newDate.getMonth() + 1 + }-0${newDate.getDate()}`; } else if (newDate.getMonth() + 1 < 10) { - format = `0${newDate.getMonth() + 1}월 ${newDate.getDate()}일`; + format = `${newDate.getFullYear()}-0${ + newDate.getMonth() + 1 + }-${newDate.getDate()}`; } else if (newDate.getDate() < 10) { - format = `${newDate.getMonth() + 1}월 0${newDate.getDate()}일`; + format = `${newDate.getFullYear()}-${ + newDate.getMonth() + 1 + }-0${newDate.getDate()}`; } else { - format = `${newDate.getMonth() + 1}월 ${newDate.getDate()}일`; + format = `${newDate.getFullYear()}-${ + newDate.getMonth() + 1 + }-${newDate.getDate()}`; } week.push({ @@ -61,7 +71,7 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { date: `${newDate.getDate()}`, year: `${newDate.getFullYear()}`, format: format, - includes: haveDay?.includes(format), + // includes: haveDay?.includes(format), }); } return week; @@ -118,16 +128,28 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { }; const [dDay, setDDay] = useState(todayFormat); - console.log(dDay); + // console.log(dDay); + // const todoinfo = useRecoilValue(todoDateInfo); + // console.log('atom :', todoinfo); + const [dateInfo, setDateInfo] = useRecoilState(todoDateInfo); + // const setTodoDateInfo = useSetRecoilState(clickDate); const clickDDay = e => { - if (e.currentTarget.className === 'include') { - setDDay(e.currentTarget.id); - } + // if (e.currentTarget.className === 'include') { + // setDDay(e.currentTarget.id); + // } + setDDay(e.currentTarget.id); + setDateInfo({ ...dateInfo, targetDate: e.currentTarget.id }); }; + useEffect(() => { + setDateInfo({ ...dateInfo, targetDate: todayFormat }); + }, []); + + console.log(state.week); + const Today = ({ el }) => { - console.log(el.format === dDay); + // console.log(el.format === dDay); if ( Number(el.date) === dateD && Number(el.month) === dateM && @@ -172,23 +194,25 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { onClick={clickDDay} id={el.format} style={{ border: '2px solid rgb(255,131,54)' }} - className={el.includes === false ? 'day' : 'include'}> + // className={el.includes === false ? 'day' : 'include'} + className='day'> <span className='label'>{el.dateValue}</span> <Today el={el} /> - {el?.includes === false ? null : ( + {/* {el?.includes === false ? null : ( <div className='includeCh'></div> - )} + )} */} </div> ) : ( <div onClick={clickDDay} id={el.format} - className={el.includes === false ? 'day' : 'include'}> + // className={el.includes === false ? 'day' : 'include'} + className='day'> <span className='label'>{el.dateValue}</span> <Today el={el} /> - {el?.includes === false ? null : ( + {/* {el?.includes === false ? null : ( <div className='includeCh'></div> - )} + )} */} </div> )} </React.Fragment> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 6e01b53..9a7427d 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,11 +1,17 @@ -import { GetOKR, GetUserInfo } from '../apis/apiGET'; +import { GetKR, GetOKR, GetUser, GetUserInfo } from '../apis/apiGET'; import DashOKR from '../components/dashboard/DashOKR'; import DashTodo from '../components/dashboard/DashToDo'; import Menu from '../components/dashboard/Menu'; import Tutorial from '../components/dashboard/Tutorial'; import DashBoardCalendar from '../components/dashboard/calendar/Calendar'; import Portal from '../components/global/globalModal/Potal'; -import { getOKRData, userId, userInfo } from '../store/store'; +import { + getOKRData, + krDataAtom, + teamMemberAtom, + userId, + userInfo, +} from '../store/store'; import { OkrContainer, StWrap } from '../styles/mainpage.styled'; import { useQuery } from '@tanstack/react-query'; import jwt_decode from 'jsonwebtoken/decode'; @@ -25,8 +31,10 @@ export default function Mainpage() { // accesstoken 디코딩 const setUserInfo = useSetRecoilState(userInfo); + const setUserId = useSetRecoilState(userId); const [uid, setUid] = useRecoilState(userId); + // console.log(uid); const [accessToken, setAccessToken] = useState( localStorage.getItem('accesstoken') ); @@ -41,7 +49,10 @@ export default function Mainpage() { const { userinfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { enabled: !!uid, onSuccess: data => { + // console.log(data); setUserInfo(data); + sessionStorage.setItem('userId', data.userId); + setUserId(data.userId); }, }); @@ -53,9 +64,31 @@ export default function Mainpage() { }, }); + const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); + + const { data: getMember } = useQuery(['MEMBER'], GetUser, { + onSuccess: response => { + // console.log(response); + setTeamMemberAtom(response); + }, + onError: response => {}, + }); + + const [krdata, setKrData] = useRecoilState(krDataAtom); + console.log(krdata); + const { data: getKr } = useQuery(['KR'], GetKR, { + onSuccess: response => { + // setKrState(response); + // console.log('response :', response); + const filterArray = response.map(el => el.keyResultId); + sessionStorage.setItem('kr', JSON.stringify(filterArray)); + setKrData(response); + }, + }); + return ( <StWrap> - {userInfo?.firstLogin ? ( + {userinfo?.firstLogin ? ( <Portal> <Tutorial /> </Portal> diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx index 618475d..6675af1 100644 --- a/src/pages/TodoPage.jsx +++ b/src/pages/TodoPage.jsx @@ -1,7 +1,11 @@ +import { GetKR } from '../apis/apiGET'; import Menu from '../components/dashboard/Menu'; import Todo from '../components/todo/Todo'; +import { clickDate, krDataAtom, myUserIdSelecctor } from '../store/store'; import { StWrap } from '../styles/mainpage.styled'; -import React from 'react'; +import { useQuery } from '@tanstack/react-query'; +import React, { useState } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; const TodoPage = () => { return ( diff --git a/src/shared/useSomethingQuery.js b/src/shared/useSomethingQuery.js index 205abfb..07acb93 100644 --- a/src/shared/useSomethingQuery.js +++ b/src/shared/useSomethingQuery.js @@ -1,29 +1,29 @@ -import { GetAllTodo } from '../apis/apiGET'; -import Loading from '../components/global/Loading'; -import { allTodoListState } from '../store/store'; -import { useQuery } from '@tanstack/react-query'; -import { useRecoilState } from 'recoil'; +// import { GetAllTodo } from '../apis/apiGET'; +// import Loading from '../components/global/Loading'; +// import { allTodoListState } from '../store/store'; +// import { useQuery } from '@tanstack/react-query'; +// import { useRecoilState } from 'recoil'; -export const useSomethingQuery = () => { - const [todoList, setTodoList] = useRecoilState(allTodoListState); +// export const useSomethingQuery = () => { +// const [todoList, setTodoList] = useRecoilState(allTodoListState); - const { data, isLoading, isError } = useQuery(['alltodoTest'], GetAllTodo, { - suspense: true, - }); +// const { data, isLoading, isError } = useQuery(['alltodoTest'], GetAllTodo, { +// suspense: true, +// }); - if (isLoading) { - console.log(isLoading); - return <Loading />; - } +// if (isLoading) { +// console.log(isLoading); +// return <Loading />; +// } - if (isError) { - return <div>에러</div>; - } +// if (isError) { +// return <div>에러</div>; +// } - if (data) { - // console.log(data); - setTodoList(data); - } +// if (data) { +// // console.log(data); +// setTodoList(data); +// } - return { todoList, isLoading, isError }; -}; +// return { todoList, isLoading, isError }; +// }; diff --git a/src/store/store.js b/src/store/store.js index 0cdcf28..87089a0 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -68,31 +68,83 @@ export const krDataAtom = atom({ }); // 수정 필요 -export const okrCheckSelector = selector({ - key: 'okrCheck', - // get: ({ get }) => { - // const datas = get(krDataAtom)?.map(el => { - // console.log(el); - // const data = { ...el }; - // data.checked = true; - // return data; - // }); - // return datas; - // }, - get: ({ get }) => get(krDataAtom), - set: ({ set }, checkList) => set(krDataAtom, checkList), -}); +// export const okrCheckSelector = selector({ +// key: 'okrCheck', +// // get: ({ get }) => { +// // const datas = get(krDataAtom)?.map(el => { +// // console.log(el); +// // const data = { ...el }; +// // data.checked = true; +// // return data; +// // }); +// // return datas; +// // }, +// get: ({ get }) => get(krDataAtom), +// // set: ({ set }, checkList) => set(krDataAtom, checkList), +// }); // TodoPage에서 모든 todo 가져오기 -export const allTodoListState = atom({ +export const todoListState = atom({ key: 'allTodoListState', default: null, }); -export const AllTodoSelector = selector({ +export const todoListSelector = selector({ key: 'testAllTodoSelector', get: ({ get }) => { - const todoList = get(allTodoListState); + const todoList = get(todoListState); return todoList; }, }); + +//ex) 2023-01-01 +export const clickDate = atom({ + key: 'DDay', + default: null, +}); + +export const todoDateInfo = atom({ + key: 'todoDateInfo', + default: { + targetDate: '', + teamMembers: [], + KeyResultIds: [], + orderby: '', + orderbyrole: '', + }, +}); + +//[{...},{...}] +export const teamMemberAtom = atom({ + key: 'teamMemberAtom', + default: null, +}); + +// 내 userId [131] +export const myUserIdSelecctor = selector({ + key: 'myUserIdSelecctor', + get: ({ get }) => { + const todoMember = get(teamMemberAtom); + const filterMyId = todoMember?.filter(el => el.myInfo); + let array = []; + if (filterMyId) { + array = [filterMyId[0].userId]; + } + return array; + }, +}); + +// 팀원들 userId +export const filterTeamMemberSelector = selector({ + key: 'teamMemberTodoSelector', + get: ({ get }) => { + const todoMember = get(teamMemberAtom); + const filterTodoMember = todoMember?.map(el => el.userId); + // console.log('todoMember :', todoMember); + // return filterTodoMember; + return todoMember; + }, +}); + +// kr들 +// export const diff --git a/src/styles/tododetail.styled.js b/src/styles/tododetail.styled.js index ef41916..72348e8 100644 --- a/src/styles/tododetail.styled.js +++ b/src/styles/tododetail.styled.js @@ -531,14 +531,16 @@ export const StKrFilter = styled.div` .hash { /* width: 36px; */ height: 15px; - background: #457eff; - border: 1px solid #457eff; + /* background: #457eff; */ + /* border: 2px solid ${({ color }) => color}; */ + /* border: 1px solid #457eff; */ border-radius: 2.3px; color: #fff; display: flex; align-items: center; justify-content: center; padding: 2px; + /* background-color: pink; */ span { } svg { From 371e0c9144a205c57ed5baf835dee9e4fdbb3bd6 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sun, 30 Apr 2023 04:19:07 +0900 Subject: [PATCH 62/72] =?UTF-8?q?fix=20:=20todo=20=ED=95=84=ED=84=B0=20ui?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiPOST.js | 10 + src/assets/warn.png | Bin 0 -> 1197 bytes src/components/dashboard/TodoItem.jsx | 28 +- .../global/globalModal/TodoModal.jsx | 2 +- .../global/globaldropdown/Emotion.jsx | 39 ++- .../global/globaldropdown/dropDown.styled.js | 1 + src/components/todo/DetailTodoItem.jsx | 283 +++++++++++---- src/components/todo/KrFilter.jsx | 123 ++++--- src/components/todo/SortFilter.jsx | 42 ++- src/components/todo/TeamTodo.jsx | 43 ++- src/components/todo/Todo.jsx | 17 +- src/components/todo/TodoNavi.jsx | 5 +- src/pages/Mainpage.jsx | 19 +- src/store/store.js | 13 +- src/styles/todo.styled.js | 323 ++++++++++++++++-- src/styles/tododetail.styled.js | 10 +- 16 files changed, 754 insertions(+), 204 deletions(-) create mode 100644 src/assets/warn.png diff --git a/src/apis/apiPOST.js b/src/apis/apiPOST.js index 5b7a071..65e366f 100644 --- a/src/apis/apiPOST.js +++ b/src/apis/apiPOST.js @@ -30,3 +30,13 @@ export async function PostExpirationTodo({ info }) { const { data } = await api.post(`api/todo/expiration`, info); return data; } + +export async function PostProgressTodo({ info }) { + const { data } = await api.post(`api/todo/progress`, info); + return data; +} + +export async function PostCompletionTodo({ info }) { + const { data } = await api.post(`api/todo/completion`, info); + return data; +} diff --git a/src/assets/warn.png b/src/assets/warn.png new file mode 100644 index 0000000000000000000000000000000000000000..ece72228c0be491bb38d909d8283ac63befb98f1 GIT binary patch literal 1197 zcmV;e1XBBnP)<h;3K|Lk000e1NJLTq000yK000#T1^@s6M%B)!00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1VTwfK~#7FZIwN2 z97Pnz|Fg57x3}v%+viK-T<kdDI0OR<DTwHT(jgi|g(#^~P$1DEMHCSrETmLOkq~w0 zDG*3VM2IE{iV~qHAGR-ca(njqe77IByR);yvydY@_DEZdcHeK_{NMk*WjJK1D_1mJ zxG>odo=ov{+hLG~sMQp291)`48XB{wH^#=swi#pU<yf|NvvKwEd=_k7<r=%Bl=Pu7 zn7RecvcPN;uuL$+q9|K2sc%4JKl>NYf5FawknA$_y};zo{jXTN^C5R_NKJ?8Z$rxj zG|s?u208?}&cT>QNHxVR>++zx@{~fqITSePY)nqt7R=ceOvi&<eGIL)^?!!-aiB2+ zabg}x=K<9A19)KsJYTEsWoUahrBrTF7Dz_|u|I`JilbAhKrXxmYvE0>)&jJ}x8c42 z3ABk<C_+-^<v!rP3=3Jfg6mk7InK<T#mVs|!e`5{&s~5KB^cfQ1B!DPrxqY3U@!-T zWBG>y@7=gz=HGwmZrL`D`je<oxvY2I!&H|fIyQ&o@87_pZKS{a2*Yne7Xe1D4nwht zLxB^hj>RWVxs~IysLjm5s8*o0jsvY}pxcE>;uL-ZLD|J}yA5G!SS%HcnrIvfwCaVU zO}Dsr?p@gPZ-7l7qaxI>W1Stl81f?Q<_V0Sd=1gc6V!ueWQ$FDL|rMxc0Kt5Xa~bm zthbqRZ=)mzk9vT)2)Lwq`!Q6vgQDMq%tr9ZzT@14ZP-wma&O(bwZjqnfVpj(JWX}7 z0c5=aKGg(PS3ycZk#*9Wzhm|8ZQLa2FdpHO!7yPt^li;-=1&d+mA2_|t{WJHv{6u$ z1?vXD(>8f<5^~T%uf2lT3yFrVf$TtCqoFJ{%Uj;G2{GD#<us{<70v7w0!>*!+vq^7 zJVqG}VV+$?q*pOx8FW?&S(XS%F%k(@Sy=WUoFYVjA5bu7e9NnF9t&g}0ZPg)e|QgR z9HSPj!6Sc$o`-~B5Cy1rAT*9d<ECS<9pHm~z)rtk8)l4E(gM-)BN#*K<NhXG>Kx>B z8`lHn2d?W#WeLu7NP4yy=lx*YKVX}TIcz|(MoEGqP2h(^RH$P}dze{*lBD3&9-1nU zk;dc!3@A%dfaylnIskmwY)SjoGl>8C6P;m(WSGDxa#VLln3mJXqU%vX`bA0QWT;eZ zSX9GsZXVpP>j!}A>(3vVN2cTEM<2V+{kzEjxq~POur-P)3#vJzK|pX`^})w#5VNPy zBUli}!=rKhaF_F9!0x#H+oi8R^{W1NzVCS^onD3^vfd{0G=s<mX~s}gT%=UtgboVB zXf2JC&wsdn{l)>{?z(pE+Ho4BpOGiem#RE13(=5L>V*(U^SsEiypw0*UnRw_j2k~K zEiG;CjXwa~U03M8;yBJRnME_KR8CeDP<a^%U0*d#Gobh7VR8QfEJW{r6kK^900000 LNkvXXu0mjfY2Yp| literal 0 HcmV?d00001 diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index 708d747..87ea498 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -35,6 +35,7 @@ const TodoItem = ({ getTodo }) => { return null; } }); + // console.log(filterArray); // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { @@ -63,11 +64,11 @@ const TodoItem = ({ getTodo }) => { const Priority = ({ el }) => { if (el.priority === 1) { - return <img src={red} alt='' />; + return <img className='priority' src={red} alt='' />; } else if (el.priority === 2) { - return <img src={yellow} alt='' />; + return <img className='priority' src={yellow} alt='' />; } else if (el.priority === 3) { - return <img src={blue} alt='' />; + return <img className='priority' src={blue} alt='' />; } else { return; } @@ -119,8 +120,9 @@ const TodoItem = ({ getTodo }) => { <> {filterArray?.map(el => ( <div className='todo' key={el.toDoId}> + <Check el={el} /> <div className='title' style={{ color: el.color }}> - {el.keyResultId === null ? 'none' : `KR${el.krNumber}`} + {el.keyResultId === null ? 'None' : `KR${el.krNumber}`} </div> <div className='detail'> <div @@ -137,19 +139,21 @@ const TodoItem = ({ getTodo }) => { el.priority ); }}> - <div title={el.memo}>{el.toDo}</div> + <div className='todoName'>{el.toDo}</div> + <div className='memo'> + {el.memo === '' ? '메모가 없습니다.' : `${el.memo}`} + </div> <p> - {el.fstartDate}~{el.fendDate} 까지 + {el.fstartDate} - {el.fendDate} </p> </div> - <div className='priorityBox'> - <Priority el={el} /> - <Check el={el} /> - </div> + {/* <div className='priorityBox'> + </div> */} </div> + <Priority el={el} /> </div> ))} - {getCompletionTodo?.map(el => ( + {/* {getCompletionTodo?.map(el => ( <div className='todo' key={el.toDoId}> <div className='title' style={{ color: el.color }}> {el.keyResultId === null ? 'none' : `KR${el.krNumber}`} @@ -171,7 +175,7 @@ const TodoItem = ({ getTodo }) => { </div> </div> </div> - ))} + ))} */} <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} </Potal> diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index c115898..3f6ce4d 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -110,7 +110,7 @@ const TodoModal = ({ }); }; - console.log(todoInfo); + // console.log(todoInfo); //endDate 변환 함수 년-월 const convertEnd = (date, format = defaultFormat.format) => { diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index f62f195..eb2970a 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -24,6 +24,13 @@ const Emotion = ({ // console.log('---------'); const queryClient = useQueryClient(); + const [open, setOpen] = useState(false); + // console.log(open); + + // const test = () => { + // setOpen(!open); + // }; + // 자신감 수정 const { mutate: patchEmotionmutate } = useMutation(PatchEmotion, { onSuccess: response => { @@ -40,7 +47,7 @@ const Emotion = ({ }, }); - const isOpen = openDropdownId === keyResultId; + // const isOpen = openDropdownId === keyResultId; const DropDownItem = ({ setIsOpen, isOpen, el, name, keyResultId }) => { const ValueClick = () => { @@ -65,13 +72,15 @@ const Emotion = ({ }; const onClick = e => { - console.log(e); - // if (isOpen) { - // setOpenDropdownId(null); - // } else { - // setOpenDropdownId(keyResultId); - // } - setShowEmotion(!showEmotion); + // console.log(e); + // // if (isOpen) { + // // setOpenDropdownId(null); + // // } else { + // // setOpenDropdownId(keyResultId); + // // } + // setShowEmotion(!showEmotion); + console.log('눌림'); + setOpen(!open); }; const ImgBox = () => { @@ -116,9 +125,9 @@ const Emotion = ({ useEffect(() => { // console.log('effect'); const clickOutside = e => { - console.log(e); - console.log(selectRef.current); - console.log(e.target); + // console.log(e); + // console.log(selectRef.current); + // console.log(e.target); if (selectRef.current !== e.target) { // setIsOpen(!isOpen); // isOpen = false; @@ -129,18 +138,18 @@ const Emotion = ({ // } }; - if (isOpen) { + if (open) { window.addEventListener('click', clickOutside); } return () => { window.removeEventListener('click', clickOutside); }; - }, [isOpen]); + }, [open]); return ( <EmotionSelect> <ImgBox /> - {showEmotion && ( + {open && ( <ul ref={selectRef}> <div className='tooltip'> <span>자신감 지표</span> @@ -151,7 +160,7 @@ const Emotion = ({ key={index} name={el.name} setIsOpen={setOpenDropdownId} - isOpen={isOpen} + open={open} el={el} keyResultId={keyResultId} /> diff --git a/src/components/global/globaldropdown/dropDown.styled.js b/src/components/global/globaldropdown/dropDown.styled.js index e8cb179..c4350fc 100644 --- a/src/components/global/globaldropdown/dropDown.styled.js +++ b/src/components/global/globaldropdown/dropDown.styled.js @@ -365,6 +365,7 @@ export const EmotionSelect = styled.div` position: relative; margin-left: 19px; cursor: pointer; + background-color: pink; .emotion { width: 100%; height: 100%; diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index c63a8e8..4357f56 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -1,10 +1,16 @@ import { GetKR, GetUser } from '../../apis/apiGET'; import { PatchCheck } from '../../apis/apiPATCH'; -import { PostExpirationTodo } from '../../apis/apiPOST'; +import { + PostCompletionTodo, + PostExpirationTodo, + PostProgressTodo, +} from '../../apis/apiPOST'; import badgeS from '../../assets/badgeS.png'; +import checkFull from '../../assets/checkFull.png'; import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; +import warn from '../../assets/warn.png'; import { clickDate, filterTeamMemberSelector, @@ -17,11 +23,18 @@ import { userId, userInfo, } from '../../store/store'; +import { + StCompletionTodo, + StExpirationTodo, + StTodo, + StTodoItem, +} from '../../styles/todo.styled'; import { DDay, TodoDetailHeader, TodoDetailItem, } from '../../styles/tododetail.styled'; +import TodoItem from '../dashboard/TodoItem'; import Loading from '../global/Loading'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; @@ -31,6 +44,7 @@ import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { toast } from 'react-toastify'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; +import styled from 'styled-components'; const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { // console.log(todayFormat); @@ -246,60 +260,22 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { // ); // } // }; - - // 날짜 - // const date = useRecoilValue(clickDate); - // console.log('date :', date?.targetDate); - - // const my = useRecoilValue(myUserIdSelecctor); - // console.log('my :', my); - - // const [krState, setKrState] = useRecoilState(krDataAtom); - // console.log('kr :', krState); - - // const [dateInfo, setDateInfo] = useState({ - // targetDate: '', - // teamMembers: my, - // keyResultIds: krState, - // orderby: 'endDate', - // orderbyrole: 'asce', - // }); - // console.log(dateInfo); - - //userId - // console.log(my); - - // const kr = useRecoilValue(getOKRData); - // const jkr = useRecoilValue(krDataAtom); - // console.log(jkr); - - // const [expirationDefault, setExpirationDefault] = - // useRecoilState(todoDateInfo); - - // console.log('expirationDefault :', expirationDefault); - - // console.log(mock.flat(Infinity)); - - // const mock = jkr?.map(el => [el.keyResultId]); - + const queryClient = useQueryClient(); // 기간 만료 todo 불러오기 - const [info, setInfo] = useState({ - targetDate: todayFormat, - teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], - KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), - orderby: 'endDate', - orderbyrole: 'desc', - }); - // console.log(info); - // console.log('----------------------'); + const [info, setInfo] = useRecoilState(todoDateInfo); + // console.log('info :', info); + + const [expiration, setExpiration] = useState([]); + const [progress, setProgress] = useState([]); + const [completion, setCompletion] = useState([]); + // console.log('expiration :', expiration); + // console.log('진행 중 :', progress); + // console.log('완료 :', completion); - useEffect(() => { - // console.log(info); - expirationTodo({ info }); - }, []); // }); + // 기한 만료 const { mutate: expirationTodo, isLoading, @@ -307,31 +283,220 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { error, } = useMutation(PostExpirationTodo, { onSuccess: data => { - // console.log(data); + setExpiration(data); + // console.log('response :', data); }, }); - if (isLoading) { - return <Loading />; - } + // if (isLoading) { + // return <Loading />; + // } // if (isError) { // return <div>{error.message}</div>; // } + // 진행중 + const { mutate: progressTodo } = useMutation(PostProgressTodo, { + onSuccess: data => { + setProgress(data); + // console.log('response :', data); + }, + }); + + // 완료 + const { mutate: completionTodo } = useMutation(PostCompletionTodo, { + onSuccess: data => { + setCompletion(data); + // console.log('response :', data); + }, + }); + + // 기한 만료 컴포넌트 + const ExpirationTodo = () => { + if (expiration?.length === 0) { + return <h2>기한이 지난 todo 없음</h2>; + } else { + return expiration.map(el => ( + <StExpirationTodo key={el.userId}> + {el.expirationTodo.map(data => ( + <div className='todo' key={data.toDoId}> + <div className='check' data={data}></div> + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} + </div> + <div className='detail'> + <div className='nameDate'> + <div className='todoName'>{data.toDo}</div> + <div className='memo'> + {data.memo === '' ? '메모가 없습니다.' : `${data.memo}`} + </div> + <p> + <img src={warn} alt='warn' /> + {data.fstartDate} - {data.fendDate} + </p> + </div> + </div> + <Priority data={data} /> + </div> + ))} + </StExpirationTodo> + )); + } + }; + + // 진행중 만료 컴포넌트 + const ProgressTodo = () => { + if (progress?.length === 0) { + return <h2>진행중인 todo 없음</h2>; + } else { + return progress.map(el => ( + <StExpirationTodo key={el.userId}> + {el.progressTodo.map(data => ( + <div className='todo' key={data.toDoId}> + <div className='check' data={data}></div> + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} + </div> + <div className='detail'> + <div className='nameDate'> + <div className='todoName'>{data.toDo}</div> + <div className='memo'> + {data.memo === '' ? '메모가 없습니다.' : `${data.memo}`} + </div> + <p> + {data.fstartDate} - {data.fendDate} + </p> + </div> + </div> + <Priority data={data} /> + </div> + ))} + </StExpirationTodo> + )); + } + }; + + //완료 컴포넌트 + const CompletionTodo = () => { + if (completion?.length === 0) { + return <h2>진행중인 todo 없음</h2>; + } else { + return completion.map(el => ( + <StCompletionTodo key={el.userId}> + {el.completionTodo.map(data => ( + <div className='todo' key={data.toDoId}> + <Check data={data} /> + {/* <div className='check' data={data}></div> */} + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} + </div> + <div className='detail'> + <div className='nameDate'> + <div className='todoName'>{data.toDo}</div> + <div className='memo'> + {data.memo === '' ? '메모가 없습니다.' : `${data.memo}`} + </div> + <p> + {data.fstartDate} - {data.fendDate} + </p> + </div> + </div> + <Priority data={data} /> + </div> + ))} + </StCompletionTodo> + )); + } + }; + + const { mutate: patchCheckmutate } = useMutation(PatchCheck, { + onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 완료', + }); + } + queryClient.invalidateQueries(['TODO']); + // queryClient.invalidateQueries(['completionTodo']); + + expirationTodo({ info }); + progressTodo({ info }); + completionTodo({ info }); + }, + onError: response => { + // console.log(response); + }, + }); + + const Check = ({ data }) => { + // console.log(data) + const onClickCheck = () => { + const id = data.toDoId; + patchCheckmutate({ id }); + console.log('체크 눌림'); + // toast('할 일을 완료했습니다.'); + }; + + // return <div className='completion' onClick={onClickCheck} />; + return ( + <img + className='completion' + src={checkFull} + alt='checked' + onClick={onClickCheck} + /> + ); + }; + + const Priority = ({ data }) => { + if (data.priority === 1) { + return <img className='priority' src={red} alt='' />; + } else if (data.priority === 2) { + return <img className='priority' src={yellow} alt='' />; + } else if (data.priority === 3) { + return <img className='priority' src={blue} alt='' />; + } else { + return; + } + }; + + useEffect(() => { + // console.log('effect 들어왔어'); + if ( + info.targetDate !== null && + info.KeyResultIds !== null && + info.teamMembers !== null + ) { + // console.log('effect 변경!'); + expirationTodo({ info }); + progressTodo({ info }); + completionTodo({ info }); + } + }, [info]); + + // useEffect(() => { + // progressTodo({ info }); + // completionTodo({ info }); + // }, [patchCheckmutate]); + return ( <> <DDay> <TodoDetailHeader> <div className='header'> - <div className='title'>TODAY</div> + <div className='title'>{info.targetDate}</div> <Filter /> - {/* <div className='title' id={el.targetDate}> - {el.targetDate} - </div> */} </div> </TodoDetailHeader> - {/* <HavePt /> */} </DDay> + <h2>--진행중--</h2> + <ProgressTodo /> + <h2>--완료--</h2> + <CompletionTodo /> + <h2>--기간만료--</h2> + <ExpirationTodo /> + {/* <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} </Potal> */} diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx index 4dbd35d..e2e3821 100644 --- a/src/components/todo/KrFilter.jsx +++ b/src/components/todo/KrFilter.jsx @@ -1,6 +1,6 @@ import { GetKR } from '../../apis/apiGET'; import filter from '../../assets/filter1.png'; -import { krDataAtom } from '../../store/store'; +import { krDataAtom, todoDateInfo } from '../../store/store'; import { okrCheckSelector } from '../../store/store'; import { StKrFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; @@ -13,55 +13,53 @@ import { useRecoilState } from 'recoil'; const KrFilter = () => { const krDropRef = useRef(null); //드롭다운이 보여지는 상태관리 - const [krDropOn, setKrDropon] = useDropDown(krDropRef, false); - // const [krDropOn, setKrDropon] = useState(false); - - // const [data, setData] = useState([]); - // console.log('data :', data); - - // const [krData, setKrData] = useRecoilState(krDataAtom); - // console.log('krData :', krData); - // const [krData, setKrData] = useState([]); + // const [krDropOn, setKrDropon] = useDropDown(krDropRef, false); + const [info, setInfo] = useRecoilState(todoDateInfo); + console.log(info); + const [krDropOn, setKrDropon] = useState(false); const [checkedList, setCheckedList] = useState([]); const [checkInfo, setCheckInfo] = useState([]); const [forData, setForData] = useState([]); - console.log('***** forData :', forData); + // console.log('***** forData :', forData); - console.log('checkedList :', checkedList); - console.log('checkInfo :', checkInfo); + // console.log('checkedList :', checkedList); + // console.log('checkInfo :', checkInfo); const { data: getKrData } = useQuery(['KR'], GetKR, { refetchOnWindowFocus: false, onSuccess: response => { // setCheckedList(response); - setCheckInfo(response); - console.log(response); - // const - // const filter = response.map(el => ({ ...el, check: false })); - // const check = response.map(el => ({ - // id: el.keyResultId, - // data: el.keyResult, - // })); - // const check = response.map(el => el.keyResult); - // setCheckInfo(response); - // setCheckedList(check); - // - // console.log(response.indexOf(array)); + const none = [{ keyResultId: 0, color: '#9b9b9b' }]; + const addNone = [...response, ...none]; + setCheckInfo(addNone); + + setCheckedList(addNone); + // console.log(JSON.parse(sessionStorage.getItem('kr'))); + setForData(JSON.parse(sessionStorage.getItem('kr'))); + + setForData(JSON.parse(sessionStorage.getItem('kr'))); }, }); const thisDelete = item => { // console.log(item.keyResultId); setCheckedList(checkedList.filter(el => el !== item)); - setForData(forData.filter(el => el !== item.keyResultId)); - // setCheckInfo(checkInfo.filter(el => el !== item)); + setForData(forData?.filter(el => el !== item.keyResultId)); + const filter = info.KeyResultIds.filter(el => el !== item.keyResultId); + // console.log(typeof filter); + // setInfo({ + // ...info, + // KeyResultIds: filter, + // }); }; const removeAll = () => { setCheckedList([]); setForData([]); + + // setInfo({...info, KeyResultIds([])}) }; // filterContainer를 누르면 Drop이 보이는 함수 @@ -71,25 +69,33 @@ const KrFilter = () => { const onCheckedElement = (checked, item) => { if (checked) { - // console.log(JSON.parse(item)); - // console.log('checked이빈다'); setCheckedList([...checkedList, JSON.parse(item)]); - setForData([...forData, JSON.parse(item).keyResultId]); - // setCheckInfo([...checkInfo, item]); - } else if (!checked) { - // console.log(JSON.parse(item)); - setCheckedList(checkedList.filter(el => el !== JSON.parse(item))); - // console.log(checkedList); + setForData([...forData, JSON.parse(item).keyResultId]); + console.log('filter :', JSON.parse(item).keyResultId); - setForData(forData.filter(el => el !== JSON.parse(item).keyResultId)); - // setCheckInfo(checkInfo.filter(el => el !== item)); + // setInfo({ ...info, KeyResultIds: JSON.parse(item).keyResultId }); + setInfo({ + ...info, + KeyResultIds: [...info.KeyResultIds, JSON.parse(item).keyResultId], + }); + } else if (!checked) { + const filter = checkedList.filter(el => JSON.stringify(el) !== item); + // console.log( + // 'filter :', + // forData?.filter(el => el !== JSON.parse(item).keyResultId) + // ); + setCheckedList(filter); + + setForData(forData?.filter(el => el !== JSON.parse(item).keyResultId)); + const filterArray = forData?.filter( + el => el !== JSON.parse(item).keyResultId + ); + + setInfo({ ...info, KeyResultIds: filterArray }); } }; - // useEffect(()=> { - // }) - return ( <StKrFilter ref={krDropRef}> <div className='filterContainer' onClick={krDroponHandler}> @@ -113,7 +119,12 @@ const KrFilter = () => { backgroundColor: `${data.color}`, border: `2px solid ${data.color}`, }}> - <span>KR{data.krNumber}</span> + {/* <span>KR{data.krNumber}</span> */} + {data.keyResultId === 0 ? ( + <span>None</span> + ) : ( + <span>KR{data.krNumber}</span> + )} <GrClose onClick={() => thisDelete(data)} /> </div> ))} @@ -121,8 +132,6 @@ const KrFilter = () => { <AiFillCloseCircle className='closeBtn' onClick={removeAll} /> </div> <ul> - {/* <input type='checkbox' checked={true} /> - 전체 */} {checkInfo.map(data => ( <li key={data.keyResultId}> <input @@ -133,20 +142,24 @@ const KrFilter = () => { } value={JSON.stringify(data)} checked={forData.includes(data.keyResultId) ? true : false} - // checked={true} /> - <span className='kr' style={{ color: `${data.color}` }}> - KR{data.krNumber} - </span> - :<span className='desc'>{data.keyResult}</span> + {data.keyResultId === 0 ? ( + <> + <span className='kr' style={{ color: `${data.color}` }}> + None + </span> + <span className='desc'>{data.keyResult}</span> + </> + ) : ( + <> + <span className='kr' style={{ color: `${data.color}` }}> + KR{data.krNumber} : + </span> + <span className='desc'>{data.keyResult}</span> + </> + )} </li> ))} - {/* <li> - <input type='checkbox' onChange={onCheckHandler} checked /> - <span className='kr' style={{ color: 'rgb(155,155,155)' }}> - None - </span> - </li> */} </ul> </div> )} diff --git a/src/components/todo/SortFilter.jsx b/src/components/todo/SortFilter.jsx index 4211246..7724f81 100644 --- a/src/components/todo/SortFilter.jsx +++ b/src/components/todo/SortFilter.jsx @@ -1,7 +1,7 @@ import sort from '../../assets/sort.png'; import { StSortFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; -import React, { useRef } from 'react'; +import React, { useRef, useState } from 'react'; const SortFilter = () => { const sortDropRef = useRef(null); @@ -11,6 +11,10 @@ const SortFilter = () => { const sortDropHandler = () => { setSortDropOn(!sortDropOn); }; + + const [showPriority, setShowPriority] = useState(false); + const [showEndDate, setShowEndDate] = useState(false); + const [showCreateDate, setShowCreateDate] = useState(false); return ( <StSortFilter ref={sortDropRef}> <div className='sortContainer' onClick={sortDropHandler}> @@ -20,9 +24,39 @@ const SortFilter = () => { {sortDropOn && ( <ul className='sortDrop'> - <li>우선순위</li> - <li>등록일자</li> - <li>마감기한</li> + <li + onMouseOver={() => setShowPriority(true)} + onMouseOut={() => setShowPriority(false)}> + <span>우선순위</span> + {showPriority && ( + <div> + <p>높은순</p> + <p>낮은순</p> + </div> + )} + </li> + <li + onMouseOver={() => setShowCreateDate(true)} + onMouseOut={() => setShowCreateDate(false)}> + 등록일자 + {showCreateDate && ( + <div> + <p>높은순</p> + <p>낮은순</p> + </div> + )} + </li> + <li + onMouseOver={() => setShowEndDate(true)} + onMouseOut={() => setShowEndDate(false)}> + 마감기한 + {showEndDate && ( + <div> + <p>높은순</p> + <p>낮은순</p> + </div> + )} + </li> </ul> )} </StSortFilter> diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index ac63b43..2277a9e 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -1,21 +1,47 @@ import { GetUser } from '../../apis/apiGET'; import badgeB from '../../assets/badgeB.png'; -import { teamMemberAtom } from '../../store/store'; +import { teamMemberAtom, todoDateInfo } from '../../store/store'; import { StTeam } from '../../styles/tododetail.styled'; import { useQuery } from '@tanstack/react-query'; import React from 'react'; -import { useSetRecoilState } from 'recoil'; +import { useRecoilState, useSetRecoilState } from 'recoil'; const TeamTodo = () => { - const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); + const setMember = useSetRecoilState(teamMemberAtom); + // console.log('member --->', member); + // const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); + + const [info, setInfo] = useRecoilState(todoDateInfo); + const { data: getMember } = useQuery(['MEMBER'], GetUser, { onSuccess: response => { // console.log(response); - setTeamMemberAtom(response); + setMember(response); }, onError: response => {}, }); + const clickMember = e => { + const id = Number(e.target.id); + + if (info.teamMembers.includes(id) === false) { + setInfo({ + ...info, + teamMembers: [...info.teamMembers, Number(e.target.id)], + }); + } else if ( + info.teamMembers.includes(id) === true && + info.teamMembers.length > 1 + ) { + const removeId = info.teamMembers.filter(el => el !== id); + + setInfo({ + ...info, + teamMembers: removeId, + }); + } + }; + const defaultDay = new Date().getDay(); let day; if (defaultDay === 0) { @@ -47,8 +73,13 @@ const TeamTodo = () => { {getMember?.map(el => ( <div className='member' key={el.userId}> - {/* <div className={el.myInfo === true ? 'have' : 'none'}></div> */} - <div className='have'></div> + <div + id={el.userId} + className={ + info.teamMembers.includes(el.userId) === true ? 'have' : 'none' + } + onClick={clickMember}></div> + {/* <div className='have'></div> */} <div className='name'>{el.name}</div> <div className='number'>{el.createToDoCount}</div> </div> diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 9fdb7f1..b191ff9 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -57,18 +57,22 @@ export default function Todo() { let tomorrow; if (now.getMonth() + 1 < 10 && now.getDate() < 10) { today = `${now.getFullYear()}-0${now.getMonth() + 1}-0${now.getDate()}`; - tomorrow = `0${now.getMonth() + 1}월 0${now.getDate() + 1}일`; + // tomorrow = `0${now.getMonth() + 1}월 0${now.getDate() + 1}일`; + sessionStorage.setItem('targetDate', today); } else if (now.getDate() < 10) { today = `${now.getFullYear()}-${now.getMonth() + 1}-0${now.getDate()}`; - tomorrow = `${now.getFullYear()}-${now.getMonth() + 1}-0${ - now.getDate() + 1 - }`; + // tomorrow = `${now.getFullYear()}-${now.getMonth() + 1}-0${ + // now.getDate() + 1 + // }`; + sessionStorage.setItem('targetDate', today); } else if (now.getMonth() + 1 < 10) { today = `${now.getFullYear()}-0${now.getMonth() + 1}-${now.getDate()}`; - tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; + // tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; + sessionStorage.setItem('targetDate', today); } else { today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; - tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; + // tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; + sessionStorage.setItem('targetDate', today); } return ( @@ -103,6 +107,7 @@ export default function Todo() { const StSticky = styled.div` display: flex; + /* background-color: pink; */ /* position: relative; */ .notHave { width: 100%; diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index bbdc568..a6a9b1f 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -12,7 +12,7 @@ import React, { useState, useRef, useEffect } from 'react'; import { Link } from 'react-scroll'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -const TodoNavi = ({ todayFormat, getAllTodo }) => { +const TodoNavi = ({ todayFormat }) => { // const haveDay = getAllTodo?.map(todo => { // return todo.targetDate; // }); @@ -140,13 +140,14 @@ const TodoNavi = ({ todayFormat, getAllTodo }) => { // } setDDay(e.currentTarget.id); setDateInfo({ ...dateInfo, targetDate: e.currentTarget.id }); + sessionStorage.setItem('targetDate', e.currentTarget.id); }; useEffect(() => { setDateInfo({ ...dateInfo, targetDate: todayFormat }); }, []); - console.log(state.week); + // console.log(state.week); const Today = ({ el }) => { // console.log(el.format === dDay); diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 9a7427d..2d772a0 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -64,23 +64,24 @@ export default function Mainpage() { }, }); - const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); + // const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); - const { data: getMember } = useQuery(['MEMBER'], GetUser, { - onSuccess: response => { - // console.log(response); - setTeamMemberAtom(response); - }, - onError: response => {}, - }); + // const { data: getMember } = useQuery(['MEMBER'], GetUser, { + // onSuccess: response => { + // // console.log(response); + // setTeamMemberAtom(response); + // }, + // onError: response => {}, + // }); const [krdata, setKrData] = useRecoilState(krDataAtom); - console.log(krdata); + // console.log(krdata); const { data: getKr } = useQuery(['KR'], GetKR, { onSuccess: response => { // setKrState(response); // console.log('response :', response); const filterArray = response.map(el => el.keyResultId); + filterArray.push(0); sessionStorage.setItem('kr', JSON.stringify(filterArray)); setKrData(response); }, diff --git a/src/store/store.js b/src/store/store.js index 87089a0..9c07645 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -106,18 +106,19 @@ export const clickDate = atom({ export const todoDateInfo = atom({ key: 'todoDateInfo', default: { - targetDate: '', - teamMembers: [], - KeyResultIds: [], - orderby: '', - orderbyrole: '', + targetDate: sessionStorage.getItem('targetDate'), + teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], + // teamMembers: [134, 137], + KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), + orderby: 'endDate', + orderbyrole: 'desc', }, }); //[{...},{...}] export const teamMemberAtom = atom({ key: 'teamMemberAtom', - default: null, + default: [], }); // 내 userId [131] diff --git a/src/styles/todo.styled.js b/src/styles/todo.styled.js index a15ec8c..c132cb1 100644 --- a/src/styles/todo.styled.js +++ b/src/styles/todo.styled.js @@ -48,13 +48,13 @@ export const TodoContainer = styled.div` export const StTodoItem = styled.div` width: 100%; - height: 5.3rem; + height: 11.8rem; .todo { width: 100%; height: 100%; display: flex; - align-items: center; - padding: 0 13px 0 20px; + position: relative; + padding: 14px 17px 21px 22px; margin-bottom: 8px; background-color: #f8f8f8; box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); @@ -62,39 +62,65 @@ export const StTodoItem = styled.div` :nth-last-child(1) { margin-bottom: 0; } + .check { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #ccc; + position: relative; + cursor: pointer; + margin-right: 23px; + img { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } .title { - width: 43px; + width: 50px; text-align: center; color: #9b9b9b; - font-size: 14px; + font-size: 19px; font-weight: 700; - margin-right: 31px; + margin-right: 25px; cursor: default; } .detail { - width: 100%; height: 100%; - display: flex; - justify-content: space-between; box-sizing: border-box; padding: 3px 0 5px 0; .nameDate { display: flex; flex-direction: column; justify-content: space-between; - font-size: 15px; font-weight: bold; color: #4b4b4b; font-weight: 500; cursor: pointer; - div { + .todoName { font-size: 19px; + margin-bottom: 10px; + } + .memo { + font-size: 14px; + color: #9b9b9b; + margin-bottom: 8px; } + p { margin: 0; - font-size: 12.5px; + font-size: 14px; + display: flex; + align-items: center; + img { + width: 20px; + height: 20px; + margin-right: 5px; + } } } + .nameDateComplitc { display: flex; flex-direction: column; @@ -123,20 +149,7 @@ export const StTodoItem = styled.div` background-color: #ccc; border-radius: 50%; } - .check { - width: 30px; - height: 30px; - border-radius: 50%; - background-color: #ccc; - position: relative; - cursor: pointer; - img { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } - } + .completion { width: 30px; height: 30px; @@ -146,5 +159,263 @@ export const StTodoItem = styled.div` } } } + .priority { + position: absolute; + top: 20px; + right: 18px; + width: 17px; + height: 23px; + } + } +`; + +export const StExpirationTodo = styled.div` + width: 100%; + margin: 20px 0 8px 0; + .todo { + width: 100%; + height: 100%; + display: flex; + position: relative; + padding: 14px 17px 21px 22px; + margin-bottom: 8px; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + :nth-last-child(1) { + margin-bottom: 0; + } + .check { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #ccc; + position: relative; + cursor: pointer; + margin-right: 23px; + img { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + .title { + width: 50px; + text-align: center; + color: #9b9b9b; + font-size: 19px; + font-weight: 700; + margin-right: 25px; + cursor: default; + } + .detail { + height: 100%; + box-sizing: border-box; + padding: 3px 0 5px 0; + .nameDate { + display: flex; + flex-direction: column; + justify-content: space-between; + font-weight: bold; + color: #4b4b4b; + font-weight: 500; + cursor: pointer; + .todoName { + font-size: 19px; + margin-bottom: 10px; + } + .memo { + font-size: 14px; + color: #9b9b9b; + margin-bottom: 8px; + } + + p { + margin: 0; + font-size: 14px; + display: flex; + align-items: center; + img { + width: 20px; + height: 20px; + margin-right: 5px; + } + } + } + } + .priority { + position: absolute; + top: 20px; + right: 18px; + width: 17px; + height: 23px; + } + } +`; + +export const StProgressTodo = styled.div` + width: 100%; + margin: 20px 0 8px 0; + .todo { + width: 100%; + height: 100%; + display: flex; + position: relative; + padding: 14px 17px 21px 22px; + margin-bottom: 8px; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + :nth-last-child(1) { + margin-bottom: 0; + } + .check { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #ccc; + position: relative; + cursor: pointer; + margin-right: 23px; + img { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + .title { + width: 50px; + text-align: center; + color: #9b9b9b; + font-size: 19px; + font-weight: 700; + margin-right: 25px; + cursor: default; + } + .detail { + height: 100%; + box-sizing: border-box; + padding: 3px 0 5px 0; + .nameDate { + display: flex; + flex-direction: column; + justify-content: space-between; + font-weight: bold; + color: #4b4b4b; + font-weight: 500; + cursor: pointer; + .todoName { + font-size: 19px; + margin-bottom: 10px; + } + .memo { + font-size: 14px; + color: #9b9b9b; + margin-bottom: 8px; + } + + p { + margin: 0; + font-size: 14px; + display: flex; + align-items: center; + img { + width: 20px; + height: 20px; + margin-right: 5px; + } + } + } + } + .priority { + position: absolute; + top: 20px; + right: 18px; + width: 17px; + height: 23px; + } + } +`; +export const StCompletionTodo = styled.div` + width: 100%; + margin: 20px 0 8px 0; + .todo { + width: 100%; + height: 100%; + display: flex; + position: relative; + padding: 14px 17px 21px 22px; + margin-bottom: 8px; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + :nth-last-child(1) { + margin-bottom: 0; + } + .completion { + width: 30px; + height: 30px; + border-radius: 50%; + /* background-color: #ccc; */ + position: relative; + cursor: pointer; + margin-right: 23px; + /* img { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } */ + } + .title { + width: 50px; + text-align: center; + color: #9b9b9b; + font-size: 19px; + font-weight: 700; + margin-right: 25px; + cursor: default; + } + .detail { + height: 100%; + box-sizing: border-box; + padding: 3px 0 5px 0; + .nameDate { + display: flex; + flex-direction: column; + justify-content: space-between; + font-weight: bold; + color: #9b9b9b; + font-weight: 500; + cursor: pointer; + .todoName { + font-size: 19px; + margin-bottom: 10px; + text-decoration: line-through; + } + .memo { + font-size: 14px; + margin-bottom: 8px; + text-decoration: line-through; + } + + p { + margin: 0; + font-size: 14px; + display: flex; + align-items: center; + text-decoration: line-through; + } + } + } + .priority { + position: absolute; + top: 20px; + right: 18px; + width: 17px; + height: 23px; + } } `; diff --git a/src/styles/tododetail.styled.js b/src/styles/tododetail.styled.js index 72348e8..0a15285 100644 --- a/src/styles/tododetail.styled.js +++ b/src/styles/tododetail.styled.js @@ -142,7 +142,7 @@ export const DateNavi = styled.div` export const DetailTodoWrap = styled.div` width: 100%; - border-bottom: 1px solid #e8e8e8; + /* border-bottom: 1px solid #e8e8e8; */ margin-bottom: 10px; /* background-color: pink; */ @@ -332,7 +332,7 @@ export const TodoDetailItem = styled.div` export const DDay = styled.div` /* margin-bottom: 20px; */ /* background-color: skyblue; */ - border-bottom: 1px solid rgba(0, 0, 0, 0.2); + /* border-bottom: 1px solid rgba(0, 0, 0, 0.2); */ `; export const Finsh = styled.div` @@ -442,6 +442,7 @@ export const StTeam = styled.div` border-radius: 2.3px; border: 1px solid #b57bff; background-color: #fff; + cursor: pointer; } .have { width: 23px; @@ -450,6 +451,7 @@ export const StTeam = styled.div` border: 1px solid #b57bff; background-color: #b57bff; background: url(${check}) no-repeat center/ 100%; + cursor: pointer; } .name { @@ -509,6 +511,7 @@ export const StKrFilter = styled.div` display: flex; flex-direction: column; align-items: center; + z-index: 20; .inputBox { margin-top: 9px; width: 182px; @@ -564,7 +567,6 @@ export const StKrFilter = styled.div` padding: 0; margin-top: 11px; margin-bottom: 0; - /* background-color: skyblue; */ li { width: 175px; height: 15px; @@ -629,6 +631,7 @@ export const StDoneFilter = styled.div` display: flex; flex-direction: column; align-items: center; + z-index: 20; /* background-color: pink; */ .inputBox { margin-top: 9px; @@ -741,6 +744,7 @@ export const StSortFilter = styled.div` border: 0.5px solid #000000; border-radius: 8px; text-align: center; + z-index: 20; li { width: 100%; height: 30px; From fbfd3b540617b0b400b5961cdbe14b24aa5f996b Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 1 May 2023 03:57:06 +0900 Subject: [PATCH 63/72] =?UTF-8?q?feat=20:=20todo=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=ED=86=B5=EC=8B=A0=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=B0=8F=20=ED=95=84=ED=84=B0=EB=A7=81=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiPOST.js | 5 + src/assets/lock.png | Bin 0 -> 932 bytes src/assets/sortCheck.png | Bin 0 -> 252 bytes .../global/globaldropdown/Emotion.jsx | 57 ++- .../global/globaldropdown/dropDown.styled.js | 2 +- .../global/globaldropdown/dropdown.js | 5 +- src/components/todo/DetailTodoItem.jsx | 356 +++++------------- src/components/todo/DoneFilter.jsx | 97 ++++- src/components/todo/Filter.jsx | 12 - src/components/todo/KrFilter.jsx | 49 ++- src/components/todo/SortFilter.jsx | 223 +++++++++-- src/components/todo/TeamTodo.jsx | 17 +- src/components/todo/TodoNavi.jsx | 131 +++++-- src/store/store.js | 14 + src/styles/todo.styled.js | 123 ++++-- src/styles/tododetail.styled.js | 103 ++++- 16 files changed, 759 insertions(+), 435 deletions(-) create mode 100644 src/assets/lock.png create mode 100644 src/assets/sortCheck.png diff --git a/src/apis/apiPOST.js b/src/apis/apiPOST.js index 65e366f..efcd557 100644 --- a/src/apis/apiPOST.js +++ b/src/apis/apiPOST.js @@ -40,3 +40,8 @@ export async function PostCompletionTodo({ info }) { const { data } = await api.post(`api/todo/completion`, info); return data; } + +export async function PostWeek({ forData }) { + const { data } = await api.post(`api/todo/week`, forData); + return data; +} diff --git a/src/assets/lock.png b/src/assets/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..ab47f33a99c63032a1cb004f0542936d12cb55fc GIT binary patch literal 932 zcmV;V16%xwP)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH135`VK~#7Ftyeuy zB0(5_SysKoXfUz3#KZ$Dtt2tAvRD)Qv$W%`H#x4d(Bz=7usZw)cQz*#T3%s}3k{(; zsGuS=bQA;#Ilg_L31gOJzXpAh-JPACnP=Yb*#P-KB9RCUhr?JP5QvV)V}qX|?#4xv z$)w2dHEw2gU4P`UH9u<xJP5;s!63m4$H*smBR`gwmXcl@a3sFEy7~fcno6b$-azX5 z`uZ#RC7!A^!%c%;2_~<x^v8D62dt#5+CQ)*y%C(qgXWi`qoZF;YPc=5v$I2nVbICR z3GMIi)5gXIH5v`-_xrZv;fSNr$T&DSNayqU|8vAso5tNp4-XFoX}jH~QmG`K+uPf; zx3@>tYSoSWJxl#Am&^Tr>B9})%Xa-oE{?Rewnnj7j0%N<xXk@$XJ<m{OeRBaV6`8! z!)4Lda6`zDhxbCoK)GC=>6g-PZEcYkSn_YOtxY>VdQDncSrH_-tZ21b;tA<JV8r8b zA)v;#J*5R>brGztu71K(XT6`Y#B&3%dpL~*RJpvoEF8>=&CN~mj7Fo>>-9t%TBuYi zb7QC4P3heDKsG?QU_rSMfcEb0uHA4!6p2J$-q+XHg<0zLx^<|?5xQ*H0U`4A^hAr` z{QTU><{{V_#LD)C+95gOwpc9MI-DCq44o7KLYM(@3!6i|>2!L=Bz}N!YN|{?Ji~7H z_xHjKu%(YMnn9BR;+o1Ns1;6!%TLm<<4vVfO{n@Wxj2{=uqo7wGzlPULG21C;->LY zrl>Lt65rk3iSPj_Cw`Ub$k&g8m>uMS6zwdb>QDd|qX$9Em8r?QxFtoPLRkxj7jPcC zxw)yKEy9UwWr}x#dOQ=;C=5;>D>IUcM>9uKwgoYyzP!9la{Bx(KR}HL9a#<+f!XQU zmu{uBz)W@EN`*>(D&IkhB(Vt0c^c;~J^)0_-)AxxAILwmI>Iy!FXZai0;Ig=v9(__ zzd+?ojzL*^1K=+Mq-GUMI3DQP<_YsrMHR4Vx7$r1OWA#Q{e`)>xCpZblzw3tS(Y>@ z4|Ps(B{pv$7z`Skrs4DuCR2)q4S8e8e%Vf^^V3N}E1m)H;)2&A=G&kE0000<MNUMn GLSTX~aj~cX literal 0 HcmV?d00001 diff --git a/src/assets/sortCheck.png b/src/assets/sortCheck.png new file mode 100644 index 0000000000000000000000000000000000000000..d181319b9a963dc9f761f5b3129dfa4bbcd5fa9d GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^+(691!3HGtEm%8%6lZ})WHC@&7=#%aX3dcR3NjW4 zxjQkeJ16rJ$YDu$^mSxl*x1kgCy^D%pXll07*fI5d*Li^lY;>3gYRZl+gZF9u-GQp z+-ls&!X0q^LPJ=?v<G(=$YwYioNw(gY+)##Q}fxIr{jiplVYlTOqFl(;cmXqf$};$ z{KDI2KEJK|Evo#WlSLY*e(E{Nja}tlw->Y&^J>o#mKF${QIK)qwe7=~`#nn^oXIxg sYd92~cuD-%v#kC3S6CVE-Aa&@pUvZ0X4|<b5a>7tPgg&ebxsLQ00Qk*u>b%7 literal 0 HcmV?d00001 diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index eb2970a..3958f2d 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -53,7 +53,7 @@ const Emotion = ({ const ValueClick = () => { let id = keyResultId; let value = { emoticon: Number(name) }; - setIsOpen(false); + setOpen(false); patchEmotionmutate({ id, value }); }; @@ -72,14 +72,6 @@ const Emotion = ({ }; const onClick = e => { - // console.log(e); - // // if (isOpen) { - // // setOpenDropdownId(null); - // // } else { - // // setOpenDropdownId(keyResultId); - // // } - // setShowEmotion(!showEmotion); - console.log('눌림'); setOpen(!open); }; @@ -116,35 +108,36 @@ const Emotion = ({ const selectRef = useRef(); + // 튤팁 const [show, setShow] = useState(false); // console.log(show); const showTooltip = () => { setShow(!show); }; - useEffect(() => { - // console.log('effect'); - const clickOutside = e => { - // console.log(e); - // console.log(selectRef.current); - // console.log(e.target); - if (selectRef.current !== e.target) { - // setIsOpen(!isOpen); - // isOpen = false; - } - // console.log(selectRef.current && !selectRef.current.contains(e.target)); - // if (selectRef.current && !selectRef.current.contains(e.target)) { - // setShow(!isOpen); - // } - }; + // useEffect(() => { + // // console.log('effect'); + // const clickOutside = e => { + // // console.log(e); + // // console.log(selectRef.current); + // // console.log(e.target); + // if (selectRef.current !== e.target) { + // // setIsOpen(!isOpen); + // // isOpen = false; + // } + // // console.log(selectRef.current && !selectRef.current.contains(e.target)); + // // if (selectRef.current && !selectRef.current.contains(e.target)) { + // // setShow(!isOpen); + // // } + // }; - if (open) { - window.addEventListener('click', clickOutside); - } - return () => { - window.removeEventListener('click', clickOutside); - }; - }, [open]); + // if (open) { + // window.addEventListener('click', clickOutside); + // } + // return () => { + // window.removeEventListener('click', clickOutside); + // }; + // }, [open]); return ( <EmotionSelect> @@ -153,7 +146,7 @@ const Emotion = ({ <ul ref={selectRef}> <div className='tooltip'> <span>자신감 지표</span> - <img src={info} alt='info' onClick={showTooltip} /> + {/* <img src={info} alt='info' onClick={showTooltip} /> */} </div> {emotion.list.map((el, index) => ( <DropDownItem diff --git a/src/components/global/globaldropdown/dropDown.styled.js b/src/components/global/globaldropdown/dropDown.styled.js index c4350fc..7e253f7 100644 --- a/src/components/global/globaldropdown/dropDown.styled.js +++ b/src/components/global/globaldropdown/dropDown.styled.js @@ -365,7 +365,7 @@ export const EmotionSelect = styled.div` position: relative; margin-left: 19px; cursor: pointer; - background-color: pink; + /* background-color: pink; */ .emotion { width: 100%; height: 100%; diff --git a/src/components/global/globaldropdown/dropdown.js b/src/components/global/globaldropdown/dropdown.js index f37872d..b751b9c 100644 --- a/src/components/global/globaldropdown/dropdown.js +++ b/src/components/global/globaldropdown/dropdown.js @@ -19,8 +19,11 @@ export const useDropDown = (ref, initialState) => { const clickOutside = e => { // console.log(ref.current); // console.log(e.target); - // console.log(ref.current.contains(e.target)); + // console.log(ref.current); + // if (ref.current && !ref.current.contains(e.target)) { + // setIsOpen(!isOpen); + // } if (ref.current && !ref.current.contains(e.target)) { setIsOpen(!isOpen); } diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 4357f56..55d21bf 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -7,6 +7,7 @@ import { } from '../../apis/apiPOST'; import badgeS from '../../assets/badgeS.png'; import checkFull from '../../assets/checkFull.png'; +import lock from '../../assets/lock.png'; import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; @@ -15,6 +16,7 @@ import { clickDate, filterTeamMemberSelector, getOKRData, + isDone, krDataAtom, myUserIdSelecctor, patchTodoInfo, @@ -26,6 +28,7 @@ import { import { StCompletionTodo, StExpirationTodo, + StProgressTodo, StTodo, StTodoItem, } from '../../styles/todo.styled'; @@ -46,232 +49,22 @@ import { toast } from 'react-toastify'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; import styled from 'styled-components'; -const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { - // console.log(todayFormat); - // console.log(dateInfo); - // const queryClient = useQueryClient(); - - // // 우선순위 - // const Priority = ({ pt }) => { - // // console.log('pt :', pt); - // if (pt.priority === 1) { - // return <img src={red} alt='' />; - // } else if (pt.priority === 2) { - // return <img src={yellow} alt='' />; - // } else if (pt.priority === 3) { - // return <img src={blue} alt='' />; - // } else { - // return; - // } - // }; - - // const { mutate: patchCheckmutate } = useMutation(PatchCheck, { - // onSuccess: response => { - // if (process.env.NODE_ENV !== 'development') { - // ReactGA.event({ - // category: '버튼', - // action: 'TODO 완료', - // }); - // } - // queryClient.invalidateQueries(['ALLTODO']); - // queryClient.invalidateQueries(['PASTTODO']); - // }, - // onError: response => {}, - // }); - - // // 체크 - // const Check = ({ pt }) => { - // const onClickCheck = () => { - // const id = pt.toDoId; - // patchCheckmutate({ id }); - // toast('To Do를 완료했습니다.'); - // }; - - // return <div className='check' onClick={onClickCheck} />; - // }; - - // //오늘, 내일 글씨 - // const DateColor = ({ el, today, tomorrow, pt }) => { - // if (el.targetDate === today) { - // return ( - // <div className='dateGreen'> - // {pt.fstartDate} - // {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} - // {pt.fendDate} - // {pt.endDateTime === '00:00' ? null : pt.endDateTime} - // </div> - // ); - // } else if (el.targetDate === tomorrow) { - // return ( - // <div className='dateYellow'> - // {pt.fstartDate} - // {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} - // {pt.fendDate} - // {pt.endDateTime === '00:00' ? null : pt.endDateTime} - // </div> - // ); - // } else { - // return ( - // <div className='normalDate'> - // {pt.fstartDate} - // {pt.startDateTime === '00:00' ? null : pt.startDateTime} ~{' '} - // {pt.fendDate} - // {pt.endDateTime === '00:00' ? null : pt.endDateTime} - // </div> - // ); - // } - // }; - - // const Title = ({ pt }) => { - // // console.log(pt); - // if (pt.color === null) { - // return ( - // <div className='colorNull' style={{ color: '#9b9b9b' }}> - // {pt.keyResultId === null ? 'none' : `KR${pt.krNumber}`} - // </div> - // ); - // } - // return ( - // <div className='kr' style={{ color: pt.color }}> - // {pt.keyResultId === null ? 'none' : `KR${pt.krNumber}`} - // </div> - // ); - // }; - - // const [todoModalOn, setTodoModalOn] = useState(false); - - // const onTodoCloseModal = () => { - // setTodoModalOn(!todoModalOn); - // }; - - // const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); - - // const patchTodo = ( - // id, - // todo, - // memo, - // startDate, - // startDateTime, - // endDate, - // endDateTime, - // priority - // ) => { - // console.log(todo); - // setPatchTodoInfo({ - // id, - // toDo: todo, - // memo, - // startDate, - // startDateTime, - // endDate, - // endDateTime, - // priority, - // }); - // setTodoModalOn(!todoModalOn); - // }; - - // const FilterMyTodo = ({ pt }) => { - // if (pt.myToDo === true) { - // return ( - // <div className='item'> - // <div - // className='flexLeft' - // style={ - // pt.completion === true - // ? { cursor: 'default' } - // : { cursor: 'pointer' } - // } - // onClick={() => { - // patchTodo( - // pt.toDoId, - // pt.toDo, - // pt.memo, - // pt.startDate, - // pt.startDateTime, - // pt.endDate, - // pt.endDateTime, - // pt.priority - // ); - // }}> - // <Title pt={pt} /> - // <div className='krBox' title={pt.memo}> - // <div className='krTitle'>{pt.toDo}</div> - // <div className='krManager'> - // <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> - // </div> - // </div> - // </div> - // <div className='flexRight'> - // <Priority pt={pt} /> - // <Check pt={pt} /> - // </div> - // </div> - // ); - // } else { - // return ( - // <div className='item'> - // <div - // className='flexLeft' - // style={ - // pt.completion === true - // ? { cursor: 'default' } - // : { cursor: 'pointer' } - // } - // onClick={() => { - // alert('본인이 작성한 TODO만 수정 가능합니다.'); - // }}> - // <Title pt={pt} /> - // <div className='krBox' title={pt.memo}> - // <div className='krTitle'>{pt.toDo}</div> - // <div className='krManager'> - // <DateColor el={el} today={today} tomorrow={tomorrow} pt={pt} /> - - // <div className='kmName'>{pt.createUser}</div> - // <img src={badgeS} alt='' /> - // </div> - // </div> - // </div> - // <div className='flexRight'> - // <Priority pt={pt} /> - // <div className='another' /> - // </div> - // </div> - // ); - // } - // }; - - // //해당 날짜에 todo가 없을 때 - // const HavePt = () => { - // if (el.progressTodo.length === 0) { - // return ( - // <TodoDetailItem> - // <div className='notHave'>이 날은 진행중인 To Do가 없습니다.</div> - // </TodoDetailItem> - // ); - // } else { - // return ( - // <> - // {el.progressTodo.map(pt => ( - // <TodoDetailItem key={pt.toDoId}> - // <FilterMyTodo pt={pt} /> - // </TodoDetailItem> - // ))} - // </> - // ); - // } - // }; +const DetailTodoItem = () => { const queryClient = useQueryClient(); // 기간 만료 todo 불러오기 const [info, setInfo] = useRecoilState(todoDateInfo); + const [isCompletion, setIsCompletion] = useRecoilState(isDone); + // console.log(isCompletion); // console.log('info :', info); + // console.log('---------'); const [expiration, setExpiration] = useState([]); const [progress, setProgress] = useState([]); const [completion, setCompletion] = useState([]); - // console.log('expiration :', expiration); // console.log('진행 중 :', progress); // console.log('완료 :', completion); + // console.log('expiration :', expiration); // }); @@ -314,22 +107,28 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { // 기한 만료 컴포넌트 const ExpirationTodo = () => { if (expiration?.length === 0) { - return <h2>기한이 지난 todo 없음</h2>; + return; } else { return expiration.map(el => ( <StExpirationTodo key={el.userId}> {el.expirationTodo.map(data => ( <div className='todo' key={data.toDoId}> - <div className='check' data={data}></div> + {el.myToDo ? ( + <Check data={data} /> + ) : ( + <img src={lock} alt='lock' className='lock' /> + )} <div className='title' style={{ color: data.color }}> {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> <div className='detail'> - <div className='nameDate'> + <div + className='nameDate' + style={el.myToDo ? null : { cursor: 'default' }}> <div className='todoName'>{data.toDo}</div> - <div className='memo'> - {data.memo === '' ? '메모가 없습니다.' : `${data.memo}`} - </div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} <p> <img src={warn} alt='warn' /> {data.fstartDate} - {data.fendDate} @@ -344,25 +143,37 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { } }; - // 진행중 만료 컴포넌트 + // 진행중 컴포넌트 const ProgressTodo = () => { if (progress?.length === 0) { - return <h2>진행중인 todo 없음</h2>; + return; } else { return progress.map(el => ( - <StExpirationTodo key={el.userId}> + <StProgressTodo key={el.userId}> {el.progressTodo.map(data => ( <div className='todo' key={data.toDoId}> - <div className='check' data={data}></div> + {el.myToDo ? ( + <Check data={data} /> + ) : ( + <img src={lock} alt='lock' className='lock' /> + )} + <div className='title' style={{ color: data.color }}> {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> <div className='detail'> - <div className='nameDate'> - <div className='todoName'>{data.toDo}</div> - <div className='memo'> - {data.memo === '' ? '메모가 없습니다.' : `${data.memo}`} + <div + className='nameDate' + style={el.myToDo ? null : { cursor: 'default' }}> + <div + className='todoName' + style={data.memo === '' ? { marginBottom: '5px' } : null}> + {data.toDo} </div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + <p> {data.fstartDate} - {data.fendDate} </p> @@ -371,7 +182,7 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { <Priority data={data} /> </div> ))} - </StExpirationTodo> + </StProgressTodo> )); } }; @@ -379,23 +190,28 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { //완료 컴포넌트 const CompletionTodo = () => { if (completion?.length === 0) { - return <h2>진행중인 todo 없음</h2>; + return; } else { return completion.map(el => ( <StCompletionTodo key={el.userId}> {el.completionTodo.map(data => ( <div className='todo' key={data.toDoId}> - <Check data={data} /> - {/* <div className='check' data={data}></div> */} + {el.myToDo ? ( + <Check data={data} /> + ) : ( + <img src={lock} alt='lock' className='lock' /> + )} <div className='title' style={{ color: data.color }}> {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> <div className='detail'> - <div className='nameDate'> + <div + className='nameDate' + style={el.myToDo ? null : { cursor: 'default' }}> <div className='todoName'>{data.toDo}</div> - <div className='memo'> - {data.memo === '' ? '메모가 없습니다.' : `${data.memo}`} - </div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} <p> {data.fstartDate} - {data.fendDate} </p> @@ -430,23 +246,26 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { }); const Check = ({ data }) => { - // console.log(data) + // console.log(data); const onClickCheck = () => { const id = data.toDoId; patchCheckmutate({ id }); - console.log('체크 눌림'); + // console.log('체크 눌림'); // toast('할 일을 완료했습니다.'); }; - // return <div className='completion' onClick={onClickCheck} />; - return ( - <img - className='completion' - src={checkFull} - alt='checked' - onClick={onClickCheck} - /> - ); + if (data.completion) { + return ( + <img + className='completion' + src={checkFull} + alt='checked' + onClick={onClickCheck} + /> + ); + } else { + return <div className='notCompletion' onClick={onClickCheck}></div>; + } }; const Priority = ({ data }) => { @@ -466,14 +285,21 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { if ( info.targetDate !== null && info.KeyResultIds !== null && - info.teamMembers !== null + info.teamMembers !== null && + info.KeyResultIds.length !== 0 && + isCompletion.length !== 0 && + isCompletion.includes('done') === true && + isCompletion.includes('notDone') === true ) { - // console.log('effect 변경!'); + // console.log('통신한다?'); expirationTodo({ info }); progressTodo({ info }); completionTodo({ info }); + // console.log('ui 변경했다!'); } - }, [info]); + }, [info, isCompletion]); + + // console.log(isCompletion === []); // useEffect(() => { // progressTodo({ info }); @@ -490,12 +316,28 @@ const DetailTodoItem = ({ el, todayFormat, tomorrow }) => { </div> </TodoDetailHeader> </DDay> - <h2>--진행중--</h2> - <ProgressTodo /> - <h2>--완료--</h2> - <CompletionTodo /> - <h2>--기간만료--</h2> - <ExpirationTodo /> + + {isCompletion.length === 1 && isCompletion.includes('done') ? ( + <> + {/* <h2>--완료--</h2> */} + <CompletionTodo /> + </> + ) : isCompletion.length === 1 && isCompletion.includes('notDone') ? ( + <> + {/* <h2>--기간만료--</h2> */} + <ExpirationTodo /> + </> + ) : expiration.length === 0 && + progress.length === 0 && + completion.length === 0 ? ( + <h2 className='noAny'>등록된 To-Do가 없습니다.</h2> + ) : ( + <> + <ProgressTodo /> + <CompletionTodo /> + <ExpirationTodo /> + </> + )} {/* <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} diff --git a/src/components/todo/DoneFilter.jsx b/src/components/todo/DoneFilter.jsx index 4f5e274..3e5b879 100644 --- a/src/components/todo/DoneFilter.jsx +++ b/src/components/todo/DoneFilter.jsx @@ -1,51 +1,122 @@ import filter from '../../assets/filter1.png'; +import { isDone } from '../../store/store'; import { StDoneFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; -import React, { useRef } from 'react'; +import React, { useRef, useState } from 'react'; import { AiFillCloseCircle } from 'react-icons/ai'; import { GrClose } from 'react-icons/gr'; +import { useRecoilState } from 'recoil'; const DoneFilter = () => { const DoneDropRef = useRef(null); + const [isCompletion, setIsCompletion] = useRecoilState(isDone); + + // console.log('isCompletion :', isCompletion); + const [DoneDropOn, setDoneDropOn] = useDropDown(DoneDropRef, false); const DoneDroponHandler = () => { + // console.log(DoneDropOn); setDoneDropOn(!DoneDropOn); }; + const onCheckedElement = (checked, item) => { + if (checked) { + setIsCompletion([...isCompletion, item]); + } else if (!checked) { + setIsCompletion(isCompletion.filter(el => el !== item)); + } + }; + + const thisDelete = item => { + console.log(item); + // setCheckedList(checkedList.filter(el => el !== item)); + setIsCompletion(isCompletion.filter(el => el !== item)); + }; + + const removeAll = () => { + // setCheckedList([]); + setIsCompletion([]); + }; + + const Title = () => { + if (isCompletion.length === 0) { + return <span onClick={DoneDroponHandler}>완료 : 선택사항 없음</span>; + } else if (isCompletion.includes('done') && isCompletion.length === 1) { + return <span onClick={DoneDroponHandler}>완료 : 완료</span>; + } else if (isCompletion.includes('notDone') && isCompletion.length === 1) { + return <span onClick={DoneDroponHandler}>완료 : 미완료</span>; + } else { + return <span onClick={DoneDroponHandler}>완료 : 전체</span>; + } + }; + return ( <StDoneFilter ref={DoneDropRef}> <div className='filterContainer' onClick={DoneDroponHandler}> <img src={filter} alt='' /> - <div className='result'> - <span>완료 : 전체</span> - </div> + <span> + 완료 :  + {isCompletion.length === 0 + ? '선택안함' + : isCompletion.includes('done') && isCompletion.length === 1 + ? '완료' + : isCompletion.includes('notDone') && isCompletion.length === 1 + ? '미완료' + : '전체'} + </span> + {/* <Title DoneDropRef={DoneDropRef} /> */} </div> {DoneDropOn && ( <div className='doneDrop'> <div className='inputBox'> <div className='hashFlex'> - {/* <span>완료</span> */} - - <div className='hash'> - <span>완료</span> - <GrClose /> - </div> + {isCompletion?.map((data, index) => ( + <div className='hash' key={index}> + <span>{data === 'done' ? '완료' : '미완료'}</span> + <GrClose onClick={() => thisDelete(data)} /> + </div> + ))} </div> {/* <div className='closeBtn'></div> */} - <AiFillCloseCircle className='closeBtn' /> + <AiFillCloseCircle className='closeBtn' onClick={removeAll} /> </div> <ul> <li> - <input type='checkbox' /> + <input + type='checkbox' + onChange={e => + onCheckedElement(e.target.checked, e.target.value) + } + value='done' + checked={isCompletion.includes('done') ? true : false} + /> <span className='done'>완료</span> </li> <li> - <input type='checkbox' /> + <input + type='checkbox' + onChange={e => + onCheckedElement(e.target.checked, e.target.value) + } + value='notDone' + checked={isCompletion.includes('notDone') ? true : false} + /> <span className='done'>미완료</span> </li> + {/* <li> + <input + type='checkbox' + onChange={e => + onCheckedElement(e.target.checked, e.target.value) + } + value='done' + checked={isCompletion.status === 'all' ? true : false} + /> + <span className='done'>전체</span> + </li> */} </ul> </div> )} diff --git a/src/components/todo/Filter.jsx b/src/components/todo/Filter.jsx index bdd975d..11098df 100644 --- a/src/components/todo/Filter.jsx +++ b/src/components/todo/Filter.jsx @@ -12,18 +12,6 @@ import React, { useRef, useState } from 'react'; import { useRecoilState } from 'recoil'; const Filter = () => { - // const [krState, setKrState] = useRecoilState(krDataAtom); - // // console.log(krState); - // const { data: getOkrData } = useQuery(['krData'], GetKR, { - // retry: 3, - // staleTime: 60 * 1000, - // onSuccess: response => { - // setKrState(response); - // }, - // }); - // const doneDrop = useRef(null); - // const sortDrop = useRef(null); - return ( <StFilterContainer> <KrFilter /> diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx index e2e3821..29a715b 100644 --- a/src/components/todo/KrFilter.jsx +++ b/src/components/todo/KrFilter.jsx @@ -13,18 +13,18 @@ import { useRecoilState } from 'recoil'; const KrFilter = () => { const krDropRef = useRef(null); //드롭다운이 보여지는 상태관리 - // const [krDropOn, setKrDropon] = useDropDown(krDropRef, false); + const [krDropOn, setKrDropon] = useDropDown(krDropRef, false); + // const [krDropOn, setKrDropon] = useState(false); const [info, setInfo] = useRecoilState(todoDateInfo); - console.log(info); - const [krDropOn, setKrDropon] = useState(false); + // console.log(info); const [checkedList, setCheckedList] = useState([]); const [checkInfo, setCheckInfo] = useState([]); const [forData, setForData] = useState([]); - // console.log('***** forData :', forData); + console.log('***** forData :', forData); - // console.log('checkedList :', checkedList); + console.log('checkedList :', checkedList); // console.log('checkInfo :', checkInfo); const { data: getKrData } = useQuery(['KR'], GetKR, { @@ -49,17 +49,17 @@ const KrFilter = () => { setForData(forData?.filter(el => el !== item.keyResultId)); const filter = info.KeyResultIds.filter(el => el !== item.keyResultId); // console.log(typeof filter); - // setInfo({ - // ...info, - // KeyResultIds: filter, - // }); + setInfo({ + ...info, + KeyResultIds: filter, + }); }; const removeAll = () => { setCheckedList([]); setForData([]); - // setInfo({...info, KeyResultIds([])}) + setInfo({ ...info, KeyResultIds: [] }); }; // filterContainer를 누르면 Drop이 보이는 함수 @@ -72,7 +72,7 @@ const KrFilter = () => { setCheckedList([...checkedList, JSON.parse(item)]); setForData([...forData, JSON.parse(item).keyResultId]); - console.log('filter :', JSON.parse(item).keyResultId); + // console.log('filter :', JSON.parse(item).keyResultId); // setInfo({ ...info, KeyResultIds: JSON.parse(item).keyResultId }); setInfo({ @@ -100,14 +100,32 @@ const KrFilter = () => { <StKrFilter ref={krDropRef}> <div className='filterContainer' onClick={krDroponHandler}> <img src={filter} alt='' /> + <div className='result'> - <span>KR : 전체</span> + <span className='resultSide'> + KR :   + {checkedList.length === 0 ? '선택안함' : null} + {checkedList.map(el => { + if (el.keyResultId === 0) { + return ( + <span key={el.keyResultId} style={{ color: el.color }}> + None + </span> + ); + } + return ( + <span key={el.keyResultId} style={{ color: el.color }}> + KR{el.krNumber},  + </span> + ); + })} + </span> </div> </div> {krDropOn && ( <div className='krDrop'> - <div onClick={krDroponHandler}>X</div> + {/* <div onClick={krDroponHandler}>X</div> */} <div className='inputBox'> <div className='hashFlex'> {checkedList?.map((data, index) => ( @@ -118,13 +136,16 @@ const KrFilter = () => { style={{ backgroundColor: `${data.color}`, border: `2px solid ${data.color}`, - }}> + }} + // onClick={() => thisDelete(data)} + > {/* <span>KR{data.krNumber}</span> */} {data.keyResultId === 0 ? ( <span>None</span> ) : ( <span>KR{data.krNumber}</span> )} + {/* <GrClose onClick={() => thisDelete(data)} /> */} <GrClose onClick={() => thisDelete(data)} /> </div> ))} diff --git a/src/components/todo/SortFilter.jsx b/src/components/todo/SortFilter.jsx index 7724f81..49813bf 100644 --- a/src/components/todo/SortFilter.jsx +++ b/src/components/todo/SortFilter.jsx @@ -1,7 +1,10 @@ import sort from '../../assets/sort.png'; +import check from '../../assets/sortCheck.png'; +import { todoDateInfo } from '../../store/store'; import { StSortFilter } from '../../styles/tododetail.styled'; import { useDropDown } from '../global/globaldropdown/dropdown'; -import React, { useRef, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; +import { useRecoilState } from 'recoil'; const SortFilter = () => { const sortDropRef = useRef(null); @@ -15,6 +18,20 @@ const SortFilter = () => { const [showPriority, setShowPriority] = useState(false); const [showEndDate, setShowEndDate] = useState(false); const [showCreateDate, setShowCreateDate] = useState(false); + + const [info, setInfo] = useRecoilState(todoDateInfo); + // console.log(info); + + const clickSortTitle = e => { + // console.log(e.target.id); + setInfo({ ...info, orderby: e.currentTarget.id }); + }; + + const clickRole = e => { + // console.log(e.target.id); + setInfo({ ...info, orderbyrole: e.target.id }); + }; + return ( <StSortFilter ref={sortDropRef}> <div className='sortContainer' onClick={sortDropHandler}> @@ -24,39 +41,177 @@ const SortFilter = () => { {sortDropOn && ( <ul className='sortDrop'> - <li - onMouseOver={() => setShowPriority(true)} - onMouseOut={() => setShowPriority(false)}> - <span>우선순위</span> - {showPriority && ( - <div> - <p>높은순</p> - <p>낮은순</p> - </div> - )} - </li> - <li - onMouseOver={() => setShowCreateDate(true)} - onMouseOut={() => setShowCreateDate(false)}> - 등록일자 - {showCreateDate && ( - <div> - <p>높은순</p> - <p>낮은순</p> - </div> - )} - </li> - <li - onMouseOver={() => setShowEndDate(true)} - onMouseOut={() => setShowEndDate(false)}> - 마감기한 - {showEndDate && ( - <div> - <p>높은순</p> - <p>낮은순</p> - </div> - )} - </li> + {/* 중요도순 */} + {info.orderby === 'priority' ? ( + <li + style={{ backgroundColor: '#d9d9d9' }} + onMouseOver={() => setShowPriority(true)} + onMouseOut={() => setShowPriority(false)}> + <p className='sortTitle' id='priority' onClick={clickSortTitle}> + 우선순위 + </p> + {showPriority && ( + <div className='sideDrop'> + {info.orderbyrole === 'desc' ? ( + <> + <p id='desc' onClick={clickRole}> + <img src={check} alt='check' /> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + 낮은순 + </p> + </> + ) : ( + <> + <p id='desc' onClick={clickRole}> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + <img src={check} alt='check' /> + 낮은순 + </p> + </> + )} + </div> + )} + </li> + ) : ( + <li + onMouseOver={() => setShowPriority(true)} + onMouseOut={() => setShowPriority(false)}> + <p className='sortTitle' onClick={clickSortTitle} id='priority'> + 우선순위 + </p> + {showPriority && ( + <> + <div className='sideDrop'> + <p id='desc' onClick={clickRole}> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + 낮은순 + </p> + </div> + </> + )} + </li> + )} + + {info.orderby === 'createdDate' ? ( + <li + style={{ backgroundColor: '#d9d9d9' }} + onMouseOver={() => setShowCreateDate(true)} + onMouseOut={() => setShowCreateDate(false)}> + <p + className='sortTitle' + id='createdDate' + onClick={clickSortTitle}> + 등록일자 + </p> + {showCreateDate && ( + <div className='sideDrop'> + {info.orderbyrole === 'desc' ? ( + <> + <p id='desc' onClick={clickRole}> + <img src={check} alt='check' /> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + 낮은순 + </p> + </> + ) : ( + <> + <p id='desc' onClick={clickRole}> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + <img src={check} alt='check' /> + 낮은순 + </p> + </> + )} + </div> + )} + </li> + ) : ( + <li + onMouseOver={() => setShowCreateDate(true)} + onMouseOut={() => setShowCreateDate(false)}> + <p + className='sortTitle' + id='createdDate' + onClick={clickSortTitle}> + 등록일자 + </p> + {showCreateDate && ( + <div className='sideDrop'> + <p id='desc' onClick={clickRole}> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + 낮은순 + </p> + </div> + )} + </li> + )} + + {info.orderby === 'endDate' ? ( + <li + style={{ backgroundColor: '#d9d9d9' }} + onMouseOver={() => setShowEndDate(true)} + onMouseOut={() => setShowEndDate(false)}> + <p className='sortTitle' id='endDate' onClick={clickSortTitle}> + {/* <img src={check} alt='check' /> */} + 마감기한 + </p> + {showEndDate && ( + <div className='sideDrop'> + {info.orderbyrole === 'desc' ? ( + <> + <p id='desc' onClick={clickRole}> + <img src={check} alt='check' /> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + 낮은순 + </p> + </> + ) : ( + <> + <p id='desc' onClick={clickRole}> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + <img src={check} alt='check' /> + 낮은순 + </p> + </> + )} + </div> + )} + </li> + ) : ( + <li + onMouseOver={() => setShowEndDate(true)} + onMouseOut={() => setShowEndDate(false)}> + <p className='sortTitle' id='endDate' onClick={clickSortTitle}> + 마감기한 + </p> + {showEndDate && ( + <div className='sideDrop'> + <p id='desc' onClick={clickRole}> + 높은순 + </p> + <p id='asc' onClick={clickRole}> + 낮은순 + </p> + </div> + )} + </li> + )} </ul> )} </StSortFilter> diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index 2277a9e..2968df8 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -1,6 +1,11 @@ import { GetUser } from '../../apis/apiGET'; import badgeB from '../../assets/badgeB.png'; -import { teamMemberAtom, todoDateInfo } from '../../store/store'; +import { + dateArray, + teamArray, + teamMemberAtom, + todoDateInfo, +} from '../../store/store'; import { StTeam } from '../../styles/tododetail.styled'; import { useQuery } from '@tanstack/react-query'; import React from 'react'; @@ -12,6 +17,8 @@ const TeamTodo = () => { // const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); const [info, setInfo] = useRecoilState(todoDateInfo); + const [team, setTeam] = useRecoilState(dateArray); + // console.log('team :', team); const { data: getMember } = useQuery(['MEMBER'], GetUser, { onSuccess: response => { @@ -29,6 +36,10 @@ const TeamTodo = () => { ...info, teamMembers: [...info.teamMembers, Number(e.target.id)], }); + setTeam({ + ...team, + teamMembers: [...team.teamMembers, Number(e.target.id)], + }); } else if ( info.teamMembers.includes(id) === true && info.teamMembers.length > 1 @@ -39,6 +50,10 @@ const TeamTodo = () => { ...info, teamMembers: removeId, }); + setTeam({ + ...team, + teamMembers: removeId, + }); } }; diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index a6a9b1f..7548484 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -1,5 +1,12 @@ +import { PostWeek } from '../../apis/apiPOST'; import plus from '../../assets/plus.png'; -import { DDay, clickDate, todoDateInfo } from '../../store/store'; +import { + DDay, + clickDate, + dateArray, + teamArray, + todoDateInfo, +} from '../../store/store'; import { DateNavi, NaviPlus, @@ -8,14 +15,18 @@ import { } from '../../styles/tododetail.styled'; import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; +import { useMutation } from '@tanstack/react-query'; import React, { useState, useRef, useEffect } from 'react'; import { Link } from 'react-scroll'; -import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; +import { useRecoilState, useRecoilValue } from 'recoil'; const TodoNavi = ({ todayFormat }) => { // const haveDay = getAllTodo?.map(todo => { // return todo.targetDate; - // }); + // }) + // console.log(team); + const [includeData, setIncludeData] = useState([]); + // console.log('includeData :', includeData); const today = new Date(); @@ -26,27 +37,15 @@ const TodoNavi = ({ todayFormat }) => { let day = date.getDay(); let week = []; + // const haveDay = includeData?.map(date => date); + // console.log(haveDay); + for (let i = 0; i < 7; i++) { // 24*60*60*1000 let newDate = new Date(date.valueOf() + 86400000 * (i - day)); let dateValue; - if (i === 0) { - dateValue = '일'; - } else if (i === 1) { - dateValue = '월'; - } else if (i === 2) { - dateValue = '화'; - } else if (i === 3) { - dateValue = '수'; - } else if (i === 4) { - dateValue = '목'; - } else if (i === 5) { - dateValue = '금'; - } else if (i === 6) { - dateValue = '토'; - } - let format = ''; + if (newDate.getMonth() + 1 < 10 && newDate.getDate() < 10) { format = `${newDate.getFullYear()}-0${ newDate.getMonth() + 1 @@ -65,6 +64,24 @@ const TodoNavi = ({ todayFormat }) => { }-${newDate.getDate()}`; } + if (i === 0) { + dateValue = '일'; + } else if (i === 1) { + dateValue = '월'; + } else if (i === 2) { + dateValue = '화'; + } else if (i === 3) { + dateValue = '수'; + } else if (i === 4) { + dateValue = '목'; + } else if (i === 5) { + dateValue = '금'; + } else if (i === 6) { + dateValue = '토'; + } + + // console.log(haveDay?.includes(format)); + week.push({ dateValue, month: `${newDate.getMonth() + 1}`, @@ -84,24 +101,59 @@ const TodoNavi = ({ todayFormat }) => { week, }); + const [forData, setForData] = useRecoilState(dateArray); + // console.log(forData); + + useEffect(() => { + setForData({ + ...forData, + Sunday: state.week[0].format, + Saturday: state.week[6].format, + }); + }, [state]); + + // console.log(test); + // console.log(state.week); + + //include 보내기 + const { mutate: weekDateInfo } = useMutation(PostWeek, { + onSuccess: data => { + setIncludeData(data); + }, + }); + const onPressArrowLeft = () => { let newDate = new Date(state.date.valueOf() - 86400000 * 7); let newWeek = makeWeek(newDate); + // console.log('newWeek :', newWeek); setState({ ...state, date: newDate, week: newWeek, }); + + setForData({ + ...forData, + Sunday: newWeek[0].format, + Saturday: newWeek[6].format, + }); }; const onPressArrowRight = () => { let newDate = new Date(state.date.valueOf() + 86400000 * 7); let newWeek = makeWeek(newDate); + console.log('newWeek :', newWeek); setState({ ...state, date: newDate, week: newWeek, }); + + setForData({ + ...forData, + Sunday: newWeek[0].format, + Saturday: newWeek[6].format, + }); }; // 오늘 날짜 관련 값 추출 @@ -145,9 +197,15 @@ const TodoNavi = ({ todayFormat }) => { useEffect(() => { setDateInfo({ ...dateInfo, targetDate: todayFormat }); + // setForData({ info }); }, []); - // console.log(state.week); + useEffect(() => { + // console.log(forData); + if (forData.Sunday !== '' && forData.Saturday !== '') { + weekDateInfo({ forData }); + } + }, [forData]); const Today = ({ el }) => { // console.log(el.format === dDay); @@ -194,26 +252,41 @@ const TodoNavi = ({ todayFormat }) => { <div onClick={clickDDay} id={el.format} - style={{ border: '2px solid rgb(255,131,54)' }} - // className={el.includes === false ? 'day' : 'include'} - className='day'> + // style={{ border: '2px solid rgb(255,131,54)' }} + style={ + el.dateValue === '일' + ? { + border: '2px solid rgb(255,131,54)', + borderRadius: '8px 0 0 8px', + } + : el.dateValue === '토' + ? { + border: '2px solid rgb(255,131,54)', + borderRadius: '0 8px 8px 0', + } + : { border: '2px solid rgb(255,131,54)' } + } + className={ + includeData?.includes(el.format) === false ? 'day' : 'include' + }> <span className='label'>{el.dateValue}</span> <Today el={el} /> - {/* {el?.includes === false ? null : ( + {includeData?.includes(el.format) === false ? null : ( <div className='includeCh'></div> - )} */} + )} </div> ) : ( <div onClick={clickDDay} id={el.format} - // className={el.includes === false ? 'day' : 'include'} - className='day'> + className={ + includeData?.includes(el.format) === false ? 'day' : 'include' + }> <span className='label'>{el.dateValue}</span> <Today el={el} /> - {/* {el?.includes === false ? null : ( + {includeData?.includes(el.format) === false ? null : ( <div className='includeCh'></div> - )} */} + )} </div> )} </React.Fragment> diff --git a/src/store/store.js b/src/store/store.js index 9c07645..370e034 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -115,6 +115,20 @@ export const todoDateInfo = atom({ }, }); +export const dateArray = atom({ + key: 'dateArray', + default: { + Sunday: '', + Saturday: '', + teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], + }, +}); + +export const isDone = atom({ + key: 'isDone', + default: ['done', 'notDone'], +}); + //[{...},{...}] export const teamMemberAtom = atom({ key: 'teamMemberAtom', diff --git a/src/styles/todo.styled.js b/src/styles/todo.styled.js index c132cb1..3761a39 100644 --- a/src/styles/todo.styled.js +++ b/src/styles/todo.styled.js @@ -38,19 +38,24 @@ export const Header = styled.p` export const TodoContainer = styled.div` margin: 0 auto; max-width: 68.2rem; + min-width: 39rem; width: 100%; max-height: 485px; height: 100%; overflow-y: auto; padding: 0 1.2rem; box-sizing: border-box; + /* background-color: pink; */ `; export const StTodoItem = styled.div` width: 100%; + /* min-width: 330px; */ height: 11.8rem; + /* background-color: pink; */ .todo { - width: 100%; + max-width: 100%; + min-width: 39rem; height: 100%; display: flex; position: relative; @@ -87,10 +92,11 @@ export const StTodoItem = styled.div` cursor: default; } .detail { - height: 100%; + /* height: 100%; */ box-sizing: border-box; padding: 3px 0 5px 0; .nameDate { + /* width: 100%; */ display: flex; flex-direction: column; justify-content: space-between; @@ -100,12 +106,18 @@ export const StTodoItem = styled.div` cursor: pointer; .todoName { font-size: 19px; - margin-bottom: 10px; + margin-bottom: 7px; } .memo { + width: 85%; font-size: 14px; color: #9b9b9b; margin-bottom: 8px; + /* background-color: pink; */ + + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } p { @@ -171,7 +183,12 @@ export const StTodoItem = styled.div` export const StExpirationTodo = styled.div` width: 100%; - margin: 20px 0 8px 0; + margin: 0px 0 8px 0; + .label { + color: #ff8336; + font-size: 1.8rem; + margin: 12px 0; + } .todo { width: 100%; height: 100%; @@ -185,7 +202,16 @@ export const StExpirationTodo = styled.div` :nth-last-child(1) { margin-bottom: 0; } - .check { + .notCompletion { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #e8e8e8; + position: relative; + cursor: pointer; + margin-right: 23px; + } + .completion { width: 30px; height: 30px; border-radius: 50%; @@ -193,12 +219,13 @@ export const StExpirationTodo = styled.div` position: relative; cursor: pointer; margin-right: 23px; - img { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } + } + .lock { + width: 30px; + height: 30px; + position: relative; + cursor: default; + margin-right: 23px; } .title { width: 50px; @@ -223,7 +250,7 @@ export const StExpirationTodo = styled.div` cursor: pointer; .todoName { font-size: 19px; - margin-bottom: 10px; + margin-bottom: 7px; } .memo { font-size: 14px; @@ -256,7 +283,12 @@ export const StExpirationTodo = styled.div` export const StProgressTodo = styled.div` width: 100%; - margin: 20px 0 8px 0; + margin: 0px 0 8px 0; + .label { + color: #ff8336; + font-size: 1.8rem; + margin: 12px 0; + } .todo { width: 100%; height: 100%; @@ -270,20 +302,31 @@ export const StProgressTodo = styled.div` :nth-last-child(1) { margin-bottom: 0; } - .check { + .notCompletion { width: 30px; height: 30px; border-radius: 50%; - background-color: #ccc; + background-color: #e8e8e8; position: relative; cursor: pointer; margin-right: 23px; - img { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } + } + + .completion { + width: 30px; + height: 30px; + border-radius: 50%; + /* background-color: #ccc; */ + position: relative; + cursor: pointer; + margin-right: 23px; + } + .lock { + width: 30px; + height: 30px; + position: relative; + cursor: default; + margin-right: 23px; } .title { width: 50px; @@ -308,7 +351,7 @@ export const StProgressTodo = styled.div` cursor: pointer; .todoName { font-size: 19px; - margin-bottom: 10px; + margin-bottom: 7px; } .memo { font-size: 14px; @@ -340,7 +383,12 @@ export const StProgressTodo = styled.div` `; export const StCompletionTodo = styled.div` width: 100%; - margin: 20px 0 8px 0; + margin: 0 0 8px 0; + .label { + color: #ff8336; + font-size: 1.8rem; + margin: 12px 0; + } .todo { width: 100%; height: 100%; @@ -354,20 +402,29 @@ export const StCompletionTodo = styled.div` :nth-last-child(1) { margin-bottom: 0; } + .notCompletion { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #e8e8e8; + position: relative; + cursor: pointer; + margin-right: 23px; + } .completion { width: 30px; height: 30px; border-radius: 50%; - /* background-color: #ccc; */ position: relative; cursor: pointer; margin-right: 23px; - /* img { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } */ + } + .lock { + width: 30px; + height: 30px; + position: relative; + cursor: default; + margin-right: 23px; } .title { width: 50px; @@ -383,16 +440,16 @@ export const StCompletionTodo = styled.div` box-sizing: border-box; padding: 3px 0 5px 0; .nameDate { - display: flex; + /* display: flex; flex-direction: column; - justify-content: space-between; + justify-content: space-between; */ font-weight: bold; color: #9b9b9b; font-weight: 500; cursor: pointer; .todoName { font-size: 19px; - margin-bottom: 10px; + margin-bottom: 7px; text-decoration: line-through; } .memo { diff --git a/src/styles/tododetail.styled.js b/src/styles/tododetail.styled.js index 0a15285..118c26a 100644 --- a/src/styles/tododetail.styled.js +++ b/src/styles/tododetail.styled.js @@ -144,6 +144,10 @@ export const DetailTodoWrap = styled.div` width: 100%; /* border-bottom: 1px solid #e8e8e8; */ margin-bottom: 10px; + .noAny { + color: #ff8336; + font-size: 1.8rem; + } /* background-color: pink; */ `; @@ -172,6 +176,7 @@ export const TodoDetailHeader = styled.div` box-sizing: content-box; cursor: default; /* background-color: yellow; */ + margin-bottom: 17px; margin-top: 33px; .down { width: 13px; @@ -478,7 +483,7 @@ export const StFilterContainer = styled.div` `; export const StKrFilter = styled.div` - width: 143px; + width: 180px; height: 30px; border: 0.5px solid #000; border-radius: 8px; @@ -487,6 +492,7 @@ export const StKrFilter = styled.div` justify-content: center; position: relative; .filterContainer { + /* width: 100%; */ display: flex; align-items: center; font-size: 15px; @@ -498,6 +504,18 @@ export const StKrFilter = styled.div` height: 15px; margin-right: 6.6px; } + .result { + width: 140px; + font-size: 1.3rem; + .resultSide { + display: inline-block; + /* background-color: pink; */ + width: 95%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } } .krDrop { width: 206px; @@ -596,7 +614,7 @@ export const StKrFilter = styled.div` `; export const StDoneFilter = styled.div` - width: 143px; + /* width: 143px; */ height: 30px; border: 0.5px solid #000; border-radius: 8px; @@ -605,22 +623,30 @@ export const StDoneFilter = styled.div` justify-content: center; position: relative; margin: 0 12px; - /* background-color: pink; */ .filterContainer { display: flex; align-items: center; font-size: 15px; color: #4b4b4b; cursor: pointer; - padding: 0px 10px; + padding: 0px 20px; + /* background-color: pink; */ + img { width: 16px; height: 15px; margin-right: 6.6px; } + span { + font-size: 1.2rem; + /* background-color: skyblue; */ + } + .result { + } } .doneDrop { - width: 206px; + /* width: 195px; */ + width: 155px; /* height: 127px; */ position: absolute; top: 100%; @@ -635,7 +661,8 @@ export const StDoneFilter = styled.div` /* background-color: pink; */ .inputBox { margin-top: 9px; - width: 182px; + /* width: 182px; */ + width: 130px; white-space: normal; /* height: 21px; */ background: #ffffff; @@ -683,12 +710,15 @@ export const StDoneFilter = styled.div` } } ul { + width: 100%; padding: 0; margin-top: 11px; margin-bottom: 0; + margin-left: 35px; /* background-color: skyblue; */ li { - width: 175px; + /* width: 175px; */ + width: 100%; height: 15px; margin-bottom: 12px; display: flex; @@ -755,12 +785,69 @@ export const StSortFilter = styled.div` color: #4b4b4b; border-bottom: 0.3px solid #000; transition: all 0.3s; + position: relative; + cursor: pointer; + :first-child { + border-radius: 8px 8px 0 0; + } :nth-last-child(1) { - border: none; + border-radius: 0 0 8px 8px; + border-bottom: none; } :hover { + text-decoration: underline; background: rgba(217, 217, 217, 0.45); } + .sortTitle { + display: flex; + align-items: center; + justify-content: center; + margin: 0; + width: 100%; + height: 100%; + /* img { + position: absolute; + width: 11px; + height: 8px; + top: 8px; + left: 5px; + } */ + } + .sideDrop { + width: 85px; + height: 50px; + position: absolute; + top: 0; + left: 100%; + border: 0.5px solid #000; + border-radius: 5px; + background-color: #fff; + p { + width: 100%; + height: 25px; + margin: 0; + border-bottom: 0.3px solid #000; + box-sizing: border-box; + font-size: 1.5rem; + position: relative; + transition: all 0.3s; + color: #4b4b4b; + :nth-last-child(1) { + border: none; + } + :hover { + /* background: rgba(217, 217, 217, 0.45); */ + background: rgba(217, 217, 217, 0.25); + } + img { + position: absolute; + width: 11px; + height: 8px; + top: 8px; + left: 5px; + } + } + } } } `; From 8ded8247ecb203e09e0ab7f8a8239b9ad74b9320 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 1 May 2023 15:05:02 +0900 Subject: [PATCH 64/72] =?UTF-8?q?fix=20:=20=EB=AA=A8=EB=8B=AC=20css=20?= =?UTF-8?q?=EB=B0=8F=20todoPage=EC=97=90=EC=84=9C=20=EC=88=98=EC=A0=95(?= =?UTF-8?q?=EC=83=88=EB=A1=9C=EA=B3=A0=EC=B9=A8=EC=9D=B4=EC=8A=88=20?= =?UTF-8?q?=EB=AF=B8=EC=99=84=EB=A3=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/dashboard/TodoItem.jsx | 4 +- .../global/globalModal/TodoModal.jsx | 5 +- .../global/globalModal/TodoPathModal.jsx | 5 +- .../global/globalModal/modal.styled.js | 210 +++++++++++++++ .../global/globaldropdown/OkrDropDown.jsx | 5 +- .../global/globaldropdown/PatchPriority.jsx | 4 +- .../globaldropdown/PriorityDropDown.jsx | 4 +- .../global/globaldropdown/dropDown.styled.js | 17 ++ src/components/todo/DetailTodoItem.jsx | 241 +++++++++++++++--- src/components/todo/KrFilter.jsx | 4 +- src/components/todo/Todo.jsx | 50 +--- src/pages/Mainpage.jsx | 26 +- src/pages/TodoPage.jsx | 22 +- src/store/store.js | 3 +- src/styles/todo.styled.js | 73 +++++- 15 files changed, 552 insertions(+), 121 deletions(-) diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index 87ea498..42bd699 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -140,9 +140,7 @@ const TodoItem = ({ getTodo }) => { ); }}> <div className='todoName'>{el.toDo}</div> - <div className='memo'> - {el.memo === '' ? '메모가 없습니다.' : `${el.memo}`} - </div> + {el.memo === '' ? null : <div className='memo'>{el.memo}</div>} <p> {el.fstartDate} - {el.fendDate} </p> diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 3f6ce4d..98f2dbb 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -13,6 +13,7 @@ import { ModalBackground, ModalBox, OKRBox, + TodoBox, ToggleContainer, } from './modal.styled'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; @@ -234,7 +235,7 @@ const TodoModal = ({ <h2>OKR 추가 - 목표, 기간, 색상</h2> <img src={close} alt='' onClick={onCloseTodoModal} /> </div> - <OKRBox> + <TodoBox> <div className='object itemBox'> <img src={todoOkr} alt='' /> <OkrDropDown setKid={setKid} setOid={setOid} /> @@ -441,7 +442,7 @@ const TodoModal = ({ <PriorityDropDown todoInfo={todoInfo} setTodoInfo={setTodoInfo} /> </div> </div> - </OKRBox> + </TodoBox> <div className='btnBox'> <button onClick={onCloseTodoModal} className='cancel'> diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 6244031..45ccb04 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -15,6 +15,7 @@ import { ModalBackground, ModalBox, OKRBox, + TodoBox, ToggleContainer, } from './modal.styled'; import { useMutation, useQueryClient } from '@tanstack/react-query'; @@ -241,7 +242,7 @@ const TodoPathModal = ({ onCloseModal }) => { <h2>To Do 수정</h2> <img src={close} alt='' onClick={onCloseModal} /> </div> - <OKRBox> + <TodoBox> {/* <div className='object itemBox'> <img src={todoOkr} alt='' /> <OkrDropDown title={title} setKid={setKid} setOid={setOid} /> @@ -434,7 +435,7 @@ const TodoPathModal = ({ onCloseModal }) => { {/* <PriorityDropDown todoInfo={todoInfo} setTodoInfo={setTodoInfo} /> */} </div> </div> - </OKRBox> + </TodoBox> <div className='btnBox'> <button onClick={onCloseModal} className='cancel'> diff --git a/src/components/global/globalModal/modal.styled.js b/src/components/global/globalModal/modal.styled.js index ed7cde2..0772715 100644 --- a/src/components/global/globalModal/modal.styled.js +++ b/src/components/global/globalModal/modal.styled.js @@ -143,6 +143,7 @@ export const OKRBox = styled.div` display: flex; flex-direction: column; justify-content: center; + /* background-color: pink; */ .object { margin-bottom: 2.7rem; @@ -498,3 +499,212 @@ export const ToggleContainer = styled.div` transition: 0.5s; } `; + +export const TodoBox = styled.div` + width: 100%; + /* height: 16.6rem; */ + background-color: #f8f8f8; + border-radius: 7px; + padding: 3rem 0; + display: flex; + flex-direction: column; + justify-content: center; + /* background-color: pink; */ + + .object { + margin-bottom: 2.7rem; + } + & .itemBox { + width: 100%; + height: 4rem; + padding: 0.9rem 1.4rem; + display: flex; + align-items: center; + position: relative; + /* background-color: pink; */ + input { + width: 100%; + height: 4rem; + border: 1.5px solid rgba(232, 232, 232, 1); + border-radius: 7px; + :hover { + border: 1.5px solid var(--main-color); + } + ::placeholder { + color: var(--placeholder-color); + } + :focus { + border: var(--input-hover); + /* filter: var(--input-focus); */ + } + } + img { + margin-right: 1.3rem; + } + } + + .date { + width: 100%; + height: 4rem; + padding: 0.9rem 1.4rem; + display: flex; + align-items: center; + /* background-color: skyblue; */ + img { + margin-right: 1.3rem; + } + .dateBox { + width: 44rem; + display: flex; + justify-content: start; + margin-right: 2.1rem; + position: relative; + + .start-container { + .start-input { + width: 25rem; + height: 4.5rem; + border: none; + outline: none; + position: relative; + z-index: 1; + text-align: center; + background: url(${start}) no-repeat center / 100%; + :focus { + outline: none; + } + :hover { + background: url(${startHover}) no-repeat center / 100%; + } + } + .ep-arrow { + display: none; + } + .rmdp-wrapper { + position: relative; + top: -1rem; + } + .border { + width: 21.8rem; + height: 1px; + border: 1px solid #f5f5f5; + margin: 0 auto; + } + .timeBox { + width: 21.8rem; + margin: 0 auto; + font-size: 1.4rem; + font-weight: 500; + padding: 1.1rem 0; + box-sizing: border-box; + + display: flex; + align-items: center; + justify-content: space-between; + } + } + .end-container { + .end-input { + width: 23rem; + height: 4.5rem; + border: none; + outline: none; + position: absolute; + top: 0px; + right: 0px; + text-align: center; + background: url(${end}) no-repeat center / 100%; + :hover { + background: url(${endHover}) no-repeat center / 100%; + } + } + .ep-arrow { + display: none; + } + .rmdp-wrapper { + position: absolute; + top: 3.5rem; + } + .border { + width: 21.8rem; + height: 1px; + border: 1px solid #f5f5f5; + margin: 0 auto; + } + .timeBox { + width: 21.8rem; + margin: 0 auto; + font-size: 1.4rem; + font-weight: 500; + padding: 1.1rem 0; + box-sizing: border-box; + + display: flex; + align-items: center; + justify-content: space-between; + } + } + .end-container-time { + .end-input { + width: 23rem; + height: 4.5rem; + border: none; + outline: none; + position: absolute; + top: 0px; + right: 0px; + text-align: center; + background: url(${end}) no-repeat center / 100%; + :hover { + background: url(${endHover}) no-repeat center / 100%; + } + } + .ep-arrow { + display: none; + } + .rmdp-wrapper { + position: absolute; + bottom: 3.5rem; + } + .border { + width: 21.8rem; + height: 1px; + border: 1px solid #f5f5f5; + margin: 0 auto; + } + .timeBox { + width: 21.8rem; + margin: 0 auto; + font-size: 1.4rem; + font-weight: 500; + padding: 1.1rem 0; + box-sizing: border-box; + + display: flex; + align-items: center; + justify-content: space-between; + } + } + } + .colorBox { + display: flex; + justify-content: center; + align-items: center; + position: relative; + .color { + width: 3.9rem; + height: 3.7rem; + border-radius: 10px; + background-color: #fff; + margin-right: 1.3rem; + border: 1.5px solid rgb(232, 232, 232); + } + } + .priorityBox { + display: flex; + justify-content: center; + align-items: center; + position: relative; + } + } +`; diff --git a/src/components/global/globaldropdown/OkrDropDown.jsx b/src/components/global/globaldropdown/OkrDropDown.jsx index 76ea63b..975e026 100644 --- a/src/components/global/globaldropdown/OkrDropDown.jsx +++ b/src/components/global/globaldropdown/OkrDropDown.jsx @@ -6,6 +6,7 @@ import { OkrDropBox, OkrDropContainer, OkrItem, + TodoDropIcon, } from './dropDown.styled'; import { useDropDown } from './dropdown'; import { useQuery } from '@tanstack/react-query'; @@ -56,7 +57,7 @@ const OkrDropDown = ({ setKid, setOid, title }) => { } /> - <DropIcon src={Arrow} /> + <TodoDropIcon className='todoDropicon' /> {isOpen && ( <OkrDropContainer> <h2>KR 핵심 결과 선택</h2> @@ -77,7 +78,7 @@ const OkrDropDown = ({ setKid, setOid, title }) => { }}> <span style={{ color: data.color }}> KR{index + 1} - {/* {'\u00A0'} */} + {'\u00A0'} </span> {el.keyResult} </div> diff --git a/src/components/global/globaldropdown/PatchPriority.jsx b/src/components/global/globaldropdown/PatchPriority.jsx index d694fdd..aa5a2b5 100644 --- a/src/components/global/globaldropdown/PatchPriority.jsx +++ b/src/components/global/globaldropdown/PatchPriority.jsx @@ -1,6 +1,6 @@ import { GetTodo } from '../../../apis/apiGET'; import Arrow from '../../../assets/dropdownArrow.png'; -import { PrioritySelect, DropIcon } from './dropDown.styled'; +import { PrioritySelect, DropIcon, TodoDropIcon } from './dropDown.styled'; import { useDropDown, priority } from './dropdown'; import { useQuery } from '@tanstack/react-query'; import { useState, useRef } from 'react'; @@ -56,7 +56,7 @@ const PatchPriority = ({ title, setTitle }) => { readOnly={true} onClick={() => setIsOpen(!isOpen)} /> - <DropIcon src={Arrow} /> + <TodoDropIcon src={Arrow} /> {isOpen && ( <ul> {priority.list.map((el, index) => ( diff --git a/src/components/global/globaldropdown/PriorityDropDown.jsx b/src/components/global/globaldropdown/PriorityDropDown.jsx index b3221a5..ab5d1ef 100644 --- a/src/components/global/globaldropdown/PriorityDropDown.jsx +++ b/src/components/global/globaldropdown/PriorityDropDown.jsx @@ -1,5 +1,5 @@ import Arrow from '../../../assets/dropdownArrow.png'; -import { PrioritySelect, DropIcon } from './dropDown.styled'; +import { PrioritySelect, DropIcon, TodoDropIcon } from './dropDown.styled'; import { useDropDown, priority } from './dropdown'; import { useState, useRef } from 'react'; @@ -50,7 +50,7 @@ const PriorityDropDown = ({ todoInfo, setTodoInfo }) => { onClick={() => setIsOpen(!isOpen)} placeholder='우선순위' /> - <DropIcon src={Arrow} /> + <TodoDropIcon /> {isOpen && ( <ul> {priority.list.map((el, index) => ( diff --git a/src/components/global/globaldropdown/dropDown.styled.js b/src/components/global/globaldropdown/dropDown.styled.js index 7e253f7..7ef1821 100644 --- a/src/components/global/globaldropdown/dropDown.styled.js +++ b/src/components/global/globaldropdown/dropDown.styled.js @@ -87,6 +87,21 @@ export const DropIcon = styled.div` background: url(${Arrow}) no-repeat center / contain; `; +export const TodoDropIcon = styled.div` + width: 14px; + height: 14px; + background: url(${Arrow}) no-repeat center / contain; + position: absolute; + right: 15px; + top: 11px; +`; + +export const TodoDropFillIcon = styled.div` + width: 14px; + height: 14px; + background: url(${fillArrow}) no-repeat center / contain; +`; + export const DropFillIcon = styled.div` width: 14px; height: 14px; @@ -243,6 +258,8 @@ export const OkrDropBox = styled.div` top: 50%; right: 0; } + .todoDropicon { + } `; export const OkrDropContainer = styled.div` diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 55d21bf..ffd4e64 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -6,6 +6,7 @@ import { PostProgressTodo, } from '../../apis/apiPOST'; import badgeS from '../../assets/badgeS.png'; +import others from '../../assets/badgeS.png'; import checkFull from '../../assets/checkFull.png'; import lock from '../../assets/lock.png'; import blue from '../../assets/todoBlue.png'; @@ -51,6 +52,37 @@ import styled from 'styled-components'; const DetailTodoItem = () => { const queryClient = useQueryClient(); + + const [todoModalOn, setTodoModalOn] = useState(false); + const [test, setPatchTodoInfo] = useRecoilState(patchTodoInfo); + console.log(test); + + const onTodoCloseModal = () => { + setTodoModalOn(!todoModalOn); + }; + + const patchTodo = ( + id, + todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority + ) => { + setPatchTodoInfo({ + id, + toDo: todo, + memo, + startDate, + startDateTime, + endDate, + endDateTime, + priority, + }); + setTodoModalOn(!todoModalOn); + }; // 기간 만료 todo 불러오기 const [info, setInfo] = useRecoilState(todoDateInfo); @@ -63,7 +95,7 @@ const DetailTodoItem = () => { const [progress, setProgress] = useState([]); const [completion, setCompletion] = useState([]); // console.log('진행 중 :', progress); - // console.log('완료 :', completion); + console.log('완료 :', completion); // console.log('expiration :', expiration); // }); @@ -80,9 +112,6 @@ const DetailTodoItem = () => { // console.log('response :', data); }, }); - // if (isLoading) { - // return <Loading />; - // } // if (isError) { // return <div>{error.message}</div>; @@ -121,20 +150,53 @@ const DetailTodoItem = () => { <div className='title' style={{ color: data.color }}> {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> - <div className='detail'> - <div - className='nameDate' - style={el.myToDo ? null : { cursor: 'default' }}> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - <p> - <img src={warn} alt='warn' /> - {data.fstartDate} - {data.fendDate} - </p> + {el.myToDo ? ( + <div className='detail'> + <div + className='nameDate' + onClick={() => + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ) + }> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='mine'> + <img src={warn} alt='warn' className='warn' /> + {data.fstartDate} - {data.fendDate} + </p> + </div> </div> - </div> + ) : ( + <div className='detail'> + <div className='nameDate' style={{ cursor: 'default' }}> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='notMine'> + <img src={warn} alt='warn' className='warn' /> + <span> + {data.fstartDate} - {data.fendDate} + </span> + <span className='createUser'>{el.createUser}</span> + <img src={others} alt='others' className='other' /> + </p> + </div> + </div> + )} + <Priority data={data} /> </div> ))} @@ -161,7 +223,57 @@ const DetailTodoItem = () => { <div className='title' style={{ color: data.color }}> {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> - <div className='detail'> + + {el.myToDo ? ( + <div className='detail'> + <div + className='nameDate' + onClick={() => + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ) + }> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='mine'> + {data.fstartDate} - {data.fendDate} + </p> + </div> + </div> + ) : ( + <div className='detail'> + <div className='nameDate' style={{ cursor: 'default' }}> + <div + className='todoName' + style={data.memo === '' ? { marginBottom: '5px' } : null}> + {data.toDo} + </div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='notMine'> + <span> + {data.fstartDate} - {data.fendDate} + </span> + <span className='createUser'>{el.createUser}</span> + <img src={others} alt='others' className='other' /> + </p> + </div> + </div> + )} + + {/* <div className='detail'> <div className='nameDate' style={el.myToDo ? null : { cursor: 'default' }}> @@ -174,11 +286,22 @@ const DetailTodoItem = () => { <div className='memo'>{data.memo}</div> )} - <p> - {data.fstartDate} - {data.fendDate} - </p> + {el.myToDo ? ( + <p className='mine'> + {data.fstartDate} - {data.fendDate} + </p> + ) : ( + <p className='notMine'> + <span> + {data.fstartDate} - {data.fendDate} + </span> + <span className='createUser'>{el.createUser}</span> + <img src={others} alt='others' className='other' /> + </p> + )} </div> - </div> + </div> */} + <Priority data={data} /> </div> ))} @@ -204,19 +327,52 @@ const DetailTodoItem = () => { <div className='title' style={{ color: data.color }}> {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> - <div className='detail'> - <div - className='nameDate' - style={el.myToDo ? null : { cursor: 'default' }}> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - <p> - {data.fstartDate} - {data.fendDate} - </p> + + {el.myToDo ? ( + <div className='detail'> + <div + className='nameDate' + onClick={() => + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ) + }> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='mine'> + {data.fstartDate} - {data.fendDate} + </p> + </div> </div> - </div> + ) : ( + <div className='detail'> + <div className='nameDate' style={{ cursor: 'default' }}> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='notMine'> + <span> + {data.fstartDate} - {data.fendDate} + </span> + <span className='createUser'>{el.createUser}</span> + <img src={others} alt='others' className='other' /> + </p> + </div> + </div> + )} + <Priority data={data} /> </div> ))} @@ -281,6 +437,8 @@ const DetailTodoItem = () => { }; useEffect(() => { + // console.log(info); + // console.log(isCompletion); // console.log('effect 들어왔어'); if ( info.targetDate !== null && @@ -291,10 +449,11 @@ const DetailTodoItem = () => { isCompletion.includes('done') === true && isCompletion.includes('notDone') === true ) { - // console.log('통신한다?'); + console.log('통신한다?'); expirationTodo({ info }); progressTodo({ info }); completionTodo({ info }); + // window.location.reload(); // console.log('ui 변경했다!'); } }, [info, isCompletion]); @@ -302,10 +461,10 @@ const DetailTodoItem = () => { // console.log(isCompletion === []); // useEffect(() => { - // progressTodo({ info }); - // completionTodo({ info }); - // }, [patchCheckmutate]); - + // }, []); + if (isLoading) { + return <Loading />; + } return ( <> <DDay> @@ -339,9 +498,9 @@ const DetailTodoItem = () => { </> )} - {/* <Potal> + <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} - </Potal> */} + </Potal> </> ); }; diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx index 29a715b..5830498 100644 --- a/src/components/todo/KrFilter.jsx +++ b/src/components/todo/KrFilter.jsx @@ -22,9 +22,9 @@ const KrFilter = () => { const [checkInfo, setCheckInfo] = useState([]); const [forData, setForData] = useState([]); - console.log('***** forData :', forData); + // console.log('***** forData :', forData); - console.log('checkedList :', checkedList); + // console.log('checkedList :', checkedList); // console.log('checkInfo :', checkInfo); const { data: getKrData } = useQuery(['KR'], GetKR, { diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index b191ff9..39dfacb 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -15,43 +15,14 @@ import PastTodo from './PastTodo'; import TeamTodo from './TeamTodo'; import TodoNavi from './TodoNavi'; import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { jwt_decode } from 'jsonwebtoken/decode'; import { useEffect, useRef, useState } from 'react'; -import { useRecoilState, useRecoilValue } from 'recoil'; +import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; import styled from 'styled-components'; export default function Todo() { //todo 전부 가져오기 - // console.log(test); - - // const [todoList, setTodoList] = useRecoilState(allTodoListState); - // const alltodo = useRecoilValue(AllTodoSelector); - - // console.log('atom :', todoList); - // console.log('selector :', alltodo); - - // const { data, isLoading, isError, error } = useQuery( - // ['alltodoTest'], - // GetAllTodo, - // { - // // suspense: true, - // onSuccess: data => { - // setTodoList(data); - // }, - // onError: error => { - // console.log(error); - // }, - // } - // ); - - // if (isLoading) { - // return <Loading />; - // } - - // if (isError) { - // return <div>{error.message}</div>; - // } - const now = new Date(); let today = ''; let tomorrow; @@ -77,22 +48,6 @@ export default function Todo() { return ( <StSticky> - {/* {alltodo?.length === 0 ? ( - <h2 className='notHave'>설정된 To Do가 없습니다.</h2> - ) : ( - <> - <TodoDashboard> - <TodoNavi todayFormat={today} /> - <TodoNavi todayFormat={today} getAllTodo={alltodo} /> - - <DetailTodoWrap> - <DetailTodoItem /> - </DetailTodoWrap> - </TodoDashboard> - <TeamTodo /> - <Toast /> - </> - )} */} <TodoDashboard> <TodoNavi todayFormat={today} /> @@ -101,6 +56,7 @@ export default function Todo() { </DetailTodoWrap> </TodoDashboard> <TeamTodo /> + <Toast /> </StSticky> ); } diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 2d772a0..e121915 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -9,6 +9,7 @@ import { getOKRData, krDataAtom, teamMemberAtom, + todoDateInfo, userId, userInfo, } from '../store/store'; @@ -33,8 +34,11 @@ export default function Mainpage() { const setUserInfo = useSetRecoilState(userInfo); const setUserId = useSetRecoilState(userId); + const [info, setInfo] = useRecoilState(todoDateInfo); + console.log(info); + const [uid, setUid] = useRecoilState(userId); - // console.log(uid); + console.log(uid); const [accessToken, setAccessToken] = useState( localStorage.getItem('accesstoken') ); @@ -49,10 +53,11 @@ export default function Mainpage() { const { userinfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { enabled: !!uid, onSuccess: data => { - // console.log(data); + console.log(data); setUserInfo(data); sessionStorage.setItem('userId', data.userId); setUserId(data.userId); + setInfo({ ...info, teamMembers: [uid] }); }, }); @@ -64,15 +69,15 @@ export default function Mainpage() { }, }); - // const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); + const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); - // const { data: getMember } = useQuery(['MEMBER'], GetUser, { - // onSuccess: response => { - // // console.log(response); - // setTeamMemberAtom(response); - // }, - // onError: response => {}, - // }); + const { data: getMember } = useQuery(['MEMBER'], GetUser, { + onSuccess: response => { + // console.log(response); + setTeamMemberAtom(response); + }, + onError: response => {}, + }); const [krdata, setKrData] = useRecoilState(krDataAtom); // console.log(krdata); @@ -84,6 +89,7 @@ export default function Mainpage() { filterArray.push(0); sessionStorage.setItem('kr', JSON.stringify(filterArray)); setKrData(response); + setInfo({ ...info, KeyResultIds: filterArray }); }, }); diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx index 6675af1..c99aeaf 100644 --- a/src/pages/TodoPage.jsx +++ b/src/pages/TodoPage.jsx @@ -1,13 +1,33 @@ import { GetKR } from '../apis/apiGET'; import Menu from '../components/dashboard/Menu'; import Todo from '../components/todo/Todo'; -import { clickDate, krDataAtom, myUserIdSelecctor } from '../store/store'; +import { + clickDate, + krDataAtom, + myUserIdSelecctor, + todoDateInfo, +} from '../store/store'; import { StWrap } from '../styles/mainpage.styled'; import { useQuery } from '@tanstack/react-query'; import React, { useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; const TodoPage = () => { + // const [info, setInfo] = useRecoilState(todoDateInfo); + // const [krdata, setKrData] = useRecoilState(krDataAtom); + // // console.log(krdata); + // const { data: getKr } = useQuery(['KR'], GetKR, { + // onSuccess: response => { + // // setKrState(response); + // // console.log('response :', response); + // const filterArray = response.map(el => el.keyResultId); + // filterArray.push(0); + // sessionStorage.setItem('kr', JSON.stringify(filterArray)); + // setKrData(response); + // // setInfo({ ...info, KeyResultIds: filterArray }); + // }, + // }); + return ( <StWrap> <aside> diff --git a/src/store/store.js b/src/store/store.js index 370e034..6fd2557 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -108,8 +108,9 @@ export const todoDateInfo = atom({ default: { targetDate: sessionStorage.getItem('targetDate'), teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], - // teamMembers: [134, 137], + // teamMembers: [], KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), + // KeyResultIds: [], orderby: 'endDate', orderbyrole: 'desc', }, diff --git a/src/styles/todo.styled.js b/src/styles/todo.styled.js index 3761a39..e884ee4 100644 --- a/src/styles/todo.styled.js +++ b/src/styles/todo.styled.js @@ -258,7 +258,7 @@ export const StExpirationTodo = styled.div` margin-bottom: 8px; } - p { + /* p { margin: 0; font-size: 14px; display: flex; @@ -268,6 +268,39 @@ export const StExpirationTodo = styled.div` height: 20px; margin-right: 5px; } + } */ + .mine { + margin: 0; + font-size: 14px; + display: flex; + align-items: center; + /* text-decoration: line-through; */ + .warn { + width: 20px; + height: 20px; + margin-right: 5px; + } + } + .notMine { + margin: 0; + font-size: 14px; + display: flex; + align-items: center; + .warn { + width: 20px; + height: 20px; + margin-right: 5px; + } + /* span { + text-decoration: line-through; + } */ + .other { + margin-left: 3px; + } + .createUser { + margin-left: 7px; + text-decoration: none; + } } } } @@ -359,15 +392,27 @@ export const StProgressTodo = styled.div` margin-bottom: 8px; } - p { + .mine { margin: 0; font-size: 14px; display: flex; align-items: center; + /* text-decoration: line-through; */ + } + .notMine { + margin: 0; + font-size: 14px; + display: flex; + align-items: center; + span { + /* text-decoration: line-through; */ + } img { - width: 20px; - height: 20px; - margin-right: 5px; + margin-left: 3px; + } + .createUser { + margin-left: 7px; + text-decoration: none; } } } @@ -458,13 +503,29 @@ export const StCompletionTodo = styled.div` text-decoration: line-through; } - p { + .mine { margin: 0; font-size: 14px; display: flex; align-items: center; text-decoration: line-through; } + .notMine { + margin: 0; + font-size: 14px; + display: flex; + align-items: center; + span { + text-decoration: line-through; + } + img { + margin-left: 3px; + } + .createUser { + margin-left: 7px; + text-decoration: none; + } + } } } .priority { From d88e34d665c619e68c149c084d5d638d2e660086 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Wed, 3 May 2023 14:59:17 +0900 Subject: [PATCH 65/72] =?UTF-8?q?fix=20:=20=EC=88=98=EC=A0=95=EC=8B=9C=20p?= =?UTF-8?q?ost=20api=20=EC=83=88=EB=A1=9C=EA=B3=A0=EC=B9=A8=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/newemoji1.png | Bin 0 -> 2343 bytes src/assets/newemoji2.png | Bin 0 -> 2044 bytes src/assets/newemoji3.png | Bin 0 -> 2500 bytes src/components/dashboard/DashOKR.jsx | 4 +- src/components/dashboard/DashToDo.jsx | 16 +- src/components/dashboard/TodoItem.jsx | 244 +++++++++++------- .../global/globalModal/KrPatchModal.jsx | 4 +- .../global/globalModal/OkrModal.jsx | 6 +- .../global/globalModal/TodoModal.jsx | 9 +- .../global/globalModal/TodoPathModal.jsx | 20 +- .../global/globaldropdown/Emotion.jsx | 6 +- .../global/globaldropdown/OkrDropDown.jsx | 2 +- .../global/globaldropdown/dropDown.styled.js | 4 +- .../global/globaldropdown/dropdown.js | 6 +- src/components/global/header/Header.jsx | 18 +- src/components/member/LoginForm.jsx | 2 +- src/components/member/RegisterForm.jsx | 6 +- src/components/todo/DetailTodoItem.jsx | 142 ++++++++-- src/components/todo/KrFilter.jsx | 6 +- src/components/todo/Todo.jsx | 2 + src/components/todo/TodoNavi.jsx | 12 +- src/pages/Mainpage.jsx | 43 +-- src/store/store.js | 55 +++- src/styles/OKR.styled.js | 3 +- src/styles/todo.styled.js | 34 ++- src/styles/tododetail.styled.js | 13 +- 26 files changed, 456 insertions(+), 201 deletions(-) create mode 100644 src/assets/newemoji1.png create mode 100644 src/assets/newemoji2.png create mode 100644 src/assets/newemoji3.png diff --git a/src/assets/newemoji1.png b/src/assets/newemoji1.png new file mode 100644 index 0000000000000000000000000000000000000000..4775967055d596ab577b85ddf251d9e801b766f8 GIT binary patch literal 2343 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 N002ovPDHLkV1nyaZYlr( literal 0 HcmV?d00001 diff --git a/src/assets/newemoji2.png b/src/assets/newemoji2.png new file mode 100644 index 0000000000000000000000000000000000000000..21ad708db60059e8bb56e9269fe1acd0f2fe6450 GIT binary patch literal 2044 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 afBg&DPyybHApL^?0000<MNUMnLSTZfM(WrA literal 0 HcmV?d00001 diff --git a/src/assets/newemoji3.png b/src/assets/newemoji3.png new file mode 100644 index 0000000000000000000000000000000000000000..e0710fb08b8ccf690c5602ce99637a41e72c6c27 GIT binary patch literal 2500 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 O0000<MNUMnLSTZ+^09va literal 0 HcmV?d00001 diff --git a/src/components/dashboard/DashOKR.jsx b/src/components/dashboard/DashOKR.jsx index 11e2b89..9256d53 100644 --- a/src/components/dashboard/DashOKR.jsx +++ b/src/components/dashboard/DashOKR.jsx @@ -1,5 +1,5 @@ import plus from '../../assets/plus.png'; -import { getOKRData, userInfo } from '../../store/store.js'; +import { getOKRData, userDetail } from '../../store/store.js'; import { Container, Header, @@ -20,7 +20,7 @@ export default function DashOKR() { const [okrModalOn, setOkrModalOn] = useState(false); const [alertModalOn, setAlertModalOn] = useState(false); - const info = useRecoilValue(userInfo); + const info = useRecoilValue(userDetail); const okrData = useRecoilValue(getOKRData); /**모달 닫는 함수 */ diff --git a/src/components/dashboard/DashToDo.jsx b/src/components/dashboard/DashToDo.jsx index 28b5cfe..34137b4 100644 --- a/src/components/dashboard/DashToDo.jsx +++ b/src/components/dashboard/DashToDo.jsx @@ -35,7 +35,7 @@ export default function DashTodo() { }; const [todoList, setTodoList] = useRecoilState(todoListState); - const todoSelector = useRecoilValue(todoListSelector); + // const todoSelector = useRecoilValue(todoListSelector); // console.log('todoSelector :', todoSelector); // 임시 const { @@ -51,13 +51,13 @@ export default function DashTodo() { onError: response => {}, }); - if (isLoading) { - return <Loading />; - } + // if (isLoading) { + // return <Loading />; + // } - if (isError) { - return <div>{error.message}</div>; - } + // if (isError) { + // return <div>{error.message}</div>; + // } return ( <Container> <HeaderBox> @@ -72,7 +72,7 @@ export default function DashTodo() { <TodoContainer> {getTodo?.length !== 0 ? ( <StTodoItem> - <TodoItem getTodo={getTodo} /> + <TodoItem /> </StTodoItem> ) : ( <NotHaveEl> diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index 42bd699..e47bf7f 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -1,41 +1,60 @@ -import { GetCompletionTodo } from '../../apis/apiGET'; +import { GetCompletionTodo, GetTodo } from '../../apis/apiGET'; import { PatchCheck } from '../../apis/apiPATCH'; +import { PostCompletionTodo, PostProgressTodo } from '../../apis/apiPOST'; +import checkFull from '../../assets/checkFull.png'; import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; -import { patchTodoInfo } from '../../store/store'; +import { change, myChange, myTodo, patchTodoInfo } from '../../store/store'; import Toast from '../global/Toast'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { toast } from 'react-toastify'; -import { useSetRecoilState } from 'recoil'; +import { useRecoilState, useSetRecoilState } from 'recoil'; -const TodoItem = ({ getTodo }) => { +const TodoItem = () => { const queryClient = useQueryClient(); - // filter 함수 사용 - const now = new Date(); - const filterArray = getTodo?.filter(el => { - if (el.completion === false) { - // return el; - if (new Date(now.setDate(now.getDate())) < new Date(el.startDate)) { - return null; - } else if ( - new Date(el.startDate).getMonth() === now.getMonth() && - new Date(el.startDate).getDate() === now.getDate() - ) { - return el; - } else { - return el; - } - } else { - return null; - } + const [count, setCount] = useRecoilState(change); + // console.log(count); + + const [info, setInfo] = useRecoilState(myTodo); + // console.log('myTodoInfo :', info); + const [progress, setProgress] = useState([]); + const [completion, setCompletion] = useState([]); + + // console.log('진행 중 :', progress); + // console.log('완료 :', completion); + + const { mutate: progressTodo } = useMutation(PostProgressTodo, { + onSuccess: data => { + // console.log(data); + setProgress(data); + }, + }); + + const { mutate: completionTodo } = useMutation(PostCompletionTodo, { + onSuccess: data => { + // console.log(data); + setCompletion(data); + }, }); - // console.log(filterArray); + + useEffect(() => { + if ( + info.targetDate !== null && + info.KeyResultIds !== null && + info.teamMembers !== null && + info.KeyResultIds.length !== 0 + ) { + console.log('통신한다'); + progressTodo({ info }); + completionTodo({ info }); + } + }, [count, info]); // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { @@ -48,26 +67,43 @@ const TodoItem = ({ getTodo }) => { } queryClient.invalidateQueries(['TODO']); queryClient.invalidateQueries(['completionTodo']); + setCount(count - 1); }, onError: response => {}, }); - const Check = ({ el }) => { + const Check = ({ data }) => { const onClickCheck = () => { - const id = el.toDoId; + // console.log('누름'); + const id = data.toDoId; patchCheckmutate({ id }); - toast('할 일을 완료했습니다.'); + // progressTodo({ info }); + // completionTodo({ info }); + // toast('할 일을 완료했습니다.'); }; - return <div className='check' onClick={onClickCheck} />; + if (data.completion) { + return ( + <img + className='completion' + src={checkFull} + alt='checked' + onClick={onClickCheck} + /> + ); + } else { + return <div className='notCompletion' onClick={onClickCheck}></div>; + } + + // return <div className='check' onClick={onClickCheck} />; }; - const Priority = ({ el }) => { - if (el.priority === 1) { + const Priority = ({ data }) => { + if (data.priority === 1) { return <img className='priority' src={red} alt='' />; - } else if (el.priority === 2) { + } else if (data.priority === 2) { return <img className='priority' src={yellow} alt='' />; - } else if (el.priority === 3) { + } else if (data.priority === 3) { return <img className='priority' src={blue} alt='' />; } else { return; @@ -106,74 +142,96 @@ const TodoItem = ({ getTodo }) => { setTodoModalOn(!todoModalOn); }; - const { data: getCompletionTodo } = useQuery( - ['completionTodo'], - GetCompletionTodo, - { - onSuccess: response => { - // console.log('completionTodo', response); - }, - onError: response => {}, - } - ); return ( <> - {filterArray?.map(el => ( - <div className='todo' key={el.toDoId}> - <Check el={el} /> - <div className='title' style={{ color: el.color }}> - {el.keyResultId === null ? 'None' : `KR${el.krNumber}`} - </div> - <div className='detail'> - <div - className='nameDate' - onClick={() => { - patchTodo( - el.toDoId, - el.toDo, - el.memo, - el.startDate, - el.startDateTime, - el.endDate, - el.endDateTime, - el.priority - ); - }}> - <div className='todoName'>{el.toDo}</div> - {el.memo === '' ? null : <div className='memo'>{el.memo}</div>} - <p> - {el.fstartDate} - {el.fendDate} - </p> + {progress?.map(el => ( + <React.Fragment key={el.userId}> + {el.progressTodo.map(data => ( + <div className='todo' key={data.toDoId}> + <Check data={data} /> + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} + </div> + <div className='detail'> + <div + className='nameDate' + onClick={() => { + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ); + }}> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + <p> + {data.fstartDate} - {data.fendDate} + </p> + </div> + </div> + <Priority data={data} /> </div> - {/* <div className='priorityBox'> - </div> */} - </div> - <Priority el={el} /> - </div> + ))} + </React.Fragment> ))} - {/* {getCompletionTodo?.map(el => ( - <div className='todo' key={el.toDoId}> - <div className='title' style={{ color: el.color }}> - {el.keyResultId === null ? 'none' : `KR${el.krNumber}`} - </div> - <div className='detail'> - <div className='nameDateComplitc'> + + {completion?.map(el => ( + <React.Fragment key={el.userId}> + {el.completionTodo.map(data => ( + <div className='todo' key={data.toDoId}> + <Check data={data} /> + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} + </div> <div - title={el.memo} - style={{ textDecoration: 'line-through', color: '#a9a9a9' }}> - {el.toDo} + className='detail' + style={{ + textDecoration: 'line-through', + color: 'rgb(155, 155, 155)', + }}> + <div + className='nameDate' + onClick={() => { + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ); + }}> + <div + className='todoName' + style={{ color: 'rgb(155, 155, 155)' }}> + {data.toDo} + </div> + {data.memo === '' ? null : ( + <div + className='memo' + style={{ color: 'rgb(155, 155, 155)' }}> + {data.memo} + </div> + )} + <p style={{ color: 'rgb(155, 155, 155)' }}> + {data.fstartDate} - {data.fendDate} + </p> + </div> </div> - <p style={{ textDecoration: 'line-through', color: '#a9a9a9' }}> - {el.fstartDate}~{el.fendDate} - </p> + <Priority data={data} /> </div> - <div className='priorityBox'> - <Priority el={el} /> - <div className='completion'></div> - </div> - </div> - </div> - ))} */} + ))} + </React.Fragment> + ))} <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} </Potal> diff --git a/src/components/global/globalModal/KrPatchModal.jsx b/src/components/global/globalModal/KrPatchModal.jsx index e5eb9fe..19586bd 100644 --- a/src/components/global/globalModal/KrPatchModal.jsx +++ b/src/components/global/globalModal/KrPatchModal.jsx @@ -177,7 +177,7 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { <img src={kr} alt='kr' /> <input type='text' - placeholder='ex. 매달 가입자 수 50명 추가 달성 할 거야.' + placeholder='ex. 고객 후기 5점 만점에 4.5점 만들기' name='first' onMouseOver={onMouseOverHandler} onMouseOut={onMouseOutHandler} @@ -192,7 +192,7 @@ const KrPatchModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { {showTooltip && ( <div className='krTooltip'> <img src={info} alt='info' /> - <p>웹 방문자 수 150,000명 달성</p> + <p>Key Result : Objective를 달성하기 위한 정량적인 측정 지표</p> </div> )} </KRBox> diff --git a/src/components/global/globalModal/OkrModal.jsx b/src/components/global/globalModal/OkrModal.jsx index b20b3c1..7f7fa95 100644 --- a/src/components/global/globalModal/OkrModal.jsx +++ b/src/components/global/globalModal/OkrModal.jsx @@ -182,7 +182,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { onMouseOver={onMouseOverHandler} onMouseOut={onMouseOutHandler} type='text' - placeholder='ex. 독특한 관점으로 세상을 바라고 싶은 사람들의 커뮤니티를 만들거야' + placeholder='ex. 제품의 브랜드 이미지 높이기' className='input' name='objective' onChange={onChangeHandler} @@ -192,7 +192,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { {showTooltip && ( <div className='ObjectTooltip'> <img src={info} alt='info' /> - <p>Objective : 우리는 기간 안에 `Objective`하고 싶습니다.</p> + <p>Objective : 우리가 최종적으로 이루고자 하는 정성적 목표</p> </div> )} @@ -259,7 +259,7 @@ const OkrModal = ({ onCloseModal, modalRef, modalOutSideClick }) => { 확인 </button> </div> - <Toast /> + {/* <Toast /> */} </> </ModalBox> </> diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 98f2dbb..692dff2 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -170,8 +170,9 @@ const TodoModal = ({ }); } queryClient.invalidateQueries(['TODO']); - queryClient.invalidateQueries(['ALLTODO']); - queryClient.invalidateQueries(['PASTTODO']); + + // queryClient.invalidateQueries(['ALLTODO']); + // queryClient.invalidateQueries(['PASTTODO']); toast('TODO가 생성되었습니다.'); }, onError: response => { @@ -244,7 +245,7 @@ const TodoModal = ({ <img src={todo} alt='' /> <input type='text' - placeholder='To Do 내용을 작성하세요' + placeholder='할 일을 작성해 주세요' className='input' name='toDo' maxLength='25' @@ -257,7 +258,7 @@ const TodoModal = ({ <img src={memo} alt='' /> <input type='text' - placeholder='Memo 내용을 작성하세요' + placeholder='메모를 작성해 주세요' className='input' name='memo' onChange={event => { diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 45ccb04..cfa6751 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -6,6 +6,7 @@ import memo from '../../../assets/memo.png'; import todo from '../../../assets/todoTODO.png'; import trash from '../../../assets/trash.png'; import { + change, patchTodoInfo, ToggleEndState, ToggleStartState, @@ -91,7 +92,7 @@ const TodoPathModal = ({ onCloseModal }) => { toDo: todoInfo.toDo, }); - console.log(title); + // console.log(title); const [startWithTime, setStartWithTime] = useState(false); const [endWithTime, setEndWithTime] = useState(false); @@ -156,6 +157,9 @@ const TodoPathModal = ({ onCloseModal }) => { const queryClient = useQueryClient(); + const [count, setCount] = useRecoilState(change); + console.log(count); + const { mutate: patchTodo } = useMutation(PatchTodo, { onSuccess: response => { if (process.env.NODE_ENV !== 'development') { @@ -165,8 +169,14 @@ const TodoPathModal = ({ onCloseModal }) => { }); } queryClient.invalidateQueries(['TODO']); - queryClient.invalidateQueries(['ALLTODO']); + queryClient.setQueryData(['patchTodo'], title); + setCount(count + 1); + // console.log(queryClient.getQueriesData(['patchTodo'])); + // console.log('---------------', queryClient.getQueryData(['TODO'])); + // queryClient.invalidateQueries(['ALLTODO']); queryClient.invalidateQueries(['PASTTODO']); + + // queryClient.invalidateQueries(['progress']); }, onError: response => { if (process.env.NODE_ENV !== 'development') { @@ -227,7 +237,7 @@ const TodoPathModal = ({ onCloseModal }) => { action: 'TODO 삭제 실패', }); } - alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); + // alert('팀장 및 본인이 작성한 OKR만 수정가능합니다.'); }, }); @@ -252,7 +262,7 @@ const TodoPathModal = ({ onCloseModal }) => { <img src={todo} alt='' /> <input type='text' - placeholder='To Do 내용을 작성하세요' + placeholder='할 일을 작성해 주세요' className='input' name='toDo' maxLength='25' @@ -267,7 +277,7 @@ const TodoPathModal = ({ onCloseModal }) => { <img src={memo} alt='' /> <input type='text' - placeholder='Memo 내용을 작성하세요' + placeholder='메모를 작성해 주세요' className='input' name='memo' defaultValue={title.memo} diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx index 3958f2d..7da9af8 100644 --- a/src/components/global/globaldropdown/Emotion.jsx +++ b/src/components/global/globaldropdown/Emotion.jsx @@ -1,7 +1,7 @@ import { PatchEmotion } from '../../../apis/apiPATCH'; -import good from '../../../assets/emoji1.png'; -import bad from '../../../assets/emoji2.png'; -import normal from '../../../assets/emoji3.png'; +import good from '../../../assets/newemoji1.png'; +import normal from '../../../assets/newemoji2.png'; +import bad from '../../../assets/newemoji3.png'; import info from '../../../assets/question.png'; import { EmotionSelect } from './dropDown.styled'; import { emotion } from './dropdown'; diff --git a/src/components/global/globaldropdown/OkrDropDown.jsx b/src/components/global/globaldropdown/OkrDropDown.jsx index 975e026..756fa96 100644 --- a/src/components/global/globaldropdown/OkrDropDown.jsx +++ b/src/components/global/globaldropdown/OkrDropDown.jsx @@ -53,7 +53,7 @@ const OkrDropDown = ({ setKid, setOid, title }) => { placeholder={ title ? '선택하지 않으면 기존과 동일합니다.' - : 'none 핵심결과 선택하지 않고 To Do 작성' + : 'none Key Result 선택하지 않고 To-Do 추가하기' } /> diff --git a/src/components/global/globaldropdown/dropDown.styled.js b/src/components/global/globaldropdown/dropDown.styled.js index 7ef1821..f8bb2e5 100644 --- a/src/components/global/globaldropdown/dropDown.styled.js +++ b/src/components/global/globaldropdown/dropDown.styled.js @@ -377,8 +377,8 @@ export const OkrItem = styled.div` `; export const EmotionSelect = styled.div` - width: 35px; - height: 35px; + width: 31px; + height: 31px; position: relative; margin-left: 19px; cursor: pointer; diff --git a/src/components/global/globaldropdown/dropdown.js b/src/components/global/globaldropdown/dropdown.js index b751b9c..0d41ebb 100644 --- a/src/components/global/globaldropdown/dropdown.js +++ b/src/components/global/globaldropdown/dropdown.js @@ -1,9 +1,9 @@ import blueF from '../../../assets/blue.png'; -import good from '../../../assets/emoji1.png'; -import bad from '../../../assets/emoji2.png'; -import normal from '../../../assets/emoji3.png'; import four from '../../../assets/four.png'; import grayF from '../../../assets/gray.png'; +import good from '../../../assets/newemoji1.png'; +import normal from '../../../assets/newemoji2.png'; +import bad from '../../../assets/newemoji3.png'; import one from '../../../assets/one.png'; import redF from '../../../assets/red.png'; import three from '../../../assets/three.png'; diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index de5c7db..1290edc 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -28,22 +28,16 @@ export default function Header() { setLogoutImg(logoutON); }; - const logout = () => { - if (process.env.NODE_ENV !== 'development') { - ReactGA.event({ - category: '버튼', - action: '로그아웃', - }); + const gomain = () => { + if (localStorage.getItem('accesstoken') === undefined) { + alert('로그인 후 이용해주세요.'); + } else { + navigate('/'); } - navigate('/signin'); }; return ( <Layout> - <LogoImg - onClick={() => { - logout(); - }} - /> + <LogoImg onClick={gomain} /> <div> <Guide onClick={() => { diff --git a/src/components/member/LoginForm.jsx b/src/components/member/LoginForm.jsx index 62f8fab..caffd4a 100644 --- a/src/components/member/LoginForm.jsx +++ b/src/components/member/LoginForm.jsx @@ -71,7 +71,7 @@ const LoginForm = () => { const { mutate: signInMutate } = useMutation(SignIn, { onSuccess: response => { - console.log(response); + // console.log(response); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', diff --git a/src/components/member/RegisterForm.jsx b/src/components/member/RegisterForm.jsx index bbb0dc1..e82fc6a 100644 --- a/src/components/member/RegisterForm.jsx +++ b/src/components/member/RegisterForm.jsx @@ -86,9 +86,9 @@ const RegisterForm = () => { } else if (userInfo.team.length < 2) { errors.team = '팀명은 최소 두글자 이상이에요.'; } - if (!userInfo.teamposition.trim()) { - errors.teamposition = '직급을 선택해주세요.'; - } + // if (!userInfo.teamposition.trim()) { + // errors.teamposition = '직급을 선택해주세요.'; + // } return errors; }; diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index ffd4e64..6a0d4c2 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -1,5 +1,5 @@ import { GetKR, GetUser } from '../../apis/apiGET'; -import { PatchCheck } from '../../apis/apiPATCH'; +import { PatchCheck, PatchTodo } from '../../apis/apiPATCH'; import { PostCompletionTodo, PostExpirationTodo, @@ -14,6 +14,7 @@ import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; import warn from '../../assets/warn.png'; import { + change, clickDate, filterTeamMemberSelector, getOKRData, @@ -50,12 +51,14 @@ import { toast } from 'react-toastify'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; import styled from 'styled-components'; -const DetailTodoItem = () => { +const DetailTodoItem = ({ todayFormat }) => { const queryClient = useQueryClient(); const [todoModalOn, setTodoModalOn] = useState(false); - const [test, setPatchTodoInfo] = useRecoilState(patchTodoInfo); - console.log(test); + const [patchtodoInfo, setPatchTodoInfo] = useRecoilState(patchTodoInfo); + // const [ dateInfo, setDateInfo] = useRecoilState(todoDateInfo) + // console.log('patchtodoInfo :', patchtodoInfo); + // console.log(patchtodoInfo); const onTodoCloseModal = () => { setTodoModalOn(!todoModalOn); @@ -94,11 +97,18 @@ const DetailTodoItem = () => { const [expiration, setExpiration] = useState([]); const [progress, setProgress] = useState([]); const [completion, setCompletion] = useState([]); + // console.log('진행 중 :', progress); - console.log('완료 :', completion); + // console.log('완료 :', completion); // console.log('expiration :', expiration); // }); + // console.log(queryClient); + + // const { test } = useQuery(['progress'], info); + // console.log(test); + + // const queryClient = useQueryClient() // 기한 만료 const { @@ -109,6 +119,13 @@ const DetailTodoItem = () => { } = useMutation(PostExpirationTodo, { onSuccess: data => { setExpiration(data); + + // queryClient.setQueryData(['expiration'], oldData => { + // return { + // ...oldData, + // data: [...oldData.data, data.data], + // }; + // }); // console.log('response :', data); }, }); @@ -120,15 +137,35 @@ const DetailTodoItem = () => { // 진행중 const { mutate: progressTodo } = useMutation(PostProgressTodo, { onSuccess: data => { + // console.log('성공했음요'); + // console.log(data); setProgress(data); - // console.log('response :', data); + queryClient.setQueryData(['progress'], data); + + // if(queryClient.getQueryData(['progress'])){ + + // } }, + // onMutate: async newTodo => { + // await queryClient.cancelQueries(['progress']); + // const previous = queryClient.getQueryData(['progress']); + // console.log('previous :', previous); + // // queryClient.setQueryData(['progress'], old => [...old, newTodo]); + + // // 스냅샷 값을 담은 컨텍스트 객체를 반환 + // return { previous }; + // }, + // onSettled: () => { + // queryClient.invalidateQueries(['progress']); + // }, }); // 완료 const { mutate: completionTodo } = useMutation(PostCompletionTodo, { onSuccess: data => { setCompletion(data); + + // queryClient.setQueryData(['completion'], data); // console.log('response :', data); }, }); @@ -228,7 +265,7 @@ const DetailTodoItem = () => { <div className='detail'> <div className='nameDate' - onClick={() => + onClick={() => { patchTodo( data.toDoId, data.toDo, @@ -238,8 +275,11 @@ const DetailTodoItem = () => { data.endDate, data.endDateTime, data.priority - ) - }> + ); + expirationTodo({ info }); + progressTodo({ info }); + completionTodo({ info }); + }}> <div className='todoName'>{data.toDo}</div> {data.memo === '' ? null : ( <div className='memo'>{data.memo}</div> @@ -401,13 +441,38 @@ const DetailTodoItem = () => { }, }); + // const patchT = () =>{ + // patchMytodo({{}}) + // } + // console.log(patchtodoInfo); + // console.log(queryClient.getQueryData(['progress'])); + const { mutate: patchMytodo } = useMutation(PatchTodo, { + onSuccess: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 수정', + }); + } + console.log('patch성공'); + }, + onError: response => { + if (process.env.NODE_ENV !== 'development') { + ReactGA.event({ + category: '버튼', + action: 'TODO 수정 실패', + }); + } + }, + }); + const Check = ({ data }) => { // console.log(data); const onClickCheck = () => { const id = data.toDoId; patchCheckmutate({ id }); // console.log('체크 눌림'); - // toast('할 일을 완료했습니다.'); + toast('할 일을 완료했습니다.'); }; if (data.completion) { @@ -435,11 +500,12 @@ const DetailTodoItem = () => { return; } }; - + // console.log(queryClient.getQueryState); + // console.log(queryClient.getQueryData(['patchTodo'])); + const count = useRecoilValue(change); + // console.log(count); + // const test = queryClient.getQueryData(['patchTodo']); useEffect(() => { - // console.log(info); - // console.log(isCompletion); - // console.log('effect 들어왔어'); if ( info.targetDate !== null && info.KeyResultIds !== null && @@ -449,28 +515,64 @@ const DetailTodoItem = () => { isCompletion.includes('done') === true && isCompletion.includes('notDone') === true ) { - console.log('통신한다?'); + // console.log('통신한다?'); expirationTodo({ info }); progressTodo({ info }); completionTodo({ info }); // window.location.reload(); // console.log('ui 변경했다!'); } - }, [info, isCompletion]); + }, [info, isCompletion, count]); + + // useEffect(() => { + // console.log('처음 이펙트'); + // expirationTodo({ info }); + // progressTodo({ info }); + // completionTodo({ info }); + // }, []); // console.log(isCompletion === []); // useEffect(() => { // }, []); - if (isLoading) { - return <Loading />; - } + // if (isLoading) { + // return <Loading />; + // } + + // const clickUpdate = ({ data }) => { + // console.log(data); + // patchTodo( + // data.toDoId, + // data.toDo, + // data.memo, + // data.startDate, + // data.startDateTime, + // data.endDate, + // data.endDateTime, + // data.priority + // ); + // expirationTodo({ info }); + // progressTodo({ info }); + // completionTodo({ info }); + // }; + // console.log(info.targetDate == new Date()); + // const day = `${new Date().getFullYear()}-${ + // new Date().getMonth() + 1 + // }`; + console.log(info.targetDate.split('-')); + // console.log(new Date().getFullYear()); return ( <> <DDay> <TodoDetailHeader> <div className='header'> - <div className='title'>{info.targetDate}</div> + <div className='title'> + {info.targetDate === todayFormat + ? 'Today' + : `${info.targetDate.split('-')[1]}월 ${ + info.targetDate.split('-')[2] + }일`} + </div> <Filter /> </div> </TodoDetailHeader> diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx index 5830498..a30ae27 100644 --- a/src/components/todo/KrFilter.jsx +++ b/src/components/todo/KrFilter.jsx @@ -23,13 +23,13 @@ const KrFilter = () => { const [forData, setForData] = useState([]); // console.log('***** forData :', forData); - // console.log('checkedList :', checkedList); // console.log('checkInfo :', checkInfo); const { data: getKrData } = useQuery(['KR'], GetKR, { refetchOnWindowFocus: false, onSuccess: response => { + // console.log('getKr 함'); // setCheckedList(response); const none = [{ keyResultId: 0, color: '#9b9b9b' }]; const addNone = [...response, ...none]; @@ -37,7 +37,7 @@ const KrFilter = () => { setCheckedList(addNone); // console.log(JSON.parse(sessionStorage.getItem('kr'))); - setForData(JSON.parse(sessionStorage.getItem('kr'))); + // setForData(JSON.parse(sessionStorage.getItem('kr'))); setForData(JSON.parse(sessionStorage.getItem('kr'))); }, @@ -166,7 +166,7 @@ const KrFilter = () => { /> {data.keyResultId === 0 ? ( <> - <span className='kr' style={{ color: `${data.color}` }}> + <span className='none' style={{ color: `${data.color}` }}> None </span> <span className='desc'>{data.keyResult}</span> diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 39dfacb..2e88019 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -46,6 +46,8 @@ export default function Todo() { sessionStorage.setItem('targetDate', today); } + console.log(today); + return ( <StSticky> <TodoDashboard> diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index 7548484..a1f1796 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -28,6 +28,9 @@ const TodoNavi = ({ todayFormat }) => { const [includeData, setIncludeData] = useState([]); // console.log('includeData :', includeData); + const [dateInfo, setDateInfo] = useRecoilState(todoDateInfo); + // console.log(dateInfo); + const today = new Date(); let date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); @@ -109,6 +112,7 @@ const TodoNavi = ({ todayFormat }) => { ...forData, Sunday: state.week[0].format, Saturday: state.week[6].format, + teamMembers: dateInfo.teamMembers, }); }, [state]); @@ -118,6 +122,7 @@ const TodoNavi = ({ todayFormat }) => { //include 보내기 const { mutate: weekDateInfo } = useMutation(PostWeek, { onSuccess: data => { + // console.log('넌 언제 동작함?'); setIncludeData(data); }, }); @@ -184,7 +189,7 @@ const TodoNavi = ({ todayFormat }) => { // const todoinfo = useRecoilValue(todoDateInfo); // console.log('atom :', todoinfo); - const [dateInfo, setDateInfo] = useRecoilState(todoDateInfo); + // const setTodoDateInfo = useSetRecoilState(clickDate); const clickDDay = e => { // if (e.currentTarget.className === 'include') { @@ -196,6 +201,7 @@ const TodoNavi = ({ todayFormat }) => { }; useEffect(() => { + // console.log('네비꺼'); setDateInfo({ ...dateInfo, targetDate: todayFormat }); // setForData({ info }); }, []); @@ -205,7 +211,7 @@ const TodoNavi = ({ todayFormat }) => { if (forData.Sunday !== '' && forData.Saturday !== '') { weekDateInfo({ forData }); } - }, [forData]); + }, [forData, dateInfo]); const Today = ({ el }) => { // console.log(el.format === dDay); @@ -239,7 +245,7 @@ const TodoNavi = ({ todayFormat }) => { <div className='right'> <div className='prev' onClick={onPressArrowLeft} /> <div className='next' onClick={onPressArrowRight} /> - <div className='today'>오늘</div> + {/* <div className='today'>오늘</div> */} <NaviPlus onClick={createTodo}> <img src={plus} alt='' /> </NaviPlus> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index e121915..ce378d4 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -10,8 +10,8 @@ import { krDataAtom, teamMemberAtom, todoDateInfo, + userDetail, userId, - userInfo, } from '../store/store'; import { OkrContainer, StWrap } from '../styles/mainpage.styled'; import { useQuery } from '@tanstack/react-query'; @@ -24,39 +24,50 @@ export default function Mainpage() { const navigate = useNavigate(); // localStorage에 accesstoken 여부 확인(리다이렉트) - useEffect(() => { - if (localStorage.accesstoken === undefined) { - navigate('/signin'); - } - }, []); + // useEffect(() => { + // if (localStorage.getItem('accesstoken') === undefined) { + // navigate('/signin'); + // } + // }, []); // accesstoken 디코딩 - const setUserInfo = useSetRecoilState(userInfo); - const setUserId = useSetRecoilState(userId); + const [userInfo, setUserInfo] = useRecoilState(userDetail); + // console.log('userInfo :', userInfo); + // const setUserId = useSetRecoilState(userId); const [info, setInfo] = useRecoilState(todoDateInfo); - console.log(info); + // console.log(info); const [uid, setUid] = useRecoilState(userId); - console.log(uid); + // console.log('uid :', uid); + const [accessToken, setAccessToken] = useState( localStorage.getItem('accesstoken') ); useEffect(() => { - const decodeToken = jwt_decode(accessToken); - const extractedUid = decodeToken.userId; - setUid(() => extractedUid); - }, []); + // console.log(localStorage.accessToken); + // console.log(localStorage.getItem('accesstoken')); + if (localStorage.getItem('accesstoken')) { + // console.log('디코딩한다'); + const decodeToken = jwt_decode(accessToken); + const extractedUid = decodeToken.userId; + setUid(() => extractedUid); + } else { + // console.log('어세스토큰 없다'); + navigate('/signin'); + } + }, [accessToken]); //userInfo const { userinfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { enabled: !!uid, onSuccess: data => { - console.log(data); + // console.log('성공'); + // console.log(data); setUserInfo(data); sessionStorage.setItem('userId', data.userId); - setUserId(data.userId); + setUid(data.userId); setInfo({ ...info, teamMembers: [uid] }); }, }); diff --git a/src/store/store.js b/src/store/store.js index 6fd2557..ffc82ac 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -1,6 +1,6 @@ import { atom, selector } from 'recoil'; -export const userInfo = atom({ +export const userDetail = atom({ key: 'userInfo', default: null, }); @@ -67,6 +67,15 @@ export const krDataAtom = atom({ default: null, }); +export const change = atom({ + key: 'change', + default: 0, +}); +export const myChange = atom({ + key: 'change', + default: 0, +}); + // 수정 필요 // export const okrCheckSelector = selector({ // key: 'okrCheck', @@ -89,13 +98,13 @@ export const todoListState = atom({ default: null, }); -export const todoListSelector = selector({ - key: 'testAllTodoSelector', - get: ({ get }) => { - const todoList = get(todoListState); - return todoList; - }, -}); +// export const todoListSelector = selector({ +// key: 'testAllTodoSelector', +// get: ({ get }) => { +// const todoList = get(todoListState); +// return todoList; +// }, +// }); //ex) 2023-01-01 export const clickDate = atom({ @@ -116,6 +125,19 @@ export const todoDateInfo = atom({ }, }); +export const myTodo = atom({ + key: 'myTodo', + default: { + targetDate: sessionStorage.getItem('targetDate'), + teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], + // teamMembers: [], + KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), + // KeyResultIds: [], + orderby: 'endDate', + orderbyrole: 'desc', + }, +}); + export const dateArray = atom({ key: 'dateArray', default: { @@ -162,5 +184,18 @@ export const filterTeamMemberSelector = selector({ }, }); -// kr들 -// export const +// -------------- +// export const expirationAtom = atom({ +// key: 'expiration', +// default: null, +// }); + +// export const progressAtom = atom({ +// key: 'expiration', +// default: null, +// }); + +// export const completionAtom = atom({ +// key: 'expiration', +// default: null, +// }); diff --git a/src/styles/OKR.styled.js b/src/styles/OKR.styled.js index 31e352e..0a83461 100644 --- a/src/styles/OKR.styled.js +++ b/src/styles/OKR.styled.js @@ -3,7 +3,8 @@ import styled from 'styled-components'; export const Container = styled.div` max-width: 75.8rem; width: 100%; - height: 55.2rem; + /* height: 55.2rem; */ + height: 56rem; border: 1px solid rgba(232, 232, 232, 1); box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); border-radius: 12px; diff --git a/src/styles/todo.styled.js b/src/styles/todo.styled.js index e884ee4..cb17aae 100644 --- a/src/styles/todo.styled.js +++ b/src/styles/todo.styled.js @@ -41,7 +41,7 @@ export const TodoContainer = styled.div` min-width: 39rem; width: 100%; max-height: 485px; - height: 100%; + height: 55.2rem; overflow-y: auto; padding: 0 1.2rem; box-sizing: border-box; @@ -51,11 +51,11 @@ export const TodoContainer = styled.div` export const StTodoItem = styled.div` width: 100%; /* min-width: 330px; */ - height: 11.8rem; + /* height: 11.8rem; */ /* background-color: pink; */ .todo { max-width: 100%; - min-width: 39rem; + min-width: 46.1rem; height: 100%; display: flex; position: relative; @@ -67,6 +67,24 @@ export const StTodoItem = styled.div` :nth-last-child(1) { margin-bottom: 0; } + .completion { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #ccc; + position: relative; + cursor: pointer; + margin-right: 23px; + } + .notCompletion { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #e8e8e8; + position: relative; + cursor: pointer; + margin-right: 23px; + } .check { width: 30px; height: 30px; @@ -92,11 +110,11 @@ export const StTodoItem = styled.div` cursor: default; } .detail { - /* height: 100%; */ + height: 100%; box-sizing: border-box; padding: 3px 0 5px 0; .nameDate { - /* width: 100%; */ + /* width: 80%; */ display: flex; flex-direction: column; justify-content: space-between; @@ -104,9 +122,15 @@ export const StTodoItem = styled.div` color: #4b4b4b; font-weight: 500; cursor: pointer; + /* background-color: pink; */ + .todoName { + width: 280px; font-size: 19px; margin-bottom: 7px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .memo { width: 85%; diff --git a/src/styles/tododetail.styled.js b/src/styles/tododetail.styled.js index 118c26a..acb687a 100644 --- a/src/styles/tododetail.styled.js +++ b/src/styles/tododetail.styled.js @@ -587,10 +587,11 @@ export const StKrFilter = styled.div` margin-bottom: 0; li { width: 175px; - height: 15px; + /* height: 15px; */ margin-bottom: 12px; display: flex; align-items: center; + /* flex-wrap: wrap; */ font-size: 15px; font-weight: 500; /* :nth-last-child(1) { @@ -604,9 +605,19 @@ export const StKrFilter = styled.div` } .kr { margin-right: 2px; + width: 35px; + height: 20px; + /* background-color: skyblue; */ + } + .none { + width: 50px; } .desc { margin-left: 2px; + /* width: calc(100% - 23px - 35px); */ + width: 65%; + /* height: auto; */ + /* background-color: pink; */ } } } From 97da2635d67c5eb6a3493f8f239862a1b763ec25 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Wed, 3 May 2023 16:07:50 +0900 Subject: [PATCH 66/72] =?UTF-8?q?fix=20:=20dash=20Todo=20=EC=83=88?= =?UTF-8?q?=EB=A1=9C=EA=B3=A0=EC=B9=A8=20=EC=9D=B4=EC=8A=88=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/dashboard/DashToDo.jsx | 4 +- src/components/dashboard/TodoItem.jsx | 43 ++++++-- .../global/globalModal/TodoPathModal.jsx | 3 + src/components/todo/DetailTodoItem.jsx | 99 +++++-------------- src/pages/Mainpage.jsx | 64 +++++++++--- src/store/store.js | 3 + 6 files changed, 117 insertions(+), 99 deletions(-) diff --git a/src/components/dashboard/DashToDo.jsx b/src/components/dashboard/DashToDo.jsx index 34137b4..d87f5a6 100644 --- a/src/components/dashboard/DashToDo.jsx +++ b/src/components/dashboard/DashToDo.jsx @@ -17,7 +17,7 @@ import { useQuery } from '@tanstack/react-query'; import React, { useState, useRef } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; -export default function DashTodo() { +export default function DashTodo({ todayFormat }) { const [todoModalOn, setTodoModalOn] = useState(false); const onCloseTodoModal = () => { setTodoModalOn(!todoModalOn); @@ -72,7 +72,7 @@ export default function DashTodo() { <TodoContainer> {getTodo?.length !== 0 ? ( <StTodoItem> - <TodoItem /> + <TodoItem todayFormat={todayFormat} /> </StTodoItem> ) : ( <NotHaveEl> diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index e47bf7f..82b1532 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -6,6 +6,7 @@ import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; import { change, myChange, myTodo, patchTodoInfo } from '../../store/store'; +import Loading from '../global/Loading'; import Toast from '../global/Toast'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; @@ -15,35 +16,51 @@ import ReactGA from 'react-ga4'; import { toast } from 'react-toastify'; import { useRecoilState, useSetRecoilState } from 'recoil'; -const TodoItem = () => { +const TodoItem = ({ todayFormat }) => { + // console.log(todayFormat); const queryClient = useQueryClient(); - const [count, setCount] = useRecoilState(change); + const [count, setCount] = useRecoilState(myChange); // console.log(count); const [info, setInfo] = useRecoilState(myTodo); - // console.log('myTodoInfo :', info); + // setInfo({ ...info, targetDate: todayFormat }); + // const [info, setInfo] = useState({ + // targetDate: sessionStorage.getItem('targetDate'), + // // teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], + // teamMembers: [sessionStorage.getItem('userId')], + // // KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), + // KeyResultIds: sessionStorage.getItem('kr'), + // orderby: 'endDate', + // orderbyrole: 'desc', + // }); + console.log('myTodoInfo :', info); const [progress, setProgress] = useState([]); const [completion, setCompletion] = useState([]); - // console.log('진행 중 :', progress); - // console.log('완료 :', completion); + console.log('진행 중 :', progress); + console.log('완료 :', completion); - const { mutate: progressTodo } = useMutation(PostProgressTodo, { + const { mutate: progressTodo, isLoading } = useMutation(PostProgressTodo, { onSuccess: data => { - // console.log(data); + console.log('진행중 불러오는 중'); setProgress(data); }, }); const { mutate: completionTodo } = useMutation(PostCompletionTodo, { onSuccess: data => { - // console.log(data); + console.log('완료 불러오는중'); setCompletion(data); }, }); + // const today = `${new Date().getFullYear()}-${new Date().getMonth() + 1}`; + // console.log(today); + useEffect(() => { + // console.log(info); + // window.location.reload(); if ( info.targetDate !== null && info.KeyResultIds !== null && @@ -53,8 +70,11 @@ const TodoItem = () => { console.log('통신한다'); progressTodo({ info }); completionTodo({ info }); + } else { + console.log('info바꿔야해요'); + setInfo({ ...info, targetDate: todayFormat }); } - }, [count, info]); + }, [count]); // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { @@ -142,8 +162,13 @@ const TodoItem = () => { setTodoModalOn(!todoModalOn); }; + // if (isLoading) { + // return <Loading />; + // } + return ( <> + {/* {progress} */} {progress?.map(el => ( <React.Fragment key={el.userId}> {el.progressTodo.map(data => ( diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index cfa6751..85822fb 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -7,6 +7,7 @@ import todo from '../../../assets/todoTODO.png'; import trash from '../../../assets/trash.png'; import { change, + myChange, patchTodoInfo, ToggleEndState, ToggleStartState, @@ -158,6 +159,7 @@ const TodoPathModal = ({ onCloseModal }) => { const queryClient = useQueryClient(); const [count, setCount] = useRecoilState(change); + const [myCount, setMyCount] = useRecoilState(myChange); console.log(count); const { mutate: patchTodo } = useMutation(PatchTodo, { @@ -171,6 +173,7 @@ const TodoPathModal = ({ onCloseModal }) => { queryClient.invalidateQueries(['TODO']); queryClient.setQueryData(['patchTodo'], title); setCount(count + 1); + setMyCount(myCount + 1); // console.log(queryClient.getQueriesData(['patchTodo'])); // console.log('---------------', queryClient.getQueryData(['TODO'])); // queryClient.invalidateQueries(['ALLTODO']); diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 6a0d4c2..f5b9169 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -141,23 +141,7 @@ const DetailTodoItem = ({ todayFormat }) => { // console.log(data); setProgress(data); queryClient.setQueryData(['progress'], data); - - // if(queryClient.getQueryData(['progress'])){ - - // } }, - // onMutate: async newTodo => { - // await queryClient.cancelQueries(['progress']); - // const previous = queryClient.getQueryData(['progress']); - // console.log('previous :', previous); - // // queryClient.setQueryData(['progress'], old => [...old, newTodo]); - - // // 스냅샷 값을 담은 컨텍스트 객체를 반환 - // return { previous }; - // }, - // onSettled: () => { - // queryClient.invalidateQueries(['progress']); - // }, }); // 완료 @@ -446,25 +430,25 @@ const DetailTodoItem = ({ todayFormat }) => { // } // console.log(patchtodoInfo); // console.log(queryClient.getQueryData(['progress'])); - const { mutate: patchMytodo } = useMutation(PatchTodo, { - onSuccess: response => { - if (process.env.NODE_ENV !== 'development') { - ReactGA.event({ - category: '버튼', - action: 'TODO 수정', - }); - } - console.log('patch성공'); - }, - onError: response => { - if (process.env.NODE_ENV !== 'development') { - ReactGA.event({ - category: '버튼', - action: 'TODO 수정 실패', - }); - } - }, - }); + // const { mutate: patchMytodo } = useMutation(PatchTodo, { + // onSuccess: response => { + // if (process.env.NODE_ENV !== 'development') { + // ReactGA.event({ + // category: '버튼', + // action: 'TODO 수정', + // }); + // } + // console.log('patch성공'); + // }, + // onError: response => { + // if (process.env.NODE_ENV !== 'development') { + // ReactGA.event({ + // category: '버튼', + // action: 'TODO 수정 실패', + // }); + // } + // }, + // }); const Check = ({ data }) => { // console.log(data); @@ -503,7 +487,7 @@ const DetailTodoItem = ({ todayFormat }) => { // console.log(queryClient.getQueryState); // console.log(queryClient.getQueryData(['patchTodo'])); const count = useRecoilValue(change); - // console.log(count); + console.log(info); // const test = queryClient.getQueryData(['patchTodo']); useEffect(() => { if ( @@ -524,53 +508,16 @@ const DetailTodoItem = ({ todayFormat }) => { } }, [info, isCompletion, count]); - // useEffect(() => { - // console.log('처음 이펙트'); - // expirationTodo({ info }); - // progressTodo({ info }); - // completionTodo({ info }); - // }, []); - - // console.log(isCompletion === []); - - // useEffect(() => { - // }, []); - // if (isLoading) { - // return <Loading />; - // } - - // const clickUpdate = ({ data }) => { - // console.log(data); - // patchTodo( - // data.toDoId, - // data.toDo, - // data.memo, - // data.startDate, - // data.startDateTime, - // data.endDate, - // data.endDateTime, - // data.priority - // ); - // expirationTodo({ info }); - // progressTodo({ info }); - // completionTodo({ info }); - // }; - // console.log(info.targetDate == new Date()); - // const day = `${new Date().getFullYear()}-${ - // new Date().getMonth() + 1 - // }`; - console.log(info.targetDate.split('-')); - // console.log(new Date().getFullYear()); return ( <> <DDay> <TodoDetailHeader> <div className='header'> <div className='title'> - {info.targetDate === todayFormat + {info?.targetDate === todayFormat ? 'Today' - : `${info.targetDate.split('-')[1]}월 ${ - info.targetDate.split('-')[2] + : `${info?.targetDate?.split('-')[1]}월 ${ + info?.targetDate?.split('-')[2] }일`} </div> <Filter /> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index ce378d4..8ac4d2f 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -4,10 +4,13 @@ import DashTodo from '../components/dashboard/DashToDo'; import Menu from '../components/dashboard/Menu'; import Tutorial from '../components/dashboard/Tutorial'; import DashBoardCalendar from '../components/dashboard/calendar/Calendar'; +import Loading from '../components/global/Loading'; import Portal from '../components/global/globalModal/Potal'; import { getOKRData, krDataAtom, + myChange, + myTodo, teamMemberAtom, todoDateInfo, userDetail, @@ -36,6 +39,7 @@ export default function Mainpage() { // const setUserId = useSetRecoilState(userId); const [info, setInfo] = useRecoilState(todoDateInfo); + const [myInfo, setMyInfo] = useRecoilState(myTodo); // console.log(info); const [uid, setUid] = useRecoilState(userId); @@ -60,17 +64,22 @@ export default function Mainpage() { }, [accessToken]); //userInfo - const { userinfo } = useQuery(['userInfo'], () => GetUserInfo(uid), { - enabled: !!uid, - onSuccess: data => { - // console.log('성공'); - // console.log(data); - setUserInfo(data); - sessionStorage.setItem('userId', data.userId); - setUid(data.userId); - setInfo({ ...info, teamMembers: [uid] }); - }, - }); + const { userinfo, isLoading } = useQuery( + ['userInfo'], + () => GetUserInfo(uid), + { + enabled: !!uid, + onSuccess: data => { + // console.log('성공'); + // console.log(data); + setUserInfo(data); + sessionStorage.setItem('userId', data.userId); + setUid(data.userId); + setInfo({ ...info, teamMembers: [uid] }); + setMyInfo({ ...myInfo, teamMembers: [uid] }); + }, + } + ); //okrData const setOkrList = useSetRecoilState(getOKRData); @@ -90,6 +99,7 @@ export default function Mainpage() { onError: response => {}, }); + const [count, setCount] = useRecoilState(myChange); const [krdata, setKrData] = useRecoilState(krDataAtom); // console.log(krdata); const { data: getKr } = useQuery(['KR'], GetKR, { @@ -101,9 +111,39 @@ export default function Mainpage() { sessionStorage.setItem('kr', JSON.stringify(filterArray)); setKrData(response); setInfo({ ...info, KeyResultIds: filterArray }); + setMyInfo({ ...myInfo, KeyResultIds: filterArray }); + setCount(count + 1); }, }); + const now = new Date(); + let today = ''; + let tomorrow; + if (now.getMonth() + 1 < 10 && now.getDate() < 10) { + today = `${now.getFullYear()}-0${now.getMonth() + 1}-0${now.getDate()}`; + // tomorrow = `0${now.getMonth() + 1}월 0${now.getDate() + 1}일`; + sessionStorage.setItem('targetDate', today); + // setMyInfo({ ...myInfo, targetDate: today }); + } else if (now.getDate() < 10) { + today = `${now.getFullYear()}-${now.getMonth() + 1}-0${now.getDate()}`; + // tomorrow = `${now.getFullYear()}-${now.getMonth() + 1}-0${ + // now.getDate() + 1 + // }`; + sessionStorage.setItem('targetDate', today); + // setMyInfo({ ...myInfo, targetDate: today }); + } else if (now.getMonth() + 1 < 10) { + today = `${now.getFullYear()}-0${now.getMonth() + 1}-${now.getDate()}`; + // tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; + sessionStorage.setItem('targetDate', today); + // setMyInfo({ ...myInfo, targetDate: today }); + } else { + today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; + // tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; + sessionStorage.setItem('targetDate', today); + // setMyInfo({ ...myInfo, targetDate: today }); + } + + console.log(uid); return ( <StWrap> {userinfo?.firstLogin ? ( @@ -119,7 +159,7 @@ export default function Mainpage() { <main> <OkrContainer> <DashOKR /> - <DashTodo /> + <DashTodo todayFormat={today} /> </OkrContainer> <DashBoardCalendar /> </main> diff --git a/src/store/store.js b/src/store/store.js index ffc82ac..e3c2bb7 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -129,10 +129,13 @@ export const myTodo = atom({ key: 'myTodo', default: { targetDate: sessionStorage.getItem('targetDate'), + // targetDate: '', teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], // teamMembers: [], + // teamMembers: [], KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), // KeyResultIds: [], + // KeyResultIds: [], orderby: 'endDate', orderbyrole: 'desc', }, From 951a6514ade12fcd59ffa65337822f20d58b2dc6 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Wed, 10 May 2023 04:31:47 +0900 Subject: [PATCH 67/72] =?UTF-8?q?fix=20:=20=EB=84=A4=EB=B9=84=EB=B0=94=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EB=B0=B0=EA=B2=BD=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/dashboard/TodoItem.jsx | 14 +-- src/components/global/GlobalLayout.jsx | 12 --- src/components/global/GlobalStyle.jsx | 1 + src/components/global/Navibar.jsx | 29 ++++++ src/components/global/header/Header.jsx | 74 +++++++------- src/components/global/header/header.styled.js | 50 ++++++++-- src/components/global/theme.jsx | 1 + src/components/member/LoginForm.jsx | 4 +- src/components/member/RegisterForm.jsx | 10 +- src/pages/Mainpage.jsx | 96 ++++++++----------- src/pages/TodoPage.jsx | 18 ++-- src/router/Router.js | 5 +- src/store/store.js | 6 +- src/styles/Calendar.styled.js | 2 +- src/styles/OKR.styled.js | 3 +- src/styles/mainpage.styled.js | 27 +++--- src/styles/menu.styled.js | 47 --------- src/styles/todo.styled.js | 3 +- 18 files changed, 203 insertions(+), 199 deletions(-) delete mode 100644 src/components/global/GlobalLayout.jsx create mode 100644 src/components/global/Navibar.jsx diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index 82b1532..8f2cc39 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -34,23 +34,23 @@ const TodoItem = ({ todayFormat }) => { // orderby: 'endDate', // orderbyrole: 'desc', // }); - console.log('myTodoInfo :', info); + // console.log('myTodoInfo :', info); const [progress, setProgress] = useState([]); const [completion, setCompletion] = useState([]); - console.log('진행 중 :', progress); - console.log('완료 :', completion); + // console.log('진행 중 :', progress); + // console.log('완료 :', completion); const { mutate: progressTodo, isLoading } = useMutation(PostProgressTodo, { onSuccess: data => { - console.log('진행중 불러오는 중'); + // console.log('진행중 불러오는 중'); setProgress(data); }, }); const { mutate: completionTodo } = useMutation(PostCompletionTodo, { onSuccess: data => { - console.log('완료 불러오는중'); + // console.log('완료 불러오는중'); setCompletion(data); }, }); @@ -67,11 +67,11 @@ const TodoItem = ({ todayFormat }) => { info.teamMembers !== null && info.KeyResultIds.length !== 0 ) { - console.log('통신한다'); + // console.log('통신한다'); progressTodo({ info }); completionTodo({ info }); } else { - console.log('info바꿔야해요'); + // console.log('info바꿔야해요'); setInfo({ ...info, targetDate: todayFormat }); } }, [count]); diff --git a/src/components/global/GlobalLayout.jsx b/src/components/global/GlobalLayout.jsx deleted file mode 100644 index 8d9c11a..0000000 --- a/src/components/global/GlobalLayout.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; - -const GlobalLayout = ({ children }) => { - return <StGlobalLayout>{children}</StGlobalLayout>; -}; - -export default GlobalLayout; - -const StGlobalLayout = styled.div` - width: 100%; -`; diff --git a/src/components/global/GlobalStyle.jsx b/src/components/global/GlobalStyle.jsx index 6af3604..fd6856b 100644 --- a/src/components/global/GlobalStyle.jsx +++ b/src/components/global/GlobalStyle.jsx @@ -14,6 +14,7 @@ const GlobalStyle = createGlobalStyle` --bg-color : #ffffff; --main-color : #FF8336; --main-bg : #BEBEBE; + --main-gray : #f3efef; --font-style: 'Noto Sans KR'; --text-color : #2b2b2b; --default-bolder : 1.5px solid #d9d9d9; diff --git a/src/components/global/Navibar.jsx b/src/components/global/Navibar.jsx new file mode 100644 index 0000000..1c5db8d --- /dev/null +++ b/src/components/global/Navibar.jsx @@ -0,0 +1,29 @@ +import { StNaviBar } from './header/header.styled'; +import React from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; + +const Navibar = () => { + const navigate = useNavigate(); + // url 정보를 이용해 active 주기 + const location = useLocation(); + return ( + <StNaviBar> + <div + className={location.pathname === '/' ? 'active' : ''} + onClick={e => { + navigate('/'); + }}> + Dashboard + </div> + <div + className={location.pathname === '/todo' ? 'active' : ''} + onClick={e => { + navigate('/todo'); + }}> + To - do + </div> + </StNaviBar> + ); +}; + +export default Navibar; diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 1290edc..0741e30 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -1,22 +1,22 @@ import logoutON from '../../../assets/logoutoff.png'; import logoutOFF from '../../../assets/logouton.png'; -import { Guide, Layout, LogoImg } from './header.styled'; +import Navibar from '../Navibar'; +import { Guide, Layout, LogoImg, StMenu, StNavi } from './header.styled'; import React, { useState, useEffect } from 'react'; -import ReactGA from 'react-ga4'; -import { useNavigate } from 'react-router-dom'; +import { useLocation, useNavigate } from 'react-router-dom'; export default function Header() { const navigate = useNavigate(); - const [userState, setUserState] = useState(false); + const [token, setToken] = useState(null); const [logoutImg, setLogoutImg] = useState(logoutON); useEffect(() => { - setUserState(localStorage.getItem('accesstoken')); - }, [localStorage.getItem('accesstoken')]); + setToken(localStorage.getItem('accesstoken')); + }, [token]); const onLogout = () => { localStorage.removeItem('accesstoken'); - setUserState(userState + 1); + setToken(null); navigate('/signin'); }; @@ -35,31 +35,41 @@ export default function Header() { navigate('/'); } }; + + const location = useLocation(); return ( - <Layout> - <LogoImg onClick={gomain} /> - <div> - <Guide - onClick={() => { - window.open( - 'https://wokrguide.notion.site/WOKR-efb64b5da5e842a3a10d7844023e60de' - ); - }}> - 사용 가이드 - </Guide> - {userState !== null || undefined ? ( - <> - <img - src={logoutImg} - alt='' - className='user' - onClick={() => onLogout()} - onMouseEnter={handleMouseEnter} - onMouseLeave={handleMouseLeave} - /> - </> - ) : null} - </div> - </Layout> + <> + <Layout> + <LogoImg onClick={gomain} /> + <StMenu> + <Guide + onClick={() => { + window.open( + 'https://wokrguide.notion.site/WOKR-efb64b5da5e842a3a10d7844023e60de' + ); + }}> + 사용 가이드 + </Guide> + {token !== null || undefined ? ( + <> + <img + src={logoutImg} + alt='' + className='user' + onClick={() => onLogout()} + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave} + /> + </> + ) : null} + </StMenu> + </Layout> + {location.pathname === '/signin' || + location.pathname === '/signup' ? null : ( + <StNavi> + <Navibar /> + </StNavi> + )} + </> ); } diff --git a/src/components/global/header/header.styled.js b/src/components/global/header/header.styled.js index 678fa61..21c3d1d 100644 --- a/src/components/global/header/header.styled.js +++ b/src/components/global/header/header.styled.js @@ -3,12 +3,13 @@ import styled from 'styled-components'; export const Layout = styled.div` width: 100%; - height: 9.7rem; - ${props => props.theme.flex_row_between} - padding: 0 6.5rem 0 7.2rem; - /* position: sticky; - top: 0; */ - /* margin-bottom: 97px; */ + height: 7rem; + display: flex; + justify-content: center; + align-items: center; + padding: 0 7rem; + position: relative; + /* margin-bottom: 30px; */ div { display: flex; align-items: center; @@ -45,3 +46,40 @@ export const Logout = styled.button` width: 8rem; height: 5rem; `; + +export const StMenu = styled.div` + margin: 0 0 0 auto; +`; + +export const StNavi = styled.div` + width: 100%; + height: 4rem; + display: flex; + align-items: center; + justify-content: center; +`; + +export const StNaviBar = styled.div` + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + gap: 50px; + div { + border-radius: 15px 15px 0 0; + height: 100%; + font-size: 1.8rem; + padding: 5px 15px; + cursor: pointer; + transition: all 0.3s; + &.active { + color: #000; + background-color: #f3efef; + font-weight: bold; + } + &:hover { + background-color: #f3efef; + } + } +`; diff --git a/src/components/global/theme.jsx b/src/components/global/theme.jsx index a8f34c6..f26ac5a 100644 --- a/src/components/global/theme.jsx +++ b/src/components/global/theme.jsx @@ -1,6 +1,7 @@ const theme = { main_color: '#FF8336', font_color: '#2b2b2b', + background_color: '#f3efef', flex_column_between: 'display: flex; flex-direction:column; align-items: center; justify-content: space-between; ', diff --git a/src/components/member/LoginForm.jsx b/src/components/member/LoginForm.jsx index caffd4a..3eb4721 100644 --- a/src/components/member/LoginForm.jsx +++ b/src/components/member/LoginForm.jsx @@ -43,7 +43,7 @@ const LoginForm = () => { const regemail = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; let regpw = - /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,12}$/; + /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,15}$/; if (!userInfo.email.trim()) { errors.email = '이메일을 입력해주세요.'; @@ -54,7 +54,7 @@ const LoginForm = () => { errors.password = '비밀번호를 입력해주세요.'; } else if (!regpw.test(userInfo.password)) { errors.password = - '비밀번호를 8자리 이상 12자리 이하, 숫자/대문자 또는 소문자/특수문자를 포함하여 입력해주세요.'; + '비밀번호를 8자리 이상 15자리 이하, 영문/숫자/특수문자를 포함하여 입력해주세요.'; } return errors; }; diff --git a/src/components/member/RegisterForm.jsx b/src/components/member/RegisterForm.jsx index e82fc6a..27f739a 100644 --- a/src/components/member/RegisterForm.jsx +++ b/src/components/member/RegisterForm.jsx @@ -60,7 +60,7 @@ const RegisterForm = () => { const regemail = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; let regpw = - /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,12}$/; + /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,15}$/; const regname = userInfo.name.length >= 2 && userInfo.name.length < 6; if (!userInfo.email.trim()) { errors.email = '이메일을 입력해주세요.'; @@ -71,7 +71,7 @@ const RegisterForm = () => { errors.password = '비밀번호를 입력해주세요.'; } else if (!regpw.test(userInfo.password)) { errors.password = - '비밀번호를 8자리 이상 12자리 이하, 숫자/대문자 또는 소문자/특수문자를 포함하여 입력해주세요.'; + '비밀번호를 8자리 이상 15자리 이하, 영문/숫자/특수문자를 포함하여 입력해주세요.'; } if (userInfo.password !== userInfo.confirmpassword) { errors.confirmpassword = '비밀번호가 일치하지 않습니다.'; @@ -218,17 +218,17 @@ const RegisterForm = () => { </InputBox> {errors.team && <div className='valid'>{errors.team}</div>} - <Label htmlFor='teamPosition'>직급</Label> + {/* <Label htmlFor='teamPosition'>직급</Label> <InputBox> <TeamPosiDropDown setUserInfo={setUserInfo} userInfo={userInfo} /> </InputBox> {errors.teamposition && ( <div className='valid'>{errors.teamposition}</div> - )} + )} */} <LoginBtn type='submit'>회원가입</LoginBtn> <HelpBox style={{ marginBottom: '100px' }}> - <span onClick={() => navigate('/')}>로그인 하러가기</span> + <span onClick={() => navigate('/signin')}>로그인 하러가기</span> </HelpBox> <Toast /> </SignWrap> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 8ac4d2f..02c988c 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,10 +1,10 @@ import { GetKR, GetOKR, GetUser, GetUserInfo } from '../apis/apiGET'; import DashOKR from '../components/dashboard/DashOKR'; import DashTodo from '../components/dashboard/DashToDo'; -import Menu from '../components/dashboard/Menu'; import Tutorial from '../components/dashboard/Tutorial'; import DashBoardCalendar from '../components/dashboard/calendar/Calendar'; import Loading from '../components/global/Loading'; +import Navibar from '../components/global/Navibar'; import Portal from '../components/global/globalModal/Potal'; import { getOKRData, @@ -16,52 +16,47 @@ import { userDetail, userId, } from '../store/store'; -import { OkrContainer, StWrap } from '../styles/mainpage.styled'; +import { + OkrContainer, + StWrap, + StWrapBackground, +} from '../styles/mainpage.styled'; +import { StNavi } from '../styles/tododetail.styled'; import { useQuery } from '@tanstack/react-query'; import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; +import { toast } from 'react-toastify'; import { useRecoilState, useSetRecoilState } from 'recoil'; export default function Mainpage() { const navigate = useNavigate(); - // localStorage에 accesstoken 여부 확인(리다이렉트) - // useEffect(() => { - // if (localStorage.getItem('accesstoken') === undefined) { - // navigate('/signin'); - // } - // }, []); - // accesstoken 디코딩 const [userInfo, setUserInfo] = useRecoilState(userDetail); - // console.log('userInfo :', userInfo); - // const setUserId = useSetRecoilState(userId); - + // 지울 가능성 있음 const [info, setInfo] = useRecoilState(todoDateInfo); + // console.log('info :', info); + // 지울 가능성 있음 const [myInfo, setMyInfo] = useRecoilState(myTodo); - // console.log(info); + // console.log('myInfo :', myInfo); + // 유저 id 상태관리 const [uid, setUid] = useRecoilState(userId); - // console.log('uid :', uid); const [accessToken, setAccessToken] = useState( localStorage.getItem('accesstoken') ); useEffect(() => { - // console.log(localStorage.accessToken); - // console.log(localStorage.getItem('accesstoken')); if (localStorage.getItem('accesstoken')) { - // console.log('디코딩한다'); const decodeToken = jwt_decode(accessToken); const extractedUid = decodeToken.userId; setUid(() => extractedUid); } else { - // console.log('어세스토큰 없다'); navigate('/signin'); } - }, [accessToken]); + }, [localStorage.getItem('accesstoken')]); //userInfo const { userinfo, isLoading } = useQuery( @@ -70,10 +65,8 @@ export default function Mainpage() { { enabled: !!uid, onSuccess: data => { - // console.log('성공'); - // console.log(data); setUserInfo(data); - sessionStorage.setItem('userId', data.userId); + // sessionStorage.setItem('userId', data.userId); setUid(data.userId); setInfo({ ...info, teamMembers: [uid] }); setMyInfo({ ...myInfo, teamMembers: [uid] }); @@ -89,17 +82,17 @@ export default function Mainpage() { }, }); - const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); + // const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); - const { data: getMember } = useQuery(['MEMBER'], GetUser, { - onSuccess: response => { - // console.log(response); - setTeamMemberAtom(response); - }, - onError: response => {}, - }); + // const { data: getMember } = useQuery(['MEMBER'], GetUser, { + // onSuccess: response => { + // console.log(response); + // setTeamMemberAtom(response); + // }, + // onError: response => {}, + // }); - const [count, setCount] = useRecoilState(myChange); + // const [count, setCount] = useRecoilState(myChange); const [krdata, setKrData] = useRecoilState(krDataAtom); // console.log(krdata); const { data: getKr } = useQuery(['KR'], GetKR, { @@ -112,50 +105,37 @@ export default function Mainpage() { setKrData(response); setInfo({ ...info, KeyResultIds: filterArray }); setMyInfo({ ...myInfo, KeyResultIds: filterArray }); - setCount(count + 1); + // setCount(count + 1); }, }); const now = new Date(); let today = ''; - let tomorrow; if (now.getMonth() + 1 < 10 && now.getDate() < 10) { today = `${now.getFullYear()}-0${now.getMonth() + 1}-0${now.getDate()}`; - // tomorrow = `0${now.getMonth() + 1}월 0${now.getDate() + 1}일`; sessionStorage.setItem('targetDate', today); - // setMyInfo({ ...myInfo, targetDate: today }); } else if (now.getDate() < 10) { today = `${now.getFullYear()}-${now.getMonth() + 1}-0${now.getDate()}`; - // tomorrow = `${now.getFullYear()}-${now.getMonth() + 1}-0${ - // now.getDate() + 1 - // }`; sessionStorage.setItem('targetDate', today); - // setMyInfo({ ...myInfo, targetDate: today }); } else if (now.getMonth() + 1 < 10) { today = `${now.getFullYear()}-0${now.getMonth() + 1}-${now.getDate()}`; - // tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; sessionStorage.setItem('targetDate', today); - // setMyInfo({ ...myInfo, targetDate: today }); } else { today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; - // tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; sessionStorage.setItem('targetDate', today); - // setMyInfo({ ...myInfo, targetDate: today }); } - console.log(uid); + if (isLoading) { + return <Loading />; + } return ( - <StWrap> - {userinfo?.firstLogin ? ( - <Portal> - <Tutorial /> - </Portal> - ) : ( - <> - <aside> - <Menu /> - </aside> - + <StWrapBackground> + <StWrap> + {userInfo?.firstLogin === true ? ( + <Portal> + <Tutorial /> + </Portal> + ) : ( <main> <OkrContainer> <DashOKR /> @@ -163,8 +143,8 @@ export default function Mainpage() { </OkrContainer> <DashBoardCalendar /> </main> - </> - )} - </StWrap> + )} + </StWrap> + </StWrapBackground> ); } diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx index c99aeaf..7dfb0cc 100644 --- a/src/pages/TodoPage.jsx +++ b/src/pages/TodoPage.jsx @@ -7,7 +7,7 @@ import { myUserIdSelecctor, todoDateInfo, } from '../store/store'; -import { StWrap } from '../styles/mainpage.styled'; +import { StWrap, StWrapBackground } from '../styles/mainpage.styled'; import { useQuery } from '@tanstack/react-query'; import React, { useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; @@ -29,15 +29,17 @@ const TodoPage = () => { // }); return ( - <StWrap> - <aside> + <StWrapBackground> + <StWrap> + {/* <aside> <Menu /> - </aside> + </aside> */} - <main> - <Todo /> - </main> - </StWrap> + <main> + <Todo /> + </main> + </StWrap> + </StWrapBackground> ); }; diff --git a/src/router/Router.js b/src/router/Router.js index 59222fe..feedeb1 100644 --- a/src/router/Router.js +++ b/src/router/Router.js @@ -1,4 +1,3 @@ -import GlobalLayout from '../components/global/GlobalLayout'; import Header from '../components/global/header/Header'; import Mainpage from '../pages/Mainpage'; import Signin from '../pages/SignIn'; @@ -9,7 +8,7 @@ import { Route, Routes } from 'react-router-dom'; export default function Router() { return ( - <GlobalLayout> + <> <Header /> <Routes> <Route path='/' element={<Mainpage />} /> @@ -17,6 +16,6 @@ export default function Router() { <Route path='/signup' element={<SignUp />} /> <Route path='/todo' element={<TodoPage />} /> </Routes> - </GlobalLayout> + </> ); } diff --git a/src/store/store.js b/src/store/store.js index e3c2bb7..b643085 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -1,8 +1,9 @@ import { atom, selector } from 'recoil'; +// 유저 정보 export const userDetail = atom({ key: 'userInfo', - default: null, + default: undefined, }); // accesstoken에서 userId값 추출 @@ -72,7 +73,7 @@ export const change = atom({ default: 0, }); export const myChange = atom({ - key: 'change', + key: 'myChange', default: 0, }); @@ -112,6 +113,7 @@ export const clickDate = atom({ default: null, }); +// export const todoDateInfo = atom({ key: 'todoDateInfo', default: { diff --git a/src/styles/Calendar.styled.js b/src/styles/Calendar.styled.js index 58e11d6..c956ae1 100644 --- a/src/styles/Calendar.styled.js +++ b/src/styles/Calendar.styled.js @@ -3,6 +3,6 @@ import styled from 'styled-components'; export const Container = styled.div` width: 100%; margin-top: 30px; - /* margin-left: 20px; */ cursor: default; + background-color: #fff; `; diff --git a/src/styles/OKR.styled.js b/src/styles/OKR.styled.js index 0a83461..454ca35 100644 --- a/src/styles/OKR.styled.js +++ b/src/styles/OKR.styled.js @@ -1,7 +1,7 @@ import styled from 'styled-components'; export const Container = styled.div` - max-width: 75.8rem; + /* max-width: 50%; */ width: 100%; /* height: 55.2rem; */ height: 56rem; @@ -9,6 +9,7 @@ export const Container = styled.div` box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); border-radius: 12px; box-sizing: border-box; + background-color: #fff; `; export const HeaderBox = styled.div` diff --git a/src/styles/mainpage.styled.js b/src/styles/mainpage.styled.js index ee34bc5..1758b2a 100644 --- a/src/styles/mainpage.styled.js +++ b/src/styles/mainpage.styled.js @@ -1,29 +1,28 @@ import styled from 'styled-components'; +export const StWrapBackground = styled.div` + width: 100%; + height: 100%; + background-color: var(--main-gray); + border-radius: 35px 35px 0 0; + padding: 0 20px; + box-sizing: border-box; +`; + export const StWrap = styled.div` + max-width: 1600px; width: 100%; + margin: 0 auto; height: auto; - /* background-color: pink; */ display: flex; - aside { - width: 28rem; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - margin-right: 3.8rem; - margin-top: 1.8rem; - - position: sticky; - top: 20px; - } + padding-top: 30px; main { width: 100%; - max-width: 147rem; } `; export const OkrContainer = styled.div` width: 100%; display: flex; + justify-content: space-between; `; diff --git a/src/styles/menu.styled.js b/src/styles/menu.styled.js index 693aac1..e69de29 100644 --- a/src/styles/menu.styled.js +++ b/src/styles/menu.styled.js @@ -1,47 +0,0 @@ -import styled from 'styled-components'; - -export const MenuContainer = styled.div` - width: 28.3rem; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - - position: sticky; - top: 20px; -`; - -export const MenuItem = styled.button` - width: 100%; - height: 4.5rem; - border: none; - font-size: 20px; - font-weight: 900; - margin-bottom: 2.4rem; - text-align: right; - cursor: pointer; - background-color: #fff; - border-radius: 0 7px 7px 0; - padding: 0 2rem 0 0; - line-height: 4.5rem; - color: ${({ text }) => - `${ - text === 'All OKR' - ? '#DEDEDE' - : text === 'Team OKR' - ? '#DEDEDE' - : text === 'Calendar' - ? '#DEDEDE' - : '#4b4b4b' - }`}; - &.active { - color: #fff; - background-color: var(--main-color); - } - &:hover { - background-color: var(--main-color); - color: white; - } -`; -// #DEDEDE -// #4b4b4b; diff --git a/src/styles/todo.styled.js b/src/styles/todo.styled.js index cb17aae..f9060a5 100644 --- a/src/styles/todo.styled.js +++ b/src/styles/todo.styled.js @@ -3,12 +3,13 @@ import styled from 'styled-components'; export const Container = styled.div` width: 100%; - max-width: 68.2rem; + /* max-width: 50%; */ height: 56rem; border: 1px solid rgba(232, 232, 232, 1); margin-left: 3.9rem; box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); border-radius: 12px; + background-color: #fff; `; export const HeaderBox = styled.div` From dcdf7781202bb31581eadfd5dc25078171c9bbf6 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Sat, 13 May 2023 18:18:32 +0900 Subject: [PATCH 68/72] =?UTF-8?q?fix=20:=20todo=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=A0=8C=EB=8D=94=EB=A7=81=20=EA=B0=9C=EC=84=A0=20?= =?UTF-8?q?=EB=B0=8F=20UI=EC=B5=9C=EC=A2=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/apiGET.js | 13 +- src/components/dashboard/DashOKR.jsx | 46 +- src/components/dashboard/DashToDo.jsx | 41 +- src/components/dashboard/TodoItem.jsx | 241 +++---- .../dashboard/calendar/Calendar.jsx | 20 +- src/components/dashboard/okr/OkrItem.jsx | 46 +- src/components/global/Toast.jsx | 5 +- .../global/globalModal/TodoModal.jsx | 3 +- .../global/globalModal/TodoPathModal.jsx | 62 +- .../global/globaldropdown/Emotion.jsx | 167 ----- .../global/globaldropdown/PatchPriority.jsx | 10 +- .../globaldropdown/PriorityDropDown.jsx | 2 +- .../global/globaldropdown/TeamDropDown.jsx | 58 -- .../globaldropdown/TeamPosiDropDown.jsx | 61 -- src/components/global/header/Header.jsx | 5 +- src/components/global/header/header.styled.js | 5 +- src/components/member/LoginForm.jsx | 1 - src/components/member/RegisterForm.jsx | 9 - src/components/todo/DetailTodoItem.jsx | 596 ++++++++---------- src/components/todo/Filter.jsx | 9 +- src/components/todo/KrFilter.jsx | 4 +- src/components/todo/SortFilter.jsx | 24 +- src/components/todo/TeamTodo.jsx | 38 +- src/components/todo/Todo.jsx | 36 +- src/components/todo/TodoNavi.jsx | 94 ++- src/pages/Mainpage.jsx | 73 +-- src/pages/TodoPage.jsx | 28 +- src/store/store.js | 116 ++-- src/styles/Calendar.styled.js | 5 +- src/styles/OKR.styled.js | 33 +- src/styles/mainpage.styled.js | 11 +- src/styles/todo.styled.js | 27 +- src/styles/tododetail.styled.js | 222 ++++--- 33 files changed, 828 insertions(+), 1283 deletions(-) delete mode 100644 src/components/global/globaldropdown/Emotion.jsx delete mode 100644 src/components/global/globaldropdown/TeamDropDown.jsx delete mode 100644 src/components/global/globaldropdown/TeamPosiDropDown.jsx diff --git a/src/apis/apiGET.js b/src/apis/apiGET.js index 86a7b2b..b182623 100644 --- a/src/apis/apiGET.js +++ b/src/apis/apiGET.js @@ -27,10 +27,10 @@ export async function GetOKR() { return data; } -export async function GetTodo() { - const { data } = await api.get(`api/todo`); - return data; -} +// export async function GetTodo() { +// const { data } = await api.get(`api/todo`); +// return data; +// } export async function GetAllTodo() { const { data } = await api.get(`api/todo/progress`); @@ -62,3 +62,8 @@ export async function GetUserInfo(uid) { const { data } = await api.get(`api/user/${uid}`); return data; } + +export async function GetMyTodo() { + const { data } = await api.get(`api/todo`); + return data; +} diff --git a/src/components/dashboard/DashOKR.jsx b/src/components/dashboard/DashOKR.jsx index 9256d53..5519b13 100644 --- a/src/components/dashboard/DashOKR.jsx +++ b/src/components/dashboard/DashOKR.jsx @@ -1,19 +1,20 @@ +import { GetOKR } from '../../apis/apiGET'; import plus from '../../assets/plus.png'; -import { getOKRData, userDetail } from '../../store/store.js'; +import { userDetail } from '../../store/store.js'; import { Container, Header, HeaderBox, OkrContainer, } from '../../styles/OKR.styled.js'; -import AlertModal from '../global/globalModal/AlertModal.jsx'; import OkrModal from '../global/globalModal/OkrModal.jsx'; import Potal from '../global/globalModal/Potal.jsx'; import { NotHaveEl } from '../global/globalModal/modal.styled.js'; import OkrItem from './okr/OkrItem'; +import { useQuery } from '@tanstack/react-query'; import React from 'react'; import { useState, useRef } from 'react'; -import { useRecoilValue } from 'recoil'; +import { useRecoilValue, useSetRecoilState } from 'recoil'; export default function DashOKR() { //모달 상태관리 @@ -21,7 +22,13 @@ export default function DashOKR() { const [alertModalOn, setAlertModalOn] = useState(false); const info = useRecoilValue(userDetail); - const okrData = useRecoilValue(getOKRData); + // const okrData = useRecoilValue(getOKRData); + + const { getokrdata } = useQuery(['OKR'], GetOKR, { + onSuccess: data => { + // console.log(data); + }, + }); /**모달 닫는 함수 */ const onCloseModal = () => { @@ -30,7 +37,7 @@ export default function DashOKR() { /** +버튼 누르면 OKR 생성하는 모달 띄우는 함수 */ const createOKR = () => { - if (okrData?.length < 4) { + if (getokrdata?.length < 4) { setOkrModalOn(!okrModalOn); } else { setAlertModalOn(!alertModalOn); @@ -46,17 +53,19 @@ export default function DashOKR() { }; /**모달 닫는 함수 */ - const onCloseAlertModal = () => { - setAlertModalOn(!alertModalOn); - }; + // const onCloseAlertModal = () => { + // setAlertModalOn(!alertModalOn); + // }; //alertModal - const alertModalRef = useRef(null); - const alertModalOutSideClick = e => { - if (alertModalRef.current === e.target) { - setAlertModalOn(!alertModalOn); - } - }; + // const alertModalRef = useRef(null); + // const alertModalOutSideClick = e => { + // if (alertModalRef.current === e.target) { + // setAlertModalOn(!alertModalOn); + // } + // }; + + // const setOkrList = useSetRecoilState(getOKRData); return ( <Container> @@ -68,8 +77,9 @@ export default function DashOKR() { </div> </div> </HeaderBox> + <OkrContainer> - {okrData?.length === 0 ? ( + {getokrdata?.length === 0 ? ( <NotHaveEl> <h2>설정된 OKR이 없습니다.</h2> <div className='btnFlex' onClick={createOKR}> @@ -81,6 +91,7 @@ export default function DashOKR() { <OkrItem /> )} </OkrContainer> + <Potal> {okrModalOn && ( <OkrModal @@ -90,7 +101,8 @@ export default function DashOKR() { /> )} </Potal> - <Potal> + + {/* <Potal> {alertModalOn && ( <AlertModal onCloseModal={onCloseAlertModal} @@ -98,7 +110,7 @@ export default function DashOKR() { modalOutSideClick={alertModalOutSideClick} /> )} - </Potal> + </Potal> */} </Container> ); } diff --git a/src/components/dashboard/DashToDo.jsx b/src/components/dashboard/DashToDo.jsx index d87f5a6..4e1479f 100644 --- a/src/components/dashboard/DashToDo.jsx +++ b/src/components/dashboard/DashToDo.jsx @@ -1,4 +1,4 @@ -import { GetTodo } from '../../apis/apiGET'; +import { GetMyTodo, GetTodo } from '../../apis/apiGET'; import plus from '../../assets/plus.png'; import { todoListSelector, todoListState } from '../../store/store'; import { @@ -13,8 +13,8 @@ import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; import { NotHave, NotHaveEl } from '../global/globalModal/modal.styled'; import TodoItem from './TodoItem'; -import { useQuery } from '@tanstack/react-query'; -import React, { useState, useRef } from 'react'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import React, { useState, useRef, useEffect } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; export default function DashTodo({ todayFormat }) { @@ -35,33 +35,19 @@ export default function DashTodo({ todayFormat }) { }; const [todoList, setTodoList] = useRecoilState(todoListState); - // const todoSelector = useRecoilValue(todoListSelector); - // console.log('todoSelector :', todoSelector); - // 임시 - const { - data: getTodo, - isLoading, - isError, - error, - } = useQuery(['TODO'], GetTodo, { + + const { data: myTodo } = useQuery(['ToDo'], GetMyTodo, { onSuccess: response => { - setTodoList(response); // console.log(response); + setTodoList(response); + // queryClient.invalidateQueries(['TODO']); }, - onError: response => {}, }); - // if (isLoading) { - // return <Loading />; - // } - - // if (isError) { - // return <div>{error.message}</div>; - // } return ( <Container> <HeaderBox> - <Header>오늘의 To-do</Header> + <Header>To-do</Header> <div className='btnBox'> <div onClick={createTodo}> <img src={plus} alt='plus' /> @@ -70,11 +56,8 @@ export default function DashTodo({ todayFormat }) { </HeaderBox> <TodoContainer> - {getTodo?.length !== 0 ? ( - <StTodoItem> - <TodoItem todayFormat={todayFormat} /> - </StTodoItem> - ) : ( + {todoList?.completionTodo.length === 0 && + todoList?.progressTodo.length === 0 ? ( <NotHaveEl> <h2>설정된 To Do 없습니다.</h2> <div className='btnFlex' onClick={createTodo}> @@ -82,6 +65,10 @@ export default function DashTodo({ todayFormat }) { <div>To Do추가</div> </div> </NotHaveEl> + ) : ( + <StTodoItem> + <TodoItem todayFormat={todayFormat} /> + </StTodoItem> )} </TodoContainer> diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index 8f2cc39..a9cac53 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -1,81 +1,34 @@ -import { GetCompletionTodo, GetTodo } from '../../apis/apiGET'; +import { GetMyTodo } from '../../apis/apiGET'; import { PatchCheck } from '../../apis/apiPATCH'; -import { PostCompletionTodo, PostProgressTodo } from '../../apis/apiPOST'; import checkFull from '../../assets/checkFull.png'; import blue from '../../assets/todoBlue.png'; import red from '../../assets/todoRed.png'; import yellow from '../../assets/todoYellow.png'; -import { change, myChange, myTodo, patchTodoInfo } from '../../store/store'; -import Loading from '../global/Loading'; +import { patchTodoInfo } from '../../store/store'; import Toast from '../global/Toast'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import ReactGA from 'react-ga4'; import { toast } from 'react-toastify'; -import { useRecoilState, useSetRecoilState } from 'recoil'; +import { useSetRecoilState } from 'recoil'; const TodoItem = ({ todayFormat }) => { // console.log(todayFormat); const queryClient = useQueryClient(); - const [count, setCount] = useRecoilState(myChange); + // const [count, setCount] = useRecoilState(myChange); // console.log(count); - const [info, setInfo] = useRecoilState(myTodo); - // setInfo({ ...info, targetDate: todayFormat }); - // const [info, setInfo] = useState({ - // targetDate: sessionStorage.getItem('targetDate'), - // // teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], - // teamMembers: [sessionStorage.getItem('userId')], - // // KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), - // KeyResultIds: sessionStorage.getItem('kr'), - // orderby: 'endDate', - // orderbyrole: 'desc', - // }); - // console.log('myTodoInfo :', info); - const [progress, setProgress] = useState([]); - const [completion, setCompletion] = useState([]); + // const [info, setInfo] = useRecoilState(myTodo); - // console.log('진행 중 :', progress); - // console.log('완료 :', completion); - - const { mutate: progressTodo, isLoading } = useMutation(PostProgressTodo, { - onSuccess: data => { - // console.log('진행중 불러오는 중'); - setProgress(data); - }, - }); - - const { mutate: completionTodo } = useMutation(PostCompletionTodo, { - onSuccess: data => { - // console.log('완료 불러오는중'); - setCompletion(data); + const { data: myTodo } = useQuery(['ToDo'], GetMyTodo, { + onSuccess: response => { + // console.log(response); }, }); - // const today = `${new Date().getFullYear()}-${new Date().getMonth() + 1}`; - // console.log(today); - - useEffect(() => { - // console.log(info); - // window.location.reload(); - if ( - info.targetDate !== null && - info.KeyResultIds !== null && - info.teamMembers !== null && - info.KeyResultIds.length !== 0 - ) { - // console.log('통신한다'); - progressTodo({ info }); - completionTodo({ info }); - } else { - // console.log('info바꿔야해요'); - setInfo({ ...info, targetDate: todayFormat }); - } - }, [count]); - // 체크 수정 const { mutate: patchCheckmutate } = useMutation(PatchCheck, { onSuccess: response => { @@ -85,24 +38,20 @@ const TodoItem = ({ todayFormat }) => { action: 'TODO 완료', }); } - queryClient.invalidateQueries(['TODO']); - queryClient.invalidateQueries(['completionTodo']); - setCount(count - 1); + queryClient.invalidateQueries(['ToDo']); + queryClient.invalidateQueries(['OKR']); }, onError: response => {}, }); - const Check = ({ data }) => { + const Check = ({ el }) => { const onClickCheck = () => { - // console.log('누름'); - const id = data.toDoId; + const id = el.toDoId; patchCheckmutate({ id }); - // progressTodo({ info }); - // completionTodo({ info }); - // toast('할 일을 완료했습니다.'); + toast('수정되었습니다.'); }; - if (data.completion) { + if (el.completion) { return ( <img className='completion' @@ -114,16 +63,14 @@ const TodoItem = ({ todayFormat }) => { } else { return <div className='notCompletion' onClick={onClickCheck}></div>; } - - // return <div className='check' onClick={onClickCheck} />; }; - const Priority = ({ data }) => { - if (data.priority === 1) { + const Priority = ({ el }) => { + if (el.priority === 1) { return <img className='priority' src={red} alt='' />; - } else if (data.priority === 2) { + } else if (el.priority === 2) { return <img className='priority' src={yellow} alt='' />; - } else if (data.priority === 3) { + } else if (el.priority === 3) { return <img className='priority' src={blue} alt='' />; } else { return; @@ -168,95 +115,81 @@ const TodoItem = ({ todayFormat }) => { return ( <> - {/* {progress} */} - {progress?.map(el => ( - <React.Fragment key={el.userId}> - {el.progressTodo.map(data => ( - <div className='todo' key={data.toDoId}> - <Check data={data} /> - <div className='title' style={{ color: data.color }}> - {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} - </div> - <div className='detail'> - <div - className='nameDate' - onClick={() => { - patchTodo( - data.toDoId, - data.toDo, - data.memo, - data.startDate, - data.startDateTime, - data.endDate, - data.endDateTime, - data.priority - ); - }}> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - <p> - {data.fstartDate} - {data.fendDate} - </p> - </div> - </div> - <Priority data={data} /> + {myTodo?.progressTodo.map(el => ( + <div className='todo' key={el.toDoId}> + <Check el={el} /> + <div className='title' style={{ color: el.color }}> + {el.keyResultId === null ? 'None' : `KR${el.krNumber}`} + </div> + <div className='detail'> + <div + className='nameDate' + onClick={() => { + patchTodo( + el.toDoId, + el.toDo, + el.memo, + el.startDate, + el.startDateTime, + el.endDate, + el.endDateTime, + el.priority + ); + }}> + <div className='todoName'>{el.toDo}</div> + {el.memo === '' ? null : <div className='memo'>{el.memo}</div>} + <p> + {el.fstartDate} - {el.fendDate} + </p> </div> - ))} - </React.Fragment> + </div> + <Priority el={el} /> + </div> ))} - {completion?.map(el => ( - <React.Fragment key={el.userId}> - {el.completionTodo.map(data => ( - <div className='todo' key={data.toDoId}> - <Check data={data} /> - <div className='title' style={{ color: data.color }}> - {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} + {myTodo?.completionTodo?.map(el => ( + <div className='todo' key={el.toDoId}> + <Check el={el} /> + <div className='title' style={{ color: el.color }}> + {el.keyResultId === null ? 'None' : `KR${el.krNumber}`} + </div> + <div + className='detail' + style={{ + textDecoration: 'line-through', + color: 'rgb(155, 155, 155)', + }}> + <div + className='nameDate' + onClick={() => { + patchTodo( + el.toDoId, + el.toDo, + el.memo, + el.startDate, + el.startDateTime, + el.endDate, + el.endDateTime, + el.priority + ); + }}> + <div className='todoName' style={{ color: 'rgb(155, 155, 155)' }}> + {el.toDo} </div> - <div - className='detail' - style={{ - textDecoration: 'line-through', - color: 'rgb(155, 155, 155)', - }}> - <div - className='nameDate' - onClick={() => { - patchTodo( - data.toDoId, - data.toDo, - data.memo, - data.startDate, - data.startDateTime, - data.endDate, - data.endDateTime, - data.priority - ); - }}> - <div - className='todoName' - style={{ color: 'rgb(155, 155, 155)' }}> - {data.toDo} - </div> - {data.memo === '' ? null : ( - <div - className='memo' - style={{ color: 'rgb(155, 155, 155)' }}> - {data.memo} - </div> - )} - <p style={{ color: 'rgb(155, 155, 155)' }}> - {data.fstartDate} - {data.fendDate} - </p> + {el.memo === '' ? null : ( + <div className='memo' style={{ color: 'rgb(155, 155, 155)' }}> + {el.memo} </div> - </div> - <Priority data={data} /> + )} + <p style={{ color: 'rgb(155, 155, 155)' }}> + {el.fstartDate} - {el.fendDate} + </p> </div> - ))} - </React.Fragment> + </div> + <Priority el={el} /> + </div> ))} + <Potal> {todoModalOn ? <TodoPathModal onCloseModal={onTodoCloseModal} /> : null} </Potal> diff --git a/src/components/dashboard/calendar/Calendar.jsx b/src/components/dashboard/calendar/Calendar.jsx index e637a03..04a53e9 100644 --- a/src/components/dashboard/calendar/Calendar.jsx +++ b/src/components/dashboard/calendar/Calendar.jsx @@ -1,4 +1,4 @@ -import { GetTodo } from '../../../apis/apiGET'; +import { GetMyTodo, GetTodo } from '../../../apis/apiGET'; import { patchTodoInfo } from '../../../store/store'; import { Container } from '../../../styles/Calendar.styled'; import Potal from '../../global/globalModal/Potal'; @@ -14,7 +14,6 @@ import { useSetRecoilState } from 'recoil'; export default function Calendar() { const [todoModalOn, setTodoModalOn] = useState(false); const [createModalOn, setCreateModalOn] = useState(false); - const array = []; const [calendarData, setCalendarData] = useState(); const [fromCalendar, setFromCalendar] = useState(true); @@ -23,6 +22,8 @@ export default function Calendar() { startDateTime: '', }); + const array = []; + const setPatchTodoInfo = useSetRecoilState(patchTodoInfo); const closePathModal = () => { @@ -56,13 +57,16 @@ export default function Calendar() { setTodoModalOn(!todoModalOn); }; - const { data: getTodo } = useQuery(['TODO'], GetTodo, { + const { data: myTodo } = useQuery(['ToDo'], GetMyTodo, { onSuccess: response => { - response?.map(el => { + // console.log(response); + const completion = [...response.completionTodo]; + const progress = [...response.progressTodo]; + const newArray = [...completion, ...progress]; + + newArray?.map(el => { const endDate = new Date(el.endDate); endDate.setDate(endDate.getDate() + 1); - // console.log(endDate.toISOString()); - // console.log('----'); const newEndDate = endDate.toISOString().split('T')[0]; let obj = { @@ -87,7 +91,6 @@ export default function Calendar() { return setCalendarData(array); }); }, - onError: response => {}, }); const handleDateClick = clickDateInfo => { @@ -96,13 +99,10 @@ export default function Calendar() { start: clickDateInfo.startStr, startDateTime: '00:00', }); - // console.log('생성'); setCreateModalOn(true); }; const handleEventClick = clickDateInfo => { - // console.log(clickDateInfo.event.id); - // console.log('수정'); patchTodo( clickDateInfo.event.id, clickDateInfo.event.extendedProps.todo, diff --git a/src/components/dashboard/okr/OkrItem.jsx b/src/components/dashboard/okr/OkrItem.jsx index 48a31ca..7d82f34 100644 --- a/src/components/dashboard/okr/OkrItem.jsx +++ b/src/components/dashboard/okr/OkrItem.jsx @@ -19,8 +19,6 @@ import { import KrPatchModal from '../../global/globalModal/KrPatchModal.jsx'; import OkrPatchModal from '../../global/globalModal/OkrPatchModal.jsx'; import Portal from '../../global/globalModal/Potal.jsx'; -import ProgressPatchModal from '../../global/globalModal/ProgressPatchModal.jsx'; -import Emotion from '../../global/globaldropdown/Emotion.jsx'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useRef, useEffect } from 'react'; @@ -35,7 +33,7 @@ const OkrItem = () => { const setPatchkrInfo = useSetRecoilState(patchKRInfo); const setPatchProgressInfo = useSetRecoilState(patchProgressInfo); - const [openDropdownId, setOpenDropdownId] = useState(null); + // const [openDropdownId, setOpenDropdownId] = useState(null); /**O 모달 닫는 함수 */ const onObjectiveCloseModal = () => { @@ -207,17 +205,7 @@ const OkrItem = () => { </div> <div className='right'> - <PersentBox - ObColor={Obdata.color} - state='Objective' - onClick={() => { - patchProgress( - Obdata.objectiveId, - Obdata.progress, - 'Objective', - Obdata.color - ); - }}> + <PersentBox ObColor={Obdata.color} state='Objective'> <input type='range' min={0} @@ -238,7 +226,6 @@ const OkrItem = () => { return ( <KRBox key={data.keyResultId} color={Obdata.color}> <div className='left'> - {/* <div className='mount'></div> */} <div className='logo'>KR{data.krNumber}</div> <div className='name' @@ -250,17 +237,7 @@ const OkrItem = () => { </div> <div className='right'> - <PersentBox - onClick={() => { - patchProgress( - data.keyResultId, - data.progress, - 'KR', - Obdata.color - ); - }} - ObColor={Obdata.color} - state='KR'> + <PersentBox ObColor={Obdata.color} state='KR'> <input type='range' min={0} @@ -273,17 +250,6 @@ const OkrItem = () => { style={{ width: `${data.progress}%` }}></div> </PersentBox> <div className='percent'>{data.progress}%</div> - - {KRArray && ( - <Emotion - showEmotion={showEmotion} - setShowEmotion={setShowEmotion} - keyResultId={data.keyResultId} - emotionState={data.emotion} - openDropdownId={openDropdownId} - setOpenDropdownId={setOpenDropdownId} - /> - )} </div> </KRBox> ); @@ -314,12 +280,6 @@ const OkrItem = () => { modalRef={krModalRef} modalOutSideClick={krModalOutSideClick} /> - ) : progressModalOn ? ( - <ProgressPatchModal - onCloseModal={onProgressCloseModal} - modalRef={progressModalRef} - modalOutSideClick={progressModalOutSideClick} - /> ) : null} </Portal> </div> diff --git a/src/components/global/Toast.jsx b/src/components/global/Toast.jsx index 84cec5c..2fd767a 100644 --- a/src/components/global/Toast.jsx +++ b/src/components/global/Toast.jsx @@ -8,9 +8,10 @@ const Toast = () => { <> <StToastContainer position='top-center' - limit={1} + // position='bottom-left' + // limit={1} closeButton={false} - autoClose={700} + autoClose={800} hideProgressBar={false} closeOnClick pauseOnFocusLoss diff --git a/src/components/global/globalModal/TodoModal.jsx b/src/components/global/globalModal/TodoModal.jsx index 692dff2..9f867c9 100644 --- a/src/components/global/globalModal/TodoModal.jsx +++ b/src/components/global/globalModal/TodoModal.jsx @@ -163,13 +163,14 @@ const TodoModal = ({ const { mutate: createTodo } = useMutation(CreateTodo, { onSuccess: response => { + console.log('생성됨'); if (process.env.NODE_ENV !== 'development') { ReactGA.event({ category: '버튼', action: 'TODO 생성', }); } - queryClient.invalidateQueries(['TODO']); + queryClient.invalidateQueries(['ToDo']); // queryClient.invalidateQueries(['ALLTODO']); // queryClient.invalidateQueries(['PASTTODO']); diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 85822fb..74ad411 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -1,5 +1,10 @@ import { DeleteTodo } from '../../../apis/apiDELETE'; import { PatchTodo } from '../../../apis/apiPATCH'; +import { + PostCompletionTodo, + PostExpirationTodo, + PostProgressTodo, +} from '../../../apis/apiPOST'; import calender from '../../../assets/calender.png'; import close from '../../../assets/close.png'; import memo from '../../../assets/memo.png'; @@ -7,8 +12,12 @@ import todo from '../../../assets/todoTODO.png'; import trash from '../../../assets/trash.png'; import { change, + completionAtom, + expirationAtom, myChange, patchTodoInfo, + progressAtom, + todoDateInfo, ToggleEndState, ToggleStartState, } from '../../../store/store'; @@ -28,7 +37,7 @@ import ReactGA from 'react-ga4'; import DatePicker, { DateObject } from 'react-multi-date-picker'; import TimePicker from 'react-multi-date-picker/plugins/time_picker'; import { toast } from 'react-toastify'; -import { useRecoilState, useRecoilValue } from 'recoil'; +import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; const TodoPathModal = ({ onCloseModal }) => { useEffect(() => { @@ -158,9 +167,35 @@ const TodoPathModal = ({ onCloseModal }) => { const queryClient = useQueryClient(); - const [count, setCount] = useRecoilState(change); - const [myCount, setMyCount] = useRecoilState(myChange); - console.log(count); + // const [count, setCount] = useRecoilState(change); + // const [myCount, setMyCount] = useRecoilState(myChange); + // console.log(count); + + const setExpiration = useSetRecoilState(expirationAtom); + const setProgress = useSetRecoilState(progressAtom); + const setCompletion = useSetRecoilState(completionAtom); + // 기한 만료 + const { mutate: expirationTodo } = useMutation(PostExpirationTodo, { + onSuccess: response => { + setExpiration(response); + }, + }); + + // 진행중 + const { mutate: progressTodo } = useMutation(PostProgressTodo, { + onSuccess: response => { + setProgress(response); + }, + }); + + // 완료 + const { mutate: completionTodo } = useMutation(PostCompletionTodo, { + onSuccess: response => { + setCompletion(response); + }, + }); + + const [info, setInfo] = useRecoilState(todoDateInfo); const { mutate: patchTodo } = useMutation(PatchTodo, { onSuccess: response => { @@ -170,16 +205,11 @@ const TodoPathModal = ({ onCloseModal }) => { action: 'TODO 수정', }); } - queryClient.invalidateQueries(['TODO']); - queryClient.setQueryData(['patchTodo'], title); - setCount(count + 1); - setMyCount(myCount + 1); - // console.log(queryClient.getQueriesData(['patchTodo'])); - // console.log('---------------', queryClient.getQueryData(['TODO'])); - // queryClient.invalidateQueries(['ALLTODO']); - queryClient.invalidateQueries(['PASTTODO']); - - // queryClient.invalidateQueries(['progress']); + queryClient.invalidateQueries(['ToDo']); + expirationTodo({ info }); + progressTodo({ info }); + completionTodo({ info }); + // queryClient.setQueryData(['patchTodo'], title); }, onError: response => { if (process.env.NODE_ENV !== 'development') { @@ -228,8 +258,8 @@ const TodoPathModal = ({ onCloseModal }) => { action: 'TODO 삭제', }); } - queryClient.invalidateQueries(['TODO']); - queryClient.invalidateQueries(['ALLTODO']); + queryClient.invalidateQueries(['ToDo']); + // queryClient.invalidateQueries(['ALLTODO']); onCloseModal(); toast('해당 To Do가 삭제가 완료되었습니다.'); }, diff --git a/src/components/global/globaldropdown/Emotion.jsx b/src/components/global/globaldropdown/Emotion.jsx deleted file mode 100644 index 7da9af8..0000000 --- a/src/components/global/globaldropdown/Emotion.jsx +++ /dev/null @@ -1,167 +0,0 @@ -import { PatchEmotion } from '../../../apis/apiPATCH'; -import good from '../../../assets/newemoji1.png'; -import normal from '../../../assets/newemoji2.png'; -import bad from '../../../assets/newemoji3.png'; -import info from '../../../assets/question.png'; -import { EmotionSelect } from './dropDown.styled'; -import { emotion } from './dropdown'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useEffect, useRef, useState } from 'react'; -import ReactGA from 'react-ga4'; - -const Emotion = ({ - setShowEmotion, - showEmotion, - keyResultId, - emotionState, - openDropdownId, - setOpenDropdownId, -}) => { - // console.log('showEmotion :', showEmotion); - // console.log('keyResultId :', keyResultId); - // console.log('emotionState :', emotionState); - // console.log('openDropdownId :', openDropdownId); - // console.log('---------'); - const queryClient = useQueryClient(); - - const [open, setOpen] = useState(false); - // console.log(open); - - // const test = () => { - // setOpen(!open); - // }; - - // 자신감 수정 - const { mutate: patchEmotionmutate } = useMutation(PatchEmotion, { - onSuccess: response => { - queryClient.invalidateQueries(['OKR']); - if (process.env.NODE_ENV !== 'development') { - ReactGA.event({ - category: '버튼', - action: '자신감 수정', - }); - } - }, - onError: response => { - alert('팀장 및 자신이 작성한 OKR만 수정 가능합니다.'); - }, - }); - - // const isOpen = openDropdownId === keyResultId; - - const DropDownItem = ({ setIsOpen, isOpen, el, name, keyResultId }) => { - const ValueClick = () => { - let id = keyResultId; - let value = { emoticon: Number(name) }; - setOpen(false); - patchEmotionmutate({ id, value }); - }; - - return ( - <li onClick={ValueClick}> - <div - style={{ - background: `url(${el.emotion}) no-repeat center / 100%`, - width: '31px', - height: '31px', - margin: '0 auto', - }} - /> - </li> - ); - }; - - const onClick = e => { - setOpen(!open); - }; - - const ImgBox = () => { - if (emotionState === 0) { - return ( - <div - className='emotion' - onClick={onClick} - style={{ - background: `url(${normal}) no-repeat center / 100%`, - }}></div> - ); - } else if (emotionState === 1) { - return ( - <div - className='emotion' - onClick={onClick} - style={{ - background: `url(${good}) no-repeat center / 100%`, - }}></div> - ); - } else { - return ( - <div - className='emotion' - onClick={onClick} - style={{ - background: `url(${bad}) no-repeat center / 100%`, - }}></div> - ); - } - }; - - const selectRef = useRef(); - - // 튤팁 - const [show, setShow] = useState(false); - // console.log(show); - const showTooltip = () => { - setShow(!show); - }; - - // useEffect(() => { - // // console.log('effect'); - // const clickOutside = e => { - // // console.log(e); - // // console.log(selectRef.current); - // // console.log(e.target); - // if (selectRef.current !== e.target) { - // // setIsOpen(!isOpen); - // // isOpen = false; - // } - // // console.log(selectRef.current && !selectRef.current.contains(e.target)); - // // if (selectRef.current && !selectRef.current.contains(e.target)) { - // // setShow(!isOpen); - // // } - // }; - - // if (open) { - // window.addEventListener('click', clickOutside); - // } - // return () => { - // window.removeEventListener('click', clickOutside); - // }; - // }, [open]); - - return ( - <EmotionSelect> - <ImgBox /> - {open && ( - <ul ref={selectRef}> - <div className='tooltip'> - <span>자신감 지표</span> - {/* <img src={info} alt='info' onClick={showTooltip} /> */} - </div> - {emotion.list.map((el, index) => ( - <DropDownItem - key={index} - name={el.name} - setIsOpen={setOpenDropdownId} - open={open} - el={el} - keyResultId={keyResultId} - /> - ))} - </ul> - )} - </EmotionSelect> - ); -}; - -export default Emotion; diff --git a/src/components/global/globaldropdown/PatchPriority.jsx b/src/components/global/globaldropdown/PatchPriority.jsx index aa5a2b5..da6dc64 100644 --- a/src/components/global/globaldropdown/PatchPriority.jsx +++ b/src/components/global/globaldropdown/PatchPriority.jsx @@ -10,10 +10,10 @@ const PatchPriority = ({ title, setTitle }) => { const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); const [finalValue, setFinalValue] = useState(`${title.priority}순위`); - const { data: getTodoData } = useQuery(['TODO'], GetTodo, { - onSuccess: response => {}, - onError: response => {}, - }); + // const { data: getTodoData } = useQuery(['TODO'], GetTodo, { + // onSuccess: response => {}, + // onError: response => {}, + // }); const DropDownItem = ({ value, setFinalValue, @@ -53,7 +53,7 @@ const PatchPriority = ({ title, setTitle }) => { <input type='text' value={finalValue} - readOnly={true} + // readOnly onClick={() => setIsOpen(!isOpen)} /> <TodoDropIcon src={Arrow} /> diff --git a/src/components/global/globaldropdown/PriorityDropDown.jsx b/src/components/global/globaldropdown/PriorityDropDown.jsx index ab5d1ef..2e8c352 100644 --- a/src/components/global/globaldropdown/PriorityDropDown.jsx +++ b/src/components/global/globaldropdown/PriorityDropDown.jsx @@ -46,7 +46,7 @@ const PriorityDropDown = ({ todoInfo, setTodoInfo }) => { <input type='text' value={finalValue} - readOnly={true} + // readOnly={true} onClick={() => setIsOpen(!isOpen)} placeholder='우선순위' /> diff --git a/src/components/global/globaldropdown/TeamDropDown.jsx b/src/components/global/globaldropdown/TeamDropDown.jsx deleted file mode 100644 index 2fda789..0000000 --- a/src/components/global/globaldropdown/TeamDropDown.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import Arrow from '../../../assets/dropdownArrow.png'; -import { DropdownContainer, DropIcon } from './dropDown.styled'; -import { useDropDown, team } from './dropdown'; -import { useState, useRef } from 'react'; - -const TeamDropDown = ({ setUserInfo, userInfo }) => { - // 드롭다운 상태 - const dropDownRef = useRef(null); - const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); - const [finalValue, setFinalValue] = useState(''); - - const DropDownItem = ({ - value, - setFinalValue, - setIsOpen, - isOpen, - setUserInfo, - userInfo, - }) => { - const ValueClick = () => { - setFinalValue(value); - setIsOpen(!isOpen); - setUserInfo({ ...userInfo, team: value }); - }; - - return <li onClick={ValueClick}>{value}</li>; - }; - - return ( - <DropdownContainer ref={dropDownRef}> - <input - type='text' - value={finalValue} - readOnly={true} - onClick={() => setIsOpen(!isOpen)} - placeholder='부서를 선택하세요' - /> - <DropIcon src={Arrow} /> - {isOpen && ( - <ul> - {team.list.map((value, index) => ( - <DropDownItem - key={index} - value={value} - setIsOpen={setIsOpen} - isOpen={isOpen} - setFinalValue={setFinalValue} - userInfo={userInfo} - setUserInfo={setUserInfo} - /> - ))} - </ul> - )} - </DropdownContainer> - ); -}; - -export default TeamDropDown; diff --git a/src/components/global/globaldropdown/TeamPosiDropDown.jsx b/src/components/global/globaldropdown/TeamPosiDropDown.jsx deleted file mode 100644 index d19a54d..0000000 --- a/src/components/global/globaldropdown/TeamPosiDropDown.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import Arrow from '../../../assets/dropdownArrow.png'; -import { DropdownContainer, DropIcon } from './dropDown.styled'; -import { useDropDown, teamPosi } from './dropdown'; -import { useState, useRef } from 'react'; - -const TeamPosiDropDown = ({ setUserInfo, userInfo }) => { - // 드롭다운 상태 - const dropDownRef = useRef(null); - const [isOpen, setIsOpen] = useDropDown(dropDownRef, false); - - const [finalValue, setFinalValue] = useState(''); - - const DropDownItem = ({ - value, - setFinalValue, - setIsOpen, - isOpen, - setUserInfo, - userInfo, - }) => { - const ValueClick = () => { - setFinalValue(value); - setIsOpen(!isOpen); - - setUserInfo({ ...userInfo, teamposition: value }); - }; - - return <li onClick={ValueClick}>{value}</li>; - }; - - return ( - <DropdownContainer ref={dropDownRef} className='container'> - <input - id='teamPosition' - type='text' - value={userInfo.teamposition} - readOnly={true} - onClick={() => setIsOpen(!isOpen)} - placeholder='직급을 선택하세요' - /> - <DropIcon src={Arrow} /> - {isOpen && ( - <ul> - {teamPosi.list.map((value, index) => ( - <DropDownItem - key={index} - value={value} - setIsOpen={setIsOpen} - isOpen={isOpen} - setFinalValue={setFinalValue} - userInfo={userInfo} - setUserInfo={setUserInfo} - /> - ))} - </ul> - )} - </DropdownContainer> - ); -}; - -export default TeamPosiDropDown; diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 0741e30..70f6f74 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -15,8 +15,7 @@ export default function Header() { }, [token]); const onLogout = () => { - localStorage.removeItem('accesstoken'); - setToken(null); + localStorage.clear(); navigate('/signin'); }; @@ -50,7 +49,7 @@ export default function Header() { }}> 사용 가이드 </Guide> - {token !== null || undefined ? ( + {token !== null ? ( <> <img src={logoutImg} diff --git a/src/components/global/header/header.styled.js b/src/components/global/header/header.styled.js index 21c3d1d..600c53a 100644 --- a/src/components/global/header/header.styled.js +++ b/src/components/global/header/header.styled.js @@ -57,14 +57,15 @@ export const StNavi = styled.div` display: flex; align-items: center; justify-content: center; + padding: 0 15rem; `; export const StNaviBar = styled.div` width: 100%; height: 100%; display: flex; - align-items: center; - justify-content: center; + /* align-items: center; */ + /* justify-content: center; */ gap: 50px; div { border-radius: 15px 15px 0 0; diff --git a/src/components/member/LoginForm.jsx b/src/components/member/LoginForm.jsx index 3eb4721..54f54dc 100644 --- a/src/components/member/LoginForm.jsx +++ b/src/components/member/LoginForm.jsx @@ -78,7 +78,6 @@ const LoginForm = () => { action: '로그인', }); } - localStorage.setItem('Id', userInfo.email); localStorage.setItem('accesstoken', response.accessToken); toast('로그인이 성공적으로 되었습니다.'); navigate('/'); diff --git a/src/components/member/RegisterForm.jsx b/src/components/member/RegisterForm.jsx index 27f739a..e9df9b6 100644 --- a/src/components/member/RegisterForm.jsx +++ b/src/components/member/RegisterForm.jsx @@ -12,7 +12,6 @@ import { HelpBox, } from '../../styles/sign.styled'; import Toast from '../global/Toast'; -import TeamPosiDropDown from '../global/globaldropdown/TeamPosiDropDown'; import { OnChange } from '../global/onChange'; import { useMutation } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; @@ -218,14 +217,6 @@ const RegisterForm = () => { </InputBox> {errors.team && <div className='valid'>{errors.team}</div>} - {/* <Label htmlFor='teamPosition'>직급</Label> - <InputBox> - <TeamPosiDropDown setUserInfo={setUserInfo} userInfo={userInfo} /> - </InputBox> - {errors.teamposition && ( - <div className='valid'>{errors.teamposition}</div> - )} */} - <LoginBtn type='submit'>회원가입</LoginBtn> <HelpBox style={{ marginBottom: '100px' }}> <span onClick={() => navigate('/signin')}>로그인 하러가기</span> diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index f5b9169..86af81d 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -1,11 +1,9 @@ -import { GetKR, GetUser } from '../../apis/apiGET'; import { PatchCheck, PatchTodo } from '../../apis/apiPATCH'; import { PostCompletionTodo, PostExpirationTodo, PostProgressTodo, } from '../../apis/apiPOST'; -import badgeS from '../../assets/badgeS.png'; import others from '../../assets/badgeS.png'; import checkFull from '../../assets/checkFull.png'; import lock from '../../assets/lock.png'; @@ -16,13 +14,18 @@ import warn from '../../assets/warn.png'; import { change, clickDate, + completionArray, + completionAtom, + expirationAtom, filterTeamMemberSelector, getOKRData, isDone, krDataAtom, myUserIdSelecctor, patchTodoInfo, + progressAtom, teamMemberTodoSelector, + todayFormat, todoDateInfo, userId, userInfo, @@ -31,34 +34,25 @@ import { StCompletionTodo, StExpirationTodo, StProgressTodo, - StTodo, - StTodoItem, } from '../../styles/todo.styled'; -import { - DDay, - TodoDetailHeader, - TodoDetailItem, -} from '../../styles/tododetail.styled'; -import TodoItem from '../dashboard/TodoItem'; +import { DDay, TodoDetailHeader } from '../../styles/tododetail.styled'; import Loading from '../global/Loading'; import Potal from '../global/globalModal/Potal'; import TodoPathModal from '../global/globalModal/TodoPathModal'; import Filter from './Filter'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; import React, { useEffect, useState } from 'react'; import ReactGA from 'react-ga4'; import { toast } from 'react-toastify'; -import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -import styled from 'styled-components'; +import { useRecoilState, useRecoilValue } from 'recoil'; -const DetailTodoItem = ({ todayFormat }) => { +const DetailTodoItem = () => { const queryClient = useQueryClient(); const [todoModalOn, setTodoModalOn] = useState(false); const [patchtodoInfo, setPatchTodoInfo] = useRecoilState(patchTodoInfo); - // const [ dateInfo, setDateInfo] = useRecoilState(todoDateInfo) - // console.log('patchtodoInfo :', patchtodoInfo); - // console.log(patchtodoInfo); + + const todayData = localStorage.getItem('today'); const onTodoCloseModal = () => { setTodoModalOn(!todoModalOn); @@ -91,137 +85,109 @@ const DetailTodoItem = ({ todayFormat }) => { const [info, setInfo] = useRecoilState(todoDateInfo); const [isCompletion, setIsCompletion] = useRecoilState(isDone); // console.log(isCompletion); - // console.log('info :', info); - // console.log('---------'); - const [expiration, setExpiration] = useState([]); - const [progress, setProgress] = useState([]); - const [completion, setCompletion] = useState([]); + const [expiration, setExpiration] = useRecoilState(expirationAtom); + const [progress, setProgress] = useRecoilState(progressAtom); + const [completion, setCompletion] = useRecoilState(completionAtom); // console.log('진행 중 :', progress); // console.log('완료 :', completion); - // console.log('expiration :', expiration); - - // }); - // console.log(queryClient); - - // const { test } = useQuery(['progress'], info); - // console.log(test); - - // const queryClient = useQueryClient() + // console.log('기간만료 :', expiration); // 기한 만료 - const { - mutate: expirationTodo, - isLoading, - isError, - error, - } = useMutation(PostExpirationTodo, { - onSuccess: data => { - setExpiration(data); - - // queryClient.setQueryData(['expiration'], oldData => { - // return { - // ...oldData, - // data: [...oldData.data, data.data], - // }; - // }); - // console.log('response :', data); + const { mutate: expirationTodo } = useMutation(PostExpirationTodo, { + onSuccess: response => { + setExpiration(response); }, }); - // if (isError) { - // return <div>{error.message}</div>; - // } - // 진행중 const { mutate: progressTodo } = useMutation(PostProgressTodo, { - onSuccess: data => { - // console.log('성공했음요'); - // console.log(data); - setProgress(data); - queryClient.setQueryData(['progress'], data); + onSuccess: response => { + setProgress(response); }, }); // 완료 const { mutate: completionTodo } = useMutation(PostCompletionTodo, { - onSuccess: data => { - setCompletion(data); - - // queryClient.setQueryData(['completion'], data); - // console.log('response :', data); + onSuccess: response => { + setCompletion(response); }, }); + // console.log(expiration); + // 기한 만료 컴포넌트 const ExpirationTodo = () => { if (expiration?.length === 0) { return; } else { - return expiration.map(el => ( - <StExpirationTodo key={el.userId}> - {el.expirationTodo.map(data => ( - <div className='todo' key={data.toDoId}> - {el.myToDo ? ( - <Check data={data} /> - ) : ( - <img src={lock} alt='lock' className='lock' /> - )} - <div className='title' style={{ color: data.color }}> - {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} - </div> - {el.myToDo ? ( - <div className='detail'> - <div - className='nameDate' - onClick={() => - patchTodo( - data.toDoId, - data.toDo, - data.memo, - data.startDate, - data.startDateTime, - data.endDate, - data.endDateTime, - data.priority - ) - }> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - - <p className='mine'> - <img src={warn} alt='warn' className='warn' /> - {data.fstartDate} - {data.fendDate} - </p> - </div> + return expiration.map((el, index) => ( + <> + <h2>기한 만료 To - Do</h2> + <StExpirationTodo key={index}> + {el.expirationTodo.map(data => ( + <div className='todo' key={data.toDoId}> + {el.myToDo ? ( + <Check data={data} /> + ) : ( + <img src={lock} alt='lock' className='lock' /> + )} + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> - ) : ( - <div className='detail'> - <div className='nameDate' style={{ cursor: 'default' }}> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - - <p className='notMine'> - <img src={warn} alt='warn' className='warn' /> - <span> + {el.myToDo ? ( + <div className='detail'> + <div + className='nameDate' + onClick={() => + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ) + }> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='mine'> + <img src={warn} alt='warn' className='warn' /> {data.fstartDate} - {data.fendDate} - </span> - <span className='createUser'>{el.createUser}</span> - <img src={others} alt='others' className='other' /> - </p> + </p> + </div> </div> - </div> - )} + ) : ( + <div className='detail'> + <div className='nameDate' style={{ cursor: 'default' }}> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='notMine'> + <img src={warn} alt='warn' className='warn' /> + <span> + {data.fstartDate} - {data.fendDate} + </span> + <span className='createUser'>{el.createUser}</span> + <img src={others} alt='others' className='other' /> + </p> + </div> + </div> + )} - <Priority data={data} /> - </div> - ))} - </StExpirationTodo> + <Priority data={data} /> + </div> + ))} + </StExpirationTodo> + </> )); } }; @@ -231,106 +197,84 @@ const DetailTodoItem = ({ todayFormat }) => { if (progress?.length === 0) { return; } else { - return progress.map(el => ( - <StProgressTodo key={el.userId}> - {el.progressTodo.map(data => ( - <div className='todo' key={data.toDoId}> - {el.myToDo ? ( - <Check data={data} /> - ) : ( - <img src={lock} alt='lock' className='lock' /> - )} - - <div className='title' style={{ color: data.color }}> - {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} - </div> - - {el.myToDo ? ( - <div className='detail'> - <div - className='nameDate' - onClick={() => { - patchTodo( - data.toDoId, - data.toDo, - data.memo, - data.startDate, - data.startDateTime, - data.endDate, - data.endDateTime, - data.priority - ); - expirationTodo({ info }); - progressTodo({ info }); - completionTodo({ info }); - }}> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - - <p className='mine'> - {data.fstartDate} - {data.fendDate} - </p> - </div> - </div> - ) : ( - <div className='detail'> - <div className='nameDate' style={{ cursor: 'default' }}> - <div - className='todoName' - style={data.memo === '' ? { marginBottom: '5px' } : null}> - {data.toDo} - </div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} + return ( + <> + <h2>진행중인 To - Do</h2> + {progress.map((el, index) => ( + <StProgressTodo key={index}> + {el.progressTodo.map(data => ( + <div className='todo' key={data.toDoId}> + {el.myToDo ? ( + <Check data={data} /> + ) : ( + <img src={lock} alt='lock' className='lock' /> + )} - <p className='notMine'> - <span> - {data.fstartDate} - {data.fendDate} - </span> - <span className='createUser'>{el.createUser}</span> - <img src={others} alt='others' className='other' /> - </p> - </div> - </div> - )} - - {/* <div className='detail'> - <div - className='nameDate' - style={el.myToDo ? null : { cursor: 'default' }}> - <div - className='todoName' - style={data.memo === '' ? { marginBottom: '5px' } : null}> - {data.toDo} + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} {el.myToDo ? ( - <p className='mine'> - {data.fstartDate} - {data.fendDate} - </p> + <div className='detail'> + <div + className='nameDate' + onClick={() => { + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ); + expirationTodo({ info }); + progressTodo({ info }); + completionTodo({ info }); + }}> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='mine'> + {data.fstartDate} - {data.fendDate} + </p> + </div> + </div> ) : ( - <p className='notMine'> - <span> - {data.fstartDate} - {data.fendDate} - </span> - <span className='createUser'>{el.createUser}</span> - <img src={others} alt='others' className='other' /> - </p> + <div className='detail'> + <div className='nameDate' style={{ cursor: 'default' }}> + <div + className='todoName' + style={ + data.memo === '' ? { marginBottom: '5px' } : null + }> + {data.toDo} + </div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='notMine'> + <span> + {data.fstartDate} - {data.fendDate} + </span> + <span className='createUser'>{el.createUser}</span> + <img src={others} alt='others' className='other' /> + </p> + </div> + </div> )} - </div> - </div> */} - <Priority data={data} /> - </div> + <Priority data={data} /> + </div> + ))} + </StProgressTodo> ))} - </StProgressTodo> - )); + </> + ); } }; @@ -339,69 +283,75 @@ const DetailTodoItem = ({ todayFormat }) => { if (completion?.length === 0) { return; } else { - return completion.map(el => ( - <StCompletionTodo key={el.userId}> - {el.completionTodo.map(data => ( - <div className='todo' key={data.toDoId}> - {el.myToDo ? ( - <Check data={data} /> - ) : ( - <img src={lock} alt='lock' className='lock' /> - )} - <div className='title' style={{ color: data.color }}> - {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} - </div> + return ( + <> + <h2>완료한 To - Do</h2> - {el.myToDo ? ( - <div className='detail'> - <div - className='nameDate' - onClick={() => - patchTodo( - data.toDoId, - data.toDo, - data.memo, - data.startDate, - data.startDateTime, - data.endDate, - data.endDateTime, - data.priority - ) - }> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - - <p className='mine'> - {data.fstartDate} - {data.fendDate} - </p> - </div> - </div> - ) : ( - <div className='detail'> - <div className='nameDate' style={{ cursor: 'default' }}> - <div className='todoName'>{data.toDo}</div> - {data.memo === '' ? null : ( - <div className='memo'>{data.memo}</div> - )} - - <p className='notMine'> - <span> - {data.fstartDate} - {data.fendDate} - </span> - <span className='createUser'>{el.createUser}</span> - <img src={others} alt='others' className='other' /> - </p> + {completion.map((el, index) => ( + <StCompletionTodo key={index}> + {el.completionTodo.map(data => ( + <div className='todo' key={data.toDoId}> + {el.myToDo ? ( + <Check data={data} /> + ) : ( + <img src={lock} alt='lock' className='lock' /> + )} + <div className='title' style={{ color: data.color }}> + {data.keyResultId === null ? 'None' : `KR${data.krNumber}`} </div> - </div> - )} - <Priority data={data} /> - </div> + {el.myToDo ? ( + <div className='detail'> + <div + className='nameDate' + onClick={() => + patchTodo( + data.toDoId, + data.toDo, + data.memo, + data.startDate, + data.startDateTime, + data.endDate, + data.endDateTime, + data.priority + ) + }> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='mine'> + {data.fstartDate} - {data.fendDate} + </p> + </div> + </div> + ) : ( + <div className='detail'> + <div className='nameDate' style={{ cursor: 'default' }}> + <div className='todoName'>{data.toDo}</div> + {data.memo === '' ? null : ( + <div className='memo'>{data.memo}</div> + )} + + <p className='notMine'> + <span> + {data.fstartDate} - {data.fendDate} + </span> + <span className='createUser'>{el.createUser}</span> + <img src={others} alt='others' className='other' /> + </p> + </div> + </div> + )} + + <Priority data={data} /> + </div> + ))} + </StCompletionTodo> ))} - </StCompletionTodo> - )); + </> + ); } }; @@ -413,8 +363,7 @@ const DetailTodoItem = ({ todayFormat }) => { action: 'TODO 완료', }); } - queryClient.invalidateQueries(['TODO']); - // queryClient.invalidateQueries(['completionTodo']); + queryClient.invalidateQueries(['ToDo']); expirationTodo({ info }); progressTodo({ info }); @@ -425,38 +374,12 @@ const DetailTodoItem = ({ todayFormat }) => { }, }); - // const patchT = () =>{ - // patchMytodo({{}}) - // } - // console.log(patchtodoInfo); - // console.log(queryClient.getQueryData(['progress'])); - // const { mutate: patchMytodo } = useMutation(PatchTodo, { - // onSuccess: response => { - // if (process.env.NODE_ENV !== 'development') { - // ReactGA.event({ - // category: '버튼', - // action: 'TODO 수정', - // }); - // } - // console.log('patch성공'); - // }, - // onError: response => { - // if (process.env.NODE_ENV !== 'development') { - // ReactGA.event({ - // category: '버튼', - // action: 'TODO 수정 실패', - // }); - // } - // }, - // }); - const Check = ({ data }) => { // console.log(data); const onClickCheck = () => { const id = data.toDoId; patchCheckmutate({ id }); - // console.log('체크 눌림'); - toast('할 일을 완료했습니다.'); + toast('수정했습니다.'); }; if (data.completion) { @@ -484,29 +407,26 @@ const DetailTodoItem = ({ todayFormat }) => { return; } }; - // console.log(queryClient.getQueryState); - // console.log(queryClient.getQueryData(['patchTodo'])); - const count = useRecoilValue(change); - console.log(info); - // const test = queryClient.getQueryData(['patchTodo']); + useEffect(() => { if ( info.targetDate !== null && info.KeyResultIds !== null && info.teamMembers !== null && info.KeyResultIds.length !== 0 && + // info.KeyResultIds.length === 0 && isCompletion.length !== 0 && - isCompletion.includes('done') === true && - isCompletion.includes('notDone') === true + (isCompletion.includes('done') === true || + isCompletion.includes('notDone') === true) ) { - // console.log('통신한다?'); expirationTodo({ info }); progressTodo({ info }); completionTodo({ info }); - // window.location.reload(); - // console.log('ui 변경했다!'); } - }, [info, isCompletion, count]); + }, [info, isCompletion]); + + // console.log(info); + // console.log(isCompletion); return ( <> @@ -514,7 +434,7 @@ const DetailTodoItem = ({ todayFormat }) => { <TodoDetailHeader> <div className='header'> <div className='title'> - {info?.targetDate === todayFormat + {info?.targetDate === todayData ? 'Today' : `${info?.targetDate?.split('-')[1]}월 ${ info?.targetDate?.split('-')[2] @@ -525,20 +445,58 @@ const DetailTodoItem = ({ todayFormat }) => { </TodoDetailHeader> </DDay> - {isCompletion.length === 1 && isCompletion.includes('done') ? ( + {/* Kr을 하나라도 선택하고 완료일 때 */} + {isCompletion.length === 1 && + isCompletion.includes('done') && + info.KeyResultIds.length !== 0 && + completion.length !== 0 ? ( + <CompletionTodo /> + ) : // Kr을 하나라도 선택하고 미완료일 때 + isCompletion.length === 1 && + isCompletion.includes('notDone') && + info.KeyResultIds.length !== 0 ? ( <> - {/* <h2>--완료--</h2> */} - <CompletionTodo /> + <ProgressTodo /> + <ExpirationTodo /> </> - ) : isCompletion.length === 1 && isCompletion.includes('notDone') ? ( + ) : // kr을 하나 이상 선택하고, 완료를 선택했는데, 데이터가 없을 때 + isCompletion.length === 1 && + isCompletion.includes('done') && + completion.length === 0 && + info.KeyResultIds.length !== 0 ? ( + <h2>해당 kr의 todo가 없음</h2> + ) : // kr을 하나 이상 선택하고, 미완료를 선택했는데, 데이터가 없을 때 + isCompletion.length === 1 && + isCompletion.includes('notDone') && + progress.length === 0 && + expiration.length === 0 && + info.KeyResultIds.length !== 0 ? ( + <h2>해당 kr의 todo가 없음</h2> + ) : // 완료 필터가 둘 다 선택되지 않았을 때 + isCompletion.length === 0 ? ( <> - {/* <h2>--기간만료--</h2> */} - <ExpirationTodo /> + <h2 className='result'>검색결과 없음</h2> + <h3 className='errorMsg'>완료 필터링을 확인해주세요.</h3> + </> + ) : // Kr을 선택하지 않고, 완료 필터링도 선택하지 않았을 때 + isCompletion.length === 0 && info.KeyResultIds.length === 0 ? ( + <> + <h2 className='result'>검색결과 없음</h2> + <h3 className='errorMsg'>둘다 없음</h3> + </> + ) : // kr을 선택하지 않았을 때 + info.KeyResultIds.length === 0 ? ( + <> + <h2 className='result'>검색결과 없음</h2> + <h3 className='errorMsg'>KR을 선택하지 않았습니다.</h3> </> ) : expiration.length === 0 && progress.length === 0 && completion.length === 0 ? ( - <h2 className='noAny'>등록된 To-Do가 없습니다.</h2> + <> + <h2 className='noAny'>등록된 To-Do가 없습니다.</h2> + <h3>To - Do를 생성해주세요.</h3> + </> ) : ( <> <ProgressTodo /> diff --git a/src/components/todo/Filter.jsx b/src/components/todo/Filter.jsx index 11098df..cd68992 100644 --- a/src/components/todo/Filter.jsx +++ b/src/components/todo/Filter.jsx @@ -1,15 +1,8 @@ -import { GetKR, GetOKR } from '../../apis/apiGET'; -import checkOff from '../../assets/checkOff.png'; -import checkOn from '../../assets/checkOn.png'; -import filter from '../../assets/filter1.png'; -import { krDataAtom } from '../../store/store'; import { StFilterContainer } from '../../styles/tododetail.styled'; import DoneFilter from './DoneFilter'; import KrFilter from './KrFilter'; import SortFilter from './SortFilter'; -import { useQuery } from '@tanstack/react-query'; -import React, { useRef, useState } from 'react'; -import { useRecoilState } from 'recoil'; +import React from 'react'; const Filter = () => { return ( diff --git a/src/components/todo/KrFilter.jsx b/src/components/todo/KrFilter.jsx index a30ae27..43dee0d 100644 --- a/src/components/todo/KrFilter.jsx +++ b/src/components/todo/KrFilter.jsx @@ -36,10 +36,8 @@ const KrFilter = () => { setCheckInfo(addNone); setCheckedList(addNone); - // console.log(JSON.parse(sessionStorage.getItem('kr'))); - // setForData(JSON.parse(sessionStorage.getItem('kr'))); - setForData(JSON.parse(sessionStorage.getItem('kr'))); + setForData(JSON.parse(localStorage.getItem('kr'))); }, }); diff --git a/src/components/todo/SortFilter.jsx b/src/components/todo/SortFilter.jsx index 49813bf..63741ad 100644 --- a/src/components/todo/SortFilter.jsx +++ b/src/components/todo/SortFilter.jsx @@ -115,20 +115,20 @@ const SortFilter = () => { <> <p id='desc' onClick={clickRole}> <img src={check} alt='check' /> - 높은순 + 오래된 순 </p> <p id='asc' onClick={clickRole}> - 낮은순 + 최신 순 </p> </> ) : ( <> <p id='desc' onClick={clickRole}> - 높은순 + 오래된 순 </p> <p id='asc' onClick={clickRole}> <img src={check} alt='check' /> - 낮은순 + 최신 순 </p> </> )} @@ -148,10 +148,10 @@ const SortFilter = () => { {showCreateDate && ( <div className='sideDrop'> <p id='desc' onClick={clickRole}> - 높은순 + 오래된 순 </p> <p id='asc' onClick={clickRole}> - 낮은순 + 최신 순 </p> </div> )} @@ -173,20 +173,20 @@ const SortFilter = () => { <> <p id='desc' onClick={clickRole}> <img src={check} alt='check' /> - 높은순 + 이른 순 </p> <p id='asc' onClick={clickRole}> - 낮은순 + 늦은 순 </p> </> ) : ( <> <p id='desc' onClick={clickRole}> - 높은순 + 이른 순 </p> <p id='asc' onClick={clickRole}> <img src={check} alt='check' /> - 낮은순 + 늦은 순 </p> </> )} @@ -203,10 +203,10 @@ const SortFilter = () => { {showEndDate && ( <div className='sideDrop'> <p id='desc' onClick={clickRole}> - 높은순 + 이른 순 </p> <p id='asc' onClick={clickRole}> - 낮은순 + 늦은 순 </p> </div> )} diff --git a/src/components/todo/TeamTodo.jsx b/src/components/todo/TeamTodo.jsx index 2968df8..9b1cbb5 100644 --- a/src/components/todo/TeamTodo.jsx +++ b/src/components/todo/TeamTodo.jsx @@ -80,25 +80,27 @@ const TeamTodo = () => { }월 ${new Date().getDate()}일 ${day}`; return ( <StTeam> - <div className='title'> - <img src={badgeB} alt='' /> - <div>나의 팀 To - Do 현황</div> - </div> - <div className='today'>{today}</div> - - {getMember?.map(el => ( - <div className='member' key={el.userId}> - <div - id={el.userId} - className={ - info.teamMembers.includes(el.userId) === true ? 'have' : 'none' - } - onClick={clickMember}></div> - {/* <div className='have'></div> */} - <div className='name'>{el.name}</div> - <div className='number'>{el.createToDoCount}</div> + <div className='teamWrap'> + <div className='title'> + <img src={badgeB} alt='' /> + <div>나의 팀 To - Do 현황</div> </div> - ))} + <div className='today'>{today}</div> + + {getMember?.map(el => ( + <div className='member' key={el.userId}> + <div + id={el.userId} + className={ + info.teamMembers.includes(el.userId) === true ? 'have' : 'none' + } + onClick={clickMember}></div> + {/* <div className='have'></div> */} + <div className='name'>{el.name}</div> + <div className='number'>{el.createToDoCount}</div> + </div> + ))} + </div> </StTeam> ); }; diff --git a/src/components/todo/Todo.jsx b/src/components/todo/Todo.jsx index 2e88019..de025e3 100644 --- a/src/components/todo/Todo.jsx +++ b/src/components/todo/Todo.jsx @@ -23,38 +23,15 @@ import styled from 'styled-components'; export default function Todo() { //todo 전부 가져오기 - const now = new Date(); - let today = ''; - let tomorrow; - if (now.getMonth() + 1 < 10 && now.getDate() < 10) { - today = `${now.getFullYear()}-0${now.getMonth() + 1}-0${now.getDate()}`; - // tomorrow = `0${now.getMonth() + 1}월 0${now.getDate() + 1}일`; - sessionStorage.setItem('targetDate', today); - } else if (now.getDate() < 10) { - today = `${now.getFullYear()}-${now.getMonth() + 1}-0${now.getDate()}`; - // tomorrow = `${now.getFullYear()}-${now.getMonth() + 1}-0${ - // now.getDate() + 1 - // }`; - sessionStorage.setItem('targetDate', today); - } else if (now.getMonth() + 1 < 10) { - today = `${now.getFullYear()}-0${now.getMonth() + 1}-${now.getDate()}`; - // tomorrow = `0${now.getMonth() + 1}월 ${now.getDate() + 1}일`; - sessionStorage.setItem('targetDate', today); - } else { - today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; - // tomorrow = `${now.getMonth() + 1}월 ${now.getDate() + 1}일`; - sessionStorage.setItem('targetDate', today); - } - - console.log(today); - return ( <StSticky> <TodoDashboard> - <TodoNavi todayFormat={today} /> + {/* <TodoNavi todayFormat={today} /> */} + <TodoNavi /> <DetailTodoWrap> - <DetailTodoItem todayFormat={today} /> + {/* <DetailTodoItem todayFormat={today} /> */} + <DetailTodoItem /> </DetailTodoWrap> </TodoDashboard> <TeamTodo /> @@ -65,21 +42,16 @@ export default function Todo() { const StSticky = styled.div` display: flex; - /* background-color: pink; */ - /* position: relative; */ .notHave { width: 100%; font-size: 2.4rem; font-weight: 700; color: var(--main-color); - /* background-color: skyblue; */ } `; const TodoDashboard = styled.div` max-width: 1195px; width: 100%; - /* padding: 0 27px; */ position: relative; - /* background-color: gray; */ `; diff --git a/src/components/todo/TodoNavi.jsx b/src/components/todo/TodoNavi.jsx index a1f1796..544f519 100644 --- a/src/components/todo/TodoNavi.jsx +++ b/src/components/todo/TodoNavi.jsx @@ -1,12 +1,6 @@ import { PostWeek } from '../../apis/apiPOST'; import plus from '../../assets/plus.png'; -import { - DDay, - clickDate, - dateArray, - teamArray, - todoDateInfo, -} from '../../store/store'; +import { dateArray, todayFormat, todoDateInfo } from '../../store/store'; import { DateNavi, NaviPlus, @@ -17,19 +11,13 @@ import Potal from '../global/globalModal/Potal'; import TodoModal from '../global/globalModal/TodoModal'; import { useMutation } from '@tanstack/react-query'; import React, { useState, useRef, useEffect } from 'react'; -import { Link } from 'react-scroll'; import { useRecoilState, useRecoilValue } from 'recoil'; -const TodoNavi = ({ todayFormat }) => { - // const haveDay = getAllTodo?.map(todo => { - // return todo.targetDate; - // }) - // console.log(team); +const TodoNavi = () => { + const todayFormatData = useRecoilValue(todayFormat); const [includeData, setIncludeData] = useState([]); - // console.log('includeData :', includeData); const [dateInfo, setDateInfo] = useRecoilState(todoDateInfo); - // console.log(dateInfo); const today = new Date(); @@ -40,9 +28,6 @@ const TodoNavi = ({ todayFormat }) => { let day = date.getDay(); let week = []; - // const haveDay = includeData?.map(date => date); - // console.log(haveDay); - for (let i = 0; i < 7; i++) { // 24*60*60*1000 let newDate = new Date(date.valueOf() + 86400000 * (i - day)); @@ -83,15 +68,12 @@ const TodoNavi = ({ todayFormat }) => { dateValue = '토'; } - // console.log(haveDay?.includes(format)); - week.push({ dateValue, month: `${newDate.getMonth() + 1}`, date: `${newDate.getDate()}`, year: `${newDate.getFullYear()}`, format: format, - // includes: haveDay?.includes(format), }); } return week; @@ -105,7 +87,6 @@ const TodoNavi = ({ todayFormat }) => { }); const [forData, setForData] = useRecoilState(dateArray); - // console.log(forData); useEffect(() => { setForData({ @@ -116,13 +97,9 @@ const TodoNavi = ({ todayFormat }) => { }); }, [state]); - // console.log(test); - // console.log(state.week); - - //include 보내기 + //include 백에게 요청 const { mutate: weekDateInfo } = useMutation(PostWeek, { onSuccess: data => { - // console.log('넌 언제 동작함?'); setIncludeData(data); }, }); @@ -130,7 +107,6 @@ const TodoNavi = ({ todayFormat }) => { const onPressArrowLeft = () => { let newDate = new Date(state.date.valueOf() - 86400000 * 7); let newWeek = makeWeek(newDate); - // console.log('newWeek :', newWeek); setState({ ...state, date: newDate, @@ -147,7 +123,6 @@ const TodoNavi = ({ todayFormat }) => { const onPressArrowRight = () => { let newDate = new Date(state.date.valueOf() + 86400000 * 7); let newWeek = makeWeek(newDate); - console.log('newWeek :', newWeek); setState({ ...state, date: newDate, @@ -184,52 +159,59 @@ const TodoNavi = ({ todayFormat }) => { } }; - const [dDay, setDDay] = useState(todayFormat); - // console.log(dDay); + // 날짜누르면 D-Day가 바뀌는 함수 + const [dDay, setDDay] = useState(todayFormatData); - // const todoinfo = useRecoilValue(todoDateInfo); - // console.log('atom :', todoinfo); - - // const setTodoDateInfo = useSetRecoilState(clickDate); const clickDDay = e => { - // if (e.currentTarget.className === 'include') { - // setDDay(e.currentTarget.id); - // } setDDay(e.currentTarget.id); setDateInfo({ ...dateInfo, targetDate: e.currentTarget.id }); - sessionStorage.setItem('targetDate', e.currentTarget.id); + localStorage.setItem('targetDate', e.currentTarget.id); }; useEffect(() => { - // console.log('네비꺼'); - setDateInfo({ ...dateInfo, targetDate: todayFormat }); - // setForData({ info }); - }, []); - - useEffect(() => { - // console.log(forData); if (forData.Sunday !== '' && forData.Saturday !== '') { weekDateInfo({ forData }); } - }, [forData, dateInfo]); + }, [weekDateInfo, forData]); const Today = ({ el }) => { - // console.log(el.format === dDay); if ( Number(el.date) === dateD && Number(el.month) === dateM && Number(el.year) === dateY ) { return ( - <span className='date' style={{ color: '#ff8336' }}> - {el.date} - </span> + <> + <span className='label' style={{ color: '#ff8336' }}> + {el.dateValue} + </span> + <span className='date' style={{ color: '#ff8336' }}> + {el.date} + </span> + </> ); } else { return ( - <span className='date' style={{ color: '#4b4b4b' }}> - {el.date} - </span> + <> + <span + className='label' + style={ + el.dateValue === '일' + ? { + color: '#ff0000', + } + : el.dateValue === '토' + ? { + color: '#0000ff', + } + : null + }> + {el.dateValue} + </span> + <span className='date' style={{ color: '#4b4b4b' }}> + {el.date} + </span> + </> ); } }; @@ -245,7 +227,6 @@ const TodoNavi = ({ todayFormat }) => { <div className='right'> <div className='prev' onClick={onPressArrowLeft} /> <div className='next' onClick={onPressArrowRight} /> - {/* <div className='today'>오늘</div> */} <NaviPlus onClick={createTodo}> <img src={plus} alt='' /> </NaviPlus> @@ -258,7 +239,6 @@ const TodoNavi = ({ todayFormat }) => { <div onClick={clickDDay} id={el.format} - // style={{ border: '2px solid rgb(255,131,54)' }} style={ el.dateValue === '일' ? { @@ -275,7 +255,6 @@ const TodoNavi = ({ todayFormat }) => { className={ includeData?.includes(el.format) === false ? 'day' : 'include' }> - <span className='label'>{el.dateValue}</span> <Today el={el} /> {includeData?.includes(el.format) === false ? null : ( <div className='includeCh'></div> @@ -288,7 +267,6 @@ const TodoNavi = ({ todayFormat }) => { className={ includeData?.includes(el.format) === false ? 'day' : 'include' }> - <span className='label'>{el.dateValue}</span> <Today el={el} /> {includeData?.includes(el.format) === false ? null : ( <div className='includeCh'></div> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 02c988c..6d3116c 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -12,6 +12,7 @@ import { myChange, myTodo, teamMemberAtom, + todayFormat, todoDateInfo, userDetail, userId, @@ -34,15 +35,11 @@ export default function Mainpage() { // accesstoken 디코딩 const [userInfo, setUserInfo] = useRecoilState(userDetail); - // 지울 가능성 있음 - const [info, setInfo] = useRecoilState(todoDateInfo); - // console.log('info :', info); - // 지울 가능성 있음 - const [myInfo, setMyInfo] = useRecoilState(myTodo); - // console.log('myInfo :', myInfo); // 유저 id 상태관리 - const [uid, setUid] = useRecoilState(userId); + const setUid = useSetRecoilState(userId); + + const [decodeId, setDecodeId] = useState(0); const [accessToken, setAccessToken] = useState( localStorage.getItem('accesstoken') @@ -52,77 +49,65 @@ export default function Mainpage() { if (localStorage.getItem('accesstoken')) { const decodeToken = jwt_decode(accessToken); const extractedUid = decodeToken.userId; - setUid(() => extractedUid); + setDecodeId(extractedUid); } else { navigate('/signin'); } - }, [localStorage.getItem('accesstoken')]); + }, [accessToken]); //userInfo const { userinfo, isLoading } = useQuery( ['userInfo'], - () => GetUserInfo(uid), + () => GetUserInfo(decodeId), { - enabled: !!uid, + enabled: !!decodeId, onSuccess: data => { setUserInfo(data); - // sessionStorage.setItem('userId', data.userId); + localStorage.setItem('userId', data.userId); setUid(data.userId); - setInfo({ ...info, teamMembers: [uid] }); - setMyInfo({ ...myInfo, teamMembers: [uid] }); }, } ); //okrData - const setOkrList = useSetRecoilState(getOKRData); - const { getokrdata } = useQuery(['OKR'], GetOKR, { - onSuccess: data => { - setOkrList(data); - }, - }); - - // const setTeamMemberAtom = useSetRecoilState(teamMemberAtom); + const setKrData = useSetRecoilState(krDataAtom); - // const { data: getMember } = useQuery(['MEMBER'], GetUser, { - // onSuccess: response => { - // console.log(response); - // setTeamMemberAtom(response); - // }, - // onError: response => {}, - // }); - - // const [count, setCount] = useRecoilState(myChange); - const [krdata, setKrData] = useRecoilState(krDataAtom); - // console.log(krdata); const { data: getKr } = useQuery(['KR'], GetKR, { onSuccess: response => { - // setKrState(response); - // console.log('response :', response); + // console.log(response); + setKrData(response); + // todo페이지에서 필요한 kr id const filterArray = response.map(el => el.keyResultId); filterArray.push(0); - sessionStorage.setItem('kr', JSON.stringify(filterArray)); - setKrData(response); - setInfo({ ...info, KeyResultIds: filterArray }); - setMyInfo({ ...myInfo, KeyResultIds: filterArray }); - // setCount(count + 1); + localStorage.setItem('kr', JSON.stringify(filterArray)); }, }); + // 오늘 날짜 포맷 2023-01-01 + const setTodayFormat = useSetRecoilState(todayFormat); + const now = new Date(); let today = ''; if (now.getMonth() + 1 < 10 && now.getDate() < 10) { today = `${now.getFullYear()}-0${now.getMonth() + 1}-0${now.getDate()}`; - sessionStorage.setItem('targetDate', today); + localStorage.setItem('targetDate', today); + localStorage.setItem('today', today); + setTodayFormat(today); } else if (now.getDate() < 10) { today = `${now.getFullYear()}-${now.getMonth() + 1}-0${now.getDate()}`; - sessionStorage.setItem('targetDate', today); + localStorage.setItem('targetDate', today); + localStorage.setItem('today', today); + setTodayFormat(today); } else if (now.getMonth() + 1 < 10) { today = `${now.getFullYear()}-0${now.getMonth() + 1}-${now.getDate()}`; - sessionStorage.setItem('targetDate', today); + localStorage.setItem('targetDate', today); + localStorage.setItem('today', today); + setTodayFormat(today); } else { today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; - sessionStorage.setItem('targetDate', today); + localStorage.setItem('targetDate', today); + localStorage.setItem('today', today); + setTodayFormat(today); } if (isLoading) { diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx index 7dfb0cc..019db4e 100644 --- a/src/pages/TodoPage.jsx +++ b/src/pages/TodoPage.jsx @@ -3,9 +3,16 @@ import Menu from '../components/dashboard/Menu'; import Todo from '../components/todo/Todo'; import { clickDate, + dateArray, + isDone, krDataAtom, myUserIdSelecctor, + teamMemberAtom, + test, todoDateInfo, + todoListState, + userDetail, + userId, } from '../store/store'; import { StWrap, StWrapBackground } from '../styles/mainpage.styled'; import { useQuery } from '@tanstack/react-query'; @@ -28,13 +35,26 @@ const TodoPage = () => { // }, // }); + const detail = useRecoilValue(userDetail); + const id = useRecoilValue(userId); + // const okr = useRecoilValue(getOKRData); + const kr = useRecoilValue(krDataAtom); + const list = useRecoilValue(todoListState); + const dateInfo = useRecoilValue(todoDateInfo); + const array = useRecoilValue(dateArray); + const done = useRecoilValue(isDone); + const team = useRecoilValue(teamMemberAtom); + + const temp = useRecoilValue(test); + // console.log('test결과 ::', temp); + + const date = useRecoilValue(clickDate); + + // console.log(dateInfo); + return ( <StWrapBackground> <StWrap> - {/* <aside> - <Menu /> - </aside> */} - <main> <Todo /> </main> diff --git a/src/store/store.js b/src/store/store.js index b643085..7aa7c0b 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -9,13 +9,12 @@ export const userDetail = atom({ // accesstoken에서 userId값 추출 export const userId = atom({ key: 'userId', - default: null, + default: localStorage.getItem('userId'), }); -//OKRData가져오기 -export const getOKRData = atom({ - key: 'getOKRData', - default: null, +export const todayFormat = atom({ + key: 'todayFormat', + default: localStorage.getItem('targetDate'), }); export const ToggleStartState = atom({ key: 'toggle', default: false }); @@ -77,37 +76,12 @@ export const myChange = atom({ default: 0, }); -// 수정 필요 -// export const okrCheckSelector = selector({ -// key: 'okrCheck', -// // get: ({ get }) => { -// // const datas = get(krDataAtom)?.map(el => { -// // console.log(el); -// // const data = { ...el }; -// // data.checked = true; -// // return data; -// // }); -// // return datas; -// // }, -// get: ({ get }) => get(krDataAtom), -// // set: ({ set }, checkList) => set(krDataAtom, checkList), -// }); - -// TodoPage에서 모든 todo 가져오기 +// 나의 todoList(진행중, 완료) 가져오기 export const todoListState = atom({ key: 'allTodoListState', default: null, }); -// export const todoListSelector = selector({ -// key: 'testAllTodoSelector', -// get: ({ get }) => { -// const todoList = get(todoListState); -// return todoList; -// }, -// }); - -//ex) 2023-01-01 export const clickDate = atom({ key: 'DDay', default: null, @@ -117,47 +91,37 @@ export const clickDate = atom({ export const todoDateInfo = atom({ key: 'todoDateInfo', default: { - targetDate: sessionStorage.getItem('targetDate'), - teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], - // teamMembers: [], - KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), - // KeyResultIds: [], - orderby: 'endDate', - orderbyrole: 'desc', - }, -}); - -export const myTodo = atom({ - key: 'myTodo', - default: { - targetDate: sessionStorage.getItem('targetDate'), - // targetDate: '', - teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], - // teamMembers: [], - // teamMembers: [], - KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), - // KeyResultIds: [], - // KeyResultIds: [], + targetDate: localStorage.getItem('targetDate'), + teamMembers: [JSON.parse(localStorage.getItem('userId'))], + KeyResultIds: JSON.parse(localStorage.getItem('kr')), orderby: 'endDate', orderbyrole: 'desc', }, }); +// todo navi(토,일) export const dateArray = atom({ key: 'dateArray', default: { Sunday: '', Saturday: '', - teamMembers: [JSON.parse(sessionStorage.getItem('userId'))], + teamMembers: [Number(localStorage.getItem('userId'))], }, }); +// 해당일자의 kr들 +export const allKr = atom({ + key: 'allKr', + default: [], +}); + +// 필터링 완료, 미완료 export const isDone = atom({ key: 'isDone', default: ['done', 'notDone'], }); -//[{...},{...}] +// 팀원들 정보 export const teamMemberAtom = atom({ key: 'teamMemberAtom', default: [], @@ -189,18 +153,34 @@ export const filterTeamMemberSelector = selector({ }, }); +// get 여러개 test +export const test = selector({ + key: 'test', + get: ({ get }) => { + const id = get(userId); + const obj = { + // targetDate: sessionStorage.getItem('targetDate'), + teamMembers: [id], + // KeyResultIds: JSON.parse(sessionStorage.getItem('kr')), + orderby: 'endDate', + orderbyrole: 'desc', + }; + return obj; + }, +}); + // -------------- -// export const expirationAtom = atom({ -// key: 'expiration', -// default: null, -// }); - -// export const progressAtom = atom({ -// key: 'expiration', -// default: null, -// }); - -// export const completionAtom = atom({ -// key: 'expiration', -// default: null, -// }); +export const expirationAtom = atom({ + key: 'expirationAtom', + default: [], +}); + +export const progressAtom = atom({ + key: 'progressAtom', + default: [], +}); + +export const completionAtom = atom({ + key: 'completionAtom', + default: [], +}); diff --git a/src/styles/Calendar.styled.js b/src/styles/Calendar.styled.js index c956ae1..e977ba7 100644 --- a/src/styles/Calendar.styled.js +++ b/src/styles/Calendar.styled.js @@ -3,6 +3,9 @@ import styled from 'styled-components'; export const Container = styled.div` width: 100%; margin-top: 30px; - cursor: default; + cursor: pointer; background-color: #fff; + padding: 10px; + box-sizing: border-box; + border-radius: 12px; `; diff --git a/src/styles/OKR.styled.js b/src/styles/OKR.styled.js index 454ca35..2a5af59 100644 --- a/src/styles/OKR.styled.js +++ b/src/styles/OKR.styled.js @@ -1,9 +1,7 @@ import styled from 'styled-components'; export const Container = styled.div` - /* max-width: 50%; */ width: 100%; - /* height: 55.2rem; */ height: 56rem; border: 1px solid rgba(232, 232, 232, 1); box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); @@ -38,7 +36,7 @@ export const Header = styled.p` export const OkrContainer = styled.div` margin: 0 auto; - max-height: 48.3rem; + max-height: 49rem; height: 100%; width: 100%; overflow-y: auto; @@ -68,24 +66,29 @@ export const Objective = styled.div` padding: 0 1.1rem; position: relative; height: 8.5rem; + + /* background-color: pink; */ .left { display: flex; align-items: center; .title { cursor: default; color: ${({ color }) => color}; - font-size: 5.4rem; + font-size: 5rem; font-weight: 700; margin-right: 16px; } .nameBox { max-width: 300px; + min-width: 150px; + /* min-width: 180px; */ width: 100%; + /* background-color: skyblue; */ .name { - width: 90%; - height: 38px; + width: 98%; + height: 30px; font-weight: 500; - font-size: 22px; + font-size: 1.8rem; color: ${({ color }) => color}; cursor: pointer; overflow: hidden; @@ -93,6 +96,7 @@ export const Objective = styled.div` white-space: nowrap; } .date { + width: 98%; height: 18px; font-style: normal; font-weight: 500; @@ -106,7 +110,7 @@ export const Objective = styled.div` height: 100%; display: flex; align-items: center; - margin-right: 5rem; + /* margin-right: 5rem; */ .percent { width: 35px; height: 25px; @@ -128,18 +132,16 @@ export const KRBox = styled.div` display: flex; justify-content: space-between; align-items: center; - padding: 0 7px 0 15px; + padding: 0px 11px; box-sizing: border-box; .left { - max-width: 340px; width: 100%; display: flex; align-items: center; - /* background-color: skyblue; */ .logo { + width: 40px; font-weight: 500; - font-size: 2rem; font-size: 16px; text-align: center; color: ${({ color }) => color}; @@ -147,13 +149,14 @@ export const KRBox = styled.div` margin-right: 2rem; } .name { - width: 85%; + max-width: 300px; + width: 100%; height: 27px; font-style: normal; font-weight: 500; - font-size: 20px; + font-size: 1.8rem; line-height: 27px; - color: #4b4b4b; + color: ${({ color }) => color}; cursor: pointer; overflow: hidden; diff --git a/src/styles/mainpage.styled.js b/src/styles/mainpage.styled.js index 1758b2a..2b06ef2 100644 --- a/src/styles/mainpage.styled.js +++ b/src/styles/mainpage.styled.js @@ -1,12 +1,16 @@ import styled from 'styled-components'; export const StWrapBackground = styled.div` - width: 100%; + /* max-width: 1500px; */ + max-width: 90%; + min-width: 1350px; + min-height: 500px; height: 100%; background-color: var(--main-gray); - border-radius: 35px 35px 0 0; - padding: 0 20px; + border-radius: 30px; + padding: 0 20px 20px 20px; box-sizing: border-box; + margin: 0 auto; `; export const StWrap = styled.div` @@ -25,4 +29,5 @@ export const OkrContainer = styled.div` width: 100%; display: flex; justify-content: space-between; + gap: 2.5rem; `; diff --git a/src/styles/todo.styled.js b/src/styles/todo.styled.js index f9060a5..1f5935e 100644 --- a/src/styles/todo.styled.js +++ b/src/styles/todo.styled.js @@ -3,10 +3,9 @@ import styled from 'styled-components'; export const Container = styled.div` width: 100%; - /* max-width: 50%; */ height: 56rem; border: 1px solid rgba(232, 232, 232, 1); - margin-left: 3.9rem; + /* margin-left: 3.9rem; */ box-shadow: 0 3px 15px rgba(124, 124, 124, 0.25); border-radius: 12px; background-color: #fff; @@ -17,7 +16,7 @@ export const HeaderBox = styled.div` justify-content: space-between; height: 5.2rem; align-items: center; - padding: 1.3rem 3rem; + padding: 0 3rem; .btnBox { display: flex; align-items: center; @@ -38,15 +37,12 @@ export const Header = styled.p` export const TodoContainer = styled.div` margin: 0 auto; - max-width: 68.2rem; - min-width: 39rem; + max-height: 49rem; + height: 100%; width: 100%; - max-height: 485px; - height: 55.2rem; overflow-y: auto; padding: 0 1.2rem; box-sizing: border-box; - /* background-color: pink; */ `; export const StTodoItem = styled.div` @@ -55,7 +51,8 @@ export const StTodoItem = styled.div` /* height: 11.8rem; */ /* background-color: pink; */ .todo { - max-width: 100%; + /* max-width: 100%; */ + width: 100%; min-width: 46.1rem; height: 100%; display: flex; @@ -72,7 +69,6 @@ export const StTodoItem = styled.div` width: 30px; height: 30px; border-radius: 50%; - background-color: #ccc; position: relative; cursor: pointer; margin-right: 23px; @@ -109,13 +105,15 @@ export const StTodoItem = styled.div` font-weight: 700; margin-right: 25px; cursor: default; + /* background-color: pink; */ } .detail { + width: 70%; height: 100%; box-sizing: border-box; padding: 3px 0 5px 0; .nameDate { - /* width: 80%; */ + width: 98%; display: flex; flex-direction: column; justify-content: space-between; @@ -123,22 +121,19 @@ export const StTodoItem = styled.div` color: #4b4b4b; font-weight: 500; cursor: pointer; - /* background-color: pink; */ .todoName { - width: 280px; - font-size: 19px; + font-size: 1.8rem; margin-bottom: 7px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .memo { - width: 85%; + width: 95%; font-size: 14px; color: #9b9b9b; margin-bottom: 8px; - /* background-color: pink; */ overflow: hidden; text-overflow: ellipsis; diff --git a/src/styles/tododetail.styled.js b/src/styles/tododetail.styled.js index acb687a..3281cd7 100644 --- a/src/styles/tododetail.styled.js +++ b/src/styles/tododetail.styled.js @@ -13,6 +13,9 @@ export const StNavi = styled.div` padding-bottom: 3px; box-sizing: content-box; background-color: #fff; + border-radius: 12px; + padding: 0 10px 10px 10px; + box-sizing: border-box; `; export const TodoHeader = styled.div` width: 100%; @@ -84,11 +87,11 @@ export const DateNavi = styled.div` width: 100%; height: 92px; background-color: #fff; - /* border: 0.8px solid rgba(124, 124, 124, 0.25); */ box-shadow: 0px 3px 10px rgba(124, 124, 124, 0.25); border-radius: 8px; display: flex; overflow: hidden; + /* background-color: pink; */ .day { width: calc(100% / 7); height: 100%; @@ -96,7 +99,12 @@ export const DateNavi = styled.div` flex-direction: column; align-items: center; justify-content: center; - cursor: default; + cursor: pointer; + transition-property: background-color; + transition-duration: 0.4s; + :hover { + background-color: #e8e8e8; + } .label { color: #4b4b4b; font-size: 1.5rem; @@ -116,7 +124,8 @@ export const DateNavi = styled.div` justify-content: center; position: relative; cursor: pointer; - /* transition: all 0.3s; */ + transition-property: background-color; + transition-duration: 0.4s; :hover { background-color: #e8e8e8; } @@ -142,11 +151,21 @@ export const DateNavi = styled.div` export const DetailTodoWrap = styled.div` width: 100%; - /* border-bottom: 1px solid #e8e8e8; */ margin-bottom: 10px; + padding: 0 10px; .noAny { - color: #ff8336; + /* color: #ff8336; */ + color: #000; + font-weight: bold; + font-size: 2rem; + } + h2 { + font-size: 1.7rem; + font-weight: 500; + } + h3 { font-size: 1.8rem; + font-weight: bold; } /* background-color: pink; */ @@ -335,9 +354,8 @@ export const TodoDetailItem = styled.div` `; export const DDay = styled.div` - /* margin-bottom: 20px; */ - /* background-color: skyblue; */ - /* border-bottom: 1px solid rgba(0, 0, 0, 0.2); */ + /* padding: 0 10px; */ + /* box-sizing: border-box; */ `; export const Finsh = styled.div` @@ -361,111 +379,109 @@ export const Finsh = styled.div` export const StTeam = styled.div` width: 312px; min-width: 312px; - height: 408px; - /* height: 100%; */ + height: 100vh; display: flex; flex-direction: column; margin-left: 28px; position: sticky; top: 0px; - /* position: fixed; - top: 0; - right: 0; */ - padding: 24px 15px 15px 15px; - box-sizing: border-box; - background-color: #fff; - /* box-shadow: 0px 3px 15px rgba(124, 124, 124, 0.25); - border-radius: 8px; */ + /* background-color: pink; */ - .title { - width: 100%; - height: 45px; - background-color: #f8f8f8; - box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); - border-radius: 8px; - margin-bottom: 10px; - position: relative; - display: flex; - align-items: center; - justify-content: center; - font-size: 2rem; - color: #b57bff; - img { - width: 21px; - height: 21px; - position: absolute; - top: 12px; - left: 14px; + .teamWrap { + background-color: #fff; + padding: 24px 15px 15px 15px; + box-sizing: border-box; + border-radius: 12px; + .title { + width: 100%; + height: 45px; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + margin-bottom: 10px; + position: relative; + display: flex; + align-items: center; + justify-content: center; + font-size: 2rem; + color: #b57bff; + img { + width: 21px; + height: 21px; + position: absolute; + top: 12px; + left: 14px; + } } - } - .today { - width: 100%; - height: 37px; - display: flex; - align-items: center; - justify-content: center; - background-color: #f8f8f8; - box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); - border-radius: 8px; - margin-bottom: 10px; - font-size: 2rem; - } - .table { - width: 100%; - height: 37px; - display: flex; - align-items: center; - justify-content: space-between; - background-color: #f8f8f8; - box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); - border-radius: 8px; - margin-bottom: 10px; - font-size: 1.4rem; - } - .member { - width: 100%; - height: 37px; - display: flex; - align-items: center; - justify-content: space-between; - background-color: #f8f8f8; - box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); - border-radius: 8px; - margin-bottom: 10px; - font-size: 2rem; - color: #4b4b4b; - padding: 0 16px 0 14px; - /* .checkBox { - width: 23px; - height: 23px; - border-radius: 2.3px; - border: 1px solid #b57bff; - } */ - .none { - width: 23px; - height: 23px; - border-radius: 2.3px; - border: 1px solid #b57bff; - background-color: #fff; - cursor: pointer; + .today { + width: 100%; + height: 37px; + display: flex; + align-items: center; + justify-content: center; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + margin-bottom: 10px; + font-size: 2rem; } - .have { + .table { + width: 100%; + height: 37px; + display: flex; + align-items: center; + justify-content: space-between; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + margin-bottom: 10px; + font-size: 1.4rem; + } + .member { + width: 100%; + height: 37px; + display: flex; + align-items: center; + justify-content: space-between; + background-color: #f8f8f8; + box-shadow: 0px 1px 4px rgba(210, 210, 210, 0.7); + border-radius: 8px; + margin-bottom: 10px; + font-size: 2rem; + color: #4b4b4b; + padding: 0 16px 0 14px; + /* .checkBox { width: 23px; height: 23px; border-radius: 2.3px; border: 1px solid #b57bff; - background-color: #b57bff; - background: url(${check}) no-repeat center/ 100%; - cursor: pointer; - } + } */ + .none { + width: 23px; + height: 23px; + border-radius: 2.3px; + border: 1px solid #b57bff; + background-color: #fff; + cursor: pointer; + } + .have { + width: 23px; + height: 23px; + border-radius: 2.3px; + border: 1px solid #b57bff; + background-color: #b57bff; + background: url(${check}) no-repeat center/ 100%; + cursor: pointer; + } - .name { - color: #4b4b4b; - font-size: 1.9rem; - } - .number { - color: #b57bff; - font-size: 2rem; + .name { + color: #4b4b4b; + font-size: 1.9rem; + } + .number { + color: #b57bff; + font-size: 2rem; + } } } `; @@ -774,6 +790,9 @@ export const StSortFilter = styled.div` height: 14px; margin-right: 7px; } + .result { + font-size: 1.2rem; + } } .sortDrop { padding: 0; @@ -825,7 +844,7 @@ export const StSortFilter = styled.div` } */ } .sideDrop { - width: 85px; + width: 100px; height: 50px; position: absolute; top: 0; @@ -843,6 +862,7 @@ export const StSortFilter = styled.div` position: relative; transition: all 0.3s; color: #4b4b4b; + /* background-color: pink; */ :nth-last-child(1) { border: none; } From 4f3d1440c1ae4f9ed1ee35433c8ec240f98af2a8 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 15 May 2023 12:43:46 +0900 Subject: [PATCH 69/72] =?UTF-8?q?fix=20:=20Batcher=20warning=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20header=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EB=A6=AC=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/dashboard/DashOKR.jsx | 25 ++++++++----- src/components/global/header/Header.jsx | 3 +- src/components/todo/DetailTodoItem.jsx | 12 +++--- src/pages/Mainpage.jsx | 49 +++++++++---------------- src/store/store.js | 5 +++ 5 files changed, 45 insertions(+), 49 deletions(-) diff --git a/src/components/dashboard/DashOKR.jsx b/src/components/dashboard/DashOKR.jsx index 5519b13..1e08692 100644 --- a/src/components/dashboard/DashOKR.jsx +++ b/src/components/dashboard/DashOKR.jsx @@ -1,6 +1,6 @@ import { GetOKR } from '../../apis/apiGET'; import plus from '../../assets/plus.png'; -import { userDetail } from '../../store/store.js'; +import { okrDataAtom, userDetail } from '../../store/store.js'; import { Container, Header, @@ -14,19 +14,22 @@ import OkrItem from './okr/OkrItem'; import { useQuery } from '@tanstack/react-query'; import React from 'react'; import { useState, useRef } from 'react'; -import { useRecoilValue, useSetRecoilState } from 'recoil'; +import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; export default function DashOKR() { //모달 상태관리 const [okrModalOn, setOkrModalOn] = useState(false); - const [alertModalOn, setAlertModalOn] = useState(false); + console.log('okrModalOn :', okrModalOn); + // const [alertModalOn, setAlertModalOn] = useState(false); const info = useRecoilValue(userDetail); // const okrData = useRecoilValue(getOKRData); - const { getokrdata } = useQuery(['OKR'], GetOKR, { + const [okrData, setOkrData] = useRecoilState(okrDataAtom); + + const { getOkrData } = useQuery(['OKR'], GetOKR, { onSuccess: data => { - // console.log(data); + setOkrData(data); }, }); @@ -37,11 +40,13 @@ export default function DashOKR() { /** +버튼 누르면 OKR 생성하는 모달 띄우는 함수 */ const createOKR = () => { - if (getokrdata?.length < 4) { + console.log('누림'); + if (okrData?.length < 4) { setOkrModalOn(!okrModalOn); - } else { - setAlertModalOn(!alertModalOn); } + // else { + // setAlertModalOn(!alertModalOn); + // } }; // createModal @@ -65,7 +70,7 @@ export default function DashOKR() { // } // }; - // const setOkrList = useSetRecoilState(getOKRData); + // const setOkrList = useSetRecoilState(getOkrData); return ( <Container> @@ -79,7 +84,7 @@ export default function DashOKR() { </HeaderBox> <OkrContainer> - {getokrdata?.length === 0 ? ( + {okrData?.length === 0 ? ( <NotHaveEl> <h2>설정된 OKR이 없습니다.</h2> <div className='btnFlex' onClick={createOKR}> diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 70f6f74..3357731 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -49,7 +49,8 @@ export default function Header() { }}> 사용 가이드 </Guide> - {token !== null ? ( + + {localStorage.getItem('accesstoken') ? ( <> <img src={logoutImg} diff --git a/src/components/todo/DetailTodoItem.jsx b/src/components/todo/DetailTodoItem.jsx index 86af81d..0eeec69 100644 --- a/src/components/todo/DetailTodoItem.jsx +++ b/src/components/todo/DetailTodoItem.jsx @@ -462,14 +462,14 @@ const DetailTodoItem = () => { ) : // kr을 하나 이상 선택하고, 완료를 선택했는데, 데이터가 없을 때 isCompletion.length === 1 && isCompletion.includes('done') && - completion.length === 0 && + completion?.length === 0 && info.KeyResultIds.length !== 0 ? ( <h2>해당 kr의 todo가 없음</h2> ) : // kr을 하나 이상 선택하고, 미완료를 선택했는데, 데이터가 없을 때 isCompletion.length === 1 && isCompletion.includes('notDone') && - progress.length === 0 && - expiration.length === 0 && + progress?.length === 0 && + expiration?.length === 0 && info.KeyResultIds.length !== 0 ? ( <h2>해당 kr의 todo가 없음</h2> ) : // 완료 필터가 둘 다 선택되지 않았을 때 @@ -490,9 +490,9 @@ const DetailTodoItem = () => { <h2 className='result'>검색결과 없음</h2> <h3 className='errorMsg'>KR을 선택하지 않았습니다.</h3> </> - ) : expiration.length === 0 && - progress.length === 0 && - completion.length === 0 ? ( + ) : expiration?.length === 0 && + progress?.length === 0 && + completion?.length === 0 ? ( <> <h2 className='noAny'>등록된 To-Do가 없습니다.</h2> <h3>To - Do를 생성해주세요.</h3> diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index 6d3116c..d37552b 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,33 +1,18 @@ -import { GetKR, GetOKR, GetUser, GetUserInfo } from '../apis/apiGET'; +import { GetKR, GetUserInfo } from '../apis/apiGET'; import DashOKR from '../components/dashboard/DashOKR'; import DashTodo from '../components/dashboard/DashToDo'; -import Tutorial from '../components/dashboard/Tutorial'; import DashBoardCalendar from '../components/dashboard/calendar/Calendar'; import Loading from '../components/global/Loading'; -import Navibar from '../components/global/Navibar'; -import Portal from '../components/global/globalModal/Potal'; -import { - getOKRData, - krDataAtom, - myChange, - myTodo, - teamMemberAtom, - todayFormat, - todoDateInfo, - userDetail, - userId, -} from '../store/store'; +import { krDataAtom, todayFormat, userDetail, userId } from '../store/store'; import { OkrContainer, StWrap, StWrapBackground, } from '../styles/mainpage.styled'; -import { StNavi } from '../styles/tododetail.styled'; import { useQuery } from '@tanstack/react-query'; import jwt_decode from 'jsonwebtoken/decode'; import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; -import { toast } from 'react-toastify'; import { useRecoilState, useSetRecoilState } from 'recoil'; export default function Mainpage() { @@ -84,7 +69,7 @@ export default function Mainpage() { }); // 오늘 날짜 포맷 2023-01-01 - const setTodayFormat = useSetRecoilState(todayFormat); + // const setTodayFormat = useSetRecoilState(todayFormat); const now = new Date(); let today = ''; @@ -92,22 +77,22 @@ export default function Mainpage() { today = `${now.getFullYear()}-0${now.getMonth() + 1}-0${now.getDate()}`; localStorage.setItem('targetDate', today); localStorage.setItem('today', today); - setTodayFormat(today); + // setTodayFormat(today); } else if (now.getDate() < 10) { today = `${now.getFullYear()}-${now.getMonth() + 1}-0${now.getDate()}`; localStorage.setItem('targetDate', today); localStorage.setItem('today', today); - setTodayFormat(today); + // setTodayFormat(today); } else if (now.getMonth() + 1 < 10) { today = `${now.getFullYear()}-0${now.getMonth() + 1}-${now.getDate()}`; localStorage.setItem('targetDate', today); localStorage.setItem('today', today); - setTodayFormat(today); + // setTodayFormat(today); } else { today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; localStorage.setItem('targetDate', today); localStorage.setItem('today', today); - setTodayFormat(today); + // setTodayFormat(today); } if (isLoading) { @@ -116,19 +101,19 @@ export default function Mainpage() { return ( <StWrapBackground> <StWrap> - {userInfo?.firstLogin === true ? ( + {/* {userInfo?.firstLogin === true ? ( <Portal> <Tutorial /> </Portal> - ) : ( - <main> - <OkrContainer> - <DashOKR /> - <DashTodo todayFormat={today} /> - </OkrContainer> - <DashBoardCalendar /> - </main> - )} + ) : ( */} + <main> + <OkrContainer> + <DashOKR /> + <DashTodo todayFormat={today} /> + </OkrContainer> + <DashBoardCalendar /> + </main> + {/* )} */} </StWrap> </StWrapBackground> ); diff --git a/src/store/store.js b/src/store/store.js index 7aa7c0b..e902209 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -62,6 +62,11 @@ export const patchTodoInfo = atom({ }, }); +export const okrDataAtom = atom({ + key: 'okrDataAtom', + default: null, +}); + export const krDataAtom = atom({ key: 'krData', default: null, From 3e311acf8017f4859d230dbc98c2a77f5833a45b Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Mon, 15 May 2023 18:45:33 +0900 Subject: [PATCH 70/72] =?UTF-8?q?=20etc=20:=20=EB=85=B8=ED=8A=B8=EB=B6=81?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=9E=84?= =?UTF-8?q?=EC=8B=9C=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/dashboard/Menu.jsx | 30 ----------- .../dashboard/{ => dashTodo}/DashToDo.jsx | 21 ++++---- .../dashboard/{ => dashTodo}/TodoItem.jsx | 20 +++---- .../dashboard/{ => okr}/DashOKR.jsx | 18 +++---- .../{dashboard => global}/Tutorial.jsx | 0 src/components/global/header/Header.jsx | 10 +++- .../global/{ => header}/Navibar.jsx | 2 +- src/index.js | 13 +---- src/pages/Mainpage.jsx | 6 +-- src/pages/TodoPage.jsx | 52 +------------------ .../global => styles}/GlobalStyle.jsx | 0 .../global/header => styles}/header.styled.js | 2 +- 12 files changed, 45 insertions(+), 129 deletions(-) delete mode 100644 src/components/dashboard/Menu.jsx rename src/components/dashboard/{ => dashTodo}/DashToDo.jsx (75%) rename src/components/dashboard/{ => dashTodo}/TodoItem.jsx (90%) rename src/components/dashboard/{ => okr}/DashOKR.jsx (85%) rename src/components/{dashboard => global}/Tutorial.jsx (100%) rename src/components/global/{ => header}/Navibar.jsx (91%) rename src/{components/global => styles}/GlobalStyle.jsx (100%) rename src/{components/global/header => styles}/header.styled.js (97%) diff --git a/src/components/dashboard/Menu.jsx b/src/components/dashboard/Menu.jsx deleted file mode 100644 index c1c9983..0000000 --- a/src/components/dashboard/Menu.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import { MenuContainer, MenuItem } from '../../styles/menu.styled'; -import React from 'react'; -import { useLocation, useNavigate } from 'react-router-dom'; - -const Menu = () => { - const navigate = useNavigate(); - // url 정보를 이용해 active 주기 - const location = useLocation(); - - return ( - <MenuContainer> - <MenuItem - className={location.pathname === '/' ? 'active' : ''} - onClick={e => { - navigate('/'); - }}> - Dashboard - </MenuItem> - <MenuItem - className={location.pathname === '/todo' ? 'active' : ''} - onClick={e => { - navigate('/todo'); - }}> - To - do - </MenuItem> - </MenuContainer> - ); -}; - -export default Menu; diff --git a/src/components/dashboard/DashToDo.jsx b/src/components/dashboard/dashTodo/DashToDo.jsx similarity index 75% rename from src/components/dashboard/DashToDo.jsx rename to src/components/dashboard/dashTodo/DashToDo.jsx index 4e1479f..2db56b1 100644 --- a/src/components/dashboard/DashToDo.jsx +++ b/src/components/dashboard/dashTodo/DashToDo.jsx @@ -1,21 +1,20 @@ -import { GetMyTodo, GetTodo } from '../../apis/apiGET'; -import plus from '../../assets/plus.png'; -import { todoListSelector, todoListState } from '../../store/store'; +import { GetMyTodo } from '../../../apis/apiGET'; +import plus from '../../../assets/plus.png'; +import { todoListState } from '../../../store/store'; import { Container, Header, HeaderBox, TodoContainer, StTodoItem, -} from '../../styles/todo.styled'; -import Loading from '../global/Loading.jsx'; -import Potal from '../global/globalModal/Potal'; -import TodoModal from '../global/globalModal/TodoModal'; -import { NotHave, NotHaveEl } from '../global/globalModal/modal.styled'; +} from '../../../styles/todo.styled'; +import Potal from '../../global/globalModal/Potal'; +import TodoModal from '../../global/globalModal/TodoModal'; +import { NotHaveEl } from '../../global/globalModal/modal.styled'; import TodoItem from './TodoItem'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import React, { useState, useRef, useEffect } from 'react'; -import { useRecoilState, useRecoilValue } from 'recoil'; +import { useQuery } from '@tanstack/react-query'; +import React, { useState, useRef } from 'react'; +import { useRecoilState } from 'recoil'; export default function DashTodo({ todayFormat }) { const [todoModalOn, setTodoModalOn] = useState(false); diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/dashTodo/TodoItem.jsx similarity index 90% rename from src/components/dashboard/TodoItem.jsx rename to src/components/dashboard/dashTodo/TodoItem.jsx index a9cac53..cd2b882 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/dashTodo/TodoItem.jsx @@ -1,13 +1,13 @@ -import { GetMyTodo } from '../../apis/apiGET'; -import { PatchCheck } from '../../apis/apiPATCH'; -import checkFull from '../../assets/checkFull.png'; -import blue from '../../assets/todoBlue.png'; -import red from '../../assets/todoRed.png'; -import yellow from '../../assets/todoYellow.png'; -import { patchTodoInfo } from '../../store/store'; -import Toast from '../global/Toast'; -import Potal from '../global/globalModal/Potal'; -import TodoPathModal from '../global/globalModal/TodoPathModal'; +import { GetMyTodo } from '../../../apis/apiGET'; +import { PatchCheck } from '../../../apis/apiPATCH'; +import checkFull from '../../../assets/checkFull.png'; +import blue from '../../../assets/todoBlue.png'; +import red from '../../../assets/todoRed.png'; +import yellow from '../../../assets/todoYellow.png'; +import { patchTodoInfo } from '../../../store/store'; +import Toast from '../../global/Toast'; +import Potal from '../../global/globalModal/Potal'; +import TodoPathModal from '../../global/globalModal/TodoPathModal'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import React, { useState } from 'react'; import ReactGA from 'react-ga4'; diff --git a/src/components/dashboard/DashOKR.jsx b/src/components/dashboard/okr/DashOKR.jsx similarity index 85% rename from src/components/dashboard/DashOKR.jsx rename to src/components/dashboard/okr/DashOKR.jsx index 1e08692..623c1e9 100644 --- a/src/components/dashboard/DashOKR.jsx +++ b/src/components/dashboard/okr/DashOKR.jsx @@ -1,20 +1,20 @@ -import { GetOKR } from '../../apis/apiGET'; -import plus from '../../assets/plus.png'; -import { okrDataAtom, userDetail } from '../../store/store.js'; +import { GetOKR } from '../../../apis/apiGET'; +import plus from '../../../assets/plus.png'; +import { okrDataAtom, userDetail } from '../../../store/store.js'; import { Container, Header, HeaderBox, OkrContainer, -} from '../../styles/OKR.styled.js'; -import OkrModal from '../global/globalModal/OkrModal.jsx'; -import Potal from '../global/globalModal/Potal.jsx'; -import { NotHaveEl } from '../global/globalModal/modal.styled.js'; -import OkrItem from './okr/OkrItem'; +} from '../../../styles/OKR.styled.js'; +import OkrModal from '../../global/globalModal/OkrModal.jsx'; +import Potal from '../../global/globalModal/Potal.jsx'; +import { NotHaveEl } from '../../global/globalModal/modal.styled.js'; +import OkrItem from './OkrItem'; import { useQuery } from '@tanstack/react-query'; import React from 'react'; import { useState, useRef } from 'react'; -import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; +import { useRecoilState, useRecoilValue } from 'recoil'; export default function DashOKR() { //모달 상태관리 diff --git a/src/components/dashboard/Tutorial.jsx b/src/components/global/Tutorial.jsx similarity index 100% rename from src/components/dashboard/Tutorial.jsx rename to src/components/global/Tutorial.jsx diff --git a/src/components/global/header/Header.jsx b/src/components/global/header/Header.jsx index 3357731..7e4c1a3 100644 --- a/src/components/global/header/Header.jsx +++ b/src/components/global/header/Header.jsx @@ -1,7 +1,13 @@ import logoutON from '../../../assets/logoutoff.png'; import logoutOFF from '../../../assets/logouton.png'; -import Navibar from '../Navibar'; -import { Guide, Layout, LogoImg, StMenu, StNavi } from './header.styled'; +import { + Guide, + Layout, + LogoImg, + StMenu, + StNavi, +} from '../../../styles/header.styled'; +import Navibar from './Navibar'; import React, { useState, useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; diff --git a/src/components/global/Navibar.jsx b/src/components/global/header/Navibar.jsx similarity index 91% rename from src/components/global/Navibar.jsx rename to src/components/global/header/Navibar.jsx index 1c5db8d..a3ba759 100644 --- a/src/components/global/Navibar.jsx +++ b/src/components/global/header/Navibar.jsx @@ -1,4 +1,4 @@ -import { StNaviBar } from './header/header.styled'; +import { StNaviBar } from '../../../styles/header.styled'; import React from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; diff --git a/src/index.js b/src/index.js index 0630a5b..39ee177 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,7 @@ -import GlobalStyle from './components/global/GlobalStyle'; -import Loading from './components/global/Loading'; import theme from './components/global/theme'; import { RouteChangeTracker } from './router/RouteChangeTracker'; import Router from './router/Router'; +import GlobalStyle from './styles/GlobalStyle'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; import { Suspense } from 'react'; @@ -12,14 +11,6 @@ import { BrowserRouter } from 'react-router-dom'; import { RecoilRoot } from 'recoil'; import { ThemeProvider } from 'styled-components'; -// const queryClient = new QueryClient({ -// defaultOptions: { -// queries: { -// retry: 0, -// suspense: true, -// }, -// }, -// }); const queryClient = new QueryClient(); ReactGA4.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); @@ -27,7 +18,6 @@ ReactGA4.initialize(`${process.env.REACT_APP_GOOGLE_ANALYTICS_ID}`); const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - // <React.Suspense fallback={<Loading />}> <QueryClientProvider client={queryClient}> <GlobalStyle /> <ThemeProvider theme={theme}> @@ -41,5 +31,4 @@ root.render( </RecoilRoot> </ThemeProvider> </QueryClientProvider> - // </React.Suspense> ); diff --git a/src/pages/Mainpage.jsx b/src/pages/Mainpage.jsx index d37552b..0b32b9d 100644 --- a/src/pages/Mainpage.jsx +++ b/src/pages/Mainpage.jsx @@ -1,9 +1,9 @@ import { GetKR, GetUserInfo } from '../apis/apiGET'; -import DashOKR from '../components/dashboard/DashOKR'; -import DashTodo from '../components/dashboard/DashToDo'; import DashBoardCalendar from '../components/dashboard/calendar/Calendar'; +import DashTodo from '../components/dashboard/dashTodo/DashToDo'; +import DashOKR from '../components/dashboard/okr/DashOKR'; import Loading from '../components/global/Loading'; -import { krDataAtom, todayFormat, userDetail, userId } from '../store/store'; +import { krDataAtom, userDetail, userId } from '../store/store'; import { OkrContainer, StWrap, diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx index 019db4e..ebc86e4 100644 --- a/src/pages/TodoPage.jsx +++ b/src/pages/TodoPage.jsx @@ -1,57 +1,9 @@ -import { GetKR } from '../apis/apiGET'; -import Menu from '../components/dashboard/Menu'; import Todo from '../components/todo/Todo'; -import { - clickDate, - dateArray, - isDone, - krDataAtom, - myUserIdSelecctor, - teamMemberAtom, - test, - todoDateInfo, - todoListState, - userDetail, - userId, -} from '../store/store'; import { StWrap, StWrapBackground } from '../styles/mainpage.styled'; -import { useQuery } from '@tanstack/react-query'; -import React, { useState } from 'react'; -import { useRecoilState, useRecoilValue } from 'recoil'; +import '@tanstack/react-query'; +import React from 'react'; const TodoPage = () => { - // const [info, setInfo] = useRecoilState(todoDateInfo); - // const [krdata, setKrData] = useRecoilState(krDataAtom); - // // console.log(krdata); - // const { data: getKr } = useQuery(['KR'], GetKR, { - // onSuccess: response => { - // // setKrState(response); - // // console.log('response :', response); - // const filterArray = response.map(el => el.keyResultId); - // filterArray.push(0); - // sessionStorage.setItem('kr', JSON.stringify(filterArray)); - // setKrData(response); - // // setInfo({ ...info, KeyResultIds: filterArray }); - // }, - // }); - - const detail = useRecoilValue(userDetail); - const id = useRecoilValue(userId); - // const okr = useRecoilValue(getOKRData); - const kr = useRecoilValue(krDataAtom); - const list = useRecoilValue(todoListState); - const dateInfo = useRecoilValue(todoDateInfo); - const array = useRecoilValue(dateArray); - const done = useRecoilValue(isDone); - const team = useRecoilValue(teamMemberAtom); - - const temp = useRecoilValue(test); - // console.log('test결과 ::', temp); - - const date = useRecoilValue(clickDate); - - // console.log(dateInfo); - return ( <StWrapBackground> <StWrap> diff --git a/src/components/global/GlobalStyle.jsx b/src/styles/GlobalStyle.jsx similarity index 100% rename from src/components/global/GlobalStyle.jsx rename to src/styles/GlobalStyle.jsx diff --git a/src/components/global/header/header.styled.js b/src/styles/header.styled.js similarity index 97% rename from src/components/global/header/header.styled.js rename to src/styles/header.styled.js index 600c53a..3e47ba2 100644 --- a/src/components/global/header/header.styled.js +++ b/src/styles/header.styled.js @@ -1,4 +1,4 @@ -import logo from '../../../assets/logo.png'; +import logo from '../assets/logo.png'; import styled from 'styled-components'; export const Layout = styled.div` From beaca06f7ce3efdbaf0a1ec9b2de01e3d9485340 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Tue, 16 May 2023 18:36:54 +0900 Subject: [PATCH 71/72] a --- src/components/dashboard/DashToDo.jsx | 2 +- src/components/dashboard/TodoItem.jsx | 14 +++++----- .../global/globalModal/TodoPathModal.jsx | 4 +-- src/pages/TodoPage.jsx | 28 +++++++++---------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/components/dashboard/DashToDo.jsx b/src/components/dashboard/DashToDo.jsx index d87f5a6..7a02817 100644 --- a/src/components/dashboard/DashToDo.jsx +++ b/src/components/dashboard/DashToDo.jsx @@ -46,7 +46,7 @@ export default function DashTodo({ todayFormat }) { } = useQuery(['TODO'], GetTodo, { onSuccess: response => { setTodoList(response); - // console.log(response); + console.log(response); }, onError: response => {}, }); diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index 82b1532..8f2cc39 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -34,23 +34,23 @@ const TodoItem = ({ todayFormat }) => { // orderby: 'endDate', // orderbyrole: 'desc', // }); - console.log('myTodoInfo :', info); + // console.log('myTodoInfo :', info); const [progress, setProgress] = useState([]); const [completion, setCompletion] = useState([]); - console.log('진행 중 :', progress); - console.log('완료 :', completion); + // console.log('진행 중 :', progress); + // console.log('완료 :', completion); const { mutate: progressTodo, isLoading } = useMutation(PostProgressTodo, { onSuccess: data => { - console.log('진행중 불러오는 중'); + // console.log('진행중 불러오는 중'); setProgress(data); }, }); const { mutate: completionTodo } = useMutation(PostCompletionTodo, { onSuccess: data => { - console.log('완료 불러오는중'); + // console.log('완료 불러오는중'); setCompletion(data); }, }); @@ -67,11 +67,11 @@ const TodoItem = ({ todayFormat }) => { info.teamMembers !== null && info.KeyResultIds.length !== 0 ) { - console.log('통신한다'); + // console.log('통신한다'); progressTodo({ info }); completionTodo({ info }); } else { - console.log('info바꿔야해요'); + // console.log('info바꿔야해요'); setInfo({ ...info, targetDate: todayFormat }); } }, [count]); diff --git a/src/components/global/globalModal/TodoPathModal.jsx b/src/components/global/globalModal/TodoPathModal.jsx index 85822fb..4ad1532 100644 --- a/src/components/global/globalModal/TodoPathModal.jsx +++ b/src/components/global/globalModal/TodoPathModal.jsx @@ -172,8 +172,8 @@ const TodoPathModal = ({ onCloseModal }) => { } queryClient.invalidateQueries(['TODO']); queryClient.setQueryData(['patchTodo'], title); - setCount(count + 1); - setMyCount(myCount + 1); + // setCount(count + 1); + // setMyCount(myCount + 1); // console.log(queryClient.getQueriesData(['patchTodo'])); // console.log('---------------', queryClient.getQueryData(['TODO'])); // queryClient.invalidateQueries(['ALLTODO']); diff --git a/src/pages/TodoPage.jsx b/src/pages/TodoPage.jsx index c99aeaf..1659616 100644 --- a/src/pages/TodoPage.jsx +++ b/src/pages/TodoPage.jsx @@ -13,20 +13,20 @@ import React, { useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; const TodoPage = () => { - // const [info, setInfo] = useRecoilState(todoDateInfo); - // const [krdata, setKrData] = useRecoilState(krDataAtom); - // // console.log(krdata); - // const { data: getKr } = useQuery(['KR'], GetKR, { - // onSuccess: response => { - // // setKrState(response); - // // console.log('response :', response); - // const filterArray = response.map(el => el.keyResultId); - // filterArray.push(0); - // sessionStorage.setItem('kr', JSON.stringify(filterArray)); - // setKrData(response); - // // setInfo({ ...info, KeyResultIds: filterArray }); - // }, - // }); + const [info, setInfo] = useRecoilState(todoDateInfo); + const [krdata, setKrData] = useRecoilState(krDataAtom); + // console.log(krdata); + const { data: getKr } = useQuery(['KR'], GetKR, { + onSuccess: response => { + // setKrState(response); + // console.log('response :', response); + const filterArray = response.map(el => el.keyResultId); + filterArray.push(0); + sessionStorage.setItem('kr', JSON.stringify(filterArray)); + setKrData(response); + // setInfo({ ...info, KeyResultIds: filterArray }); + }, + }); return ( <StWrap> From eb9dbe05e25a2f157d260565007d79a97f8d3052 Mon Sep 17 00:00:00 2001 From: Sim <0doogadooga@gmail.com> Date: Tue, 16 May 2023 19:01:27 +0900 Subject: [PATCH 72/72] =?UTF-8?q?=20=EB=A1=A4=EB=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/dashboard/TodoItem.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/dashboard/TodoItem.jsx b/src/components/dashboard/TodoItem.jsx index 8f2cc39..0336f84 100644 --- a/src/components/dashboard/TodoItem.jsx +++ b/src/components/dashboard/TodoItem.jsx @@ -87,7 +87,6 @@ const TodoItem = ({ todayFormat }) => { } queryClient.invalidateQueries(['TODO']); queryClient.invalidateQueries(['completionTodo']); - setCount(count - 1); }, onError: response => {}, }); @@ -97,7 +96,7 @@ const TodoItem = ({ todayFormat }) => { // console.log('누름'); const id = data.toDoId; patchCheckmutate({ id }); - // progressTodo({ info }); + progressTodo({ info }); // completionTodo({ info }); // toast('할 일을 완료했습니다.'); };