diff --git a/README.md b/README.md
index 733a8622..ea41a096 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,94 @@
-# ✔️ 미니 프로젝트_연차/당직 프로그램 만들기
+# KDT5-Mini project
+
+# 'TimeSync'
-## 필수 요구 사항
+#### 회원가입과 로그인을 통해 인증된 사용자가 각자 자기의 연차 휴가 관리를 할 수 있으며,
+#### 관리자의 승인 기능으로 결재 유무를 확인 하게 작성 되었습니다.
+#### 메인 캘린더를 활용하여 각자의 연차와 당직의 스케쥴을 확인 할 수 있으며,
+#### 캘린더 데이터를 기초로 스케쥴을 조정 할 수 있습니다.
+
-- 로그인 / 회원가입 페이지
-- 개인 정보 수정 페이지
-- 사용자간 공유 게시 페이지 캘린더 사용
+### • 배포 주소: [링크](https://hmteresting.netlify.app/)
+### • 프로젝트 노션: [링크](https://www.notion.so/9-81b5697a6070438488fa95b4e22f1229)
+
-## 선택 요구 사항
+### 🗓 프로젝트 기간: 2023.07.24 ~ 2023.08.11
-- `useCallback`, `useMemo `등을 통한 컴포넌트 렌더링 최적화
-- 내가 작성한 코드를 팀원 중 누가봐도 쉽게 알아볼 수 있도록 고민하면서 작성해주세요.
+
-## 과제 수행 및 제출 방법
+### 🧔 개발팀
+| **[안태욱](https://github.com/dotory0829)** | **[이용수](https://github.com/dragon-it)** | **[김성은](https://github.com/kse-seong-eun?tab=repositories)** | **[최용준](https://github.com/pelicanstd)** |
+|:--------------------------------------------:|:-----------------------------------------------------------------------------:|:-----------------------------------------------------------------------------:|:-----------------------------------------------------------------------------:|
+| | | | |
+| 인 증, 로그인, 회원가입, admin 인증 | 메인캘린더, 연차/당직 등록기능, 메인캘린더 리스트 작업 | 전체 페이지 디자인 Admin 페이지, 검색기능 구현, Admin 연차/당직 승인 기능 구현 | 연차/당직 페이지 구현, 연차/당직 수정, 삭제 기능 |
+
-1. 현재 저장소를 로컬에 클론(Clone)합니다.
-2. 팀별로 브랜치를 생성합니다.(`git branch KDT5_TEAM_ABC`)
-3. 팀별 브랜치에서 과제를 수행합니다.
-4. 과제 수행이 완료되면, 자신의 본명 브랜치를 원격 저장소에 푸시(Push)합니다.(`main` 브랜치에 푸시하지 않도록 꼭 주의하세요, `git push origin KDT5_TEAM_ABC`)
-5. 저장소에서 `main` 브랜치를 대상으로 Pull Request 생성하면, 과제 제출이 완료됩니다!(E.g, `main` <== `KDT5_TEAM_ABC`)
+### 기술 스택
+Development
+
+
+
+
+
+
+
+
+
-### 주의사항!
+Config
+
+
+
+
-- `main` 혹은 다른 사람의 브랜치로 절대 병합하지 않도록 주의하세요!
-- Pull Request에서 보이는 설명을 다른 사람들이 이해하기 쉽도록 꼼꼼하게 작성하세요!
-- Pull Request에서 과제 제출 후 절대 병합(Merge)하지 않도록 주의하세요!
-- 과제 수행 및 제출 과정에서 문제가 발생한 경우, 바로 담당 멘토나 강사에서 얘기하세요!
+Deployment
+
+
+
+
+Environment
+
+
+
+
+
+
+Cowork Tools
+
+
+
+
+
+
+
+
+### 📌 프로젝트 기능
+
+- 로그인
+- 회원가입
+- 인증 ( 쿠키, 토큰을 이용한 인증 기능)
+- 연차 / 당직 등록, 수정, 삭제 기능
+- 메인 캘린더 ( 모든 회원 승인된 연차 / 당직 별 보이기)
+- 비밀번호 수정
+- 관리자 기능 ( 전체 회원 연차 / 당직 리스트 보기)
+- 관리자 연차 / 당직 승인 기능
+- 직급에 따른 연차 개수 입력기능
+- 검색 기능 ( 이름, 직급 )
+- 주소창 접근 제한
+
+
+
+### 프로젝트 스크린샷 화면
+
+![회원가입](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723822/dvr4hi4egsgwxqtdkavj.jpg)
+![로그인](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723821/zz9cnbagnaaj5a8io50j.jpg)
+![메인페이지](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723821/gdoxx0sbquvrqxfrbev6.jpg)
+![일정등록](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723822/s1thahfutmdxzt0sz1nd.jpg)
+![로그아웃](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723821/hkzjbbpuzcjxosi91jzj.jpg)
+![마이페이지](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723821/fiayddut3wslbo3w6n3r.jpg)
+![일정수정](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723821/dbbierwliktjp1lqnwox.jpg)
+![어드민페이지](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723822/lna3eefgqqbkuuwb4ssp.jpg)
+![결재인증](https://res.cloudinary.com/dgbv7iwjx/image/upload/v1691723822/smslukfqf4kexruoxlec.jpg)
+
+
+### 🙏 감사합니다
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..ec3d7cb8
--- /dev/null
+++ b/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ 연차/당직 프로젝트
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..0390b6f9
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,7601 @@
+{
+ "name": "miniproject",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "miniproject",
+ "version": "0.0.0",
+ "dependencies": {
+ "@fullcalendar/core": "^6.1.8",
+ "@fullcalendar/daygrid": "^6.1.8",
+ "@fullcalendar/react": "^6.1.8",
+ "@tanstack/react-query": "^4.32.0",
+ "axios": "^1.4.0",
+ "css-loader": "^6.8.1",
+ "dayjs": "^1.11.9",
+ "esbuild": "^0.18.17",
+ "http-proxy-middleware": "^2.0.6",
+ "jwt-decode": "^3.1.2",
+ "node-sass": "^9.0.0",
+ "react": "^18.2.0",
+ "react-cookie": "^4.1.1",
+ "react-date-range": "^1.4.0",
+ "react-dom": "^18.2.0",
+ "react-icons": "^4.10.1",
+ "react-modal": "^3.16.1",
+ "react-query": "^3.39.3",
+ "react-router-dom": "^6.14.2",
+ "sass-loader": "^13.3.2",
+ "scss": "^0.2.4",
+ "vite-plugin-mkcert": "^1.16.0",
+ "vite-plugin-sass-dts": "^1.3.8",
+ "zustand": "^4.3.9"
+ },
+ "devDependencies": {
+ "@swc/cli": "^0.1.62",
+ "@swc/core": "^1.3.72",
+ "@types/lodash": "^4.14.196",
+ "@types/node": "^20.4.4",
+ "@types/react": "^18.0.37",
+ "@types/react-css-modules": "^4.6.4",
+ "@types/react-date-range": "^1.4.4",
+ "@types/react-dom": "^18.0.11",
+ "@types/react-modal": "^3.16.0",
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
+ "@typescript-eslint/parser": "^5.59.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "@vitejs/plugin-react-swc": "^3.3.2",
+ "eslint": "^8.38.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.3.4",
+ "typescript": "^5.0.2",
+ "vite": "^4.3.9"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz",
+ "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==",
+ "dependencies": {
+ "@babel/highlight": "^7.22.10",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.22.9",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz",
+ "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz",
+ "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.10",
+ "@babel/generator": "^7.22.10",
+ "@babel/helper-compilation-targets": "^7.22.10",
+ "@babel/helper-module-transforms": "^7.22.9",
+ "@babel/helpers": "^7.22.10",
+ "@babel/parser": "^7.22.10",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.10",
+ "@babel/types": "^7.22.10",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz",
+ "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.10",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz",
+ "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.9",
+ "@babel/helper-validator-option": "^7.22.5",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
+ "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+ "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
+ "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.22.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz",
+ "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
+ "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
+ "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz",
+ "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.10",
+ "@babel/types": "^7.22.10"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz",
+ "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz",
+ "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz",
+ "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz",
+ "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz",
+ "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
+ "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.5",
+ "@babel/parser": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz",
+ "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.10",
+ "@babel/generator": "^7.22.10",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.22.10",
+ "@babel/types": "^7.22.10",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.22.10",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz",
+ "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz",
+ "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz",
+ "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.46.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz",
+ "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fullcalendar/core": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.8.tgz",
+ "integrity": "sha512-i8JBIvZCWGO9dsMEDcx9bnsQZ9PtGSJdOXGgWbhLaGq2iq41OBdp9g9gM4b/Otv2oK8bL5Gl6CsMmb/HkDtA6Q==",
+ "dependencies": {
+ "preact": "~10.12.1"
+ }
+ },
+ "node_modules/@fullcalendar/daygrid": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.8.tgz",
+ "integrity": "sha512-kCZxQFKb9Vqa3CZRX0v7rMSJ2mlTt4gDpyLfiNJKxUAq7W51uKurPaFZWicaXy1ESHVBxKNlbx5uNjBpyu50JQ==",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.8"
+ }
+ },
+ "node_modules/@fullcalendar/react": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.8.tgz",
+ "integrity": "sha512-E8GQSQyZHkjpwxQW5Vci7iZgN7f33ntuRcvfGii4Fn35t9VHGz2SEyKAWXpVf38elcKTZKVgajU9ipStd+1LEg==",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.8",
+ "react": "^16.7.0 || ^17 || ^18",
+ "react-dom": "^16.7.0 || ^17 || ^18"
+ }
+ },
+ "node_modules/@gar/promisify": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
+ "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@mole-inc/bin-wrapper": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz",
+ "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==",
+ "dev": true,
+ "dependencies": {
+ "bin-check": "^4.1.0",
+ "bin-version-check": "^5.0.0",
+ "content-disposition": "^0.5.4",
+ "ext-name": "^5.0.0",
+ "file-type": "^17.1.6",
+ "filenamify": "^5.0.2",
+ "got": "^11.8.5",
+ "os-filter-obj": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@npmcli/fs": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz",
+ "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==",
+ "dependencies": {
+ "@gar/promisify": "^1.1.3",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
+ "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==",
+ "deprecated": "This functionality has been moved to @npmcli/fs",
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz",
+ "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz",
+ "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==",
+ "dependencies": {
+ "@octokit/auth-token": "^3.0.0",
+ "@octokit/graphql": "^5.0.0",
+ "@octokit/request": "^6.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz",
+ "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==",
+ "dependencies": {
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz",
+ "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==",
+ "dependencies": {
+ "@octokit/request": "^6.0.0",
+ "@octokit/types": "^9.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz",
+ "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw=="
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz",
+ "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==",
+ "dependencies": {
+ "@octokit/tsconfig": "^1.0.2",
+ "@octokit/types": "^9.2.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=4"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz",
+ "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==",
+ "dependencies": {
+ "@octokit/types": "^10.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz",
+ "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==",
+ "dependencies": {
+ "@octokit/openapi-types": "^18.0.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "6.2.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz",
+ "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==",
+ "dependencies": {
+ "@octokit/endpoint": "^7.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz",
+ "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==",
+ "dependencies": {
+ "@octokit/types": "^9.0.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "19.0.13",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz",
+ "integrity": "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==",
+ "dependencies": {
+ "@octokit/core": "^4.2.1",
+ "@octokit/plugin-paginate-rest": "^6.1.2",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/tsconfig": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz",
+ "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA=="
+ },
+ "node_modules/@octokit/types": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz",
+ "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==",
+ "dependencies": {
+ "@octokit/openapi-types": "^18.0.0"
+ }
+ },
+ "node_modules/@remix-run/router": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.8.0.tgz",
+ "integrity": "sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
+ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
+ }
+ },
+ "node_modules/@swc/cli": {
+ "version": "0.1.62",
+ "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz",
+ "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==",
+ "dev": true,
+ "dependencies": {
+ "@mole-inc/bin-wrapper": "^8.0.1",
+ "commander": "^7.1.0",
+ "fast-glob": "^3.2.5",
+ "semver": "^7.3.8",
+ "slash": "3.0.0",
+ "source-map": "^0.7.3"
+ },
+ "bin": {
+ "spack": "bin/spack.js",
+ "swc": "bin/swc.js",
+ "swcx": "bin/swcx.js"
+ },
+ "engines": {
+ "node": ">= 12.13"
+ },
+ "peerDependencies": {
+ "@swc/core": "^1.2.66",
+ "chokidar": "^3.5.1"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swc/core": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.76.tgz",
+ "integrity": "sha512-aYYTA2aVYkwJAZepQXtPnkUthhOfn8qd6rsh+lrJxonFrjmpI7RHt2tMDVTXP6XDX7fvnvrVtT1bwZfmBFPh0Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.3.76",
+ "@swc/core-darwin-x64": "1.3.76",
+ "@swc/core-linux-arm-gnueabihf": "1.3.76",
+ "@swc/core-linux-arm64-gnu": "1.3.76",
+ "@swc/core-linux-arm64-musl": "1.3.76",
+ "@swc/core-linux-x64-gnu": "1.3.76",
+ "@swc/core-linux-x64-musl": "1.3.76",
+ "@swc/core-win32-arm64-msvc": "1.3.76",
+ "@swc/core-win32-ia32-msvc": "1.3.76",
+ "@swc/core-win32-x64-msvc": "1.3.76"
+ },
+ "peerDependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.76.tgz",
+ "integrity": "sha512-ovviEhZ/1E81Z9OGrO0ivLWk4VCa3I3ZzM+cd3gugglRRwVwtlIaoIYqY5S3KiCAupDd1+UCl5X7Vbio7a/V8g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.76.tgz",
+ "integrity": "sha512-tcySTDqs0SHCebtW35sCdcLWsmTEo7bEwx0gNL/spetqVT9fpFi6qU8qcnt7i2KaZHbeNl9g1aadu+Yrni+GzA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.76.tgz",
+ "integrity": "sha512-apgzpGWy1AwoMF4urAAASsAjE7rEzZFIF+p6utuxhS7cNHzE0AyEVDYJbo+pzBdlZ8orBdzzsHtFwoEgKOjebA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.76.tgz",
+ "integrity": "sha512-c3c0zz6S0eludqidDpuqbadE0WT3OZczyQxe9Vw8lFFXES85mvNGtwYzyGK2o7TICpsuHrndwDIoYpmpWk879g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.76.tgz",
+ "integrity": "sha512-Is3bpq7F2qtlnkzEeOD6HIZJPpOmu3q6c82lKww90Q0NnrlSluVMozTHJgwVoFZyizH7uLnk0LuNcEAWLnmJIw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.76.tgz",
+ "integrity": "sha512-iwCeRzd9oSvUzqt7nU6p/ztceAWfnO9XVxBn502R5gs6QCBbE1HCKrWHDO77aKPK7ss+0NcIGHvXTd9L8/wRzw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.76.tgz",
+ "integrity": "sha512-a671g4tW8kyFeuICsgq4uB9ukQfiIyXJT4V6YSnmqhCTz5mazWuDxZ5wKnx/1g5nXTl+U5cWH2TZaCJatp4GKA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.76.tgz",
+ "integrity": "sha512-+swEFtjdMezS0vKUhJC3psdSDtOJGY5pEOt4e8XOPvn7aQpKQ9LfF49XVtIwDSk5SGuWtVoLFzkSY3reWUJCyg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.76.tgz",
+ "integrity": "sha512-5CqwAykpGBJ3PqGLOlWGLGIPpBAG1IwWVDUfro3hhjQ7XJxV5Z1aQf5V5OJ90HJVtrEAVx2xx59UV/Dh081LOg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.3.76",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.76.tgz",
+ "integrity": "sha512-CiMpWLLlR3Cew9067E7XxaLBwYYJ90r9EhGSO6V1pvYSWj7ET/Ppmtj1ZhzPJMqRXAP6xflfl5R5o4ee1m4WLA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@szmarczak/http-timer": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
+ "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
+ "dev": true,
+ "dependencies": {
+ "defer-to-connect": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@tanstack/query-core": {
+ "version": "4.32.6",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.32.6.tgz",
+ "integrity": "sha512-YVB+mVWENQwPyv+40qO7flMgKZ0uI41Ph7qXC2Zf1ft5AIGfnXnMZyifB2ghhZ27u+5wm5mlzO4Y6lwwadzxCA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "4.32.6",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.32.6.tgz",
+ "integrity": "sha512-AITu/IKJJJXsHHeXNBy5bclu12t08usMCY0vFC2dh9SP/w6JAk5U9GwfjOIPj3p+ATADZvxQPe8UiCtMLNeQbg==",
+ "dependencies": {
+ "@tanstack/query-core": "4.32.6",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-native": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@tokenizer/token": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
+ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
+ "dev": true
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@types/cacheable-request": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
+ "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
+ "dev": true,
+ "dependencies": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "^3.1.4",
+ "@types/node": "*",
+ "@types/responselike": "^1.0.0"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz",
+ "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow=="
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.44.2",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz",
+ "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+ "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
+ "peer": true
+ },
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "node_modules/@types/http-cache-semantics": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
+ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
+ "dev": true
+ },
+ "node_modules/@types/http-proxy": {
+ "version": "1.17.11",
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz",
+ "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA=="
+ },
+ "node_modules/@types/keyv": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
+ "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.14.197",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz",
+ "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==",
+ "dev": true
+ },
+ "node_modules/@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ=="
+ },
+ "node_modules/@types/node": {
+ "version": "20.4.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.9.tgz",
+ "integrity": "sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ=="
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ },
+ "node_modules/@types/react": {
+ "version": "18.2.20",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz",
+ "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-css-modules": {
+ "version": "4.6.4",
+ "resolved": "https://registry.npmjs.org/@types/react-css-modules/-/react-css-modules-4.6.4.tgz",
+ "integrity": "sha512-+ceSNlaDcuNR44xyceOrKybdRMDc3kogJw2Hgal3sKPYv3jZPs7NsTThCJd+6ti5cjBNl/UPPYPkf8MevuxCqQ==",
+ "dev": true
+ },
+ "node_modules/@types/react-date-range": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/@types/react-date-range/-/react-date-range-1.4.4.tgz",
+ "integrity": "sha512-9Y9NyNgaCsEVN/+O4HKuxzPbVjRVBGdOKRxMDcsTRWVG62lpYgnxefNckTXDWup8FvczoqPW0+ESZR6R1yymDg==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*",
+ "date-fns": "^2.16.1"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz",
+ "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-modal": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.16.0.tgz",
+ "integrity": "sha512-iphdqXAyUfByLbxJn5j6d+yh93dbMgshqGP0IuBeaKbZXx0aO+OXsvEkt6QctRdxjeM9/bR+Gp3h9F9djVWTQQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/responselike": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
+ "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.3",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
+ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
+ "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/type-utils": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
+ "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz",
+ "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.22.9",
+ "@babel/plugin-transform-react-jsx-self": "^7.22.5",
+ "@babel/plugin-transform-react-jsx-source": "^7.22.5",
+ "react-refresh": "^0.14.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0"
+ }
+ },
+ "node_modules/@vitejs/plugin-react-swc": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz",
+ "integrity": "sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==",
+ "dev": true,
+ "dependencies": {
+ "@swc/core": "^1.3.61"
+ },
+ "peerDependencies": {
+ "vite": "^4"
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/helper-wasm-section": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-opt": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6",
+ "@webassemblyjs/wast-printer": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "peer": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "peer": true
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-assertions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "peer": true,
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agentkeepalive": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
+ "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+ "dependencies": {
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "peer": true,
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "peer": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/aproba": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
+ },
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true,
+ "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/are-we-there-yet": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/axios": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
+ "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
+ },
+ "node_modules/big-integer": {
+ "version": "1.6.51",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/bin-check": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
+ "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^0.7.0",
+ "executable": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-version": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz",
+ "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.0.0",
+ "find-versions": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/bin-version-check": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz",
+ "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==",
+ "dev": true,
+ "dependencies": {
+ "bin-version": "^6.0.0",
+ "semver": "^7.5.3",
+ "semver-truncate": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/bin-version/node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/bin-version/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/bin-version/node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/bin-version/node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/broadcast-channel": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz",
+ "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==",
+ "dependencies": {
+ "@babel/runtime": "^7.7.2",
+ "detect-node": "^2.1.0",
+ "js-sha3": "0.8.0",
+ "microseconds": "0.2.0",
+ "nano-time": "1.0.0",
+ "oblivious-set": "1.0.0",
+ "rimraf": "3.0.2",
+ "unload": "2.2.0"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.10",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
+ "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001517",
+ "electron-to-chromium": "^1.4.477",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "peer": true
+ },
+ "node_modules/cacache": {
+ "version": "16.1.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz",
+ "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==",
+ "dependencies": {
+ "@npmcli/fs": "^2.1.0",
+ "@npmcli/move-file": "^2.0.0",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.1.0",
+ "glob": "^8.0.1",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^7.7.1",
+ "minipass": "^3.1.6",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "mkdirp": "^1.0.4",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^9.0.0",
+ "tar": "^6.1.11",
+ "unique-filename": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/cacache/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/cacache/node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/cacache/node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cacache/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacheable-lookup": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
+ "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.6.0"
+ }
+ },
+ "node_modules/cacheable-request": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
+ "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
+ "dev": true,
+ "dependencies": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^6.0.1",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/camelcase-keys/node_modules/quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001519",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz",
+ "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "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"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "peer": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/classnames": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
+ "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/clone-response": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
+ "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
+ "dev": true,
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-loader": {
+ "version": "6.8.1",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz",
+ "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==",
+ "dependencies": {
+ "icss-utils": "^5.1.0",
+ "postcss": "^8.4.21",
+ "postcss-modules-extract-imports": "^3.0.0",
+ "postcss-modules-local-by-default": "^4.0.3",
+ "postcss-modules-scope": "^3.0.0",
+ "postcss-modules-values": "^4.0.0",
+ "postcss-value-parser": "^4.2.0",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.0.0"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "node_modules/date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.9",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
+ "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
+ },
+ "node_modules/debug": {
+ "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"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decompress-response/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/defer-to-connect": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
+ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+ },
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
+ "node_modules/detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.490",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz",
+ "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "optional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz",
+ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==",
+ "peer": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.46.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz",
+ "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.1",
+ "@eslint/js": "^8.46.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.2",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz",
+ "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==",
+ "dev": true,
+ "peerDependencies": {
+ "eslint": ">=7"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz",
+ "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/type-fest": {
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/execa/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/execa/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/execa/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/execa/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+ "dev": true
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/exenv": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
+ "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw=="
+ },
+ "node_modules/ext-list": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+ "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "^1.28.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext-name": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+ "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+ "dev": true,
+ "dependencies": {
+ "ext-list": "^2.0.0",
+ "sort-keys-length": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/file-type": {
+ "version": "17.1.6",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz",
+ "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==",
+ "dev": true,
+ "dependencies": {
+ "readable-web-to-node-stream": "^3.0.2",
+ "strtok3": "^7.0.0-alpha.9",
+ "token-types": "^5.0.0-alpha.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/file-type?sponsor=1"
+ }
+ },
+ "node_modules/filename-reserved-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
+ "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/filenamify": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz",
+ "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==",
+ "dev": true,
+ "dependencies": {
+ "filename-reserved-regex": "^3.0.0",
+ "strip-outer": "^2.0.0",
+ "trim-repeated": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-versions": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz",
+ "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==",
+ "dev": true,
+ "dependencies": {
+ "semver-regex": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "dependencies": {
+ "globule": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "peer": true
+ },
+ "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/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globule": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz",
+ "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==",
+ "dependencies": {
+ "glob": "~7.1.1",
+ "lodash": "^4.17.21",
+ "minimatch": "~3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/globule/node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "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"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globule/node_modules/minimatch": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
+ "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/got": {
+ "version": "11.8.6",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
+ "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.2",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/got?sponsor=1"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dependencies": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/http-proxy-middleware": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
+ "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+ "dependencies": {
+ "@types/http-proxy": "^1.17.8",
+ "http-proxy": "^1.18.1",
+ "is-glob": "^4.0.1",
+ "is-plain-obj": "^3.0.0",
+ "micromatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "@types/express": "^4.17.13"
+ },
+ "peerDependenciesMeta": {
+ "@types/express": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/http2-wrapper": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
+ "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "dev": true,
+ "dependencies": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/icss-utils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "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",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz",
+ "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==",
+ "peer": true
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/ip": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "peer": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
+ },
+ "node_modules/js-sha3": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jwt-decode": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
+ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
+ },
+ "node_modules/keyv": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
+ "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/make-fetch-happen": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz",
+ "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==",
+ "dependencies": {
+ "agentkeepalive": "^4.2.1",
+ "cacache": "^16.1.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^7.7.1",
+ "minipass": "^3.1.6",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^2.0.3",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.3",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^7.0.0",
+ "ssri": "^9.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/match-sorter": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz",
+ "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "remove-accents": "0.4.2"
+ }
+ },
+ "node_modules/meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/microseconds": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz",
+ "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA=="
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/minimist-options/node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-fetch": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz",
+ "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==",
+ "dependencies": {
+ "minipass": "^3.1.6",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.1.2"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.13"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/nan": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ=="
+ },
+ "node_modules/nano-time": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz",
+ "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==",
+ "dependencies": {
+ "big-integer": "^1.6.16"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz",
+ "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-gyp": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/@npmcli/fs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "dependencies": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "node_modules/node-gyp/node_modules/@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "deprecated": "This functionality has been moved to @npmcli/fs",
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/node-gyp/node_modules/cacache": {
+ "version": "15.3.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+ "dependencies": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/node-gyp/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+ "dependencies": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+ "dependencies": {
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.12"
+ }
+ },
+ "node_modules/node-gyp/node_modules/socks-proxy-agent": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
+ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/node-gyp/node_modules/unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/node-gyp/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
+ },
+ "node_modules/node-sass": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz",
+ "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^4.1.2",
+ "cross-spawn": "^7.0.3",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "lodash": "^4.17.15",
+ "make-fetch-happen": "^10.0.4",
+ "meow": "^9.0.0",
+ "nan": "^2.17.0",
+ "node-gyp": "^8.4.1",
+ "sass-graph": "^4.0.1",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^2.2.1"
+ },
+ "bin": {
+ "node-sass": "bin/node-sass"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/node-sass/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/node-sass/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/node-sass/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/node-sass/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/node-sass/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/oblivious-set": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz",
+ "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw=="
+ },
+ "node_modules/ometa": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/ometa/-/ometa-0.2.2.tgz",
+ "integrity": "sha512-LZuoK/yjU3FvrxPjUXUlZ1bavCfBPqauA7fsNdwi+AVhRdyk2IzgP3JRnevvjzQ6fKHdUw8YISshf53FmpHrng==",
+ "engines": {
+ "node": ">= 0.2.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-filter-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
+ "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
+ "dev": true,
+ "dependencies": {
+ "arch": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-cancelable": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
+ "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/peek-readable": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
+ "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz",
+ "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-modules-extract-imports": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
+ "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz",
+ "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==",
+ "dependencies": {
+ "icss-utils": "^5.0.0",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/postcss-modules-scope": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
+ "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.4"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/postcss-modules-values": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+ "dependencies": {
+ "icss-utils": "^5.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/preact": {
+ "version": "10.12.1",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz",
+ "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz",
+ "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==",
+ "peer": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="
+ },
+ "node_modules/promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "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/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-cookie": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-4.1.1.tgz",
+ "integrity": "sha512-ffn7Y7G4bXiFbnE+dKhHhbP+b8I34mH9jqnm8Llhj89zF4nPxPutxHT1suUqMeCEhLDBI7InYwf1tpaSoK5w8A==",
+ "dependencies": {
+ "@types/hoist-non-react-statics": "^3.0.1",
+ "hoist-non-react-statics": "^3.0.0",
+ "universal-cookie": "^4.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.3.0"
+ }
+ },
+ "node_modules/react-date-range": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/react-date-range/-/react-date-range-1.4.0.tgz",
+ "integrity": "sha512-+9t0HyClbCqw1IhYbpWecjsiaftCeRN5cdhsi9v06YdimwyMR2yYHWcgVn3URwtN/txhqKpEZB6UX1fHpvK76w==",
+ "dependencies": {
+ "classnames": "^2.2.6",
+ "prop-types": "^15.7.2",
+ "react-list": "^0.8.13",
+ "shallow-equal": "^1.2.1"
+ },
+ "peerDependencies": {
+ "date-fns": "2.0.0-alpha.7 || >=2.0.0",
+ "react": "^0.14 || ^15.0.0-rc || >=15.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-icons": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz",
+ "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-lifecycles-compat": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+ },
+ "node_modules/react-list": {
+ "version": "0.8.17",
+ "resolved": "https://registry.npmjs.org/react-list/-/react-list-0.8.17.tgz",
+ "integrity": "sha512-pgmzGi0G5uGrdHzMhgO7KR1wx5ZXVvI3SsJUmkblSAKtewIhMwbQiMuQiTE83ozo04BQJbe0r3WIWzSO0dR1xg==",
+ "dependencies": {
+ "prop-types": "15"
+ },
+ "peerDependencies": {
+ "react": "0.14 || 15 - 18"
+ }
+ },
+ "node_modules/react-modal": {
+ "version": "3.16.1",
+ "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz",
+ "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==",
+ "dependencies": {
+ "exenv": "^1.2.0",
+ "prop-types": "^15.7.2",
+ "react-lifecycles-compat": "^3.0.0",
+ "warning": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "peerDependencies": {
+ "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18",
+ "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18"
+ }
+ },
+ "node_modules/react-query": {
+ "version": "3.39.3",
+ "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz",
+ "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "broadcast-channel": "^3.4.1",
+ "match-sorter": "^6.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.15.0.tgz",
+ "integrity": "sha512-NIytlzvzLwJkCQj2HLefmeakxxWHWAP+02EGqWEZy+DgfHHKQMUoBBjUQLOtFInBMhWtb3hiUy6MfFgwLjXhqg==",
+ "dependencies": {
+ "@remix-run/router": "1.8.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.15.0.tgz",
+ "integrity": "sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==",
+ "dependencies": {
+ "@remix-run/router": "1.8.0",
+ "react-router": "6.15.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
+ },
+ "node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/read-pkg/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readable-web-to-node-stream": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
+ "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "peer": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ },
+ "node_modules/remove-accents": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
+ "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA=="
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+ },
+ "node_modules/resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-alpn": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
+ "dev": true
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/responselike": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
+ "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
+ "dev": true,
+ "dependencies": {
+ "lowercase-keys": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.28.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz",
+ "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==",
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "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": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "optional": true
+ },
+ "node_modules/sass": {
+ "version": "1.65.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.65.1.tgz",
+ "integrity": "sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA==",
+ "peer": true,
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-graph": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz",
+ "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==",
+ "dependencies": {
+ "glob": "^7.0.0",
+ "lodash": "^4.17.11",
+ "scss-tokenizer": "^0.4.3",
+ "yargs": "^17.2.1"
+ },
+ "bin": {
+ "sassgraph": "bin/sassgraph"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/sass-loader": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz",
+ "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==",
+ "dependencies": {
+ "neo-async": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 14.15.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "fibers": ">= 3.1.0",
+ "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+ "sass": "^1.3.0",
+ "sass-embedded": "*",
+ "webpack": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "fibers": {
+ "optional": true
+ },
+ "node-sass": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/scss": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/scss/-/scss-0.2.4.tgz",
+ "integrity": "sha512-4u8V87F+Q/upVhUmhPnB4C1R11xojkRkWjExL2v0CX2EXTg18VrKd+9JWoeyCp2VEMdSpJsyAvVU+rVjogh51A==",
+ "dependencies": {
+ "ometa": "0.2.2"
+ },
+ "engines": {
+ "node": ">= 0.2.0"
+ }
+ },
+ "node_modules/scss-tokenizer": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz",
+ "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==",
+ "dependencies": {
+ "js-base64": "^2.4.9",
+ "source-map": "^0.7.3"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver-regex": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz",
+ "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/semver-truncate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz",
+ "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
+ "peer": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+ },
+ "node_modules/shallow-equal": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
+ "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+ "dependencies": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sort-keys-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+ "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==",
+ "dev": true,
+ "dependencies": {
+ "sort-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sort-keys/node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
+ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w=="
+ },
+ "node_modules/ssri": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz",
+ "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==",
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/stdout-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+ "dependencies": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/stdout-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stdout-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/stdout-stream/node_modules/string_decoder": {
+ "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"
+ }
+ },
+ "node_modules/string_decoder": {
+ "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"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-outer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz",
+ "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strtok3": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz",
+ "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==",
+ "dev": true,
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "peek-readable": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz",
+ "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tar/node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/terser": {
+ "version": "5.19.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz",
+ "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.9",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.1",
+ "terser": "^5.16.8"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "peer": true
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/token-types": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz",
+ "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==",
+ "dev": true,
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "ieee754": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/trim-repeated": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz",
+ "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/trim-repeated/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/true-case-path": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz",
+ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q=="
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "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"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unique-filename": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz",
+ "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==",
+ "dependencies": {
+ "unique-slug": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz",
+ "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==",
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/universal-cookie": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz",
+ "integrity": "sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==",
+ "dependencies": {
+ "@types/cookie": "^0.3.3",
+ "cookie": "^0.4.0"
+ }
+ },
+ "node_modules/universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "node_modules/unload": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz",
+ "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==",
+ "dependencies": {
+ "@babel/runtime": "^7.6.2",
+ "detect-node": "^2.0.4"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "4.4.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
+ "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
+ "dependencies": {
+ "esbuild": "^0.18.10",
+ "postcss": "^8.4.27",
+ "rollup": "^3.27.1"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-mkcert": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.16.0.tgz",
+ "integrity": "sha512-5r+g8SB9wZzLNUFekGwZo3e0P6QlS6rbxK5p9z/itxNAimsYohgjK/YfVPVxM9EuglP9hjridq0lUejo9v1nVg==",
+ "dependencies": {
+ "@octokit/rest": "^19.0.5",
+ "axios": "^1.2.2",
+ "debug": "^4.3.4",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=v16.7.0"
+ },
+ "peerDependencies": {
+ "vite": ">=3"
+ }
+ },
+ "node_modules/vite-plugin-sass-dts": {
+ "version": "1.3.9",
+ "resolved": "https://registry.npmjs.org/vite-plugin-sass-dts/-/vite-plugin-sass-dts-1.3.9.tgz",
+ "integrity": "sha512-v8+LJ8yeN+TexjWiJjv6XOIvT382ZEcFi9gY7OB1ydGNv50B+RE5I8/Xx5XJDkNXsDfhdatNMq02Zgu9ue/wXw==",
+ "dependencies": {
+ "postcss-js": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8",
+ "prettier": "^2.7 || ^3",
+ "sass": "*",
+ "vite": "^3 || ^4"
+ }
+ },
+ "node_modules/warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "peer": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/webpack": {
+ "version": "5.88.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz",
+ "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.0",
+ "@webassemblyjs/ast": "^1.11.5",
+ "@webassemblyjs/wasm-edit": "^1.11.5",
+ "@webassemblyjs/wasm-parser": "^1.11.5",
+ "acorn": "^8.7.1",
+ "acorn-import-assertions": "^1.9.0",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.15.0",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.9",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.2.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.3.7",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs/node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zustand": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.1.tgz",
+ "integrity": "sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==",
+ "dependencies": {
+ "use-sync-external-store": "1.2.0"
+ },
+ "engines": {
+ "node": ">=12.7.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16.8",
+ "immer": ">=9.0",
+ "react": ">=16.8"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..54db0f3e
--- /dev/null
+++ b/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "miniproject",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@fullcalendar/core": "^6.1.8",
+ "@fullcalendar/daygrid": "^6.1.8",
+ "@fullcalendar/react": "^6.1.8",
+ "@tanstack/react-query": "^4.32.0",
+ "axios": "^1.4.0",
+ "css-loader": "^6.8.1",
+ "dayjs": "^1.11.9",
+ "esbuild": "^0.18.17",
+ "http-proxy-middleware": "^2.0.6",
+ "jwt-decode": "^3.1.2",
+ "node-sass": "^9.0.0",
+ "react": "^18.2.0",
+ "react-cookie": "^4.1.1",
+ "react-date-range": "^1.4.0",
+ "react-dom": "^18.2.0",
+ "react-icons": "^4.10.1",
+ "react-modal": "^3.16.1",
+ "react-query": "^3.39.3",
+ "react-router-dom": "^6.14.2",
+ "sass-loader": "^13.3.2",
+ "scss": "^0.2.4",
+ "vite-plugin-mkcert": "^1.16.0",
+ "vite-plugin-sass-dts": "^1.3.8",
+ "zustand": "^4.3.9"
+ },
+ "devDependencies": {
+ "@swc/cli": "^0.1.62",
+ "@swc/core": "^1.3.72",
+ "@types/lodash": "^4.14.196",
+ "@types/node": "^20.4.4",
+ "@types/react": "^18.0.37",
+ "@types/react-css-modules": "^4.6.4",
+ "@types/react-date-range": "^1.4.4",
+ "@types/react-dom": "^18.0.11",
+ "@types/react-modal": "^3.16.0",
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
+ "@typescript-eslint/parser": "^5.59.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "@vitejs/plugin-react-swc": "^3.3.2",
+ "eslint": "^8.38.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.3.4",
+ "typescript": "^5.0.2",
+ "vite": "^4.3.9"
+ }
+}
diff --git a/public/assets/Loading_Ellipsis.gif b/public/assets/Loading_Ellipsis.gif
new file mode 100644
index 00000000..6bbf3a68
Binary files /dev/null and b/public/assets/Loading_Ellipsis.gif differ
diff --git a/public/assets/calendar.png b/public/assets/calendar.png
new file mode 100644
index 00000000..d58547c6
Binary files /dev/null and b/public/assets/calendar.png differ
diff --git a/public/assets/search_icon.png b/public/assets/search_icon.png
new file mode 100644
index 00000000..b11418b3
Binary files /dev/null and b/public/assets/search_icon.png differ
diff --git a/src/API/AnnualList.tsx.bak b/src/API/AnnualList.tsx.bak
new file mode 100644
index 00000000..1c702c2e
--- /dev/null
+++ b/src/API/AnnualList.tsx.bak
@@ -0,0 +1,188 @@
+import dayjs from "dayjs";
+import styles from "./annualList.module.scss";
+import { DateCount } from "@/Common/CommonFunction.ts";
+import { ChangeEvent, useState } from "react";
+import "@/Components/Modal/Modal.scss";
+import useDataQuery from "@/Hooks/useData-Query.tsx";
+import Modal from "@/Components/Modal/Modal.tsx";
+
+export default function AnnualList(props: { myData?: MyDataType }) {
+ const [edit, setEdit] = useState(false);
+ const [title, setTitle] = useState("");
+ const [start, setStart] = useState("");
+ const [end, setEnd] = useState("");
+ const [reason, setReason] = useState("");
+ const [id, setId] = useState(0);
+ const [visivibility, setVisivibility] = useState(false);
+ const annuals = props.myData?.annualHistories || [];
+ const { changeMyData, deleteMyData } = useDataQuery();
+
+
+ const handleClick = (id: number) => {
+ setId(id);
+ setVisivibility(true);
+ };
+ const handleEditClick = (
+ e: React.MouseEvent
+ ) => {
+ e.stopPropagation();
+ setEdit(true);
+ };
+
+ const handleEdit = () => {
+ setEdit(!edit);
+ };
+
+ const handleInputChange = (
+ e: React.ChangeEvent | ChangeEvent
+ ) => {
+ if (e.target.name === "title") {
+ setTitle(e.target.value);
+ } else if (e.target.name === "startDate") {
+ setStart(e.target.value);
+ } else if (e.target.name === "endDate") {
+ setEnd(e.target.value);
+ } else if (e.target.name === "select-reason") {
+ setReason(e.target.value);
+ }
+ };
+ const handleSubmit = async () => {
+ const data: UpdateType = { id: id, title: title, startDate: start, endDate: end, reason: reason };
+ changeMyData.mutate(data, {
+ onSuccess: (res) => {
+ console.log(res);
+ console.log("수정되었습니다.");
+ setEdit(false);
+ setVisivibility(false);
+ },
+ onError: (error) => {
+ console.log("수정 실패", error);
+ }
+ });
+ };
+
+ const handleDelete = async () => {
+ deleteMyData.mutate(id, {
+ onSuccess: (res) => {
+ res.status === 200 && alert("삭제되었습니다.");
+ setEdit(false);
+ setVisivibility(false);
+ },
+ onError: (error: any) => {
+ console.log("에러", error.response.status);
+ if (error.response.status === 400) {
+ alert("결재된 연차/당직은 삭제가 안됩니다.");
+ setEdit(false);
+ setVisivibility(false);
+ }
+ console.log("삭제 실패");
+ }
+ });
+ };
+
+ return (
+
+
+ 사유
+ 제목
+ 사용 기간
+ 사용 개수
+ 상태
+
+
+ {annuals?.map((annual, index) => (
+
handleClick(annual.id)}
+ key={index}
+ className={styles.lists}
+ >
+
{annual.reason}
+
{annual.title}
+
+ {dayjs(annual.startDate).format("YYYY/MM/DD")} ~
+ {dayjs(annual.endDate).format("YYYY/MM/DD")}
+
+
{DateCount({
+ startDate: annual.startDate,
+ endDate: annual.endDate
+ })} 개
+
+
{annual.status}
+
+
+
+
일정 등록
+
+ 제목
+ {edit ? (
+
+ ) : (
+ {annual.title}
+ )}
+
+
+ 시작일
+ {edit ? (
+
+ ) : (
+ {annual.startDate}
+ )}
+
+
+ 종료일
+ {edit ? (
+
+ ) : (
+ {annual.endDate}
+ )}
+
+
+ 사유
+ {edit ? (
+
+ ========== 선택하세요 ==========
+ 연차유급휴가
+ 병가휴가
+ 경조사휴가
+ 출산휴가
+ 기타휴가
+ {reason}
+
+ ) : (
+ {annual.reason}
+ )
+ }
+
+
+ 삭 제
+ 수 정
+
+
+
+
+ ))}
+
+
+ );
+}
+
+
diff --git a/src/API/admin.bak b/src/API/admin.bak
new file mode 100644
index 00000000..624f3927
--- /dev/null
+++ b/src/API/admin.bak
@@ -0,0 +1,156 @@
+import { useState, } from "react";
+import styles from "./admin.module.scss";
+import Header from "@/Components/Header/Header.tsx";
+import SearchBar from "@/Components/AdminPage/SearchBar.tsx";
+import DutyLists from "@/Components/AdminPage/DutyLists.tsx";
+import DayoffLists from "@/Components/AdminPage/DayoffLists.tsx";
+import { AdminListsAll } from "@/@types/adminList.ts";
+import { getSilentAxios } from "@/Api/apis.ts";
+import { getAccessToken } from "@/Api/mainApi";
+import useDataQuery from "@/Hooks/useData-Query.tsx";
+
+export default function Admin() {
+ const [dayoffData, setDayoffData] = useState([]);
+ const [dutyData, setDutyData] = useState([]);
+ const [filteredDayoffData, setFilteredDayoffData]
+ = useState(
+ []
+ );
+ const [filteredDutyData, setFilteredDutyData] = useState([]);
+ const [searchOption, setSearchOption] = useState("이름");
+ console.log(searchOption);
+ const { getAdminPageData } = useDataQuery();
+ const { isLoading, isError, data: adminData } = getAdminPageData;
+ console.log(adminData);
+
+
+ // 사용자 기안 데이터 불러오기
+ if (adminData) {
+ const data = adminData;
+ const dayoffItems = data.filter(
+ (item: AdminListsAll) => item.category === "연차"
+ );
+ const dutyItems = data.filter(
+ (item: AdminListsAll) => item.category === "당직"
+ );
+ console.log(data);
+ setDayoffData(dayoffItems);
+ setDutyData(dutyItems);
+ setFilteredDayoffData(dayoffItems);
+ setFilteredDutyData(dutyItems);
+ } else if (isLoading) {
+ return 로딩중...
;
+ } else if (isError) {
+ console.error("데이터를 가져오는 중 오류 발생:", isError);
+ const silentAxios = getSilentAxios(getAccessToken());
+ return silentAxios.get("/admin").then(res => {
+ return res.data;
+ });
+ }
+
+
+ // useEffect(() => {
+ // async function fetchListData() {
+ // try {
+ // const data = await getListAll();
+ // const dayoffItems = data.filter(
+ // (item: AdminListsAll) => item.category === "연차"
+ // );
+ // const dutyItems = data.filter(
+ // (item: AdminListsAll) => item.category === "당직"
+ // );
+ // console.log(data);
+ // setDayoffData(dayoffItems);
+ // setDutyData(dutyItems);
+ // setFilteredDayoffData(dayoffItems);
+ // setFilteredDutyData(dutyItems);
+ //
+ //
+ // } catch (error) {
+ // console.error("데이터를 가져오는 중 오류 발생:", error);
+ // const silentAxios = getSilentAxios(getAccessToken());
+ // const result = await silentAxios.get("/admin");
+ // return result.data;
+ // }
+ // }
+ // fetchListData();
+ // }, []);
+
+ // 검색 기능 추가 (옵션 선택)
+
+
+ const handleSearch = (searchTerm: string, option: string) => {
+ setSearchOption(option);
+ if (option === "이름") {
+ const filteredDayoff = dayoffData.filter((item) =>
+ item.name.includes(searchTerm)
+ );
+ const filteredDuty = dutyData.filter((item) =>
+ item.name.includes(searchTerm)
+ );
+ setFilteredDayoffData(filteredDayoff);
+ setFilteredDutyData(filteredDuty);
+ } else if (option === "제목") {
+ const filteredDayoff = dayoffData.filter((item) =>
+ item.title.includes(searchTerm)
+ );
+ const filteredDuty = dutyData.filter((item) =>
+ item.title.includes(searchTerm)
+ );
+ setFilteredDayoffData(filteredDayoff);
+ setFilteredDutyData(filteredDuty);
+ }
+ };
+
+ return (
+ <>
+
+
+
+
+
+ team9
+ 관리자
+
+
+
+
+
+
+
+ 연차 내역
+
+ 상신인
+ 제목
+ 사유
+ 사용 기간
+ 사용 일수
+ 상태
+
+
+ {/* dayoffData 상태는 AdminListsAll 타입의 배열로 정의 */}
+ {filteredDayoffData.map((item) => (
+
+ ))}
+
+
+
+ 당직 내역
+
+ 상신인
+ 제목
+ 사용 기간
+ 상태
+
+
+ {filteredDutyData.map((item) => (
+
+ ))}
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/API/apis.d.ts b/src/API/apis.d.ts
new file mode 100644
index 00000000..327ee370
--- /dev/null
+++ b/src/API/apis.d.ts
@@ -0,0 +1,26 @@
+// apis.d.ts
+
+import { AxiosInstance } from "axios";
+import { UpdateType } from "../types/common.ts";
+
+
+declare module "src/Api/apis.ts" {
+ export const getAccessToken: () => string | undefined;
+
+ export const ApiHttp: AxiosInstance;
+ export const ApiLogin: AxiosInstance;
+ export const getSilentAxios: (token: string) => AxiosInstance;
+ export const getNewAccessToken: () => Promise;
+
+ export function getListAll(): Promise;
+ export function permission(item: { id: number }): Promise;
+ export function getMyPage(): Promise;
+ export function login(email: string, password: string): Promise;
+ export function logOut(): Promise;
+ export function signUp(email: string, password: string, name: string, join: string): Promise;
+ export function getMainPage(token: string): Promise;
+ export function postMain(title: string, category: string, endDate: string, reason: string, startDate: string): Promise;
+ export function postPassword(data: { newPassword: string }): Promise;
+ export function postUpdate(data: UpdateType): Promise;
+ export function postDelete(id: number): Promise;
+}
diff --git a/src/API/apis.ts b/src/API/apis.ts
new file mode 100644
index 00000000..0df0e628
--- /dev/null
+++ b/src/API/apis.ts
@@ -0,0 +1,243 @@
+import axios, { AxiosInstance } from "axios";
+import { Cookies } from "react-cookie";
+import { UpdateType } from "types/common";
+
+
+
+export const getAccessToken = (): string | undefined => {
+ const cookie = new Cookies();
+ return cookie.get("accessToken");
+};
+
+
+const ACCESSTOKEN = getAccessToken();
+export const ApiHttp: AxiosInstance = axios.create({
+ baseURL: "/mini",
+ headers: {
+ Authorization: `Bearer ${ACCESSTOKEN}`,
+ },
+});
+
+export const ApiLogin: AxiosInstance = axios.create({
+ baseURL: "/mini",
+});
+
+// 재요청 인스턴스
+export const getSilentAxios = (token: string): AxiosInstance => {
+ const silentAxios: AxiosInstance = axios.create({
+ baseURL: "/mini",
+ headers: {
+ Authorization: `Bearer ${token}`,
+ },
+ });
+ silentAxios.interceptors.response.use(
+ async (res) => res,
+ async (error) => {
+ if (error.response.status === 403) {
+ try {
+ const NEW_ACCESSTOKEN = await getNewAccessToken();
+ const config = error.config;
+ config.headers.Authorization = `Bearer ${NEW_ACCESSTOKEN}`;
+ document.cookie = `accessToken=${NEW_ACCESSTOKEN}; path=/; `;
+ const response = await axios.get(config.url, config);
+ return response.data;
+ } catch (error) {
+ console.log("재요청에러: ", error);
+ }
+ }
+ throw error;
+ },
+ );
+ return silentAxios;
+};
+
+// NEW_ACCESSTOKEN (리프레시 토큰 요청 => 새로운 엑세스 토큰 반환)
+export const getNewAccessToken = async (): Promise => {
+ try {
+ const response = await ApiHttp.post(
+ "/api/token",
+ {},
+ {
+ headers: {
+ Authorization: `Bearer ${ACCESSTOKEN}`,
+ },
+ withCredentials: true,
+ },
+ );
+ const newAccessToken: string = response.data;
+ return newAccessToken;
+ } catch (error) {
+ console.error("getNewAccessTokenAPI에러: ", error);
+ throw error;
+ }
+};
+
+// ADMIN_PAGE
+export const getListAll = async (): Promise => {
+ try {
+ const res = await ApiHttp.get("/api/admin");
+ return res.data;
+ } catch (error) {
+ console.log("getListAllAPI-Error:", error);
+ }
+};
+
+// ADMIN_연차/당직 승인 처리
+export const permission = async (item: { id: number }): Promise => {
+ try {
+ const res = await ApiHttp.post(
+ "/api/admin/apply",
+ { id: item.id },
+ {
+ headers: {
+ Authorization: `Bearer ${ACCESSTOKEN}`,
+ },
+ withCredentials: true,
+ },
+ );
+ return res.data;
+ } catch (error) {
+ console.error("permission 에러: ", error);
+ throw error;
+ }
+};
+
+// GET_MY_PAGE
+export const getMyPage = async (): Promise => {
+ try {
+ const res = await ApiHttp.get("/api/user");
+ return res.data;
+ } catch (error) {
+ const ACCESSTOKEN = getAccessToken();
+ const silentAxios = getSilentAxios(ACCESSTOKEN ?? "");
+ const result = await silentAxios.get("/api/user");
+ return result.data; // Assuming result is an AxiosResponse object
+ }
+};
+
+// LOG_IN
+export const login = async (email: string, password: string): Promise => {
+ // eslint-disable-next-line no-useless-catch
+ try {
+ return await ApiLogin.post(
+ "/api/login",
+ {
+ email,
+ password,
+ },
+ { withCredentials: true },
+ );
+ } catch (error) {
+ throw error;
+ }
+};
+
+// LOG_OUT
+export const logOut = async (): Promise => {
+ try {
+ const res = await ApiHttp.post(
+ "/api/logout",
+ {},
+ { withCredentials: true },
+ );
+ return res;
+ } catch (error) {
+ console.error("로그아웃이 실패 하였습니다.", error);
+ }
+};
+
+// SIGN_UP
+export const signUp = async (
+ email: string,
+ password: string,
+ name: string,
+ join: string,
+): Promise => {
+// eslint-disable-next-line no-useless-catch
+ try {
+ const response = await ApiLogin.post("/api/register", {
+ email,
+ password,
+ name,
+ join,
+ });
+ return response.data;
+ } catch (error) {
+ throw error;
+ }
+};
+
+// GET_MAIN_PAGE
+export const getMainPage = async (token: string): Promise => {
+ try {
+ const response = await ApiHttp.get("/api/main", {
+ headers: {
+ Authorization: `Bearer ${token}`,
+ },
+ });
+ return response;
+ } catch (error) {
+ const ACCESSTOKEN = getAccessToken();
+ const silentAxios = getSilentAxios(ACCESSTOKEN ?? "");
+ const result = await silentAxios.get("/api/main");
+ return result.data; // Assuming result is an AxiosResponse object
+ }
+};
+
+export const postMain = async (
+ title: string,
+ category: string,
+ endDate: string,
+ reason: string,
+ startDate: string,
+): Promise => {
+ try {
+ const response = await ApiHttp.post("/api/annual", {
+ title,
+ category,
+ endDate,
+ reason,
+ startDate,
+ });
+ return response.data;
+ } catch (error) {
+ console.log("postMain 호출:", error);
+ throw error;
+ }
+};
+
+export async function postPassword(data: {
+ newPassword: string;
+}): Promise {
+ try {
+ const response = await ApiHttp.post("/api/user", data);
+ console.log("비밀번호 변경 완료", response);
+ return response.data; // Assuming response contains relevant data
+ } catch (error) {
+ console.error("패스워드 변경 실패:", error);
+ throw error;
+ }
+}
+
+export async function postUpdate(data: UpdateType): Promise {
+ try {
+ const response = await ApiHttp.post("/api/annual/update", data);
+ console.log("수정 완료", response.status);
+ return response.status; // Assuming response contains relevant data
+ } catch (error) {
+ console.error("Error submitting event:", error);
+ throw error;
+ }
+}
+
+export async function postDelete(id: number): Promise {
+ try {
+ const response = await ApiHttp.post("/api/annual/cancel", { id });
+ console.log("삭제 완료", response.status);
+ alert("삭제 완료");
+ return response.status;
+ } catch (error) {
+ console.error("Error submitting event:", error);
+ throw error;
+ }
+}
diff --git a/src/API/data/admin.json b/src/API/data/admin.json
new file mode 100644
index 00000000..6e03597e
--- /dev/null
+++ b/src/API/data/admin.json
@@ -0,0 +1,155 @@
+[
+ {
+ "id": 1,
+ "name": "최땡떙",
+ "category": "연차",
+ "title": "최땡떙 과장 | 경조사 휴가 사용의 건",
+ "startDate": "2023-07-24",
+ "endDate": "2023-07-28",
+ "reason": "경조사",
+ "status": "결재 대기"
+ },
+ {
+ "id": 2,
+ "name": "김떙떙",
+ "category": "당직",
+ "title": "김떙떙 사원 | 7월 당직 결재건",
+ "startDate": "2023-08-23",
+ "endDate": "2023-08-27",
+ "status": "결재 완료"
+ },
+ {
+ "id": 3,
+ "name": "안땡떙",
+ "category": "연차",
+ "title": "안땡떙 주임 | 경조사 휴가 사용의 건",
+ "startDate": "2023-09-24",
+ "endDate": "2023-09-28",
+ "reason": "경조사",
+ "status": "결재 대기"
+ },
+ {
+ "id": 4,
+ "name": "이땡떙",
+ "category": "당직",
+ "title": "이땡떙 대리 | 7월 당직 결재건",
+ "startDate": "2023-10-23",
+ "endDate": "2023-10-27",
+ "status": "결재 완료"
+ },
+ {
+ "id": 5,
+ "name": "최땡떙",
+ "category": "연차",
+ "title": "최땡떙 과장 | 경조사 휴가 사용의 건",
+ "startDate": "2023-07-24",
+ "endDate": "2023-07-28",
+ "reason": "경조사",
+ "status": "결재 대기"
+ },
+ {
+ "id": 6,
+ "name": "김떙떙",
+ "category": "당직",
+ "title": "김떙떙 사원 | 7월 당직 결재건",
+ "startDate": "2023-08-23",
+ "endDate": "2023-08-27",
+ "status": "결재 완료"
+ },
+ {
+ "id": 7,
+ "name": "김떙떙",
+ "category": "당직",
+ "title": "김떙떙 사원 | 7월 당직 결재건",
+ "startDate": "2023-08-23",
+ "endDate": "2023-08-27",
+ "status": "결재 완료"
+ },
+ {
+ "id": 8,
+ "name": "이땡떙",
+ "category": "당직",
+ "title": "이땡떙 대리 | 7월 당직 결재건",
+ "startDate": "2023-10-23",
+ "endDate": "2023-10-27",
+ "status": "결재 완료"
+ },
+ {
+ "id": 9,
+ "name": "최땡떙",
+ "category": "연차",
+ "title": "최땡떙 과장 | 경조사 휴가 사용의 건",
+ "startDate": "2023-07-24",
+ "endDate": "2023-07-28",
+ "reason": "경조사",
+ "status": "결재 대기"
+ },
+ {
+ "id": 10,
+ "name": "최떙떙",
+ "category": "당직",
+ "title": "김떙떙 사원 | 7월 당직 결재건 수정본",
+ "startDate": "2023-08-23",
+ "endDate": "2023-08-27",
+ "status": "결재 대기"
+ },
+ {
+ "id": 11,
+ "name": "안땡떙",
+ "category": "연차",
+ "title": "안땡떙 주임 | 경조사 휴가 사용의 건",
+ "startDate": "2023-09-24",
+ "endDate": "2023-09-28",
+ "reason": "경조사",
+ "status": "결재 대기"
+ },
+ {
+ "id": 12,
+ "name": "이땡떙",
+ "category": "연차",
+ "title": "최땡떙 과장 | 경조사 휴가 사용의 건_수정",
+ "startDate": "2023-07-24",
+ "endDate": "2023-07-28",
+ "reason": "경조사",
+ "status": "결재 완료"
+ },
+ {
+ "id": 13,
+ "name": "최땡떙",
+ "category": "연차",
+ "title": "최땡떙 과장 | 경조사 휴가 사용의 건",
+ "startDate": "2023-07-24",
+ "endDate": "2023-07-28",
+ "reason": "경조사",
+ "status": "결재 대기"
+ },
+ {
+ "id": 14,
+ "name": "김떙떙",
+ "category": "연차",
+ "title": "최땡떙 과장 | 경조사 휴가 사용의 건",
+ "startDate": "2023-07-24",
+ "endDate": "2023-07-28",
+ "reason": "경조사",
+ "status": "결재 완료"
+ },
+ {
+ "id": 15,
+ "name": "안땡떙",
+ "category": "연차",
+ "title": "안땡떙 주임 | 경조사 휴가 사용의 건",
+ "startDate": "2023-09-24",
+ "endDate": "2023-09-28",
+ "reason": "경조사",
+ "status": "결재 대기"
+ },
+ {
+ "id": 16,
+ "name": "안땡떙",
+ "category": "당직",
+ "title": "이땡떙 대리 | 7월 당직 결재건",
+ "startDate": "2023-10-23",
+ "endDate": "2023-10-27",
+ "status": "결재 대기"
+ }
+]
diff --git a/src/API/data/main.json b/src/API/data/main.json
new file mode 100644
index 00000000..5f548c2b
--- /dev/null
+++ b/src/API/data/main.json
@@ -0,0 +1,12 @@
+
+ [
+ {
+ "id": 1,
+ "email": "test@test.com",
+ "name": "테스트1",
+ "category": "연차",
+ "startDate": "2023-07-31",
+ "endDate": "2023-08-02",
+ "reason": "경조사"
+ }
+ ]
diff --git a/src/API/data/my.json b/src/API/data/my.json
new file mode 100644
index 00000000..6cba3875
--- /dev/null
+++ b/src/API/data/my.json
@@ -0,0 +1,43 @@
+
+ {
+ "name": "고길동",
+ "annualBalance": 20,
+ "annualUsed": 15,
+ "annualRemain": 8,
+ "annualHistories": [
+ {
+ "id": 0,
+ "title": "여름 휴가 연차 사용의 건",
+ "reason": "경조사",
+ "startDate": "2023-01-09",
+ "endDate": "2023-01-15",
+ "status": "완료"
+ },
+ {
+ "id": 2,
+ "title": "병가 휴가 연차 사용의 건",
+ "reason": "병 가",
+ "startDate": "2023-03-24",
+ "endDate": "2023-03-28",
+ "status": "완료"
+ },
+ {
+ "id": 3,
+ "title": "경조사 휴가 사용의 건",
+ "reason": "병 가",
+ "startDate": "2023-02-23",
+ "endDate": "2023-02-27",
+ "status": "대기"
+ }
+ ],
+ "dutyHistories": [
+ {
+ "id": 1,
+ "title": "고길동 대리 | 7월 당직 결재건",
+ "startDate": "2023-03-10",
+ "endDate": "2023-03-10",
+ "status": "대기"
+ }
+ ]
+ }
+
diff --git a/src/API/data/user.json b/src/API/data/user.json
new file mode 100644
index 00000000..7420c883
--- /dev/null
+++ b/src/API/data/user.json
@@ -0,0 +1,63 @@
+[
+ {
+ "email": "cjzak0@naver.com",
+ "password": "$2a$04$c9FhdT09lvcCb250DjLdKeX1PIQjv2TkbE.OkvfD73CwOzyoJbS9m",
+ "name": "김땡땡",
+ "joinDate": "2023-03-27"
+ },
+ {
+ "email": "nduester1@gmail.com",
+ "password": "$2a$04$tpse8d1m7ocpBLn1prCJBOsu9So/yTi4A2TpRnt8mj/yyZyDeShG6",
+ "name": "박땡땡",
+ "joinDate": "2022-09-15"
+ },
+ {
+ "email": "tbruineman2@naver.com",
+ "password": "$2a$04$wylfBvz8hQ6ZNcTMtW39h.uLBHo.iKRuWNfWAQyaUlp5lSkqdeGGe",
+ "name": "고길동",
+ "joinDate": "2021-03-31"
+ },
+ {
+ "email": "rantoniutti3@gmail.com",
+ "password": "$2a$04$f/zPQ48GVImW7RAk8vHNX.67wKNzzjY2bVXDH3ap8GCUpjB/pSI/u",
+ "name": "송땡땡",
+ "joinDate": "2022-09-27"
+ },
+ {
+ "email": "bscurrell4@hanmail.net",
+ "password": "$2a$04$8siG.pXXi8jHIZ7z8VIKs.06Xmtj98XNj1y7z.lOIJFMGef6obQUC",
+ "name": "아무개",
+ "joinDate": "2023-08-10"
+ },
+ {
+ "email": "efarquar5@gmail.com",
+ "password": "$2a$04$8/2nCi3EVer5bExUbYP9N.O6PeceSVN4IebosR7Czu7cI4KJrb38O",
+ "name": "김김김",
+ "joinDate": "2022-05-01"
+ },
+ {
+ "email": "astud6@gmail.com",
+ "password": "$2a$04$ES3t8zrizq5kC.hKWbASJOTVA12fozc9OpAbpOxdXJ5zTHO35BY9C",
+ "name": "박박박",
+ "joinDate": "2021-01-07"
+ },
+ {
+ "email": "gbryceson7@naver.com",
+ "password": "$2a$04$DY/70RcPDcs.f4h88aWvDuR5UiQDUjltf8ZeL5Oam.xhGQEZ1/H8e",
+ "name": "송송송",
+ "joinDate": "2020-10-22"
+ },
+ {
+ "email": "aplank8@naver.com",
+ "password": "$2a$04$kWFZOtRWjLu7F6TVXdFDSOYvBxsIcgSIXbU3WwAGlF5dURrUHvTpy",
+ "name": "이이이",
+ "joinDate": "2022-06-28"
+ },
+ {
+ "email": "nilyunin9@gmail.com",
+ "password": "$2a$04$lgHZrfIsK0k6nAINt5UA7.x1C0j2/fOt2y0TgsEnLx.UBAWUCj9pS",
+ "name": "김박이",
+ "joinDate": "2022-09-16"
+ }
+]
+
diff --git a/src/API/mainApi.ts b/src/API/mainApi.ts
new file mode 100644
index 00000000..d0953495
--- /dev/null
+++ b/src/API/mainApi.ts
@@ -0,0 +1,34 @@
+import axios from "axios";
+import { Cookies } from 'react-cookie';
+
+const ApiHttp = axios.create({
+ baseURL: "/mini"
+});
+
+// AC 토큰을 얻어오는 함수
+export const getAccessToken = () => {
+ const cookie = new Cookies();
+ const acToken = cookie.get('AC_TOKEN'); // 실제 AC 토큰 값 가져오기
+ return acToken;
+};
+
+// API 요청을 보낼 때 AC 토큰을 포함한 설정 생성
+export const ApiHttpWithAuth = axios.create({
+ baseURL: "/mini"
+});
+
+
+ApiHttpWithAuth.interceptors.request.use(
+ (config) => {
+ const acToken = getAccessToken(); // AC 토큰 가져오기
+ if (acToken) {
+ config.headers.Authorization = `Bearer ${acToken}`;
+ }
+ return config;
+ },
+ (error) => {
+ return Promise.reject(error);
+ }
+);
+
+export default ApiHttp;
diff --git a/src/App.css.map b/src/App.css.map
new file mode 100644
index 00000000..894501bb
--- /dev/null
+++ b/src/App.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["App.scss"],"names":[],"mappings":"AAAA;EACC","file":"App.css"}
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 00000000..fc28151a
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,79 @@
+import LoginPage from "./pages/LoginPage/LoginPage.tsx";
+import SignUpPage from "./pages/SignUpPage/SignUpPage.tsx";
+import Main from "./pages/Main/main.tsx";
+import Mypage from "./pages/Mypage/mypage.tsx";
+import Admin from "./pages/Admin/admin.tsx";
+import { Route, Routes, Navigate } from "react-router-dom";
+import Modal from "react-modal";
+import { CookiesProvider } from "react-cookie";
+import { useEffect, useState } from "react";
+import PrivateRoute from "./utils/PrivateRoute.tsx";
+import AccessForbidden from "./pages/AccessForbiddenPage/AccessForbidden.tsx";
+
+Modal.setAppElement("#root");
+
+function App() {
+ // const role = localStorage.getItem("role");
+ const [role, setRole] = useState(localStorage.getItem("role"));
+ const [isLogined, setIsLogined] = useState(!!role);
+
+ useEffect(() => {
+ setIsLogined(!!role);
+ if (!role) {
+ setRole(null);
+ }
+ }, [role]);
+
+ return (
+
+
+
+ ) : (
+
+ )
+ }
+ />
+ } />
+ } />
+ }
+ fallbackPath="/forbidden"
+ />
+ }
+ />
+ }
+ fallbackPath="/forbidden"
+ />
+ }
+ />
+ }
+ fallbackPath="/forbidden"
+ />
+ }
+ />
+
+
+ );
+}
+export default App;
diff --git a/src/Common/CommonFunction.ts b/src/Common/CommonFunction.ts
new file mode 100644
index 00000000..9d6322ed
--- /dev/null
+++ b/src/Common/CommonFunction.ts
@@ -0,0 +1,40 @@
+import dayjs from "dayjs";
+
+ // 시작일과 마지막일을 계산하여 연차 기간 일 수 반환 및 입사일과 오늘 날짜를 반환하면 총입사일수 반환
+ export function DateCount({ startDate, endDate }: { startDate: string, endDate: string }):string|number {
+ const start = dayjs(startDate);
+ const end = dayjs(endDate);
+
+ if (!start.isValid() || !end.isValid()) {
+ console.error('Invalid input: startDate and endDate must represent valid dates.');
+ return 'Invalid input';
+ }
+ const diffInDays:number = end.diff(start, 'day');
+ return diffInDays + 1
+ }
+
+ // 입사일에 따른 직급을 구분하여 연차 날짜 계산 및 객체로 직급과 총연차일 반환
+ export function JickCounter(date: string) {
+ const diffYears = Math.floor(Number(date) / 365); // 입사일부터 오늘까지의 기간을 연 단위로 계산
+ const jick = {answer:"", annualBalance:0}
+
+ if (diffYears < 1) {
+ jick.answer = "사원";
+ jick.annualBalance = 20
+ } else if (diffYears < 3) {
+ jick.answer = "주임";
+ jick.annualBalance = 30
+ } else if (diffYears < 5) {
+ jick.answer = "대리";
+ jick.annualBalance = 40
+ } else if (diffYears > 5){
+ jick.answer = "과장";
+ jick.annualBalance = 50
+ }
+ return jick
+ }
+
+
+
+
+
diff --git a/src/Components/AdminPage/DayoffLists.module.css b/src/Components/AdminPage/DayoffLists.module.css
new file mode 100644
index 00000000..2f782f35
--- /dev/null
+++ b/src/Components/AdminPage/DayoffLists.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "@/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^
+ * '
+ * DayoffLists.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"@/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^\a \2575 \a DayoffLists.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/AdminPage/DayoffLists.module.css.d.ts b/src/Components/AdminPage/DayoffLists.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/Components/AdminPage/DayoffLists.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/Components/AdminPage/DayoffLists.module.scss b/src/Components/AdminPage/DayoffLists.module.scss
new file mode 100644
index 00000000..a828cde4
--- /dev/null
+++ b/src/Components/AdminPage/DayoffLists.module.scss
@@ -0,0 +1,69 @@
+@import "@/_variables.scss";
+@import "@/_mixin.scss";
+
+.list {
+ position: relative;
+ width: 100%;
+ height: 38px;
+ margin: 5px 0;
+ padding: 5px 0px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ color: $black-color;
+ font-size: 14px;
+ font-weight: 400;
+ background-color: $light-Grey-color;
+ &:hover {
+ font-weight: 400;
+ cursor: pointer;
+ background-color: $black-color-30;
+ }
+ .list_option {
+ width: 89%;
+ margin-left: 15px;
+ display: flex;
+ text-align: center;
+ justify-content: space-between;
+ .text {
+ width: 100%;
+ &.name {
+ width: 10%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ &.title {
+ width: 40%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ &.reason {
+ width: 10%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ &.period {
+ width: 30%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ &.count {
+ width: 10%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ }
+ }
+ .permission {
+ margin-right: 10px;
+ @include non-permission-button;
+ }
+ .checked {
+ @include permission-button;
+ }
+}
diff --git a/src/Components/AdminPage/DayoffLists.module.scss.d.ts b/src/Components/AdminPage/DayoffLists.module.scss.d.ts
new file mode 100644
index 00000000..ba367076
--- /dev/null
+++ b/src/Components/AdminPage/DayoffLists.module.scss.d.ts
@@ -0,0 +1,13 @@
+declare const classNames: {
+ readonly list: "list";
+ readonly list_option: "list_option";
+ readonly text: "text";
+ readonly name: "name";
+ readonly title: "title";
+ readonly reason: "reason";
+ readonly period: "period";
+ readonly count: "count";
+ readonly permission: "permission";
+ readonly checked: "checked";
+};
+export = classNames;
diff --git a/src/Components/AdminPage/DayoffLists.tsx b/src/Components/AdminPage/DayoffLists.tsx
new file mode 100644
index 00000000..339ea6ef
--- /dev/null
+++ b/src/Components/AdminPage/DayoffLists.tsx
@@ -0,0 +1,70 @@
+import { useState } from "react";
+import useDataQuery from "@/Hooks/useData-Query";
+import styles from "./DayoffLists.module.scss";
+import { AxiosResponse } from "axios";
+
+interface AdminListsAll {
+ id: number;
+ status: string;
+ startDate: string;
+ endDate: string;
+ name: string;
+ title: string;
+ reason?: string;
+ category: any;
+}
+
+interface Props {
+ item: AdminListsAll;
+}
+
+
+export default function DayoffLists({ item }: Props) {
+ const [status, setStatus] = useState(item.status);
+ const { changeAdminData } = useDataQuery();
+ const calculateUsedDays = (): number => {
+ const startDate = new Date(item.startDate);
+ const endDate = new Date(item.endDate);
+ const timeDiff = Math.abs(endDate.getTime() - startDate.getTime());
+ const usedDays = Math.ceil(timeDiff / (1000 * 3600 * 24)) + 1;
+ return usedDays;
+ };
+
+ const handlePermissionClick = async (): Promise => {
+ if (status === "결재 대기") {
+ try {
+ const res: AxiosResponse = await changeAdminData.mutateAsync(item);
+ if (res && res.data) {
+ setStatus("결재완료");
+ }
+ } catch (error) {
+ console.error("결재 승인 중 오류", error);
+ }
+ }
+ };
+
+ return (
+
+
+ {item.name}
+ {item.title}
+ {item.reason}
+
+ {item.startDate} - {item.endDate}
+
+
+ {calculateUsedDays()}일
+
+
+
+ {item.status}
+
+
+ );
+}
diff --git a/src/Components/AdminPage/DutyLists.module.css b/src/Components/AdminPage/DutyLists.module.css
new file mode 100644
index 00000000..e275e65e
--- /dev/null
+++ b/src/Components/AdminPage/DutyLists.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * DutyLists.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a DutyLists.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/AdminPage/DutyLists.module.css.d.ts b/src/Components/AdminPage/DutyLists.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/Components/AdminPage/DutyLists.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/Components/AdminPage/DutyLists.module.scss b/src/Components/AdminPage/DutyLists.module.scss
new file mode 100644
index 00000000..15638300
--- /dev/null
+++ b/src/Components/AdminPage/DutyLists.module.scss
@@ -0,0 +1,57 @@
+@import "src/_variables.scss";
+@import "src/_mixin.scss";
+
+.list {
+ position: relative;
+ width: 100%;
+ height: 38px;
+ margin: 5px 0;
+ padding: 5px 0px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ color: $black-color;
+ font-size: 14px;
+ font-weight: 400;
+ background-color: $light-Grey-color;
+ &:hover {
+ font-weight: 400;
+ cursor: pointer;
+ background-color: $black-color-30;
+ }
+ .list_option {
+ width: 89%;
+ margin-left: 15px;
+ display: flex;
+ text-align: center;
+ justify-content: space-between;
+ .text {
+ width: 100%;
+ &.name {
+ width: 10%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ &.title {
+ width: 55%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ &.period {
+ width: 35%;
+ &::after {
+ @include index-bar;
+ }
+ }
+ }
+ }
+ .permission {
+ margin-right: 10px;
+ @include non-permission-button;
+ }
+ .checked {
+ @include permission-button;
+ }
+}
diff --git a/src/Components/AdminPage/DutyLists.module.scss.d.ts b/src/Components/AdminPage/DutyLists.module.scss.d.ts
new file mode 100644
index 00000000..add3dfd8
--- /dev/null
+++ b/src/Components/AdminPage/DutyLists.module.scss.d.ts
@@ -0,0 +1,11 @@
+declare const classNames: {
+ readonly list: "list";
+ readonly list_option: "list_option";
+ readonly text: "text";
+ readonly name: "name";
+ readonly title: "title";
+ readonly period: "period";
+ readonly permission: "permission";
+ readonly checked: "checked";
+};
+export = classNames;
diff --git a/src/Components/AdminPage/DutyLists.tsx b/src/Components/AdminPage/DutyLists.tsx
new file mode 100644
index 00000000..07e9dc1c
--- /dev/null
+++ b/src/Components/AdminPage/DutyLists.tsx
@@ -0,0 +1,46 @@
+import styles from "./DutyLists.module.scss";
+import { useState } from "react";
+import { permission } from "../../Api/apis";
+import { AdminListsAll } from "types/common";
+
+interface Props {
+ item: AdminListsAll;
+}
+
+export default function DutyLists({ item }: Props) {
+ const [status, setStatus] = useState(item.status);
+
+ const handlePermissionClick = async () => {
+ if (status === "결재 대기") {
+ try {
+ const response = await permission(item);
+ if (response && response.data) {
+ setStatus("결재 완료");
+ }
+ } catch (error) {
+ console.error("결재 승인 중 오류 발생:", error);
+ }
+ }
+ };
+
+ return (
+
+
+ {item.name}
+ {item.title}.
+
+ {item.startDate}
+
+
+
+ {item.status}
+
+
+ );
+}
diff --git a/src/Components/AdminPage/SearchBar.module.css b/src/Components/AdminPage/SearchBar.module.css
new file mode 100644
index 00000000..c7e80619
--- /dev/null
+++ b/src/Components/AdminPage/SearchBar.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * SearchBar.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a SearchBar.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/AdminPage/SearchBar.module.css.d.ts b/src/Components/AdminPage/SearchBar.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/Components/AdminPage/SearchBar.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/Components/AdminPage/SearchBar.module.scss b/src/Components/AdminPage/SearchBar.module.scss
new file mode 100644
index 00000000..03338bdd
--- /dev/null
+++ b/src/Components/AdminPage/SearchBar.module.scss
@@ -0,0 +1,69 @@
+@import "src/_variables.scss";
+@import "src/_mixin.scss";
+
+.search_box {
+ position: relative;
+ width: 550px;
+ height: 40px;
+ display: flex;
+ justify-content: space-between;
+ .search_option {
+ width: 30%;
+ height: 100%;
+ margin-right: 20px;
+ border-radius: 10px;
+ background-color: $light-Green-BG-color;
+ display: flex;
+ align-items: center;
+ justify-content: start;
+ overflow: hidden;
+ button {
+ width: 50%;
+ padding: 8px;
+ color: $sub-color;
+ font-weight: 700;
+ &.active {
+ width: 50%;
+ height: 100%;
+ background-color: $sub-color;
+ color: $white-color;
+ }
+ }
+ .btn {
+ width: 65%;
+ }
+ }
+ .search_bar {
+ width: 70%;
+ height: 100%;
+ border-radius: 10px;
+ font-size: 14px;
+ padding: 10px 20px;
+ background-color: $light-Grey-color;
+ display: flex;
+ align-items: start;
+ justify-content: space-between;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+ .search_input {
+ width: 100%;
+ background-color: transparent;
+ @include wide-input;
+ }
+ .search_icon {
+ position: relative;
+ height: 100%;
+ margin: auto;
+ opacity: 30%;
+ .search_img {
+ position: absolute;
+ width: 24px;
+ height: 24px;
+ top: -2px;
+ right: 2px;
+ cursor: pointer;
+ }
+ }
+ }
+}
diff --git a/src/Components/AdminPage/SearchBar.module.scss.d.ts b/src/Components/AdminPage/SearchBar.module.scss.d.ts
new file mode 100644
index 00000000..1a92b60a
--- /dev/null
+++ b/src/Components/AdminPage/SearchBar.module.scss.d.ts
@@ -0,0 +1,11 @@
+declare const classNames: {
+ readonly search_box: "search_box";
+ readonly search_option: "search_option";
+ readonly active: "active";
+ readonly btn: "btn";
+ readonly search_bar: "search_bar";
+ readonly search_input: "search_input";
+ readonly search_icon: "search_icon";
+ readonly search_img: "search_img";
+};
+export = classNames;
diff --git a/src/Components/AdminPage/SearchBar.tsx b/src/Components/AdminPage/SearchBar.tsx
new file mode 100644
index 00000000..56843f1e
--- /dev/null
+++ b/src/Components/AdminPage/SearchBar.tsx
@@ -0,0 +1,58 @@
+import { useState } from "react";
+import styles from "./SearchBar.module.scss";
+
+interface Props {
+ onSearch: (searchTerm: string, searchOption: string) => void;
+}
+
+export default function SearchBar({ onSearch }: Props) {
+ const [searchTerm, setSearchTerm] = useState("");
+ const [searchOption, setSearchOption] = useState("이름");
+
+ const handleSearch = () => {
+ onSearch(searchTerm, searchOption);
+ };
+
+ const handleKeyPress = (event: React.KeyboardEvent) => {
+ if (event.key === "Enter") {
+ handleSearch();
+ }
+ };
+
+ return (
+
+
+ setSearchOption("이름")}
+ >
+ 이름
+
+ setSearchOption("제목")}
+ >
+ 제목
+
+
+
+
setSearchTerm(e.target.value)}
+ onKeyDown={handleKeyPress}
+ />
+
+
+
+
+
+ );
+}
diff --git a/src/Components/AnnualList/AnnualList.tsx b/src/Components/AnnualList/AnnualList.tsx
new file mode 100644
index 00000000..9a86ad82
--- /dev/null
+++ b/src/Components/AnnualList/AnnualList.tsx
@@ -0,0 +1,64 @@
+import dayjs from "dayjs";
+import styles from "./annualList.module.scss";
+import { DateCount } from "@/Common/CommonFunction.ts";
+import { useState } from "react";
+import AnnualModal from "@/Components/AnnualList/AnnualModal.tsx";
+import { AnnualType, MyDataType } from "types/common";
+
+export default function AnnualList(props: { myData?: MyDataType }) {
+
+ const [id, setId] = useState(0);
+ const [annualData, setAnnualData] = useState();
+ const [visivility, setVisivility] = useState(false)
+ const annuals = props.myData?.annualHistories || [];
+
+ const handleClick = (id: number) => {
+ setId(id);
+ const temp = annuals.find((annual) => annual.id === id);
+ console.log(temp);
+
+ if (temp?.status === "결재 완료") {
+ alert("결재 완료된 항목은 수정할 수 없습니다.");
+ } else {
+ setAnnualData(temp);
+ setVisivility(true);
+ }
+ };
+
+ return (
+
+
+ 사유
+ 제목
+ 사용 기간
+ 사용 개수
+ 상태
+
+
+ {annuals?.map((annual, index) => (
+
handleClick(annual.id)}
+ key={index}
+ className={styles.lists}
+ >
+
{annual.reason}
+
{annual.title}
+
+ {dayjs(annual.startDate).format("YYYY/MM/DD")} ~
+ {dayjs(annual.endDate).format("YYYY/MM/DD")}
+
+
+ {DateCount({
+ startDate: annual.startDate,
+ endDate: annual.endDate,
+ })}{" "}
+ 개
+
+
{annual.status}
+
+
+ ))}
+
+
+ );
+}
diff --git a/src/Components/AnnualList/AnnualModal.module.scss.d.ts b/src/Components/AnnualList/AnnualModal.module.scss.d.ts
new file mode 100644
index 00000000..d083ada7
--- /dev/null
+++ b/src/Components/AnnualList/AnnualModal.module.scss.d.ts
@@ -0,0 +1,15 @@
+declare const classNames: {
+ readonly custom_modal_content: "custom_modal_content";
+ readonly Event_close: "Event_close";
+ readonly addEvent_wrap: "addEvent_wrap";
+ readonly addEvent_header: "addEvent_header";
+ readonly add_title: "add_title";
+ readonly addEvent_title: "addEvent_title";
+ readonly addEvent_start: "addEvent_start";
+ readonly addEvent_end: "addEvent_end";
+ readonly addEvent_reason: "addEvent_reason";
+ readonly btn_wrap: "btn_wrap";
+ readonly close_btn: "close_btn";
+ readonly submit_btn: "submit_btn";
+};
+export = classNames;
diff --git a/src/Components/AnnualList/AnnualModal.scss b/src/Components/AnnualList/AnnualModal.scss
new file mode 100644
index 00000000..caf01374
--- /dev/null
+++ b/src/Components/AnnualList/AnnualModal.scss
@@ -0,0 +1,112 @@
+@import "/src/_variables";
+@import "src/_mixin.scss";
+
+.custom_modal_content {
+ width: 660px;
+ height: 600px;
+ margin: auto;
+ border-radius: 35px;
+ inset: 40px;
+ border: 1px solid $light-Grey-color;
+ background: $white-color;
+ overflow: auto;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ outline: none;
+ padding: 20px;
+ .addEvent_wrap {
+ width: 473px;
+ height: 464px;
+ margin: auto;
+ padding: 58px 0px;
+ .addEvent_header {
+ text-align: center;
+ font-size: 22px;
+ font-weight: 700;
+ margin-bottom: 40px;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ }
+ .add_title {
+ font-size: 14px;
+ font-weight: bold;
+ color: $main-color;
+ }
+ .addEvent_title {
+ width: 473px;
+ height: 46px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ font-size: 14px;
+ cursor: pointer;
+ }
+ }
+ .addEvent_start {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ }
+ .addEvent_end {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ }
+ .addEvent_reason {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ select {
+ border-radius: 10px;
+ background-color: $light-Grey-color;
+ border: none;
+ width: 400px;
+ height: 50px;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+ }
+ }
+ .btn_wrap {
+ margin: auto;
+ margin-top: 50px;
+ width: 365px;
+ height: 54px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ text-align: center;
+ font-weight: 700;
+ .close_btn {
+ margin-right: 15px;
+ @include middle-button-outline;
+ &:hover {
+ background-color: $light-Green-BG-color;
+ }
+ }
+ .submit_btn {
+ @include middle-button;
+ }
+ }
+ }
+ .Event_close {
+ position: absolute;
+ top: 8%;
+ right: 6%;
+ width: 40px;
+ height: 40px;
+ color: $green-BG-color;
+ font-size: 2rem;
+ transform: rotate(45deg);
+ cursor: pointer;
+ }
+}
diff --git a/src/Components/AnnualList/AnnualModal.tsx b/src/Components/AnnualList/AnnualModal.tsx
new file mode 100644
index 00000000..fce8fcb8
--- /dev/null
+++ b/src/Components/AnnualList/AnnualModal.tsx
@@ -0,0 +1,183 @@
+import Modal from "@/Components/Modal/Modal.tsx";
+import { ChangeEvent, useState } from "react";
+import useDataQuery from "@/Hooks/useData-Query.tsx";
+import "./AnnualModal.scss";
+import { AnnualType, UpdateType } from "types/common";
+
+export default function AnnualModal(props: {
+ annual?: AnnualType;
+ id: number;
+ visivility: boolean;
+ setVisivility: (value: boolean) => void;
+}) {
+ const [edit, setEdit] = useState(true);
+ const [title, setTitle] = useState("");
+ const [start, setStart] = useState("");
+ const [end, setEnd] = useState("");
+ const [reason, setReason] = useState("");
+ const annual = props.annual;
+ const id = props.id;
+ const visivility = props.visivility;
+ const setVisivility = props.setVisivility;
+ const { changeMyData, deleteMyData } = useDataQuery();
+
+
+ const handleEditClick = (e: React.MouseEvent) => {
+ e.stopPropagation();
+ setEdit(true);
+ setVisivility(true);
+ console.log(annual?.title)
+ };
+
+ const handleEdit = () => {
+ setEdit(!edit);
+ };
+
+ const handleInputChange = (
+ e: React.ChangeEvent | ChangeEvent,
+ ) => {
+ if (e.target.name === "title") {
+ setTitle(e.target.value);
+ } else if (e.target.name === "startDate") {
+ setStart(e.target.value);
+ } else if (e.target.name === "endDate") {
+ setEnd(e.target.value);
+ } else if (e.target.name === "select-reason") {
+ setReason(e.target.value);
+ }
+ };
+ const handleSubmit = async () => {
+ const data: UpdateType = {
+ id: id,
+ title: title,
+ startDate: start,
+ endDate: end,
+ reason: reason,
+ message: function (): unknown {
+ throw new Error("Function not implemented.");
+ }
+ };
+ changeMyData.mutate(data, {
+ onSuccess: () => {
+ console.log("수정되었습니다.");
+ setEdit(false);
+ setVisivility(false);
+ },
+ onError: (error: any) => {
+ console.log("수정 실패", error);
+ const errorMessage = error.response.data.message;
+ if (!errorMessage) {
+ alert("제목을 입력하세요");
+ } else {
+ alert(errorMessage);
+ }
+ },
+ });
+ };
+
+
+
+
+ const handleDelete = async () => {
+ deleteMyData.mutate(id, {
+ onSuccess: (res: any) => {
+ res.status === 200 && alert("삭제되었습니다.");
+ setEdit(false);
+ setVisivility(false);
+ },
+ onError: (error: any) => {
+ console.log("에러", error.response.status);
+ if (error.response.status === 400) {
+ alert("결재된 연차/당직은 삭제가 안됩니다.");
+ setEdit(false);
+ setVisivility(false);
+ }
+ console.log("삭제 실패");
+ },
+ });
+ };
+
+ return (
+ <>
+
+
+
window.location.reload()}>
+
+
+
+
일정 등록
+
+ 제목
+ {edit ? (
+
+ ) : (
+ {annual?.title}
+ )}
+
+
+ 시작일
+ {edit ? (
+
+ ) : (
+ {annual?.startDate}
+ )}
+
+
+ 종료일
+ {edit ? (
+
+ ) : (
+ {annual?.endDate}
+ )}
+
+
+ 사유
+ {edit ? (
+
+ ========== 선택하세요 ==========
+ 연차유급휴가
+ 병가휴가
+ 경조사휴가
+ 출산휴가
+ 기타휴가
+
+ ) : (
+
+ {annual?.reason}
+
+ )}
+
+
+
+ 삭 제
+
+
+ 수 정
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/Components/AnnualList/annualList.module.css b/src/Components/AnnualList/annualList.module.css
new file mode 100644
index 00000000..786fe9c5
--- /dev/null
+++ b/src/Components/AnnualList/annualList.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * annualList.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a annualList.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/AnnualList/annualList.module.css.d.ts b/src/Components/AnnualList/annualList.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/Components/AnnualList/annualList.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/Components/AnnualList/annualList.module.css.map b/src/Components/AnnualList/annualList.module.css.map
new file mode 100644
index 00000000..dd19e46a
--- /dev/null
+++ b/src/Components/AnnualList/annualList.module.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"annualList.module.css"}
\ No newline at end of file
diff --git a/src/Components/AnnualList/annualList.module.scss b/src/Components/AnnualList/annualList.module.scss
new file mode 100644
index 00000000..7536bde0
--- /dev/null
+++ b/src/Components/AnnualList/annualList.module.scss
@@ -0,0 +1,54 @@
+@import "src/_variables.scss";
+
+.Container {
+ width: 99%;
+ height: 99%;
+ .index {
+ width: 100%;
+ height: 36px;
+ margin-top: 10px;
+ padding: 0px 40px;
+ border-radius: 13px;
+ display: grid;
+ grid-template-columns: 0.5fr 2fr 1.4fr 0.5fr 0.6fr;
+ align-items: center;
+ text-align: center;
+ background-color: $light-Green-BG-color;
+ color: $main-color;
+ .index_title {
+ font-size: 14px;
+ }
+ }
+ .lists_content {
+ height: 90%;
+ width: 100%;
+ margin-top: 10px;
+ overflow-y: scroll;
+ &::-webkit-scrollbar {
+ width: 10px; /* 스크롤바의 너비 */
+ }
+ &::-webkit-scrollbar-thumb {
+ height: 5px; /* 스크롤바의 길이 */
+ background-color: $light-Green-BG-color; /* 스크롤바의 색상 */
+ border-radius: 10px;
+ }
+ .lists {
+ width: 98%;
+ height: 38px;
+ margin-top: 5px;
+ margin-left: 10px;
+ padding: 5px 30px 5px 30px;
+ display: grid;
+ grid-template-columns: 0.5fr 2fr 1.5fr 0.5fr 0.5fr;
+ align-items: center;
+ text-align: center;
+ font-weight: 400;
+ color: $black-color;
+ background-color: $light-Grey-color;
+ &:hover {
+ cursor: pointer;
+ background-color: $black-color-30;
+ }
+ }
+ }
+}
diff --git a/src/Components/AnnualList/annualList.module.scss.d.ts b/src/Components/AnnualList/annualList.module.scss.d.ts
new file mode 100644
index 00000000..7554764f
--- /dev/null
+++ b/src/Components/AnnualList/annualList.module.scss.d.ts
@@ -0,0 +1,8 @@
+declare const classNames: {
+ readonly Container: "Container";
+ readonly index: "index";
+ readonly index_title: "index_title";
+ readonly lists_content: "lists_content";
+ readonly lists: "lists";
+};
+export = classNames;
diff --git a/src/Components/Calendar-input/Calendar.tsx b/src/Components/Calendar-input/Calendar.tsx
new file mode 100644
index 00000000..d0bf9a1f
--- /dev/null
+++ b/src/Components/Calendar-input/Calendar.tsx
@@ -0,0 +1,28 @@
+import { useState } from "react";
+import { DateRange, Range } from "react-date-range";
+import "react-date-range/dist/styles.css";
+import "react-date-range/dist/theme/default.css";
+
+export default function MyDateRangePicker() {
+ const [state, setState] = useState([
+ {
+ startDate: new Date(),
+ endDate: undefined,
+ key: "selection",
+ },
+ ]);
+
+ const handleSelect = (ranges: { [key: string]: Range }) => {
+ setState([ranges["selection"]]);
+ };
+
+ return (
+
+ );
+}
diff --git a/src/Components/DutyList/DutyList.tsx b/src/Components/DutyList/DutyList.tsx
new file mode 100644
index 00000000..d69a8ec6
--- /dev/null
+++ b/src/Components/DutyList/DutyList.tsx
@@ -0,0 +1,44 @@
+import styles from "@/Components/DutyList/dutyList.module.scss";
+import { useState } from "react";
+import DutyModal from "@/Components/DutyList/DutyModal.tsx";
+import { MyDataType, DutyType } from "types/common";
+
+export default function DutyList(props:{myData?:MyDataType}) {
+
+ const [id, setId] = useState(0);
+ const [duty, setDuty] = useState();
+ const [visivility, setVisivility] = useState(false)
+ const dutyDatas = props.myData?.dutyHistories || [];
+
+ const handleClick = (id: number) => {
+ setId(id);
+ const temp = dutyDatas.find((duty) => duty.id === id);
+ console.log(temp);
+ setVisivility(true);
+ setDuty(temp);
+ };
+ return (
+
+
+
+ {dutyDatas?.map((dutyItem, index) => (
+
handleClick(dutyItem.id)}
+ key={index}
+ className={styles.lists}>
+
당직
+
{dutyItem.title}
+
{dutyItem.startDate}
+
{dutyItem.status}
+
+
+ ))}
+
+
+ );
+}
diff --git a/src/Components/DutyList/DutyModal.scss b/src/Components/DutyList/DutyModal.scss
new file mode 100644
index 00000000..3173cf21
--- /dev/null
+++ b/src/Components/DutyList/DutyModal.scss
@@ -0,0 +1,112 @@
+@import "/src/_variables";
+@import "src/_mixin.scss";
+
+.custom_modal_content {
+ width: 660px;
+ height: 600px;
+ margin: auto;
+ border-radius: 35px;
+ inset: 40px;
+ border: 1px solid $light-Grey-color;
+ background: $white-color;
+ overflow: auto;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ outline: none;
+ padding: 20px;
+ .addEvent_wrap {
+ width: 473px;
+ height: 464px;
+ // margin: 70px 0 0 70px;
+ padding: 58px 0px;
+ .addEvent_header {
+ text-align: center;
+ font-size: 22px;
+ font-weight: 700;
+ margin-bottom: 40px;
+ // font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ }
+ .add_title {
+ font-size: 14px;
+ font-weight: bold;
+ color: $main-color;
+ }
+ .addEvent_title {
+ width: 473px;
+ height: 46px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ font-size: 14px;
+ cursor: pointer;
+ }
+ }
+ .addEvent_start {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ }
+ .addEvent_end {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ }
+ .addEvent_reason {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ select {
+ border-radius: 10px;
+ background-color: $light-Grey-color;
+ border: none;
+ width: 400px;
+ height: 50px;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+ }
+ }
+ .btn_wrap {
+ margin: auto;
+ margin-top: 50px;
+ width: 365px;
+ height: 54px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ text-align: center;
+ font-weight: 700;
+ .close_btn {
+ margin-right: 15px;
+ @include middle-button-outline;
+ &:hover {
+ background-color: $light-Green-BG-color;
+ }
+ }
+ .submit_btn {
+ @include middle-button;
+ }
+ }
+ }
+ .Event_close {
+ position: absolute;
+ top: 8%;
+ right: 6%;
+ width: 40px;
+ height: 40px;
+ color: $green-BG-color;
+ font-size: 2rem;
+ transform: rotate(45deg);
+ cursor: pointer;
+ }
+}
diff --git a/src/Components/DutyList/DutyModal.tsx b/src/Components/DutyList/DutyModal.tsx
new file mode 100644
index 00000000..322cca4d
--- /dev/null
+++ b/src/Components/DutyList/DutyModal.tsx
@@ -0,0 +1,118 @@
+import { ChangeEvent, useState } from "react";
+import useDataQuery from "@/Hooks/useData-Query.tsx";
+import Modal from "@/Components/Modal/Modal.tsx";
+import { DutyType, UpdateType } from "types/common";
+import "./DutyModal.scss";
+
+export default function DutyModal(props: {
+ duty?: DutyType;
+ id: number;
+ visivility: boolean;
+ setVisivility: (value: boolean) => void;
+}) {
+ const [edit, setEdit] = useState(true);
+ const [title, setTitle] = useState("");
+ const [start, setStart] = useState("");
+ const { changeMyData, deleteMyData } = useDataQuery();
+
+ const dutyItem = props.duty;
+ const id = props.id;
+ const visivility = props.visivility;
+ const setVisivility = props.setVisivility;
+
+ const handleEditClick = (e: React.MouseEvent) => {
+ e.stopPropagation();
+ setEdit(true);
+ };
+
+ const handleEdit = () => {
+ setEdit(!edit);
+ };
+
+ const handleInputChange = (
+ e: React.ChangeEvent | ChangeEvent,
+ ) => {
+ if (e.target.name === "title") {
+ setTitle(e.target.value);
+ } else if (e.target.name === "startDate") {
+ setStart(e.target.value);
+ }
+ };
+ const handleSubmit = async () => {
+ const data: UpdateType = {
+ id: id,
+ title: title,
+ startDate: start,
+ endDate: start,
+ reason: "기타휴가",
+ message: function (): unknown {
+ throw new Error("Function not implemented.");
+ }
+ };
+ changeMyData.mutate(data, {
+ onSuccess: () => {
+ setEdit(false);
+ setVisivility(false);
+ },
+ });
+ };
+
+ const handleDelete = async () => {
+ deleteMyData.mutate(id, {
+ onSuccess: () => {
+ setEdit(false);
+ setVisivility(false);
+ },
+ });
+ };
+
+ return (
+ <>
+
+
+
window.location.reload()}>
+
+
+
+
일정 등록
+
+ 제목
+ {edit ? (
+
+ ) : (
+ {dutyItem?.title}
+ )}
+
+
+ 시작일
+ {edit ? (
+
+ ) : (
+ {dutyItem?.startDate}
+ )}
+
+
+
+ 삭 제
+
+
+ 수 정
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/Components/DutyList/dutyList.module.css b/src/Components/DutyList/dutyList.module.css
new file mode 100644
index 00000000..fbfe0eed
--- /dev/null
+++ b/src/Components/DutyList/dutyList.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * dutyList.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a dutyList.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/DutyList/dutyList.module.css.d.ts b/src/Components/DutyList/dutyList.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/Components/DutyList/dutyList.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/Components/DutyList/dutyList.module.css.map b/src/Components/DutyList/dutyList.module.css.map
new file mode 100644
index 00000000..1e9d2725
--- /dev/null
+++ b/src/Components/DutyList/dutyList.module.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"dutyList.module.css"}
\ No newline at end of file
diff --git a/src/Components/DutyList/dutyList.module.scss b/src/Components/DutyList/dutyList.module.scss
new file mode 100644
index 00000000..5668cebd
--- /dev/null
+++ b/src/Components/DutyList/dutyList.module.scss
@@ -0,0 +1,54 @@
+@import "src/_variables.scss";
+
+.container {
+ width: 99%;
+ height: 99%;
+ .index {
+ width: 100%;
+ height: 36px;
+ margin-top: 10px;
+ padding: 0px 40px;
+ border-radius: 13px;
+ display: grid;
+ grid-template-columns: 0.5fr 2fr 0.5fr 0.6fr;
+ align-items: center;
+ text-align: center;
+ background-color: $light-Green-BG-color;
+ color: $main-color;
+ .index_title {
+ font-size: 14px;
+ }
+ }
+ .lists_content {
+ height: 90%;
+ width: 100%;
+ margin-top: 10px;
+ overflow-y: scroll;
+ &::-webkit-scrollbar {
+ width: 10px; /* 스크롤바의 너비 */
+ }
+ &::-webkit-scrollbar-thumb {
+ height: 5px; /* 스크롤바의 길이 */
+ background: $light-Green-BG-color; /* 스크롤바의 색상 */
+ border-radius: 10px;
+ }
+ .lists {
+ width: 98%;
+ height: 38px;
+ padding: 5px 30px 5px 30px;
+ margin-top: 5px;
+ margin-left: 10px;
+ display: grid;
+ grid-template-columns: 0.5fr 2fr 0.5fr 0.5fr;
+ align-items: center;
+ text-align: center;
+ font-weight: 400;
+ color: $black-color;
+ background-color: $light-Grey-color;
+ &:hover {
+ cursor: pointer;
+ background-color: $black-color-30;
+ }
+ }
+ }
+}
diff --git a/src/Components/DutyList/dutyList.module.scss.d.ts b/src/Components/DutyList/dutyList.module.scss.d.ts
new file mode 100644
index 00000000..a56655e4
--- /dev/null
+++ b/src/Components/DutyList/dutyList.module.scss.d.ts
@@ -0,0 +1,8 @@
+declare const classNames: {
+ readonly container: "container";
+ readonly index: "index";
+ readonly index_title: "index_title";
+ readonly lists_content: "lists_content";
+ readonly lists: "lists";
+};
+export = classNames;
diff --git a/src/Components/Header/Header.module.css b/src/Components/Header/Header.module.css
new file mode 100644
index 00000000..70390937
--- /dev/null
+++ b/src/Components/Header/Header.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * Header.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a Header.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/Header/Header.module.css.d.ts b/src/Components/Header/Header.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/Components/Header/Header.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/Components/Header/Header.module.scss b/src/Components/Header/Header.module.scss
new file mode 100644
index 00000000..42e88683
--- /dev/null
+++ b/src/Components/Header/Header.module.scss
@@ -0,0 +1,24 @@
+@import "src/_variables.scss";
+
+.header {
+ position: fixed;
+ z-index: 5;
+ top: 0;
+ height: 60px;
+ width: 100vw;
+ font-family: 'Montserrat','Noto Sans KR', sans-serif;
+ background-color: $main-color;
+ .title {
+ display: block;
+ margin-top: 20px;
+ text-align: center;
+ font-size: 20px;
+ font-weight: 800;
+ color: $white-color;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ &:hover {
+ color: $point-color;
+ }
+ }
+}
diff --git a/src/Components/Header/Header.module.scss.d.ts b/src/Components/Header/Header.module.scss.d.ts
new file mode 100644
index 00000000..9189b94d
--- /dev/null
+++ b/src/Components/Header/Header.module.scss.d.ts
@@ -0,0 +1,5 @@
+declare const classNames: {
+ readonly header: "header";
+ readonly title: "title";
+};
+export = classNames;
diff --git a/src/Components/Header/Header.tsx b/src/Components/Header/Header.tsx
new file mode 100644
index 00000000..5545f799
--- /dev/null
+++ b/src/Components/Header/Header.tsx
@@ -0,0 +1,19 @@
+import styles from "./Header.module.scss";
+import { useNavigate } from "react-router-dom";
+
+export default function Header() {
+ const navigate = useNavigate();
+
+ // 로그인 처리 api
+ const mainNav = () => {
+ navigate("/main");
+ };
+
+ return (
+
+ );
+}
diff --git a/src/Components/Loading/Loading.module.css b/src/Components/Loading/Loading.module.css
new file mode 100644
index 00000000..42ef62b8
--- /dev/null
+++ b/src/Components/Loading/Loading.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * Loading.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a Loading.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/Loading/Loading.module.scss b/src/Components/Loading/Loading.module.scss
new file mode 100644
index 00000000..f87ed442
--- /dev/null
+++ b/src/Components/Loading/Loading.module.scss
@@ -0,0 +1,20 @@
+@import "src/_variables.scss";
+@import "src/_mixin.scss";
+
+.loading_BG {
+ position: absolute;
+ width: 100vw;
+ height: 100vh;
+ top: 0;
+ left: 0;
+ z-index: 999;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ background: $main-color-30;
+ .loading_text {
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ text-align: center;
+ }
+}
diff --git a/src/Components/Loading/Loading.module.scss.d.ts b/src/Components/Loading/Loading.module.scss.d.ts
new file mode 100644
index 00000000..94c1ec03
--- /dev/null
+++ b/src/Components/Loading/Loading.module.scss.d.ts
@@ -0,0 +1,5 @@
+declare const classNames: {
+ readonly loading_BG: "loading_BG";
+ readonly loading_text: "loading_text";
+};
+export = classNames;
diff --git a/src/Components/Loading/Loading.tsx b/src/Components/Loading/Loading.tsx
new file mode 100644
index 00000000..b8c5312b
--- /dev/null
+++ b/src/Components/Loading/Loading.tsx
@@ -0,0 +1,15 @@
+import styles from "./SearchBar.module.scss";
+// import Spinner from "../../assets/Loading_Ellipsis.gif";
+
+export default function Loading() {
+ return (
+
+
로딩 중...
+
+
+ );
+}
diff --git a/src/Components/Logout/Logout.tsx b/src/Components/Logout/Logout.tsx
new file mode 100644
index 00000000..1267ae3e
--- /dev/null
+++ b/src/Components/Logout/Logout.tsx
@@ -0,0 +1,34 @@
+import React from "react";
+import { logOut } from "../../Api/apis";
+import { useCookies } from "react-cookie";
+import { useNavigate } from "react-router-dom";
+
+const Logout: React.FC = () => {
+ const navigate = useNavigate();
+ const [, , removeCookies] = useCookies();
+
+ const handleLogout = async (): Promise => {
+ try {
+ navigate("/");
+
+ const res = await logOut();
+ if (res) {
+ localStorage.removeItem("role");
+ removeCookies("accessToken");
+
+ alert("로그아웃 되었습니다.");
+ window.location.reload();
+ }
+ } catch (error: any) {
+ console.error("로그아웃이 실패 하였습니다.", error);
+ }
+ };
+
+ return (
+ <>
+ 로그아웃
+ >
+ );
+};
+
+export default Logout;
diff --git a/src/Components/Modal/Modal.css b/src/Components/Modal/Modal.css
new file mode 100644
index 00000000..b1b477bc
--- /dev/null
+++ b/src/Components/Modal/Modal.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "/src/mixin";
+ * | ^^^^^^^^^^^^
+ * '
+ * Modal.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"/src/mixin\";\a \2502 ^^^^^^^^^^^^\a \2575 \a Modal.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/Modal/Modal.css.map b/src/Components/Modal/Modal.css.map
new file mode 100644
index 00000000..492fab65
--- /dev/null
+++ b/src/Components/Modal/Modal.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["Modal.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AAEF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA","file":"Modal.css"}
\ No newline at end of file
diff --git a/src/Components/Modal/Modal.scss b/src/Components/Modal/Modal.scss
new file mode 100644
index 00000000..ee419c29
--- /dev/null
+++ b/src/Components/Modal/Modal.scss
@@ -0,0 +1,133 @@
+@import "/src/variables";
+@import "src/_mixin.scss";
+
+.modal-overlay {
+ position: fixed;
+ width: 100vw;
+ height: 100vh;
+ top: 0;
+ left: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: $main-color-30;
+ z-index: 99;
+}
+
+.modal-window {
+ width: 80%; /* 모달의 최대 너비 조정 */
+ max-width: 500px; /* 모달의 최대 너비 제한 */
+ height: 300px;
+ background-color: $white-color;
+ border-radius: 30px;
+ overflow: hidden;
+ padding: 20px; /* 모달 내부 컨텐츠 주변 여백 조정 */
+ font-size: 16px; /* 폰트 크기 조정 */
+ margin-top: 20px; /* 모달 컨텐츠 상단 여백 추가 */
+ text-align: center; /* 내용을 가운데 정렬 */
+ .modal-close {
+ @include small-button;
+ width: 164px;
+ margin-top: 20px;
+ &:hover {
+ transform: scale(1.03);
+ }
+ }
+}
+
+// 로그인 실패 모달
+.modal-content {
+ text-align: center; /* 텍스트 가운데 정렬 */
+ color: $main-color; /* 원하는 텍스트 색상으로 변경 */
+ margin-bottom: 20px; /* 하단 여백 추가 */
+ .modal-title {
+ font-size: 24px; /* 제목 폰트 크기 조정 */
+ font-weight: 700; /* 제목 폰트 두께 조정 */
+ margin-bottom: 10px; /* 제목 아래 여백 추가 */
+ }
+ .modal-text {
+ font-size: 18px; /* 내용 폰트 크기 조정 */
+ }
+}
+
+// 연차 리스트 수정,삭제 모달
+.modal-content {
+ width: 80%; /* 모달의 최대 너비 조정 */
+ max-width: 500px; /* 모달의 최대 너비 제한 */
+ height: 300px;
+ background-color: $white-color;
+ border-radius: 30px;
+ overflow: hidden;
+ padding: 20px; /* 모달 내부 컨텐츠 주변 여백 조정 */
+ font-size: 16px; /* 폰트 크기 조정 */
+ // margin-top: 20px; /* 모달 컨텐츠 상단 여백 추가 */
+ text-align: center; /* 내용을 가운데 정렬 */
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ .modal-header {
+ font-size: 18px;
+ }
+ .btn-group {
+ width: 200px;
+ display: flex;
+ background-color: red;
+ margin-top: 20px;
+ &:hover {
+ transform: scale(1.03);
+ }
+ .btn-delet {
+ @include middle-button-outline;
+ }
+ .btn-edit {
+ @include middle-button;
+ text-align: center;
+ background-color: $white-color;
+ }
+}
+
+// // 연차 리스트 수정,삭제 모달
+// .modal-content {
+// width: 100%; /* 모달의 최대 너비 조정 */
+// max-width: 500px; /* 모달의 최대 너비 제한 */
+// height: 100%;
+// // background-color: $main-color;
+// border-radius: 30px;
+// overflow: hidden;
+// padding: 20px; /* 모달 내부 컨텐츠 주변 여백 조정 */
+// font-size: 16px; /* 폰트 크기 조정 */
+// text-align: center; /* 내용을 가운데 정렬 */
+// display: flex;
+// flex-direction: column;
+// align-items: center;
+// justify-content: center;
+// .modal-header {
+// font-size: 18px;
+// }
+// .modal-title {
+// label {
+// }
+// }
+// .addEvent-start {
+// }
+// .addEvent-end {
+// }
+// .addEvent-reason {
+// }
+// .btn-group {
+// width: 200px;
+// display: flex;
+// background-color: red;
+// margin-top: 20px;
+// &:hover {
+// transform: scale(1.03);
+// }
+// .btn-delet {
+// @include middle-button-outline;
+// }
+// .btn-edit {
+// @include middle-button;
+// }
+// }
+}
\ No newline at end of file
diff --git a/src/Components/Modal/Modal.tsx b/src/Components/Modal/Modal.tsx
new file mode 100644
index 00000000..a52470c0
--- /dev/null
+++ b/src/Components/Modal/Modal.tsx
@@ -0,0 +1,29 @@
+import { PropsWithChildren } from "react";
+import "./Modal.scss";
+
+interface ModalProps {
+ visibility: boolean;
+ toggle: (param: boolean) => void;
+}
+
+export default function Modal(props: PropsWithChildren) {
+
+ return (
+
+
+ {props.children}
+ {/* {
+ props.toggle(false);
+ }}
+ >
+ 닫기
+ */}
+
+
+ );
+}
diff --git a/src/Components/Password/Password.module.scss b/src/Components/Password/Password.module.scss
new file mode 100644
index 00000000..e933ce1e
--- /dev/null
+++ b/src/Components/Password/Password.module.scss
@@ -0,0 +1,52 @@
+@import "src/_variables.scss";
+@import "src/_mixin.scss";
+
+.password_page {
+ width: 600px;
+ height: 500px;
+ margin: auto;
+ padding: 0 80px;
+ border-radius: 30px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ .content_wrap {
+ position: relative;
+ width: 100%;
+ margin-top: 90px;
+ // background-color: blue;
+ .content_box {
+ height: 70px;
+ color: $main-color;
+ .input_box {
+ display: flex;
+ border-radius: 10px;
+ padding: 12px;
+ background-color: $light-Grey-color;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+ .input {
+ @include wide-input;
+ border: none;
+ }
+ i {
+ margin: auto;
+ }
+ }
+ .error_message {
+ @include error-message;
+ }
+ }
+ }
+ .submit_btn {
+ @include wide-button;
+ }
+ .submit_message {
+ // margin-top: 10px;
+ font-size: 12px;
+ font-weight: 400;
+ color: $date-color-blue;
+ margin-left: 10px;
+ }
+}
diff --git a/src/Components/Password/Password.module.scss.d.ts b/src/Components/Password/Password.module.scss.d.ts
new file mode 100644
index 00000000..08418f1b
--- /dev/null
+++ b/src/Components/Password/Password.module.scss.d.ts
@@ -0,0 +1,11 @@
+declare const classNames: {
+ readonly password_page: "password_page";
+ readonly content_wrap: "content_wrap";
+ readonly content_box: "content_box";
+ readonly input_box: "input_box";
+ readonly input: "input";
+ readonly error_message: "error_message";
+ readonly submit_btn: "submit_btn";
+ readonly submit_message: "submit_message";
+};
+export = classNames;
diff --git a/src/Components/Password/password.tsx b/src/Components/Password/password.tsx
new file mode 100644
index 00000000..3bb0915b
--- /dev/null
+++ b/src/Components/Password/password.tsx
@@ -0,0 +1,120 @@
+import { ChangeEvent, useState } from "react";
+import { postPassword } from "../../Api/apis"
+import { useNavigate } from "react-router-dom";
+import styles from "./Password.module.scss";
+
+export default function Password() {
+ const navigate = useNavigate();
+ const [password, setPassword] = useState("");
+ const [confirmPassword, setConfirmPassword] = useState("");
+ const [message, setMessage] = useState("");
+ const [showPassword, setShowPassword] = useState(false);
+ const [isPasswordValid, setIsPasswordValid] = useState(false);
+
+ const passwordRegex = // 영문, 숫자, 특수문자 포함 8자 이상
+ /^(?=.*[a-zA-z])(?=.*[0-9])(?=.*[$`~!@$!%*#^?&\\(\\)\-_=+])(?!.*[^a-zA-z0-9$`~!@$!%*#^?&\\(\\)\-_=+]).{8,20}$/;
+
+ const handleChange = (e: ChangeEvent) => {
+ const { name, value } = e.target;
+ setPassword(value);
+
+ switch (name) {
+ case "password":
+ setIsPasswordValid(passwordRegex.test(value));
+ break;
+ default:
+ break;
+ }
+ };
+ const handleConfirmChange = (e: ChangeEvent) => {
+ setConfirmPassword(e.target.value);
+ };
+
+ const handleClick = async () => {
+ if (password === confirmPassword) {
+ try {
+ const newPassword = { newPassword: password };
+ const response = await postPassword(newPassword);
+ setMessage("비밀번호 변경이 완료되었습니다."); // 추가: 성공 메시지 설정
+ navigate("/main");
+ console.log(response); // 이 부분은 필요에 따라 처리
+ } catch (error) {
+ console.error("패스워드 변경 실패:", error);
+ setMessage("비밀번호 변경에 실패했습니다.");
+ }
+ } else {
+ setMessage("암호가 일치하지 않습니다.");
+ }
+ };
+
+ // 패스워드 가시화 토글
+ const handleTogglePassword = () => {
+ setShowPassword((prevShowPassword) => !prevShowPassword);
+ };
+
+ return (
+
+ {/*
Password */}
+
+
+
+
+ {showPassword ? (
+
+ ) : (
+
+ )}
+
+ {!isPasswordValid && password.length > 0 && (
+
+ 영문, 숫자, 특수문자 포함 8자 이상 정규식
+
+ )}
+
+
+
+
+ {showPassword ? (
+
+ ) : (
+
+ )}
+
+ {password !== confirmPassword ? (
+
+ 비밀번호가 일치하지 않습니다.
+
+ ) : (
+ ""
+ )}
+
+
+
+ 변경 완료
+
+
+ {message && {message}
}
+
+
+ );
+}
diff --git a/src/Components/userBanner/UserBanner.tsx b/src/Components/userBanner/UserBanner.tsx
new file mode 100644
index 00000000..4f11549e
--- /dev/null
+++ b/src/Components/userBanner/UserBanner.tsx
@@ -0,0 +1,59 @@
+import { MyDataType } from "types/common";
+import styles from "./userBanner.module.scss";
+export default function UserBanner(props: {
+ myData: MyDataType | undefined;
+ category: boolean;
+ setCategory: (value: boolean) => void;
+}) {
+ const myData = props.myData;
+
+ return (
+
+
+ props.setCategory(false)}
+ className={props.category ? styles.active : ""}
+ >
+ 상신 내역
+
+ |
+ props.setCategory(true)}
+ className={props.category ? "" : styles.active}
+ >
+ 개인정보 수정
+
+
+
+
+
+ {myData?.name}
+ {myData?.position}
+
+
KDT-5 회원정보
+
+
+
+ {myData?.annualBalance}
+ 개
+
+
총 발생 연차
+
+
+
+ {myData?.annualUsed}
+ 개
+
+
총 사용 연차
+
+
+
+ {myData?.annualRemain}
+ 개
+
+
총 잔여 연차
+
+
+
+ );
+}
diff --git a/src/Components/userBanner/userBanner.module.css b/src/Components/userBanner/userBanner.module.css
new file mode 100644
index 00000000..8768567d
--- /dev/null
+++ b/src/Components/userBanner/userBanner.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * userBanner.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a userBanner.module.scss 1:9 root stylesheet";
+}
diff --git a/src/Components/userBanner/userBanner.module.css.d.ts b/src/Components/userBanner/userBanner.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/Components/userBanner/userBanner.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/Components/userBanner/userBanner.module.css.map b/src/Components/userBanner/userBanner.module.css.map
new file mode 100644
index 00000000..d283720c
--- /dev/null
+++ b/src/Components/userBanner/userBanner.module.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["userBanner.module.scss"],"names":[],"mappings":"AACA;EACE;EACA;EAEA;EACA;EACA;EACA;EACA","file":"userBanner.module.css"}
\ No newline at end of file
diff --git a/src/Components/userBanner/userBanner.module.scss b/src/Components/userBanner/userBanner.module.scss
new file mode 100644
index 00000000..379b200c
--- /dev/null
+++ b/src/Components/userBanner/userBanner.module.scss
@@ -0,0 +1,79 @@
+@import "src/_variables.scss";
+
+.container {
+ width: 100%;
+ height: 124px;
+ padding: 50px;
+ background-color: $light-Green-BG-color;
+ border-radius: 40px 40px 0 0;
+ font-size: 16px;
+ font-weight: 700;
+ color: $main-color;
+ display: flex;
+ justify-content: space-between;
+ line-height: 1.2;
+ .my_menu {
+ width: 22%;
+ height: 30px;
+ padding: 12px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ // background-color: blue;
+ cursor: pointer;
+ .bar {
+ font-weight: 300;
+ }
+ .active {
+ color: $main-color-30;
+ }
+ }
+ .banner {
+ height: 100px;
+ width: 606px;
+ padding-right: 10px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background-color: $white-color;
+ border: 2px solid $main-color;
+ border-radius: 25px;
+ box-shadow: 5px 5px 20px $main-color-30;
+ overflow: hidden;
+ .banner_box {
+ height: 80%;
+ width: 20%;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: right;
+ .total_num {
+ font-size: 36px;
+ }
+ .total_text {
+ color: $sub-color;
+ font-size: 12px;
+ }
+ }
+ & .annual_info {
+ height: 100%;
+ width: 36%;
+ line-height: 1.4;
+ background-color: $main-color;
+ color: $sub-color;
+ .user_info {
+ .user_name {
+ font-size: 30px;
+ color: $white-color;
+ }
+ .user_position {
+ font-size: 16px;
+ }
+ }
+ .user_text {
+ font-size: 12px;
+ }
+ }
+ }
+}
diff --git a/src/Components/userBanner/userBanner.module.scss.d.ts b/src/Components/userBanner/userBanner.module.scss.d.ts
new file mode 100644
index 00000000..7db196f9
--- /dev/null
+++ b/src/Components/userBanner/userBanner.module.scss.d.ts
@@ -0,0 +1,16 @@
+declare const classNames: {
+ readonly container: "container";
+ readonly my_menu: "my_menu";
+ readonly bar: "bar";
+ readonly active: "active";
+ readonly banner: "banner";
+ readonly banner_box: "banner_box";
+ readonly total_num: "total_num";
+ readonly total_text: "total_text";
+ readonly annual_info: "annual_info";
+ readonly user_info: "user_info";
+ readonly user_name: "user_name";
+ readonly user_position: "user_position";
+ readonly user_text: "user_text";
+};
+export = classNames;
diff --git a/src/Hooks/useData-Query.tsx b/src/Hooks/useData-Query.tsx
new file mode 100644
index 00000000..f383ff41
--- /dev/null
+++ b/src/Hooks/useData-Query.tsx
@@ -0,0 +1,55 @@
+import { QueryClient, useMutation, useQuery } from "@tanstack/react-query";
+import {
+ getListAll,
+ getMyPage,
+ permission,
+ postDelete,
+ postUpdate,
+} from "../Api/apis.ts";
+import { AdminListsAll, UpdateType } from "types/common";
+
+export default function useDataQuery() {
+ const queryClient = new QueryClient();
+ // 마이페이지
+ const getMyPageData = useQuery(["myData"], async () => {
+ return await getMyPage().then((res: any) => {
+ return res;
+ });
+ });
+ const changeMyData = useMutation((data: UpdateType) => postUpdate(data), {
+ onSuccess: () => {
+ queryClient.invalidateQueries(["myData"]);
+ console.log("수정 성공");
+ },
+ });
+
+ const deleteMyData = useMutation((id: number) => postDelete(id), {
+ onSuccess: () => {
+ queryClient.invalidateQueries(["myData"]);
+ console.log("삭제 성공");
+ },
+ });
+
+ // amin 페이지
+ const getAdminPageData = useQuery(["adminData"], async () => {
+ return await getListAll().then((res: any) => {
+ return res;
+ });
+ });
+ const changeAdminData = useMutation(
+ (data: AdminListsAll) => permission(data),
+ {
+ onSuccess: () => {
+ queryClient.invalidateQueries(["adminData"]);
+ },
+ },
+ );
+
+ return {
+ getMyPageData,
+ changeMyData,
+ deleteMyData,
+ getAdminPageData,
+ changeAdminData,
+ };
+}
diff --git a/src/_mixin.scss b/src/_mixin.scss
new file mode 100644
index 00000000..c3d5b233
--- /dev/null
+++ b/src/_mixin.scss
@@ -0,0 +1,200 @@
+// === 버튼 스타일 === //
+
+@mixin wide-button {
+ margin: 40px auto 20px;
+ width: 100%;
+ height: 50px;
+ border: none;
+ border-radius: 15px;
+ background-color: $main-color;
+ color: $white-color;
+ font-weight: 700;
+ cursor: pointer;
+}
+// 등록하기, 모달 닫기 버튼
+@mixin small-button {
+ width: 100%;
+ height: 50px;
+ border: none;
+ border-radius: 10px;
+ background-color: $point-color;
+ color: $white-color;
+ font-weight: 800;
+ font-size: 18px;
+ cursor: pointer;
+}
+
+@mixin middle-button {
+ width: 100%;
+ height: 50px;
+ border-radius: 10px;
+ border: none;
+ background-color: $main-color;
+ color: $white-color;
+ font-weight: 800;
+ font-size: 16px;
+ cursor: pointer;
+}
+
+@mixin middle-button-outline {
+ width: 100%;
+ height: 50px;
+ border-radius: 10px;
+ border: 2px solid $main-color;
+ background-color: $white-color;
+ color: $main-color;
+ font-weight: 800;
+ font-size: 16px;
+ cursor: pointer;
+}
+
+@mixin non-permission-button {
+ padding: 4px 10px;
+ border-radius: 5px;
+ font-weight: 700;
+ color: $white-color;
+ background-color: $point-color;
+ cursor: pointer;
+}
+
+@mixin permission-button {
+ padding: 4px 10px;
+ border-radius: 5px;
+ font-weight: 700;
+ color: $sub-color;
+ background-color: $green-BG-color;
+ cursor: auto;
+}
+
+// === 에러 메세지 === //
+
+@mixin error-message {
+ margin-top: 10px;
+ font-size: 12px;
+ font-weight: 400;
+ color: $point-color;
+ margin-left: 10px;
+}
+
+// === 인풋 스타일 === //
+
+@mixin wide-input {
+ width: 100%;
+ font-size: 14px;
+ font-weight: 500;
+ color: $main-color;
+ background-color: $light-Grey-color;
+ &::placeholder {
+ font-weight: 500;
+ font-size: 14px;
+ color: $sub-color;
+ }
+}
+
+@mixin select-wide-input {
+ width: 200px;
+ padding: 10px;
+ margin-top: 10px;
+ font-size: 14px;
+ font-weight: 500;
+ text-align: right;
+ color: $sub-color;
+ border: none;
+ border-right: 3px solid $light-Grey-color;
+ outline: none;
+ border-radius: 10px;
+ background-color: $light-Grey-color;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+}
+
+@mixin select-middle-input {
+ width: 100px;
+ padding: 10px;
+ margin-top: 10px;
+ font-size: 14px;
+ font-weight: 500;
+ text-align: right;
+ color: $sub-color;
+ border: none;
+ border-radius: 10px;
+ background-color: $light-Grey-color;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+}
+
+@mixin index-bar {
+ content: "|";
+ float: right;
+ color: $green-BG-color;
+}
+
+// === 체크 박스 스타일 === //
+
+@mixin custom-checkbox(
+ $border-color,
+ $bg-color,
+ $checked-bg-color,
+ $check-color
+) {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ width: 22px;
+ height: 22px;
+ border: 2px solid $border-color;
+ background-color: $bg-color;
+ border-radius: 6px;
+ position: relative;
+ margin-right: 6px;
+ cursor: pointer;
+ &::before {
+ content: "";
+ display: block;
+ width: 6px;
+ height: 13px;
+ border: solid $check-color;
+ border-width: 0 3px 3px 0;
+ transform: rotate(45deg);
+ position: absolute;
+ left: 28%;
+ opacity: 0;
+ transition: opacity 0.2s ease-in-out;
+ }
+ &:checked {
+ background-color: $checked-bg-color;
+ &::before {
+ opacity: 1;
+ }
+ }
+}
+
+// === 카테고리 태그 스타일 === //
+
+@mixin tags($bg-color, $main-color) {
+ margin: 0 5px;
+ width: 60px;
+ height: 28px;
+ text-align: center;
+ font-size: 14px;
+ font-weight: 800;
+ border-radius: 20px;
+ color: $main-color;
+ background-color: $bg-color;
+ .tag {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ .dot {
+ width: 8px;
+ height: 8px;
+ border-radius: 20px;
+ background-color: $main-color;
+ margin-right: 5px;
+ }
+ }
+}
diff --git a/src/_variables.scss b/src/_variables.scss
new file mode 100644
index 00000000..d8e2fefb
--- /dev/null
+++ b/src/_variables.scss
@@ -0,0 +1,26 @@
+// * 키 컬러
+$main-color: #49767a;
+$main-color-50: #49767a8d;
+$main-color-30: #49767a4c;
+$sub-color: #82a1a3;
+$green-BG-color: #d6e4e5;
+$light-Green-BG-color: #eff5f5;
+
+// * 블랙 & 화이트
+$white-color: #ffffff;
+$black-color: #1f1f1f;
+$black-color-50: #1f1f1f7b;
+$black-color-30: #1f1f1f0f;
+$light-Grey-color: #f9fafa;
+
+// * 포인트 컬러
+$point-color: #ea613c;
+$point-color-50: #ea623c74;
+$date-color-green: #3acab9;
+$date-color-green-50: #3acab96e;
+$date-color-blue: #466FFF;
+$white-orange: #feefec;
+$white-green: #eef6f1;
+
+// * 사이즈 설정
+$container-width: 1080px;
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 00000000..cf462be8
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,157 @@
+@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&family=Noto+Sans+KR:wght@300;400;500;700&display=swap");
+@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&display=swap");
+* {
+ margin: 0;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ box-sizing: border-box;
+}
+
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+
+body {
+ line-height: 1;
+}
+
+ol,
+ul {
+ list-style: none;
+}
+
+blockquote,
+q {
+ quotes: none;
+}
+
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: "";
+ content: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+button {
+ border: 0;
+ background-color: transparent;
+ font-weight: 500;
+}
+button:hover {
+ cursor: pointer;
+}
+
+input {
+ outline: none;
+ border: none;
+ font-weight: 500;
+}
+
+/*# sourceMappingURL=index.css.map */
diff --git a/src/index.css.map b/src/index.css.map
new file mode 100644
index 00000000..b7819345
--- /dev/null
+++ b/src/index.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["index.scss"],"names":[],"mappings":"AAAQ;AACA;AAER;EACE;EACA;EACA;EACA;EACA;;;AAKF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAiFE;EACA;EACA;EACA;EACA;EACA;;;AAEF;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAWE;;;AAEF;EACE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;AACA;EACE;;;AAGJ;EACE;EACA;EACA","file":"index.css"}
\ No newline at end of file
diff --git a/src/index.scss b/src/index.scss
new file mode 100644
index 00000000..70d94672
--- /dev/null
+++ b/src/index.scss
@@ -0,0 +1,150 @@
+@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&family=Noto+Sans+KR:wght@300;400;500;700&display=swap");
+@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&display=swap");
+
+* {
+ margin: 0;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ box-sizing: border-box;
+}
+
+// reset.css
+// https://meyerweb.com/eric/tools/css/reset/
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol,
+ul {
+ list-style: none;
+}
+blockquote,
+q {
+ quotes: none;
+}
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: "";
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+button {
+ border: 0;
+ background-color: transparent;
+ font-weight: 500;
+ &:hover {
+ cursor: pointer;
+ }
+}
+input {
+ outline: none;
+ border: none;
+ font-weight: 500;
+}
diff --git a/src/main.css b/src/main.css
new file mode 100644
index 00000000..371c1e1e
--- /dev/null
+++ b/src/main.css
@@ -0,0 +1,10 @@
+html {
+ background-color: #d6e4e5;
+}
+
+#root {
+ background-color: #d6e4e5;
+ width: 100%;
+}
+
+/*# sourceMappingURL=main.css.map */
diff --git a/src/main.css.map b/src/main.css.map
new file mode 100644
index 00000000..3dd32481
--- /dev/null
+++ b/src/main.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["main.scss","_variables.scss"],"names":[],"mappings":"AAEA;EACE,kBCEe;;;ADCjB;EACE,kBCFe;EDGf","file":"main.css"}
\ No newline at end of file
diff --git a/src/main.scss b/src/main.scss
new file mode 100644
index 00000000..4224bccf
--- /dev/null
+++ b/src/main.scss
@@ -0,0 +1,10 @@
+@import "_variables.scss";
+
+html {
+ background-color: $green-BG-color;
+}
+
+#root {
+ background-color: $green-BG-color;
+ width: 100%;
+}
\ No newline at end of file
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 00000000..d2e5afbe
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,15 @@
+import ReactDOM from "react-dom/client";
+import App from "./App.tsx";
+import "./index.scss";
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import { BrowserRouter } from "react-router-dom";
+import "./main.scss";
+
+const queryClient = new QueryClient();
+ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
+
+
+
+
+
+);
diff --git a/src/pages/AccessForbiddenPage/AccessForbidden.css b/src/pages/AccessForbiddenPage/AccessForbidden.css
new file mode 100644
index 00000000..ed3e9500
--- /dev/null
+++ b/src/pages/AccessForbiddenPage/AccessForbidden.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "/src/variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * AccessForbidden.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"/src/variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a AccessForbidden.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/AccessForbiddenPage/AccessForbidden.scss b/src/pages/AccessForbiddenPage/AccessForbidden.scss
new file mode 100644
index 00000000..10ec5656
--- /dev/null
+++ b/src/pages/AccessForbiddenPage/AccessForbidden.scss
@@ -0,0 +1,77 @@
+@import "/src/variables.scss";
+
+.container {
+ position: relative;
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ overflow: hidden;
+ .guide_wrap {
+ z-index: 1;
+ position: absolute;
+ top: 150px;
+ width: 500px;
+ height: 550px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ text-align: center;
+ color: $main-color;
+ .main_text {
+ font-size: 36px;
+ margin-bottom: 15px;
+ font-weight: 700;
+ }
+ .sub_text {
+ font-size: 14px;
+ color: $sub-color;
+ font-weight: 500;
+ }
+ .nav_btn {
+ margin-top: 40px;
+ width: 210px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 20px 30px;
+ border-radius: 40px;
+ color: $green-BG-color;
+ background-color: $main-color;
+ .text {
+ color: $white-color;
+ font-weight: 800;
+ border-bottom: 1px solid $main-color;
+ }
+ .icon {
+ font-size: 20px;
+ margin-left: 10px;
+ }
+ }
+ }
+ .bg_circle {
+ position: absolute;
+ bottom: -100px;
+ width: 80vw;
+ height: 540px;
+ background-color: $main-color-30;
+ border-radius: 800px 800px 0 0;
+ display: flex;
+ justify-content: center;
+ .bg_text {
+ width: 1200px;
+ margin-top: 90px;
+ text-align: center;
+ font-size: 8rem;
+ font-weight: 800;
+ color: $main-color;
+ span{
+ display: inline-block;
+ width: 60%;
+ }
+ }
+ }
+}
diff --git a/src/pages/AccessForbiddenPage/AccessForbidden.tsx b/src/pages/AccessForbiddenPage/AccessForbidden.tsx
new file mode 100644
index 00000000..113f26d9
--- /dev/null
+++ b/src/pages/AccessForbiddenPage/AccessForbidden.tsx
@@ -0,0 +1,27 @@
+import { useNavigate } from "react-router-dom";
+import "./AccessForbidden.scss";
+
+const AccessForbidden = () => {
+ const navigate = useNavigate();
+ return (
+
+
+
접근이 제한된 서비스입니다.
+
+ 로그인 후 다시 이용해 주세요.
+
+
navigate("/")}>
+ 로그인 페이지 로 이동
+ 👉
+
+
+
+
+ );
+};
+
+export default AccessForbidden;
diff --git a/src/pages/Admin/admin.module.css b/src/pages/Admin/admin.module.css
new file mode 100644
index 00000000..061ba4c0
--- /dev/null
+++ b/src/pages/Admin/admin.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "@/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^
+ * '
+ * admin.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"@/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^\a \2575 \a admin.module.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/Admin/admin.module.css.d.ts b/src/pages/Admin/admin.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/pages/Admin/admin.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/pages/Admin/admin.module.scss b/src/pages/Admin/admin.module.scss
new file mode 100644
index 00000000..3a2b23fb
--- /dev/null
+++ b/src/pages/Admin/admin.module.scss
@@ -0,0 +1,197 @@
+@import "@/_variables.scss";
+@import "@/_mixin.scss";
+
+.page {
+ position: relative;
+ top: 0;
+ padding-top: 100px;
+ padding-bottom: 50px;
+ width: 100%;
+ height: 140vh;
+ // background-color: $light-Green-BG-color;
+ .container {
+ margin: auto;
+ padding-top: 50px;
+ width: 1080px;
+ height: 950px;
+ border-radius: 40px;
+ background-color: $white-color;
+ box-shadow: 5px 5px 20px $main-color-30;
+ font-size: 14px;
+ font-weight: 600;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ }
+ .admin_info {
+ width: 90%;
+ height: 60px;
+ margin: auto;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-radius: 10px;
+ padding: 10px 0;
+ .admin_name {
+ width: 200px;
+ height: 50px;
+ padding: 0 45px;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+ border-radius: 10px;
+ text-align: cetner;
+ background-color: $main-color;
+ color: $sub-color;
+ .admin_id {
+ color: $white-color;
+ font-size: 20px;
+ font-weight: 700;
+ }
+ }
+ .search_box {
+ position: relative;
+ width: 550px;
+ height: 50px;
+ display: flex;
+ justify-content: space-between;
+ .search_option {
+ width: 30%;
+ height: 100%;
+ margin-right: 20px;
+ border-radius: 10px;
+ background-color: $light-Green-BG-color;
+ display: flex;
+ align-items: center;
+ justify-content: start;
+ button {
+ width: 50%;
+ padding: 8px;
+ color: $sub-color;
+ }
+ .btn {
+ width: 65%;
+ &::before {
+ content: "|";
+ float: left;
+ }
+ }
+ }
+ .search_bar {
+ width: 70%;
+ height: 100%;
+ border-radius: 15px;
+ font-size: 14px;
+ padding: 10px 20px;
+ background-color: $light-Grey-color;
+ color: $main-color;
+ display: flex;
+ justify-content: space-between;
+ &::placeholder {
+ font-size: 14px;
+ color: $sub-color;
+ }
+ .search_icon {
+ margin: auto;
+ width: 24px;
+ height: 24px;
+ opacity: 30%;
+ cursor: pointer;
+ }
+ .search_input {
+ width: 100%;
+ background-color: transparent;
+ }
+ }
+ }
+ }
+ .list_info {
+ width: 90%;
+ height: 100%;
+ margin: auto;
+ padding-top: 40px;
+ display: flex;
+ flex-direction: column;
+ .lists_box {
+ margin-top: 30px;
+ width: 100%;
+ height: 40%;
+ font-family: 700;
+ .lists_title {
+ width: 100%;
+ font-size: 16px;
+ padding-left: 20px;
+ }
+ .lists_index {
+ width: 100%;
+ height: 44px;
+ margin: auto;
+ margin-top: 12px;
+ padding: 20px 20px;
+ background-color: $light-Green-BG-color;
+ color: $main-color;
+ border-radius: 13px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ text-align: center;
+ .name {
+ width: 10%;
+ }
+ .title {
+ width: 39%;
+ }
+ .reason {
+ width: 11%;
+ }
+ .period {
+ width: 29%;
+ }
+ .count {
+ width: 11%;
+ }
+ .permission {
+ width: 10%;
+ }
+ .duty_name {
+ width: 10%;
+ }
+ .duty_title {
+ width: 50%;
+ }
+ .duty_period {
+ width: 30%;
+ }
+ .duty_permission {
+ width: 10%;
+ }
+ }
+ .lists {
+ width: 100%;
+ height: 73%;
+ margin-top: 5px;
+ padding: 5px;
+ border-radius: 12px;
+ overflow-y: scroll;
+ cursor: pointer;
+ &::-webkit-scrollbar {
+ width: 10px; /* 스크롤바의 너비 */
+
+ }
+ &::-webkit-scrollbar-thumb {
+ height: 3px; /* 스크롤바의 길이 */
+ background: $main-color-30; /* 스크롤바의 색상 */
+ border-radius: 10px;
+ }
+ }
+ }
+ .lists_box.duty_box {
+ .lists {
+ width: 100%;
+ height: 73%;
+ margin-top: 5px;
+ }
+ }
+ }
+}
diff --git a/src/pages/Admin/admin.module.scss.d.ts b/src/pages/Admin/admin.module.scss.d.ts
new file mode 100644
index 00000000..509c1ba9
--- /dev/null
+++ b/src/pages/Admin/admin.module.scss.d.ts
@@ -0,0 +1,30 @@
+declare const classNames: {
+ readonly page: "page";
+ readonly container: "container";
+ readonly admin_info: "admin_info";
+ readonly admin_name: "admin_name";
+ readonly admin_id: "admin_id";
+ readonly search_box: "search_box";
+ readonly search_option: "search_option";
+ readonly btn: "btn";
+ readonly search_bar: "search_bar";
+ readonly search_icon: "search_icon";
+ readonly search_input: "search_input";
+ readonly list_info: "list_info";
+ readonly lists_box: "lists_box";
+ readonly lists_title: "lists_title";
+ readonly lists_index: "lists_index";
+ readonly name: "name";
+ readonly title: "title";
+ readonly reason: "reason";
+ readonly period: "period";
+ readonly count: "count";
+ readonly permission: "permission";
+ readonly duty_name: "duty_name";
+ readonly duty_title: "duty_title";
+ readonly duty_period: "duty_period";
+ readonly duty_permission: "duty_permission";
+ readonly lists: "lists";
+ readonly duty_box: "duty_box";
+};
+export = classNames;
diff --git a/src/pages/Admin/admin.tsx b/src/pages/Admin/admin.tsx
new file mode 100644
index 00000000..4178fcf2
--- /dev/null
+++ b/src/pages/Admin/admin.tsx
@@ -0,0 +1,122 @@
+import { useState, useEffect } from "react";
+import styles from "./admin.module.scss";
+import Header from "@/Components/Header/Header.tsx";
+import SearchBar from "@/Components/AdminPage/SearchBar.tsx";
+import DutyLists from "@/Components/AdminPage/DutyLists.tsx";
+import DayoffLists from "@/Components/AdminPage/DayoffLists.tsx";
+import { getAccessToken, getListAll, getSilentAxios } from "../../Api/apis"
+import { AdminListsAll } from "types/common";
+
+export default function Admin() {
+ const [dayoffData, setDayoffData] = useState([]);
+ const [dutyData, setDutyData] = useState([]);
+ const [filteredDayoffData, setFilteredDayoffData] = useState(
+ [],
+ );
+ const [filteredDutyData, setFilteredDutyData] = useState([]);
+ const [searchOption, setSearchOption] = useState("이름");
+ console.log(searchOption);
+ // 사용자 기안 데이터 불러오기
+
+ useEffect(() => {
+ async function fetchListData() {
+ try {
+ const data = await getListAll();
+ const dayoffItems = data.filter(
+ (item: AdminListsAll) => item.category === "연차",
+ );
+ const dutyItems = data.filter(
+ (item: AdminListsAll) => item.category === "당직",
+ );
+
+ setDayoffData(dayoffItems);
+ setDutyData(dutyItems);
+ setFilteredDayoffData(dayoffItems);
+ setFilteredDutyData(dutyItems);
+ } catch (error) {
+ console.error("데이터를 가져오는 중 오류 발생:", error);
+ const ACCESSTOKEN = getAccessToken();
+ const silentAxios = getSilentAxios(ACCESSTOKEN ?? "");
+ const result = await silentAxios.get("/admin");
+ return result.data;
+ }
+ }
+ fetchListData();
+ }, []);
+
+ // 검색 기능 추가 (옵션 선택)
+
+ const handleSearch = (searchTerm: string, option: string) => {
+ setSearchOption(option);
+ if (option === "이름") {
+ const filteredDayoff = dayoffData.filter((item) =>
+ item.name.includes(searchTerm),
+ );
+ const filteredDuty = dutyData.filter((item) =>
+ item.name.includes(searchTerm),
+ );
+ setFilteredDayoffData(filteredDayoff);
+ setFilteredDutyData(filteredDuty);
+ } else if (option === "제목") {
+ const filteredDayoff = dayoffData.filter((item) =>
+ item.title.includes(searchTerm),
+ );
+ const filteredDuty = dutyData.filter((item) =>
+ item.title.includes(searchTerm),
+ );
+ setFilteredDayoffData(filteredDayoff);
+ setFilteredDutyData(filteredDuty);
+ }
+ };
+
+ return (
+ <>
+
+
+
+
+
+ team9
+ 관리자
+
+
+
+
+
+
+
+ 연차 내역
+
+ 상신인
+ 제목
+ 사유
+ 사용 기간
+ 사용 일수
+ 상태
+
+
+ {filteredDayoffData.map((item) => (
+
+ ))}
+
+
+
+ 당직 내역
+
+ 상신인
+ 제목
+ 사용 기간
+ 상태
+
+
+ {filteredDutyData.map((item) => (
+
+ ))}
+
+
+
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/pages/LoginPage/LoginPage.css b/src/pages/LoginPage/LoginPage.css
new file mode 100644
index 00000000..2e8e8144
--- /dev/null
+++ b/src/pages/LoginPage/LoginPage.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * LoginPage.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a LoginPage.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/LoginPage/LoginPage.css.map b/src/pages/LoginPage/LoginPage.css.map
new file mode 100644
index 00000000..0cf189dc
--- /dev/null
+++ b/src/pages/LoginPage/LoginPage.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"LoginPage.css"}
\ No newline at end of file
diff --git a/src/pages/LoginPage/LoginPage.scss b/src/pages/LoginPage/LoginPage.scss
new file mode 100644
index 00000000..22cf145b
--- /dev/null
+++ b/src/pages/LoginPage/LoginPage.scss
@@ -0,0 +1,99 @@
+@import "src/_variables.scss";
+@import "src/_mixin.scss";
+
+.login_page {
+ position: relative;
+ height: 100vh;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ color: $black-color;
+ font-size: 14px;
+ font-weight: 600;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ .login_box {
+ width: 600px;
+ height: 600px;
+ margin: auto;
+ padding: 100px 80px;
+ border-radius: 30px;
+ background-color: $white-color;
+ box-shadow: 5px 5px 20px $main-color-30;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ .login_title {
+ text-align: center;
+ font-size: 22px;
+ font-weight: 800;
+ }
+ .content_wrap {
+ position: relative;
+ margin-top: 40px;
+ width: 100%;
+ .content_box {
+ height: 70px;
+ color: $main-color;
+ .input_box {
+ display: flex;
+ border-radius: 10px;
+ padding: 12px;
+ margin-top: 7px;
+ background-color: $light-Grey-color;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+ .input {
+ @include wide-input;
+ }
+ i {
+ margin: auto;
+ }
+ }
+ .error_message {
+ @include error-message;
+ }
+ }
+ }
+ .btn_wrap {
+ width: 100%;
+ text-align: center;
+ font-weight: 700;
+ .login_btn {
+ @include wide-button;
+ }
+ .signup_btn {
+ color: $main-color;
+ cursor: pointer;
+ }
+ }
+ }
+ // 로그인 실패 모달
+ .modal_content {
+ position: relative;
+ top: 10%;
+ height: 80%;
+ padding: 30px 0px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ .modal_title {
+ margin-top: 20px;
+ font-size: 18px;
+ text-align: center;
+ font-weight: 800;
+ color: $black-color;
+ }
+ .modal_text {
+ font-size: 14px;
+ color: $black-color-50;
+ }
+ .modal_closebtn {
+ @include small-button;
+ width: 45%;
+ margin-top: 20px;
+ }
+ }
+}
diff --git a/src/pages/LoginPage/LoginPage.tsx b/src/pages/LoginPage/LoginPage.tsx
new file mode 100644
index 00000000..ec3aa1fc
--- /dev/null
+++ b/src/pages/LoginPage/LoginPage.tsx
@@ -0,0 +1,158 @@
+import { FormEvent, useEffect, useState } from "react";
+import "./LoginPage.scss";
+import { useCookies } from "react-cookie";
+import { useNavigate } from "react-router-dom";
+import { login } from "../../Api/apis";
+import Modal from "../../Components/Modal/Modal";
+
+interface LoginPageProps {
+ setIsLogined: (value: boolean) => void;
+}
+const LoginPage: React.FC = ({ setIsLogined }) => {
+ // Input
+ const [email, setEmail] = useState("");
+ const [password, setPassword] = useState("");
+ // Input-Check
+ const [emailValid, setEmailValid] = useState(false);
+ const [passwordValid, setPasswordValid] = useState(false);
+ const [showPassword, setShowPassword] = useState(false);
+ // Modal
+ const [showLoginModal, setShowLoginModal] = useState(false);
+ // Cookie
+ const [ ,setCookie] = useCookies(["accessToken"]);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const role = localStorage.getItem("role");
+ if (role === "일반 회원" || role === "관리자") {
+ navigate("/main");
+ } else {
+ navigate("/");
+ }
+ }, [navigate]);
+
+ const handleEmail = (e: React.ChangeEvent) => {
+ setEmail(e.target.value);
+ const regex =
+ /^(([^<>()\\[\].,;:\s@"]+(\.[^<>()\\[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i;
+ if (regex.test(e.target.value)) {
+ setEmailValid(true);
+ } else {
+ setEmailValid(false);
+ }
+ };
+
+ const handlePassword = (e: React.ChangeEvent) => {
+ setPassword(e.target.value);
+ const regex =
+ /^(?=.*[a-zA-z])(?=.*[0-9])(?=.*[$`~!@$!%*#^?&\\(\\)\-_=+])(?!.*[^a-zA-z0-9$`~!@$!%*#^?&\\(\\)\-_=+]).{8,20}$/;
+ if (regex.test(e.target.value)) {
+ setPasswordValid(true);
+ } else {
+ setPasswordValid(false);
+ }
+ };
+
+ // 패스워드 가시화 토글
+ const handleTogglePassword = () => {
+ setShowPassword((prevShowPassword) => !prevShowPassword);
+ };
+
+ const onClickLogin = async (e: FormEvent) => {
+ e.preventDefault();
+ try {
+ const response = await login(email, password);
+ const status = response?.status;
+ if (status === 200) {
+ const accessToken = response?.data.accessToken;
+ const userRole = response?.data.role;
+ if (accessToken && userRole) {
+ localStorage.setItem("role", userRole);
+ setCookie("accessToken", accessToken);
+ setIsLogined(true);
+ navigate("/main");
+ }
+ }
+ } catch (error) {
+ setShowLoginModal(true);
+ }
+ };
+
+ const handleClickModal = () => {
+ setShowLoginModal(false);
+ }
+
+ return (
+
+
+
+
+
로그인에 실패하였습니다.
+
입력정보를 다시 확인해주세요.
+
닫기
+
+
+
+ );
+};
+
+export default LoginPage;
diff --git a/src/pages/Main/AddEventModal.css b/src/pages/Main/AddEventModal.css
new file mode 100644
index 00000000..635918c3
--- /dev/null
+++ b/src/pages/Main/AddEventModal.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "/src/_variables";
+ * | ^^^^^^^^^^^^^^^^^
+ * '
+ * AddEventModal.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"/src/_variables\";\a \2502 ^^^^^^^^^^^^^^^^^\a \2575 \a AddEventModal.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/Main/AddEventModal.css.map b/src/pages/Main/AddEventModal.css.map
new file mode 100644
index 00000000..72a95a6d
--- /dev/null
+++ b/src/pages/Main/AddEventModal.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"AddEventModal.css"}
\ No newline at end of file
diff --git a/src/pages/Main/AddEventModal.scss b/src/pages/Main/AddEventModal.scss
new file mode 100644
index 00000000..8bf8bccf
--- /dev/null
+++ b/src/pages/Main/AddEventModal.scss
@@ -0,0 +1,171 @@
+@import "/src/_variables";
+@import "src/_mixin.scss";
+
+.ReactModal__Overlay {
+ z-index: 99;
+ background-color: rgba($main-color, $alpha: 0.5);
+ position: fixed;
+ inset: 0px;
+}
+
+.custom_modal_content {
+ width: 660px;
+ height: 600px;
+ margin: auto;
+ border-radius: 35px;
+ position: absolute;
+ inset: 40px;
+ border: 1px solid $light-Grey-color;
+ background: $white-color;
+ overflow: auto;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ outline: none;
+ padding: 20px;
+ input {
+ width: 399px;
+ height: 46px;
+ border: none;
+ font-size: 14px;
+ border-radius: 10px;
+ background-color: $light-Grey-color;
+ padding-left: 20px;
+ color: $sub-color;
+ }
+ select {
+ padding-left: 20px;
+ color: $sub-color;
+ border: none;
+ cursor: pointer;
+ }
+ div {
+ margin-bottom: 13px;
+ }
+}
+
+.addEvent_wrap {
+ width: 473px;
+ height: 464px;
+ margin: auto;
+ padding: 58px 0px;
+ .addEvent_header {
+ text-align: center;
+ font-size: 22px;
+ font-weight: 700;
+ margin-bottom: 40px;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ }
+ .add_title {
+ font-size: 14px;
+ font-weight: bold;
+ color: $main-color;
+ }
+ .addEvent_title {
+ width: 473px;
+ height: 46px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ font-size: 14px;
+ }
+ }
+ .addEvent_start {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ }
+ .addEvent_end {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ }
+ .addEvent_category {
+ position: relative;
+ height: 50px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 14px;
+ .addCategory_wrap {
+ position: absolute;
+ width: 170px;
+ display: flex;
+ left: 95px;
+ top: 0;
+ }
+ .add_Rest {
+ display: flex;
+ width: 80px;
+ height: 50px;
+ align-items: center;
+ .input_dayoff_checkbox {
+ @include custom-checkbox(
+ transparent,
+ $point-color-50,
+ $point-color,
+ $white-color
+ );
+ }
+ }
+ .add_Duty {
+ display: flex;
+ width: 80px;
+ height: 50px;
+ align-items: center;
+ .input_duty_checkbox {
+ @include custom-checkbox(
+ transparent,
+ $date-color-green-50,
+ $date-color-green,
+ $white-color
+ );
+ }
+ }
+ }
+ .addEvent_reason {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ input {
+ float: right;
+ }
+ select {
+ border-radius: 10px;
+ background-color: $light-Grey-color;
+ border: none;
+ width: 400px;
+ height: 50px;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+ }
+ }
+ .btn_wrap {
+ margin: auto;
+ margin-top: 50px;
+ width: 365px;
+ height: 54px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ text-align: center;
+ font-weight: 700;
+ .close_btn {
+ margin-right: 15px;
+ @include middle-button-outline;
+ &:hover {
+ background-color: $light-Green-BG-color;
+ }
+ }
+ .submit_btn {
+ @include middle-button;
+ }
+ }
+}
diff --git a/src/pages/Main/AddEventModal.tsx b/src/pages/Main/AddEventModal.tsx
new file mode 100644
index 00000000..aa34c2e6
--- /dev/null
+++ b/src/pages/Main/AddEventModal.tsx
@@ -0,0 +1,176 @@
+import React, { useState } from "react";
+import "./AddEventModal.scss";
+import Modal from "react-modal";
+import { postMain } from "../../Api/apis";
+
+interface AddEventModalProps {
+ isOpen: boolean;
+ closeModal: () => void;
+ handleAddEvent: (newEvent: NewEvent) => void;
+}
+
+interface NewEvent {
+ title: string;
+ startDate: string;
+ endDate: string;
+ category: string;
+ reason: string;
+}
+
+const AddEventModal: React.FC = ({
+ isOpen,
+ closeModal,
+ // handleAddEvent,
+}) => {
+ const [events, setEvents] = useState([]); // events 상태 변수 추가
+
+ const [newEvent, setNewEvent] = useState({
+ title: "",
+ category: "",
+ endDate: "",
+ reason: "",
+ startDate: "",
+ });
+
+ const handleInputChange = (
+ event: React.ChangeEvent,
+ ) => {
+ const { name, value } = event.target;
+
+ // name이 'select-reason'인 경우, reason 값을 설정
+ if (name === "select-reason") {
+ setNewEvent((prevEvent) => ({ ...prevEvent, reason: value }));
+ } else {
+ setNewEvent((prevEvent) => ({ ...prevEvent, [name]: value }));
+ }
+ };
+
+ const handleCategoryChange = (event: React.ChangeEvent) => {
+ const value = event.target.value;
+ setNewEvent((prevEvent) => ({
+ ...prevEvent,
+ category: value,
+ // 당직을 선택한 경우, 사유를 "기타 휴가"로 변경하고 select 요소를 해당 옵션으로 고정
+ reason: value === "당직" ? "기타휴가" : prevEvent.reason,
+ }));
+ };
+
+ const handleSubmit = async () => {
+ try {
+ const response = await postMain(
+ newEvent.title,
+ newEvent.category,
+ newEvent.endDate,
+ newEvent.reason,
+ newEvent.startDate,
+ );
+
+ console.log("Event successfully submitted:", response);
+
+ // 새 이벤트를 현재 이벤트 목록에 추가하기
+ setEvents([...events, newEvent]);
+
+ // 이벤트 등록에 성공한 경우, 추가 작업을 수행하거나 사용자에게 알림을 표시할 수 있음
+ } catch (error) {
+ console.error("Error submitting event:", error);
+ // 이벤트 등록에 실패한 경우, 에러 처리 로직을 수행하거나 사용자에게 알림을 표시할 수 있음
+ }
+
+ closeModal();
+ };
+
+ return (
+
+
+
일정 등록
+
+ 제목
+
+
+
+ 시작일
+
+
+
+ 종료일
+
+
+
+
+ 사유
+
+ {newEvent.category === "당직" && (
+ ============= 당직 =============
+ )}
+ {newEvent.category === "연차" && (
+ <>
+ ========== 선택하세요 ===========
+ 연차 유급 휴가
+ 병가 휴가
+ 경조사 휴가
+ 출산 휴가
+ 기타 휴가
+ >
+ )}
+
+
+
+
+ 닫기
+
+
+ 등록
+
+
+
+
+ );
+};
+export default AddEventModal;
diff --git a/src/pages/Main/EventModal.css b/src/pages/Main/EventModal.css
new file mode 100644
index 00000000..8c9cd959
--- /dev/null
+++ b/src/pages/Main/EventModal.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "/src/variables";
+ * | ^^^^^^^^^^^^^^^^
+ * '
+ * EventModal.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"/src/variables\";\a \2502 ^^^^^^^^^^^^^^^^\a \2575 \a EventModal.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/Main/EventModal.scss b/src/pages/Main/EventModal.scss
new file mode 100644
index 00000000..8528514b
--- /dev/null
+++ b/src/pages/Main/EventModal.scss
@@ -0,0 +1,81 @@
+@import "/src/variables";
+@import "src/_mixin.scss";
+
+.ReactModal__Overlay {
+ z-index: 9999;
+ background-color: $main-color-50;
+ position: fixed;
+ inset: 0px;
+}
+
+.detail-custom-modal-content {
+ width: 600px;
+ height: 330px;
+ margin: auto;
+ border-radius: 40px;
+ position: absolute;
+ inset: 40px;
+ border: 1px solid $light-Grey-color;
+ background: $light-Grey-color;
+ overflow: auto;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ outline: none;
+ padding: 20px;
+}
+
+.detail_wrap {
+ margin: auto;
+ margin-top: 33px;
+ width: 519px;
+ height: 225px;
+ border-bottom: 2px solid $green-BG-color;
+ .detail_header {
+ display: flex;
+ align-items: center;
+ font-size: 20px;
+ font-weight: 700;
+ padding-bottom: 20px;
+ padding-left: 70px;
+ border-bottom: 2px solid $green-BG-color;
+ img {
+ width: 25px;
+ margin-right: 5px;
+ }
+ }
+ .detail_user {
+ font-size: 16px;
+ font-weight: 600;
+ padding: 10px 0px;
+ padding-left: 76px;
+ border-bottom: 1px solid $green-BG-color;
+ }
+ .detales {
+ width: 70%;
+ margin: auto;
+ margin-top: 17px;
+ font-size: 16px;
+ line-height: 1.3;
+ font-weight: 400;
+ display: flex;
+ align-items: center;
+ .title {
+ font-size: 14px;
+ font-weight: 600;
+ margin-right: 5px;
+ }
+ .detail_duty {
+ @include tags($white-green, $date-color-green);
+ }
+ .detail_rest {
+ @include tags($white-orange, $point-color);
+ }
+ }
+ .detail_close {
+ top: 8%;
+ right: 6%;
+ position: absolute;
+ color: $green-BG-color;
+ font-size: 2rem;
+ transform: rotate(45deg);
+ }
+}
diff --git a/src/pages/Main/EventModal.tsx b/src/pages/Main/EventModal.tsx
new file mode 100644
index 00000000..ff7de55b
--- /dev/null
+++ b/src/pages/Main/EventModal.tsx
@@ -0,0 +1,96 @@
+import React from "react";
+import Modal from "react-modal";
+import "./EventModal.scss";
+
+interface EventModalProps {
+ isOpen: boolean;
+ closeModal: () => void;
+ event: {
+ extendedProps: any;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ _def: any;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ _instance: any;
+ reason: string;
+ title: any;
+ startDate: string;
+ endDate: string;
+ category: string;
+ name: string;
+ };
+}
+
+const EventModal: React.FC = ({
+ isOpen,
+ closeModal,
+ event,
+}) => {
+ const category = event._def.extendedProps.category;
+ const startDate = new Date(event._instance.range.start);
+ const endDate = new Date(event._instance.range.end);
+
+ const isDutyCategory = category === "당직";
+ const isAnnualLeaveCategory = category === "연차";
+
+ const formatDate = (date: Date) => {
+ const year = date.getFullYear();
+ const month = date.getMonth() + 1;
+ const day = date.getDate();
+ return `${year} / ${month} / ${day}`;
+ };
+
+ const formattedStartDate = formatDate(startDate);
+ const formattedEndDate = formatDate(endDate);
+
+ return (
+
+
+
+
+ 일정 상세
+
+
{event.extendedProps.name}
+
+ 제목 : {event.extendedProps.detail}
+
+
+ 기간 : {formattedStartDate} ~{" "}
+ {formattedEndDate}
+
+
+
종류 :
+ {isDutyCategory && (
+
+
+
+ 당직
+
+
+ )}
+ {isAnnualLeaveCategory && (
+
+
+
+ 연차
+
+
+ )}
+ {isDutyCategory ? null : (
+
{event.extendedProps.reason}
+ )}
+
+
+
+
+
+
+ );
+};
+
+export default EventModal;
diff --git a/src/pages/Main/MainCalendar.css b/src/pages/Main/MainCalendar.css
new file mode 100644
index 00000000..cfa8e676
--- /dev/null
+++ b/src/pages/Main/MainCalendar.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "/src/variables";
+ * | ^^^^^^^^^^^^^^^^
+ * '
+ * MainCalendar.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"/src/variables\";\a \2502 ^^^^^^^^^^^^^^^^\a \2575 \a MainCalendar.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/Main/MainCalendar.scss b/src/pages/Main/MainCalendar.scss
new file mode 100644
index 00000000..b3ffa04b
--- /dev/null
+++ b/src/pages/Main/MainCalendar.scss
@@ -0,0 +1,356 @@
+@import "/src/variables";
+@import "src/_mixin.scss";
+
+.main_page {
+ height: 100vh;
+ width: 100vw;
+ display: flex;
+ align-items: center;
+ .main_wrap {
+ position: relative;
+ margin: auto;
+ width: 1080px;
+ height: 850px;
+ display: flex;
+ border-radius: 24px;
+ background-color: $light-Green-BG-color;
+ box-shadow: 4px 4px 30px $main-color-30;
+ .info_wrap {
+ margin: auto;
+ margin-left: 50px;
+ width: 220px;
+ height: 660px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: start;
+ font-size: 16px;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ .UserInfo {
+ width: 215px;
+ height: 50px;
+ line-height: 1.2;
+ .UserInfo_name {
+ color: $point-color;
+ font-weight: 800;
+ margin-left: 10px;
+ }
+ .UserInfo_icon {
+ color: $point-color;
+ i {
+ margin-left: 15px;
+ margin-bottom: 5px;
+ cursor: pointer;
+ }
+ }
+ .HideInfo {
+ z-index: 2;
+ position: absolute;
+ margin-top: 10px;
+ width: 140px;
+ height: 110px;
+ display: none;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ font-size: 14px;
+ box-shadow: 5px 5px 20px $main-color-30;
+ background-color: $white-color;
+ border-radius: 10px;
+ cursor: pointer;
+ &.visible {
+ display: flex;
+ }
+ li {
+ margin: 0 auto;
+ width: 130px;
+ padding: 13px;
+ li:hover {
+ background-color: $light-Grey-color;
+ }
+ }
+ .my_page {
+ width: 80%;
+ border-bottom: 1px solid $main-color-30;
+ }
+ }
+ }
+ .select_box {
+ position: relative;
+ height: 560px;
+ width: 100%;
+ margin-top: 100px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ .sub_title {
+ font-size: 24px;
+ font-weight: bold;
+ font-family: "montserrat";
+ color: $black-color;
+ margin: 14px 0;
+ }
+ .select_today {
+ width: 220px;
+ .today_date {
+ color: $main-color;
+ font-weight: 500;
+ padding-left: 3px;
+ }
+ }
+ .select_calendar {
+ width: 220px;
+ position: relative;
+ &::before {
+ content: "";
+ display: block;
+ width: 100%;
+ height: 1px;
+ background-color: $green-BG-color;
+ position: absolute;
+ top: -28px;
+ }
+ .select_calendar_options {
+ height: 65px;
+ display: flex;
+ flex-direction: column;
+ font-size: 16px;
+ font-weight: 600;
+ font-family: "noto-sans";
+ .select_calendar_option {
+ height: 30px;
+ display: flex;
+ align-items: center;
+ .input_checkbox {
+ @include custom-checkbox(
+ transparent,
+ $green-BG-color,
+ $sub-color,
+ $white-color
+ );
+ }
+ }
+ }
+ }
+ .select_categories {
+ width: 220px;
+ position: relative;
+ &::before {
+ content: "";
+ display: block;
+ width: 100%;
+ height: 1px;
+ background-color: $green-BG-color;
+ position: absolute;
+ top: -28px;
+ }
+ .select_category_options {
+ height: 65px;
+ display: flex;
+ flex-direction: column;
+ font-size: 16px;
+ font-weight: 600;
+ font-family: "noto-sans", sans-serif;
+ .select_category_option {
+ height: 30px;
+ display: flex;
+ align-items: center;
+ .input_dayoff_checkbox {
+ @include custom-checkbox(
+ transparent,
+ $point-color-50,
+ $point-color,
+ $white-color
+ );
+ }
+ .input_duty_checkbox {
+ @include custom-checkbox(
+ transparent,
+ $date-color-green-50,
+ $date-color-green,
+ $white-color
+ );
+ }
+ .LeaveBox,
+ .dutyBox {
+ position: absolute;
+ right: 0;
+ padding: 5px 15px;
+ background-color: $green-BG-color;
+ color: $main-color;
+ border-radius: 14px;
+ font-size: 14px;
+ font-weight: 800;
+ }
+ }
+ }
+ }
+ .addSchedule_Btn {
+ @include small-button;
+ transition: box-shadow 0.3s ease-in-out;
+ i {
+ margin-left: 10px;
+ transition: rotate 0.2s ease-in-out;
+ }
+ &:hover {
+ box-shadow: 4px 4px 20px $point-color-50;
+ }
+ }
+ }
+ }
+ .calendar_wrap {
+ position: absolute;
+ width: 761px;
+ height: 824px;
+ background-color: $white-color;
+ border-radius: 20px 20px 0 0;
+ bottom: 0;
+ right: 2%;
+ }
+ }
+}
+
+.fc-daygrid-block-event .fc-event-title {
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.fc .fc-toolbar {
+ margin: 0 auto;
+ margin-top: 50px;
+}
+
+.fc-toolbar-title {
+ padding: 0 20px;
+}
+
+.fc-event-time{
+ display: none;
+}
+
+.fc-view-harness-active {
+ margin-left: 40px;
+ margin-right: 40px;
+ margin-top: 20px;
+}
+
+.fc-event-main-frame:hover {
+ background-color: $black-color;
+ cursor: pointer;
+ border-radius: 2px;
+}
+
+
+.fc-daygrid-event-harness{
+ :hover{
+ background-color: black;
+ cursor: pointer;
+ }
+}
+
+// 당일 하루 이벤트
+.fc-event.fc-event-start.fc-event-end.fc-daygrid-event.fc-daygrid-dot-event.fc-daygrid-event{
+ color: rgb(58, 202, 185);
+ border-color: rgb(238, 246, 241);
+ background-color: rgb(238, 246, 241);
+ font-size: 14px;
+ padding: 2px;
+ font-weight: bold;
+
+ :hover{
+ background-color: black;
+ cursor: pointer;
+ }
+
+
+ .fc-event-title{
+ width: 100%;
+ height: 100%;
+ }
+}
+
+
+
+.fc-daygrid-event-dot {
+ display: none;
+}
+
+.fc-dayGridMonth-view .fc-view .fc-daygrid {
+ z-index: 10;
+}
+
+.fc-view-harness .fc-view-harness-active {
+ z-index: 10;
+}
+
+.fc .fc-button-primary {
+ background-color: $white-green;
+ border: none;
+ color: $sub-color;
+}
+
+.fc .fc-toolbar-title {
+ font-size: 36px;
+ font-weight: bold;
+}
+
+.fc-col-header-cell-cushion {
+ text-transform: uppercase;
+ font-size: 16px;
+ font-weight: bold;
+ font-family: "Montserrat";
+ color: $sub-color;
+}
+
+.fc .fc-daygrid-day-top {
+ flex-direction: row;
+}
+
+.fc-scrollgrid-sync-inner {
+ padding-bottom: 10px;
+}
+
+.fc-theme-standard td,
+.fc-theme-standard th {
+ border: none;
+ tr {
+ border-top: 1px solid $sub-color;
+ }
+}
+
+.fc-scrollgrid.fc-scrollgrid-liquid {
+ border: none;
+ border-bottom: 3px solid $sub-color;
+}
+
+.fc-col-header-cell.fc-day {
+ border-bottom: 3px solid $sub-color;
+}
+
+.fc .fc-daygrid-day-number {
+ font-size: 16px;
+ font-weight: bold;
+ font-family: "Montserrat", sans-serif;
+ padding: 10px;
+}
+
+.fc .fc-day-other .fc-daygrid-day-top {
+ color: $green-BG-color;
+ opacity: 1;
+}
+
+.fc-daygrid-day-frame {
+ border-left: 1px solid $green-BG-color;
+}
+
+.fc-scroller-harness-liquid {
+ border-right: 1px solid $green-BG-color;
+}
+
+.fc-day-sat {
+ color: $date-color-blue;
+}
+
+.fc-day-sun {
+ color: $point-color;
+}
\ No newline at end of file
diff --git a/src/pages/Main/MainCalendar.tsx b/src/pages/Main/MainCalendar.tsx
new file mode 100644
index 00000000..0fd3a38f
--- /dev/null
+++ b/src/pages/Main/MainCalendar.tsx
@@ -0,0 +1,266 @@
+import { useState, useEffect } from "react";
+import FullCalendar from "@fullcalendar/react";
+import dayGridPlugin from "@fullcalendar/daygrid";
+import "./MainCalendar.scss";
+import AddEventModal from "./AddEventModal";
+import { useNavigate } from "react-router-dom";
+import EventModal from "./EventModal";
+import Logout from "@/Components/Logout/Logout";
+import { getMainPage, getSilentAxios, getAccessToken } from "../../Api/apis"
+
+const MainCalendar = () => {
+ const [selectedCategories, setSelectedCategories] = useState([
+ "연차",
+ "당직",
+ ]);
+
+ const [events, setEvents] = useState([]); // 빈 배열로 초기화
+ const [userInfoVisible, setUserInfoVisible] = useState(false);
+ const [isAllEventsChecked, setIsAllEventsChecked] = useState(true);
+ const [selectedEvent, setSelectedEvent] = useState(null);
+ const navigate = useNavigate();
+ const [isAddModalOpen, setIsAddModalOpen] = useState(false);
+ const [userName, setUserName] = useState("");
+ const [processedEvents, setProcessedEvents] = useState([]);
+ const [role, setRole] = useState(null);
+
+ useEffect(() => {
+ const fetchMainInfo = async () => {
+ try {
+ const ACCESSTOKEN: string | undefined = getAccessToken();
+
+ const mainInfo = await getMainPage(ACCESSTOKEN ?? "");
+
+ if (mainInfo?.data.annuals && Array.isArray(mainInfo.data.annuals)) {
+ const processedEvents = mainInfo.data.annuals.map((annuals: any) => {
+ const { ...rest } = annuals;
+ const startTime = new Date(annuals.startDate); // 시작 시간을 Date 객체로 변환
+ const endTime = new Date(annuals.endDate); // 종료 시간을 Date 객체로 변환.
+
+ if (startTime.toISOString() === endTime.toISOString()) {
+ endTime.setHours(23, 59, 59); // 해당 날짜의 마지막 시간으로 설정
+ }
+
+ return {
+ ...rest,
+ start: startTime,
+ end: endTime,
+ color: annuals.category === "연차" ? "#FEEFEC" : "#EEF6F1",
+ textColor: annuals.category === "연차" ? "#EA613C" : "#3ACAB9",
+ title: `• ${annuals.name}`,
+ detail: annuals.title,
+ };
+ });
+
+ setEvents(mainInfo.data.annuals);
+ setProcessedEvents(processedEvents);
+ setUserName(mainInfo.data.username);
+ const ROLE = localStorage.getItem("role");
+ setRole(ROLE ?? null);
+ }
+ } catch (error) {
+ console.error("메인페이지 컴포넌트 에러: ", error);
+ const ACCESSTOKEN: string | undefined = getAccessToken();
+ const silentAxios = getSilentAxios(ACCESSTOKEN ?? "");
+ const result = await silentAxios.get("/main");
+ return result.data;
+ }
+ };
+ fetchMainInfo();
+ }, []);
+
+ // 당직, 연차 값을 조건에 따라 색상 변경
+ const toggleUserInfo = () => {
+ setUserInfoVisible(!userInfoVisible);
+ };
+
+ const handleMyPageClick = () => {
+ // 마이페이지 버튼을 클릭한 후에 이동할 경로를 지정
+ if (role === "관리자") {
+ navigate("/admin");
+ } else {
+ navigate("/mypage");
+ }
+ };
+
+ // 카테고리 선택 버튼 클릭 시
+ const handleCategoryChange = (category: string) => {
+ if (category !== "all") {
+ const updatedCategories = selectedCategories.includes(category)
+ ? selectedCategories.filter((c) => c !== category)
+ : [...selectedCategories, category];
+
+ setSelectedCategories(updatedCategories);
+ }
+ };
+
+ // 선택된 카테고리에 따라 이벤트 필터링
+ const filteredEvents =
+ selectedCategories.length === 0
+ ? [] // 빈 배열을 할당하여 아무 이벤트도 표시하지 않도록 설정
+ : processedEvents.filter((event: { category: string }) =>
+ selectedCategories.includes(event.category),
+ );
+ // 연차 리스트 개수
+ const selectedAnnualLeave = events.filter(
+ (event: any) => event.category === "연차",
+ ).length;
+ // 당직 리스트 개수
+ const selectedDuty = events.filter(
+ (event: any) => event.category === "당직",
+ ).length;
+ // 유저 이름 표시
+
+ // 오늘 날짜
+ const today = new Date();
+ const year = today.getFullYear(); // 년도 (예: 2023)
+ const month = today.getMonth() + 1; // 월 (0 ~ 11, 1을 더해서 1 ~ 12로변환)
+ const day = today.getDate(); // 오늘 날짜 (1 ~ 31)
+ const daysOfWeek = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
+ const dayOfWeek = daysOfWeek[today.getDay()]; // 요일 (0 ~ 6)
+ const formattedDate = `${year}. ${month}. ${day}. ${dayOfWeek}`;
+ // headerToolbar 커스터마이즈
+ const headerToolbarOptions = {
+ left: "prev",
+ center: "title",
+ right: "next",
+ };
+
+ const handleEventClick = (eventInfo: any) => {
+ setSelectedEvent(eventInfo.event); // 수정된 부분
+ };
+
+ const handleAllEventsToggle = () => {
+ const newValue = !isAllEventsChecked;
+ setIsAllEventsChecked(newValue);
+
+ if (!newValue) {
+ setSelectedCategories([]);
+ }
+ };
+
+ useEffect(() => {
+ if (isAllEventsChecked) {
+ setSelectedCategories(["연차", "당직"]);
+ } else {
+ setSelectedCategories([]);
+ }
+ }, [isAllEventsChecked]);
+
+ return (
+
+
+
+
+
+
+ {" "}
+ {/* 오늘 날짜 렌더링 */}
+
Today
+ {formattedDate}
+
+
+
Calendar
+
+
+
+ 전체 일정
+
+
+
+
+
setIsAddModalOpen(true)}
+ >
+ 일정 등록하기
+
+
+
+
setIsAddModalOpen(false)}
+ handleAddEvent={function (): void {
+ throw new Error("Function not implemented.");
+ }}
+ />
+
+
+
+ {selectedEvent && (
+ setSelectedEvent(null)} // 모달 닫기 함수
+ event={selectedEvent} // 이벤트 정보 전달
+ />
+ )}
+
+
+
+ );
+};
+export default MainCalendar;
diff --git a/src/pages/Main/main.css.map b/src/pages/Main/main.css.map
new file mode 100644
index 00000000..241a135d
--- /dev/null
+++ b/src/pages/Main/main.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"main.css"}
\ No newline at end of file
diff --git a/src/pages/Main/main.scss b/src/pages/Main/main.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/pages/Main/main.tsx b/src/pages/Main/main.tsx
new file mode 100644
index 00000000..b16e305a
--- /dev/null
+++ b/src/pages/Main/main.tsx
@@ -0,0 +1,10 @@
+
+import MainCalendar from "./MainCalendar.tsx";
+
+export default function Main() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/pages/Mypage/mypage.module.css b/src/pages/Mypage/mypage.module.css
new file mode 100644
index 00000000..bf53b63d
--- /dev/null
+++ b/src/pages/Mypage/mypage.module.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * mypage.module.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a mypage.module.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/Mypage/mypage.module.css.d.ts b/src/pages/Mypage/mypage.module.css.d.ts
new file mode 100644
index 00000000..47e45839
--- /dev/null
+++ b/src/pages/Mypage/mypage.module.css.d.ts
@@ -0,0 +1,2 @@
+declare const classNames: object;
+export = classNames;
diff --git a/src/pages/Mypage/mypage.module.css.map b/src/pages/Mypage/mypage.module.css.map
new file mode 100644
index 00000000..a4590f7a
--- /dev/null
+++ b/src/pages/Mypage/mypage.module.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"mypage.module.css"}
\ No newline at end of file
diff --git a/src/pages/Mypage/mypage.module.scss b/src/pages/Mypage/mypage.module.scss
new file mode 100644
index 00000000..f1de5274
--- /dev/null
+++ b/src/pages/Mypage/mypage.module.scss
@@ -0,0 +1,65 @@
+@import "src/_variables.scss";
+
+.page {
+ top: 0;
+ padding-top: 100px;
+ width: 100%;
+ height: 100vh;
+ font-size: 14px;
+ font-weight: 600;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ background-color: $green-BG-color;
+ .container {
+ margin: auto;
+ position: relative;
+ width: 1080px;
+ height: 950px;
+ border-radius: 40px;
+ background-color: $white-color;
+ box-shadow: 5px 5px 20px $main-color-30;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ .list_box {
+ position: absolute;
+ width: 90%;
+ height: 75%;
+ margin-top: 170px;
+ display: flex;
+ flex-direction: column;
+ align-items: left;
+ // background-color: red;
+ .annual {
+ width: 100%;
+ height: 40%;
+ margin-top: 20px;
+ }
+ .duty {
+ width: 100%;
+ height: 40%;
+ margin-top: 95px;
+ }
+ .title {
+ font-size: 16px;
+ padding-left: 20px;
+ &:last-child {
+ margin-top: 50px;
+ }
+ }
+ }
+ .profile_box {
+ width: 90%;
+ height: 55%;
+ margin-bottom: 100px;
+ display: flex;
+ flex-direction: column;
+ align-items: left;
+ .title {
+ text-align: center;
+ font-size: 22px;
+ font-weight: 800;
+ }
+ }
+ }
+}
diff --git a/src/pages/Mypage/mypage.module.scss.d.ts b/src/pages/Mypage/mypage.module.scss.d.ts
new file mode 100644
index 00000000..f4872c76
--- /dev/null
+++ b/src/pages/Mypage/mypage.module.scss.d.ts
@@ -0,0 +1,10 @@
+declare const classNames: {
+ readonly page: "page";
+ readonly container: "container";
+ readonly list_box: "list_box";
+ readonly annual: "annual";
+ readonly duty: "duty";
+ readonly title: "title";
+ readonly profile_box: "profile_box";
+};
+export = classNames;
diff --git a/src/pages/Mypage/mypage.tsx b/src/pages/Mypage/mypage.tsx
new file mode 100644
index 00000000..d024a0c8
--- /dev/null
+++ b/src/pages/Mypage/mypage.tsx
@@ -0,0 +1,50 @@
+import UserBanner from "@/Components/userBanner/UserBanner.tsx";
+import AnnualList from "@/Components/AnnualList/AnnualList.tsx";
+import Header from "../../Components/Header/Header.tsx";
+import DutyList from "@/Components/DutyList/DutyList.tsx";
+import styles from "./mypage.module.scss";
+import { useState } from "react";
+import Password from "../../Components/Password/password.tsx";
+import useDataQuery from "@/Hooks/useData-Query.tsx";
+
+export default function Mypage() {
+ const [category, setCategory] = useState(false);
+ const { getMyPageData } = useDataQuery();
+ const { isLoading, isError, data: myData } = getMyPageData;
+
+ if (isLoading) {
+ return Loading...
;
+ } else if (isError) {
+ return Error...
;
+ }
+
+ return (
+
+
+
+
+ {!category ? (
+
+ ) : (
+
+ )}
+
+
+ );
+}
diff --git a/src/pages/SignUpPage/SignUpPage.css b/src/pages/SignUpPage/SignUpPage.css
new file mode 100644
index 00000000..2b808dd2
--- /dev/null
+++ b/src/pages/SignUpPage/SignUpPage.css
@@ -0,0 +1,17 @@
+/* Error: Can't find stylesheet to import.
+ * ,
+ * 1 | @import "src/_variables.scss";
+ * | ^^^^^^^^^^^^^^^^^^^^^
+ * '
+ * SignUpPage.scss 1:9 root stylesheet */
+
+body::before {
+ font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
+ "Droid Sans Mono", monospace, monospace;
+ white-space: pre;
+ display: block;
+ padding: 1em;
+ margin-bottom: 1em;
+ border-bottom: 2px solid black;
+ content: "Error: Can't find stylesheet to import.\a \2577 \a 1 \2502 @import \"src/_variables.scss\";\a \2502 ^^^^^^^^^^^^^^^^^^^^^\a \2575 \a SignUpPage.scss 1:9 root stylesheet";
+}
diff --git a/src/pages/SignUpPage/SignUpPage.scss b/src/pages/SignUpPage/SignUpPage.scss
new file mode 100644
index 00000000..6a70cbd6
--- /dev/null
+++ b/src/pages/SignUpPage/SignUpPage.scss
@@ -0,0 +1,117 @@
+@import "src/_variables.scss";
+@import "src/_mixin.scss";
+
+.signup_page {
+ position: relative;
+ height: 100vh;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-family: "Montserrat", "Noto Sans KR", sans-serif;
+ color: $black-color;
+ font-size: 14px;
+ font-weight: 600;
+ .signup_box {
+ width: 600px;
+ height: 780px;
+ margin: auto;
+ padding: 70px 80px;
+ border-radius: 30px;
+ background-color: $white-color;
+ box-shadow: 5px 5px 20px $main-color-30;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ .signup_title {
+ text-align: center;
+ font-size: 22px;
+ font-weight: 800;
+ }
+ .content_wrap {
+ position: relative;
+ margin-top: 20px;
+ width: 100%;
+ .input_title {
+ color: $black-color;
+ font-weight: 800;
+ margin-left: 10px;
+ margin-top: 20px;
+ }
+ .content_box {
+ height: 70px;
+ color: $main-color;
+ .input_box {
+ display: flex;
+ border-radius: 10px;
+ padding: 12px;
+ margin-top: 7px;
+ background-color: $light-Grey-color;
+ &:focus-within {
+ border: 1.5px solid $sub-color;
+ }
+ .input {
+ @include wide-input;
+ }
+ i {
+ margin: auto;
+ }
+ }
+ .error_message {
+ @include error-message;
+ }
+ }
+ .select_date {
+ display: flex;
+ justify-content: space-between;
+ .select-long {
+ @include select-wide-input;
+ }
+ .select-short {
+ @include select-middle-input;
+ }
+ }
+ }
+ .btn_wrap {
+ width: 100%;
+ text-align: center;
+ .signup_btn {
+ @include wide-button;
+ }
+ .login_btn {
+ color: $main-color;
+ font-weight: 700;
+ cursor: pointer;
+ }
+ }
+ }
+ // 회원가입 실패 모달
+ .modal_content {
+ position: relative;
+ top: 10%;
+ height: 85%;
+ padding: 25px 0px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ .modal_title {
+ margin-top: 20px;
+ font-size: 18px;
+ text-align: center;
+ font-weight: 800;
+ color: $black-color;
+ }
+ .modal_text {
+ font-size: 14px;
+ width: 60%;
+ line-height: 1.8;
+ color: $black-color-50;
+ }
+ .modal_closebtn {
+ @include small-button;
+ width: 45%;
+ margin-top: 20px;
+ }
+ }
+}
diff --git a/src/pages/SignUpPage/SignUpPage.tsx b/src/pages/SignUpPage/SignUpPage.tsx
new file mode 100644
index 00000000..89a0aafd
--- /dev/null
+++ b/src/pages/SignUpPage/SignUpPage.tsx
@@ -0,0 +1,300 @@
+import { ChangeEvent, FormEvent, useState } from "react";
+import "./SignUpPage.scss";
+import { useNavigate } from "react-router-dom";
+import { signUp } from "../../Api/apis.ts";
+import Modal from "../../Components/Modal/Modal";
+
+
+export default function SignUpPage() {
+ const navigate = useNavigate();
+ // Input
+ const [email, setEmail] = useState("");
+ const [password, setPassword] = useState("");
+ const [confirmPassword, setConfirmPassword] = useState("");
+ const [name, setName] = useState("");
+ // Input-Check
+ const [isNameValid, setIsNameValid] = useState(false);
+ const [isEmailValid, setIsEmailValid] = useState(false);
+ const [isPasswordValid, setIsPasswordValid] = useState(false);
+ const [showPassword, setShowPassword] = useState(false);
+ // Date
+ const currentYear = new Date().getFullYear();
+ const months = Array.from({ length: 12 }, (_, index) => index + 1); // index가 0부터 시작이니까 +1
+ const days = Array.from({ length: 31 }, (_, index) => index + 1);
+ const [selectedYear, setSelectedYear] = useState("");
+ const [selectedMonth, setSelectedMonth] = useState("");
+ const [selectedDay, setSelectedDay] = useState("");
+ // Modal
+ const [catchError, setCatchError] = useState("");
+ const [showWelcomeModal, setShowWelcomeModal] = useState(false);
+ const [showErrorTextModal, setShowErrorTextModal] = useState(false);
+ // RegEx
+ const koreanRegex = /^[가-힣ㄱ-ㅎㅏ-ㅣ]*$/; // 자음, 모음, 한글
+ const emailRegex = // @ . 포함
+ /^(([^<>()\\[\].,;:\s@"]+(\.[^<>()\\[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i;
+ const passwordRegex = // 영문, 숫자, 특수문자 포함 8자 이상
+ /^(?=.*[a-zA-z])(?=.*[0-9])(?=.*[$`~!@$!%*#^?&\\(\\)\-_=+])(?!.*[^a-zA-z0-9$`~!@$!%*#^?&\\(\\)\-_=+]).{8,20}$/;
+
+ const handleInputChange = (e: ChangeEvent) => {
+ const { name, value } = e.target;
+ switch (name) {
+ case "name":
+ setName(value);
+ setIsNameValid(koreanRegex.test(value));
+ break;
+ case "email":
+ setEmail(value);
+ setIsEmailValid(emailRegex.test(value));
+ break;
+ case "password":
+ setPassword(value);
+ setIsPasswordValid(passwordRegex.test(value));
+ break;
+ case "confirmPassword":
+ setConfirmPassword(value);
+ break;
+ default:
+ break;
+ }
+ };
+
+ const handleSelectChange = (e: ChangeEvent) => {
+ const { name, value } = e.target;
+ switch (name) {
+ case "year":
+ setSelectedYear(value);
+ break;
+ case "month":
+ setSelectedMonth(value);
+ break;
+ case "day":
+ setSelectedDay(value);
+ break;
+ default:
+ break;
+ }
+ };
+
+ const checkEmptyForm = () => {
+ return (
+ email.trim() !== "" &&
+ password.trim() !== "" &&
+ confirmPassword.trim() !== "" &&
+ name.trim() !== "" &&
+ selectedYear !== "" &&
+ selectedMonth !== "" &&
+ selectedDay !== ""
+ );
+ };
+
+ const onSignupSubmit = async (event: FormEvent) => {
+ event.preventDefault();
+ if (!checkEmptyForm()) {
+ alert("입력사항을 모두 채워주세요.");
+ return;
+ }
+ const join = `${selectedYear}-${selectedMonth
+ .toString()
+ .padStart(2, "0")}-${selectedDay.toString().padStart(2, "0")}`;
+ try {
+ const response = await signUp(email, password, name, join);
+ if (response) {
+ setShowWelcomeModal(true);
+ }
+ } catch (error: any) {
+ setCatchError(error?.response?.data?.message);
+ const alertText = catchError;
+ if (alertText !== "") {
+ setShowErrorTextModal(true);
+ }
+ }
+ };
+ // serverErrorMessage
+ const serverErrorMessage = catchError;
+
+ // 패스워드 가시화 토글
+ const handleTogglePassword = () => {
+ setShowPassword((prevShowPassword) => !prevShowPassword);
+ };
+
+ const handleClickModal_Welcom = () => {
+ setShowWelcomeModal(false);
+ };
+ const handleClickModal_Error = () => {
+ setShowErrorTextModal(false);
+ };
+
+ return (
+
+
+
+
+
환영합니다!
+
회원가입에 성공하셨습니다.
+
+ 닫기
+
+
+
+
+
+
회원 가입 정보 확인!
+
{serverErrorMessage}
+
+ 닫기
+
+
+
+
+ );
+}
diff --git a/src/setupProxy.js b/src/setupProxy.js
new file mode 100644
index 00000000..26de1f3e
--- /dev/null
+++ b/src/setupProxy.js
@@ -0,0 +1,22 @@
+import { createProxyMiddleware } from "http-proxy-middleware";
+
+export default function setupProxy(app) {
+ app.use(
+ "/api", // 프록시로 설정할 경로
+ createProxyMiddleware({
+ target: "http://52.78.200.157", // 프록시로 보낼 서버의 주소
+ changeOrigin: true, // 호스트 헤더를 변경하여 프록시 서버에 접속
+ rewrite: (path) => path.replace(/^\/api/, ""),
+ }),
+ );
+}
+
+// proxy: {
+// "/kdt5": {
+// target: "https://chickenlecture.xyz/api",
+// changeOrigin: true,
+// secure: true,
+// rewrite: (path) => path.replace(/^\/kdt5/, ""),
+// },
+// },
+// },
\ No newline at end of file
diff --git a/src/types/adminList.ts b/src/types/adminList.ts
new file mode 100644
index 00000000..2cac09b9
--- /dev/null
+++ b/src/types/adminList.ts
@@ -0,0 +1,3 @@
+// 전체 '연차/당직' 신청 리스트 타입 정의
+// /api/admin/
+
diff --git a/src/types/common.ts b/src/types/common.ts
new file mode 100644
index 00000000..240c49cc
--- /dev/null
+++ b/src/types/common.ts
@@ -0,0 +1,163 @@
+declare module 'types/common' {
+
+interface User {
+ name: string;
+ joinDate: string;
+}
+
+interface JoinUserInputType {
+ id: string;
+ name: string;
+ joinDate: string;
+}
+
+interface LoginOutputType {
+ id: string;
+ name: string;
+ joinDate: string;
+ accessToken: string;
+ refreshToken?: string;
+}
+
+interface UserLoginType {
+ accessToken: string;
+ refreshToken?: string;
+}
+
+interface LoginType {
+ email: string,
+ password: string
+}
+
+type MyDataType = {
+ name: string,
+ annualBalance: number,
+ position: string,
+ annualUsed: string,
+ annualRemain: number,
+ annualHistories: Array<{
+ id: number,
+ title: string,
+ reason: string,
+ startDate: string,
+ endDate: string,
+ status: string,
+ }>;
+ dutyHistories: Array<{
+ id: number,
+ title: string,
+ startDate: string,
+ endDate: string,
+ status: string,
+ }>;
+};
+
+
+interface MyDataAction {
+ addMyData: (myData: MyDataType) => void,
+ addAnnual: (annual: AnnualType) => void,
+ updateAnnual: (annual: AnnualType) => void,
+ deleteAnnual: (id: number) => void
+}
+
+interface AnnualType {
+ id: number;
+ reason: string;
+ title: string;
+ startDate: string;
+ endDate: string;
+ status: string;
+}
+
+
+interface DutyType {
+ id: number;
+ title: string;
+ startDate: string;
+ endDate: string;
+ status: string;
+}
+
+// declare type MyStore = {
+// data: MyDataType[];
+// addMyData: (myDataArray: MyDataType[]) => void;
+// };
+
+interface User {
+ email: string,
+ password: string,
+ name: string,
+ joinDate: string
+}
+
+type UserActions = {
+ addUser: (email: string, name: string, password: string, join: string) => void,
+ deleteUser: (email: string) => void,
+ updateUser: (email: string, name: string, password: string, join: string) => void
+}
+
+interface UserStore {
+ users: User[];
+ addUser: UserActions["addUser"];
+ deleteUser: UserActions["deleteUser"];
+ updateUser: UserActions["updateUser"];
+}
+
+interface CounterType {
+ annualCal: number,
+ count: number,
+ setAnnualCal: (value: number) => void,
+ setCount: (value: number) => void
+}
+
+interface ModalProps {
+ visibility: boolean;
+ toggle: (param: boolean) => void;
+}
+
+interface NewEvent {
+ title: string;
+ startDate: string;
+ endDate: string;
+ category: string;
+ reason: string;
+}
+
+type HandleClickType = (e: React.MouseEvent) => void;
+
+type AddEventModalProps = {
+ isOpen: boolean;
+ closeModal: () => void;
+ handleAddEvent: (newEvent: NewEvent) => void; // NewEvent 타입으로 수정
+};
+
+interface NewEvent {
+ title: string;
+ startDate: string;
+ endDate: string;
+ category: string;
+ reason: string;
+}
+
+interface UpdateType {
+ message(message: any): unknown;
+ id?: number;
+ title: string;
+ startDate: string;
+ endDate: string;
+ reason: string;
+}
+
+interface AdminListsAll {
+ id: number;
+ name: string;
+ category: string;
+ title: string;
+ startDate: string;
+ endDate: string;
+ reason?: string;
+ status: string;
+}
+
+
+}
diff --git a/src/types/preact.d.ts b/src/types/preact.d.ts
new file mode 100644
index 00000000..43a49560
--- /dev/null
+++ b/src/types/preact.d.ts
@@ -0,0 +1,14 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+import preact from "preact";
+
+declare global {
+ namespace TSX {
+ interface HTMLAttributes {
+ styleName?: string;
+ }
+
+ interface SVGAttributes {
+ styleName?: string;
+ }
+ }
+}
diff --git a/src/utils/PrivateRoute.tsx b/src/utils/PrivateRoute.tsx
new file mode 100644
index 00000000..2fb5b9f9
--- /dev/null
+++ b/src/utils/PrivateRoute.tsx
@@ -0,0 +1,31 @@
+import React from "react";
+import { Navigate } from "react-router-dom";
+
+interface PrivateRouteProps {
+ isLogined: boolean;
+ role: string | null;
+ element: React.ReactNode;
+ fallbackPath: string;
+}
+
+const PrivateRoute: React.FC = ({
+ isLogined,
+ role,
+ element,
+ fallbackPath,
+}) => {
+ if (isLogined) {
+ if (role === "일반 회원") {
+ // 일반 회원일때 admin 막기
+ if (location.pathname === "/admin") {
+ return ;
+ }
+ }
+ return {element} ;
+ } else {
+ // 로그인 안했을때
+ return ;
+ }
+};
+
+export default PrivateRoute;
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..c3837333
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,47 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"],
+ "@types/common": ["src/types/common.ts"],
+ "@api/apis": ["src/Api/apis.ts"]
+ },
+ "useDefineForClassFields": true,
+ "lib": [
+ "ES2020",
+ "DOM",
+ "DOM.Iterable"
+ ],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ /* Bundler mode */
+ "moduleResolution": "Bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": [
+ "src",
+ "src/types/common.ts",
+ "src/Api/apis.ts",
+ "src/main.tsx",
+ "vite-env.d.ts",
+ "client",
+ ".exlintrc.cjs",
+ "vite.config.ts"
+ ],
+ "references": [
+ {
+ "path": "./tsconfig.node.json"
+ }
+ ]
+}
+
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 00000000..42872c59
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 00000000..7fb7d7f5
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,25 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react-swc";
+import sassDts from "vite-plugin-sass-dts";
+import mkcert from "vite-plugin-mkcert";
+import path from "path";
+
+const __dirname = path.resolve();
+
+export default defineConfig({
+ plugins: [react(), sassDts(), mkcert()],
+ resolve: {
+ alias: [{ find: "@", replacement: `${__dirname}/src` }],
+ },
+ server: {
+ host: "https://miniproject-team9.p-e.kr/",
+ proxy: {
+ "/mini": {
+ target: "https://miniproject-team9.p-e.kr/",
+ changeOrigin: true,
+ secure: true,
+ rewrite: (path) => path.replace(/^\/mini/, ""),
+ },
+ },
+ },
+});
diff --git "a/\352\270\260\353\212\245\353\252\205\354\204\270.md" "b/\352\270\260\353\212\245\353\252\205\354\204\270.md"
new file mode 100644
index 00000000..2e1d73d2
--- /dev/null
+++ "b/\352\270\260\353\212\245\353\252\205\354\204\270.md"
@@ -0,0 +1,35 @@
+1. 요구 사항
+
+- 메인페이지:
+ - 전체 캘린더 출력
+ - 캘린더에 전체 사용자 / 개인사용자 연차, 당직 리스트 표시하기
+ - 연차 / 당직 클릭시 세부 내역 모달로 표시
+ - 전체 / 개인, 연차, 당직 구분하여 달력에 표시
+ - 개인 연차, 당직 신규 등록 기능
+
+- 마이페이지:
+ - 개인정보 수정 : 비밀번호
+ - 개인의 연차 리스트, 당직 리스트 보이기
+ - 개인 연차, 당직 수정, 삭제 기능
+
+- 관리자페이지:
+ - 전체 연차/ 당직 리스트 보이기
+ - 연차 / 당직 승인, 반려 기능 (삭제?)
+ - 월별, 성명별, 검색기능
+
+- 로그인페이지
+ - email , password 정규식 적용
+
+- 회원가입 페이지
+ - 이름, email, 입사날짜 입력 받아 add
+
+- 인증
+ - 관리자 인증, 로그인시 인증
+ - accessToken, refreshToken 발급,갱신,보관
+
+- 공용 컴포넌트
+ - 날짜 기간 계산
+ - 모달 컴포넌트
+ - 입사일 계산
+ - 연차 계산
+
\ No newline at end of file