diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..d5ad81f5
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,16 @@
+module.exports = {
+ env: { browser: true, es2020: true, node: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ parser: '@typescript-eslint/parser',
+ parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
+ plugins: ['react-refresh'],
+ rules: {
+ 'react-refresh/only-export-components': 'warn',
+ 'no-console': ['warn'],
+ 'no-unused-vars': ['warn'],
+ },
+};
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..3c3629e6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..56644609
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "tabWidth": 2,
+ "useTabs": false,
+ "trailingComma": "all",
+ "semi": true,
+ "printWidth": 80,
+ "singleQuote": true
+}
diff --git a/README.md b/README.md
index d154b304..058929c4 100644
--- a/README.md
+++ b/README.md
@@ -1,230 +1,166 @@
-# KDT5-M6
-๐ค ๊ฒ์์ด ์๋์์ฑ ์ฌ์ดํธ ๋ฐ ์๋นํจํด ๊ธฐ๋ก ์๋น์ค ๊ตฌํ, ํ ํ๋ก์ ํธ
+# 7์กฐ - ๐ต This-is-money (์ด๊ฒ๋จธ๋)
+
+## ๋ฐฐํฌ์ฌ์ดํธ
+
+[์ด๊ฒ๋จธ๋]('https://thisismoney.netlify.app/')
+
+## ํ๋ก์ ํธ ํ์
+
+
+
+
+
+
+ ์ ํฌํ
+
+ |
+
+
+
+ ๋จ๊ธฐํ
+
+ |
+
+
+
+ ์ด์ ํ
+
+ |
+
+
+
+ ์ ์น์
+
+ |
+
+
+
+ ๋ฉ์ธ ์บ๋ฆฐ๋ ํ์ด์ง ์ผ์ ๋ฐ ํ๊ทธ ๋ณ ์ง์ถ ๋ด์ญ ๊น ๊ด๋ฆฌ, ํ๋ก์ ํธ ํ์ฅ
+ |
+
+
+ ์
/์ง์ถ ๋ด์ญ ์์ฑ ๋ชจ๋ฌ ์์
๋ด์ญ ์์ /์ญ์ ๋ชจ๋ฌ ์์
+ ๋ด์ญ ์์ธ ์ ๋ณด ๋ชจ๋ฌ ์์
+ |
+
+
+ detail ์ฐจํธ ์์ฑ ์์
+ detail ๋ฆฌ์คํธ ์ถ๊ฐ ์์
+ ๊ธฐ๊ฐ+์นดํ
๊ณ ๋ฆฌ ํํฐ ๊ธฐ๋ฅ ์์
+ |
+
+ graph ์ฐจํธ ์์ฑ ์์
+ ์ฃผ๊ฐ ๋ถ์ ๊ธฐ๋ฅ ์์
+
+ |
+
+
+
+
+
+
+
+## ๊ธฐ์ ์คํ
+
+### Development
+
+
+
+
+
+
+
+
+
+
+
+
+## Config
+
+
+
+
+
+### Deployment
+
+
+
+### Environment
+
+
+
+
+
+
+
+### Cowork Tools
+
+
+
+
+
+
+
+
+
+
+
+## Commit Convention
+
+- `feat` : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
+- `fix` : ๋ฒ๊ทธ ์์
+- `docs` : ๋ฌธ์ ์์
+- `style` : ์ฝ๋ ํฌ๋งทํ
, ์ธ๋ฏธ์ฝ๋ก ๋๋ฝ, ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ
+- `refactor` : ์ฝ๋ ๋ฆฌํํ ๋ง
+- `test` : ํ
์คํธ ์ฝ๋, ๋ฆฌํํ ๋ง ํ
์คํธ ์ฝ๋ ์ถ๊ฐ
+- `chore` : ๋น๋ ์
๋ฌด ์์ , ํจํค์ง ๋งค๋์ ์์
+
+```
+์์] [feat] ์ง์ถ ๋ด์ญ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ
+```
+
+
+
+
+## Pull Request Convention
+
+1. ์์
๋จ์ ๋ณ ๋ธ๋์น ์์ฑ ํ ์์
+2. ์ต์ ์ธ์ PR Review๋ฅผ ํตํด Merge ์น์ธ
+3. Github Project์ ์ฐ๊ฒฐํ์ฌ issue ๊ด๋ฆฌ
+
+
+
+
+
+## ํ๋ก์ ํธ ๊ตฌ์ฑ
-Calendar & List ๋ฑ ๋ด๊ฐ ์๋นํ ๊ธ์ก ๋ฐ ํ๋ชฉ๋ค์ ๊ธฐ์
ํ๊ณ , ์๋จ์๋ก ์ผ๋ง๋ฅผ ์ผ๋์ง, ์ด๋ค ํญ๋ชฉ์ ๋น์ค์ ๋์๋์ง ๋ฑ์ ๊ธฐ๋กํ๋
+| **๋ฉ์ธ ํ๋ฉด(๋ก๊ทธ์ธ ์ )** | **๋ฉ์ธ ํ๋ฉด(๋ก๊ทธ์ธ ํ)** |
+| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+| | |
+| |
-์น ์๋น์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
+| **๊ฑฐ๋ ๋ด์ญ ์ถ๊ฐ ๋ชจ๋ฌ I** | **๊ฑฐ๋ ๋ด์ญ ์ถ๊ฐ ๋ชจ๋ฌ II** |
+| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+| | |
+| **ํ๊ทธ๋ณ ๊ฒ์ ๋ชจ๋ฌ** | **ํ๊ทธ๋ณ ๊ฒ์ ๊ฒฐ๊ณผ** |
+| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+| | |
+| **ํน์ ์ผ์ ์์ธ ์กฐํ** | **ํน์ ๊ฑฐ๋ ๋ด์ญ ์์ธ ์กฐํ** |
+| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+| | |
-์น/๋ชจ๋ฐ์ผ์น ๊ตฌํ ๋ชจ๋ ๋ฌด๋ฐฉํ๋ฉฐ, ๋ค์ํ ์ฐจํธ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
+| **ํน์ ๊ฑฐ๋ ๋ด์ญ ์์ ๋ชจ๋ฌ** | **ํน์ ๊ฑฐ๋ ๋ด์ญ ์์ ์๋ฃ** |
+| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+| | |
+| **๊ฑฐ๋ ์์ธ ์กฐํ(์๊ฐ I)** | **๊ฑฐ๋ ์์ธ ์กฐํ (์๊ฐ II)** |
+| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+| | |
-react๋ฅผ ํ์๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค.
-๊ณผ์ ์ํ ๋ฐ ๋ฆฌ๋ทฐ ๊ธฐ๊ฐ์ ๋ณ๋ ๊ณต์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์!
-
-
-
-๊ณผ์ ์ํ ๋ฐ ์ ์ถ ๋ฐฉ๋ฒ
-
-KDT๊ธฐ์๋ฒํธ_์ด๋ฆ
-
-
-
-E.g, KDT0_BaeJinHo
-
-ํ์ฌ ์ ์ฅ์๋ฅผ ๋ก์ปฌ์ ํด๋ก (Clone)ํฉ๋๋ค.
-์์ ์ ๋ณธ๋ช
์ผ๋ก ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค.(๊ตฌ๋ถ ๊ฐ๋ฅํ๋๋ก ๋ณธ๋ช
์ ๊ผญ ํ์ค์นผ์ผ์ด์ค๋ก ํ์ํ์ธ์, git branch KDTX_BaeJinHo)
-์์ ์ ๋ณธ๋ช
๋ธ๋์น์์ ๊ณผ์ ๋ฅผ ์ํํฉ๋๋ค.
-๊ณผ์ ์ํ์ด ์๋ฃ๋๋ฉด, ์์ ์ ๋ณธ๋ช
๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ํธ์(Push)ํฉ๋๋ค.(main ๋ธ๋์น์ ํธ์ํ์ง ์๋๋ก ๊ผญ ์ฃผ์ํ์ธ์, git push origin KDTX_BaeJinHo)
-์ ์ฅ์์์ main ๋ธ๋์น๋ฅผ ๋์์ผ๋ก Pull Request ์์ฑํ๋ฉด, ๊ณผ์ ์ ์ถ์ด ์๋ฃ๋ฉ๋๋ค!(E.g, main <== KDTX_BaeJinHo)
-main ํน์ ๋ค๋ฅธ ์ฌ๋์ ๋ธ๋์น๋ก ์ ๋ ๋ณํฉํ์ง ์๋๋ก ์ฃผ์ํ์ธ์!
-Pull Request์์ ๋ณด์ด๋ ์ค๋ช
์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ดํดํ๊ธฐ ์ฝ๋๋ก ๊ผผ๊ผผํ๊ฒ ์์ฑํ์ธ์!
-Pull Request์์ ๊ณผ์ ์ ์ถ ํ ์ ๋ ๋ณํฉ(Merge)ํ์ง ์๋๋ก ์ฃผ์ํ์ธ์!
-๊ณผ์ ์ํ ๋ฐ ์ ์ถ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ๋ฐ๋ก ๋ด๋น ๋ฉํ ๋ ๊ฐ์ฌ์์ ์๊ธฐํ์ธ์!
-
-
-[ํ์ ๊ตฌํ]
-์ง์ถ ๋ด์ญ ์
๋ ฅ ํผ (์ง์ถ ๊ธ์ก, ์ง์ถํญ๋ชฉ, ์ง์ถ ๋ ์ง)
-์ง์ถ ๋ด์ญ ๋ชฉ๋ก(์ผ๋ฐ ๋ฆฌ์คํธํ, ์นผ๋ ๋ ํ ํ๊ธฐ ๊ฐ๋ฅ)
-์ง์ถ ๋ด์ญ ์์ ๋ฐ ์ญ์
-
-[์ ํ ๊ตฌํ]
-์ง์ถ ๋ด์ญ ์นผ๋ ๋๋ก ํ๊ธฐ
-์ง์ถ ๋ด์ญ ์๋ณ ๋ด์ญ, ์ฃผ๋ณ ๋ด์ญ, ์ผ๋ณ ๋ด์ญ ํ๊ธฐ
-์ฐจํธ๋ฅผ ์ด์ฉํด์ ์๋น ๋ด์ญ ํ๊ธฐ ํ๊ธฐ
-๋ชจ๋ฐ์ผ ํํ๋ก ๊ตฌํํ ์ง, ์น ํํ๋ก ๊ตฌํํ ์ง๋ ์์
-
-URL ์์ : http://52.78.195.183:3003/api/expenses
-API
-1. ์๋น ๊ธฐ๋ก ์์ฑ API
-
-description ์ถ๊ฐ (์ ํ)
-
-Request:
-```javascript
-POST /expenses
-Content-Type: application/json
-
-{
- "amount": 100,
- "userId": "user123",
- "category": "food",
- "description": "์ค๋ช
",
- "date": "2023-07-04T10:30:00.000Z"
-}
-```
-Response:
-
-```javascript
-Status: 201 Created
-{
- "message": "Expense created successfully"
-}
-```
-
-
-2. ์๋น ํ๋ชฉ ๋ชฉ๋ก API
-Request:
-```javascript
-GET /categories?userId={userId}
-```
-Response:
-
-Status: 200 OK
-```javascript
-["food", "clothing", "electronics"]
-```
-
-3. ๊ฒ์์ด์ ํด๋นํ๋ ์๋น ํญ๋ชฉ ๋ฐ ๊ธ์ก ์กฐํ API
-
-Request:
-```javascript
-GET /expenses/search?q={keyword}&userId={userId}
-```
-
-Response:
-```javascript
-Status: 200 OK
-[
- {
- "amount": 100,
- "userId": "user123",
- "category": "food",
- "date": "2023-07-04T10:30:00.000Z"
- },
- {
- "amount": 80,
- "userId": "user456",
- "category": "food",
- "date": "2023-07-03T14:20:00.000Z"
- }
-]
-```
-
-4. ์ผ๋ณ, ์ฃผ๋ณ, ์๋ณ ์๋น ์กฐํ API
-Request:
-```javascript
-
-(category๋ ์ ํ)
-GET /expenses/summary?period={period}&userId={userId}&category={category}
-period : daily, weekly, monthly
-```
-Response:
-
-```javascript
-Status: 200 OK
-[
- {
- "_id": "2023-07-04",
- "totalAmount": 180
- },
- {
- "_id": "2023-07-03",
- "totalAmount": 80
- }
-]
-```
-5. ์๋น ๊ธฐ๋ก ์์ API
-Request:
-```javascript
-PUT /expenses/123
-
-Content-Type: application/json
-
-{
- "amount": 150,
- "userId": "user123",
- "category": "food",
- "date": "2023-07-04T10:30:00.000Z"
-}
-```
-Response:
-```javascript
-Status: 200 OK
-{
- "message": "Expense updated successfully"
-}
-```
-
-6. ์๋น ๊ธฐ๋ก ์ญ์ API
-Request:
-```javascript
-DELETE /expenses/123
-```
-Response:
-```javascript
-Status: 200 OK
-{
- "message": "Expense deleted successfully"
-}
-```
-
-7. ์๋น ๊ธฐ๋ก ๋ฌ๋ ฅ ํธ์ถ API
-Request:
-```javascript
-(category๋ ์ ํ)
-GET /expenses/calendar?year=2023&month=7&userId={userId}&category={category}
-```
-Response:
-```javascript
-Status: 200 OK
-{
- "1": [
- {
- "amount": 100,
- "userId": "user123",
- "category": "food",
- "date": "2023-07-01T10:30:00.000Z"
- }
- ],
- "4": [
- {
- "amount": 80,
- "userId": "user456",
- "category": "food",
- "date": "2023-07-04T14:20:00.000Z"
- }
- ]
-}
-
-```
-
-
-
-8. ์นด๋ฐ๊ณ ๋ฆฌ์ ํด๋นํ๋ ์๋น ํญ๋ชฉ ๋ฐ ๊ธ์ก ์กฐํ API(์ ํํ ์นด๋ฐ๊ณ ๋ฆฌ)
-
-Request:
-```javascript
-GET /expenses/category?q={keyword}&userId={userId}
-```
-
-Response:
-```javascript
-Status: 200 OK
-[
- {
- "amount": 100,
- "userId": "user123",
- "category": "food",
- "date": "2023-07-04T10:30:00.000Z"
- },
- {
- "amount": 80,
- "userId": "user456",
- "category": "food",
- "date": "2023-07-03T14:20:00.000Z"
- }
-]
-```
+| **๊ฑฐ๋ ์์ธ ์กฐํ(๊ธฐ๊ฐ๋ณ I)** | **๊ฑฐ๋ ์์ธ ์กฐํ(๊ธฐ๊ฐ๋ณ II)** |
+| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+| | |
+|
diff --git a/custom.d.ts b/custom.d.ts
new file mode 100644
index 00000000..50f2f0aa
--- /dev/null
+++ b/custom.d.ts
@@ -0,0 +1,49 @@
+// ์๋น ๊ธฐ๋ก์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ๋ ์๋ฒ ์์ฒญ ๋ฐ์ดํฐ
+interface ExpenseData {
+ amount: number;
+ userId?: string;
+ category: string;
+ date: string;
+}
+
+// ์๋น ๊ธฐ๋ก์ ์์ฑํ๋ ์์ฒญ์ด ์ฑ๊ณตํ๋ฉด ์๋ฒ์์ ๋ฐํํ๋ ๋ฐ์ดํฐ
+interface ExpenseResponse {
+ message: string;
+}
+
+// ์๋น ๊ฐ๋ฅํ ํ๋ชฉ ๋ชฉ๋ก์ ์์ฒญํ๋ ์๋ฒ ๋ฐ์ดํฐ
+type CategoriesResponse = string[];
+
+// ๊ฒ์์ด์ ํด๋นํ๋ ์๋น ํ๋ชฉ๊ณผ ๊ธ์ก์ ์กฐํํ๋ ์๋ฒ ์์ฒญ ๋ฐ์ดํฐ
+interface SearchResponseItem {
+ _id: string;
+ amount: number;
+ userId: string;
+ category: string;
+ date: string;
+}
+
+type SearchResponse = SearchResponseItem[];
+
+// ์ผ๋ณ, ์ฃผ๋ณ, ์๋ณ ์๋น ์กฐํ๋ฅผ ์ํ ์๋ฒ ์์ฒญ ๋ฐ์ดํฐ
+interface SummaryResponseItem {
+ _id: string;
+ totalAmount: number;
+}
+
+type SummaryResponse = SummaryResponseItem[];
+
+// ์๋น ๊ธฐ๋ก์ ์์ ํ๋ฉด ์๋ฒ๋ก๋ถํฐ ๋ฐํ๋๋ ์๋ต ๋ฐ์ดํฐ
+type UpdateResponse = {
+ message: string;
+};
+
+// ์๋น ๊ธฐ๋ก์ ์ญ์ ํ๋ฉด ์๋ฒ๋ก๋ถํฐ ๋ฐํ๋๋ ์๋ต ๋ฐ์ดํฐ
+type DeleteResponse = {
+ message: string;
+};
+
+// ์๋น ๊ธฐ๋ก์ ๋ํ ์๋ฒ๋ก๋ถํฐ์ ์๋ต ๋ฐ์ดํฐ ํ์
์ ์
+interface CalendarResponse {
+ [day: string]: ExpenseData;
+}
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..61c9c90c
--- /dev/null
+++ b/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ ์ด๊ฒ๋จธ๋
+
+
+
+
+
+
diff --git a/netlify.toml b/netlify.toml
new file mode 100644
index 00000000..93db91a8
--- /dev/null
+++ b/netlify.toml
@@ -0,0 +1,12 @@
+[[redirects]]
+ from = "/*"
+ to = "/index.html"
+ status = 200
+
+[build]
+ command = "npm run build"
+ publish = "dist"
+
+[context.production.environment]
+ TOML_ENV_VAR = "From netlify.toml"
+ REACT_APP_TOML_ENV_VAR = "From netlify.toml (VITE_)"
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..aebd5d60
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5913 @@
+{
+ "name": "react-ts",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "react-ts",
+ "version": "0.0.0",
+ "dependencies": {
+ "antd": "^5.6.4",
+ "chart.js": "^4.3.0",
+ "dayjs": "^1.11.9",
+ "dotenv": "^16.3.1",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-icons": "^4.10.1",
+ "react-router-dom": "^6.14.1",
+ "styled-components": "^6.0.2"
+ },
+ "devDependencies": {
+ "@types/node": "^20.3.3",
+ "@types/react": "^18.0.37",
+ "@types/react-dom": "^18.0.11",
+ "@types/styled-components": "^5.1.26",
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
+ "@typescript-eslint/parser": "^5.59.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "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==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@ant-design/colors": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz",
+ "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==",
+ "dependencies": {
+ "@ctrl/tinycolor": "^3.4.0"
+ }
+ },
+ "node_modules/@ant-design/cssinjs": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.11.1.tgz",
+ "integrity": "sha512-ya0wpkOzBTdQX4u2h6xpluflKPPQuq7LtvJQ9ThDXwu6t67CNFr6SJCEvkuQ9+4rU89VhYMP4IUaTaqYgtsBTQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.1",
+ "@emotion/hash": "^0.8.0",
+ "@emotion/unitless": "^0.7.5",
+ "classnames": "^2.3.1",
+ "csstype": "^3.0.10",
+ "rc-util": "^5.34.1",
+ "stylis": "^4.0.13"
+ },
+ "peerDependencies": {
+ "react": ">=16.0.0",
+ "react-dom": ">=16.0.0"
+ }
+ },
+ "node_modules/@ant-design/cssinjs/node_modules/@emotion/unitless": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
+ },
+ "node_modules/@ant-design/icons": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.1.4.tgz",
+ "integrity": "sha512-YHKL7Jx3bM12OxvtiYDon04BsBT/6LGitYEqar3GljzWaAyMOAD8i/uF1Rsi5Us/YNdWWXBGSvZV2OZWMpJlcA==",
+ "dependencies": {
+ "@ant-design/colors": "^7.0.0",
+ "@ant-design/icons-svg": "^4.2.1",
+ "@babel/runtime": "^7.11.2",
+ "classnames": "^2.2.6",
+ "rc-util": "^5.31.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "peerDependencies": {
+ "react": ">=16.0.0",
+ "react-dom": ">=16.0.0"
+ }
+ },
+ "node_modules/@ant-design/icons-svg": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz",
+ "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
+ },
+ "node_modules/@ant-design/react-slick": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.1.tgz",
+ "integrity": "sha512-ARM0TmpGdDuUVE10NwUCENQlJSInNKo5NiBjL5szu5BxWNEHNwQMcDrlVCqFbkvFLy+2CvywW8Y59QJtC0YDag==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.4",
+ "classnames": "^2.2.5",
+ "json2mq": "^0.2.0",
+ "resize-observer-polyfill": "^1.5.1",
+ "throttle-debounce": "^5.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0"
+ }
+ },
+ "node_modules/@babel/cli": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.6.tgz",
+ "integrity": "sha512-Be3/RfEDmkMRGT1+ru5nTkfcvWz5jDOYg1V9rXqTz2u9Qt96O1ryboGvxVBp7wOnYWDB8DNHIWb6DThrpudfOw==",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "commander": "^4.0.1",
+ "convert-source-map": "^1.1.0",
+ "fs-readdir-recursive": "^1.1.0",
+ "glob": "^7.2.0",
+ "make-dir": "^2.1.0",
+ "slash": "^2.0.0"
+ },
+ "bin": {
+ "babel": "bin/babel.js",
+ "babel-external-helpers": "bin/babel-external-helpers.js"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "optionalDependencies": {
+ "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
+ "chokidar": "^3.4.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/cli/node_modules/slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
+ "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "dependencies": {
+ "@babel/highlight": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
+ "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz",
+ "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helpers": "^7.22.6",
+ "@babel/parser": "^7.22.6",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.6",
+ "@babel/types": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
+ "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
+ "dependencies": {
+ "@babel/types": "^7.22.5",
+ "@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-annotate-as-pure": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+ "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz",
+ "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
+ "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "regexpu-core": "^5.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz",
+ "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==",
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.17.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0-0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "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==",
+ "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==",
+ "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==",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz",
+ "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==",
+ "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==",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
+ "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
+ "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.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+ "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.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==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-wrap-function": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz",
+ "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==",
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "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==",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+ "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "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==",
+ "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==",
+ "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==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz",
+ "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==",
+ "dependencies": {
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz",
+ "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==",
+ "dependencies": {
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.6",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
+ "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz",
+ "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
+ "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
+ "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.13.0"
+ }
+ },
+ "node_modules/@babel/plugin-external-helpers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.22.5.tgz",
+ "integrity": "sha512-ngnNEWxmykPk82mH4ajZT0qTztr3Je6hrMuKAslZVM8G1YZTENJSYwrIGtt6KOtznug3exmAtF4so/nPqJuA4A==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-class-properties": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
+ "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
+ "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
+ "dependencies": {
+ "@babel/compat-data": "^7.20.5",
+ "@babel/helper-compilation-targets": "^7.20.7",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.20.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz",
+ "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz",
+ "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz",
+ "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==",
+ "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-async-generator-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz",
+ "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==",
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz",
+ "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==",
+ "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-block-scoping": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz",
+ "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==",
+ "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-class-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz",
+ "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz",
+ "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz",
+ "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz",
+ "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/template": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz",
+ "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==",
+ "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-dotall-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz",
+ "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz",
+ "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==",
+ "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-dynamic-import": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz",
+ "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz",
+ "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==",
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz",
+ "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
+ "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
+ "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-function-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz",
+ "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==",
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz",
+ "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz",
+ "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==",
+ "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-logical-assignment-operators": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz",
+ "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz",
+ "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==",
+ "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-modules-amd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz",
+ "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz",
+ "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz",
+ "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==",
+ "dependencies": {
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz",
+ "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
+ "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz",
+ "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==",
+ "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-nullish-coalescing-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz",
+ "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz",
+ "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz",
+ "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==",
+ "dependencies": {
+ "@babel/compat-data": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz",
+ "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz",
+ "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-chaining": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz",
+ "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
+ "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
+ "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-private-methods": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz",
+ "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz",
+ "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz",
+ "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==",
+ "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-display-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz",
+ "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==",
+ "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": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz",
+ "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-development": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
+ "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
+ "dependencies": {
+ "@babel/plugin-transform-react-jsx": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.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/plugin-transform-react-pure-annotations": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz",
+ "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz",
+ "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "regenerator-transform": "^0.15.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz",
+ "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==",
+ "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-shorthand-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz",
+ "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==",
+ "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-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz",
+ "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz",
+ "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==",
+ "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-template-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz",
+ "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==",
+ "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-typeof-symbol": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz",
+ "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==",
+ "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-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz",
+ "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-typescript": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz",
+ "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==",
+ "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-unicode-property-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz",
+ "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz",
+ "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz",
+ "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.6.tgz",
+ "integrity": "sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==",
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.22.5",
+ "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.22.5",
+ "@babel/plugin-transform-async-generator-functions": "^7.22.5",
+ "@babel/plugin-transform-async-to-generator": "^7.22.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
+ "@babel/plugin-transform-block-scoping": "^7.22.5",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-class-static-block": "^7.22.5",
+ "@babel/plugin-transform-classes": "^7.22.6",
+ "@babel/plugin-transform-computed-properties": "^7.22.5",
+ "@babel/plugin-transform-destructuring": "^7.22.5",
+ "@babel/plugin-transform-dotall-regex": "^7.22.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.22.5",
+ "@babel/plugin-transform-dynamic-import": "^7.22.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
+ "@babel/plugin-transform-export-namespace-from": "^7.22.5",
+ "@babel/plugin-transform-for-of": "^7.22.5",
+ "@babel/plugin-transform-function-name": "^7.22.5",
+ "@babel/plugin-transform-json-strings": "^7.22.5",
+ "@babel/plugin-transform-literals": "^7.22.5",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.22.5",
+ "@babel/plugin-transform-modules-amd": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+ "@babel/plugin-transform-modules-umd": "^7.22.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.22.5",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
+ "@babel/plugin-transform-numeric-separator": "^7.22.5",
+ "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+ "@babel/plugin-transform-object-super": "^7.22.5",
+ "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.6",
+ "@babel/plugin-transform-parameters": "^7.22.5",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+ "@babel/plugin-transform-property-literals": "^7.22.5",
+ "@babel/plugin-transform-regenerator": "^7.22.5",
+ "@babel/plugin-transform-reserved-words": "^7.22.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.22.5",
+ "@babel/plugin-transform-spread": "^7.22.5",
+ "@babel/plugin-transform-sticky-regex": "^7.22.5",
+ "@babel/plugin-transform-template-literals": "^7.22.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.22.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.22.5",
+ "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "babel-plugin-polyfill-corejs2": "^0.4.3",
+ "babel-plugin-polyfill-corejs3": "^0.8.1",
+ "babel-plugin-polyfill-regenerator": "^0.5.0",
+ "core-js-compat": "^3.31.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-react": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz",
+ "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-transform-react-display-name": "^7.22.5",
+ "@babel/plugin-transform-react-jsx": "^7.22.5",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz",
+ "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-typescript": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz",
+ "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==",
+ "dependencies": {
+ "regenerator-runtime": "^0.13.11"
+ },
+ "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==",
+ "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.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz",
+ "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==",
+ "dependencies": {
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.5",
+ "@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.6",
+ "@babel/types": "^7.22.5",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
+ "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
+ "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/@ctrl/tinycolor": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz",
+ "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz",
+ "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
+ "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
+ "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
+ "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
+ "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
+ "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
+ "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
+ "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
+ "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
+ "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
+ "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
+ "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
+ "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
+ "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
+ "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
+ "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
+ "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
+ "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
+ "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
+ "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+ "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "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.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+ "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
+ "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
+ "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/js": {
+ "version": "8.44.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
+ "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "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.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "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/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.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
+ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "node_modules/@kurkle/color": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
+ "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw=="
+ },
+ "node_modules/@nicolo-ribaudo/chokidar-2": {
+ "version": "2.1.8-no-fsevents.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+ "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
+ "optional": true
+ },
+ "node_modules/@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "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/@rc-component/color-picker": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-1.2.0.tgz",
+ "integrity": "sha512-IitJ6RWGHs7btI1AqzGPrehr5bueWLGDUyMKwDwvFunfSDo/o8g/95kUG55vC5EYLM0ZJ3SDfw45OrW5KAx3oA==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@ctrl/tinycolor": "^3.6.0",
+ "classnames": "^2.2.6",
+ "rc-util": "^5.30.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@rc-component/context": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@rc-component/context/-/context-1.3.0.tgz",
+ "integrity": "sha512-6QdaCJ7Wn5UZLJs15IEfqy4Ru3OaL5ctqpQYWd5rlfV9wwzrzdt6+kgAQZV/qdB0MUPN4nhyBfRembQCIvBf+w==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "rc-util": "^5.27.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@rc-component/mini-decimal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz",
+ "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ }
+ },
+ "node_modules/@rc-component/mutate-observer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@rc-component/mutate-observer/-/mutate-observer-1.0.0.tgz",
+ "integrity": "sha512-okqRJSfNisXdI6CUeOLZC5ukBW/8kir2Ii4PJiKpUt+3+uS7dxwJUMxsUZquxA1rQuL8YcEmKVp/TCnR+yUdZA==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.0",
+ "classnames": "^2.3.2",
+ "rc-util": "^5.24.4"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@rc-component/portal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.1.tgz",
+ "integrity": "sha512-m8w3dFXX0H6UkJ4wtfrSwhe2/6M08uz24HHrF8pWfAXPwA9hwCuTE5per/C86KwNLouRpwFGcr7LfpHaa1F38g==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.0",
+ "classnames": "^2.3.2",
+ "rc-util": "^5.24.4"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@rc-component/tour": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.8.0.tgz",
+ "integrity": "sha512-rrRGioHTLQlGca27G2+lw7QpRb3uuMYCUIJjj31/B44VCJS0P2tqYhOgtzvWQmaLMlWH3ZlpzotkKX13NT4XEA==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.0",
+ "@rc-component/portal": "^1.0.0-9",
+ "@rc-component/trigger": "^1.3.6",
+ "classnames": "^2.3.2",
+ "rc-util": "^5.24.4"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@rc-component/trigger": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-1.14.1.tgz",
+ "integrity": "sha512-P6guwJV0etdP4pPEl3MY6SlqNuAhHfV1b793b/oXE8LTQJDR+kaxYZ0E8tFgZtnDr+FZ4zL/Txg5ri2cT2V3lg==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@rc-component/portal": "^1.1.0",
+ "classnames": "^2.3.2",
+ "rc-align": "^4.0.0",
+ "rc-motion": "^2.0.0",
+ "rc-resize-observer": "^1.3.1",
+ "rc-util": "^5.33.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@remix-run/router": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz",
+ "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.3.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz",
+ "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/@types/react": {
+ "version": "18.2.14",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz",
+ "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==",
+ "dev": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.6",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz",
+ "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.3",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
+ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==",
+ "dev": true
+ },
+ "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/@types/styled-components": {
+ "version": "5.1.26",
+ "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz",
+ "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==",
+ "dev": true,
+ "dependencies": {
+ "@types/hoist-non-react-statics": "*",
+ "@types/react": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw=="
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz",
+ "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.61.0",
+ "@typescript-eslint/type-utils": "5.61.0",
+ "@typescript-eslint/utils": "5.61.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.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz",
+ "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.61.0",
+ "@typescript-eslint/types": "5.61.0",
+ "@typescript-eslint/typescript-estree": "5.61.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.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz",
+ "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.61.0",
+ "@typescript-eslint/visitor-keys": "5.61.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.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz",
+ "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.61.0",
+ "@typescript-eslint/utils": "5.61.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.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz",
+ "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==",
+ "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.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz",
+ "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.61.0",
+ "@typescript-eslint/visitor-keys": "5.61.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.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz",
+ "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==",
+ "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.61.0",
+ "@typescript-eslint/types": "5.61.0",
+ "@typescript-eslint/typescript-estree": "5.61.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.61.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz",
+ "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.61.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.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz",
+ "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.22.5",
+ "@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/acorn": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
+ "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "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/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "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/antd": {
+ "version": "5.6.4",
+ "resolved": "https://registry.npmjs.org/antd/-/antd-5.6.4.tgz",
+ "integrity": "sha512-ttAN5vk6yUybDCe5WFloEb49dyLwyec+FJlvopfZFSkScHX2OBbfpPlCQ50Bpp2u5P/eqN6EQUM4PsE4MPslAA==",
+ "dependencies": {
+ "@ant-design/colors": "^7.0.0",
+ "@ant-design/cssinjs": "^1.10.1",
+ "@ant-design/icons": "^5.1.0",
+ "@ant-design/react-slick": "~1.0.0",
+ "@babel/runtime": "^7.18.3",
+ "@ctrl/tinycolor": "^3.6.0",
+ "@rc-component/color-picker": "~1.2.0",
+ "@rc-component/mutate-observer": "^1.0.0",
+ "@rc-component/tour": "~1.8.0",
+ "@rc-component/trigger": "^1.13.0",
+ "classnames": "^2.2.6",
+ "copy-to-clipboard": "^3.2.0",
+ "dayjs": "^1.11.1",
+ "qrcode.react": "^3.1.0",
+ "rc-cascader": "~3.12.0",
+ "rc-checkbox": "~3.1.0",
+ "rc-collapse": "~3.7.0",
+ "rc-dialog": "~9.1.0",
+ "rc-drawer": "~6.2.0",
+ "rc-dropdown": "~4.1.0",
+ "rc-field-form": "~1.34.0",
+ "rc-image": "~5.17.1",
+ "rc-input": "~1.0.4",
+ "rc-input-number": "~7.4.0",
+ "rc-mentions": "~2.3.0",
+ "rc-menu": "~9.9.2",
+ "rc-motion": "^2.7.3",
+ "rc-notification": "~5.0.4",
+ "rc-pagination": "~3.5.0",
+ "rc-picker": "~3.8.2",
+ "rc-progress": "~3.4.1",
+ "rc-rate": "~2.12.0",
+ "rc-resize-observer": "^1.2.0",
+ "rc-segmented": "~2.2.0",
+ "rc-select": "~14.5.0",
+ "rc-slider": "~10.1.0",
+ "rc-steps": "~6.0.0",
+ "rc-switch": "~4.1.0",
+ "rc-table": "~7.32.1",
+ "rc-tabs": "~12.7.0",
+ "rc-textarea": "~1.2.2",
+ "rc-tooltip": "~6.0.0",
+ "rc-tree": "~5.7.4",
+ "rc-tree-select": "~5.9.0",
+ "rc-upload": "~4.3.0",
+ "rc-util": "^5.32.0",
+ "scroll-into-view-if-needed": "^3.0.3",
+ "throttle-debounce": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ant-design"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "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==",
+ "optional": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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-tree-filter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
+ "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw=="
+ },
+ "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/async-validator": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
+ "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+ },
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz",
+ "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==",
+ "dependencies": {
+ "@babel/compat-data": "^7.17.7",
+ "@babel/helper-define-polyfill-provider": "^0.4.0",
+ "semver": "^6.1.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz",
+ "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==",
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.4.0",
+ "core-js-compat": "^3.30.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz",
+ "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==",
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.4.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-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/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "optional": 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==",
+ "devOptional": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
+ "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+ "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.30001503",
+ "electron-to-chromium": "^1.4.431",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "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/camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001512",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz",
+ "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==",
+ "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/chart.js": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.3.0.tgz",
+ "integrity": "sha512-ynG0E79xGfMaV2xAHdbhwiPLczxnNNnasrmPEXriXsPJGjmhOBYzFVEsB65w2qMDz+CaBJJuJD0inE/ab/h36g==",
+ "dependencies": {
+ "@kurkle/color": "^0.3.0"
+ },
+ "engines": {
+ "pnpm": ">=7"
+ }
+ },
+ "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/"
+ }
+ ],
+ "optional": 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==",
+ "optional": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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/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/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/compute-scroll-into-view": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz",
+ "integrity": "sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A=="
+ },
+ "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/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ },
+ "node_modules/copy-to-clipboard": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
+ "dependencies": {
+ "toggle-selection": "^1.0.6"
+ }
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.31.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz",
+ "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==",
+ "dependencies": {
+ "browserslist": "^4.21.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/css-to-react-native": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
+ "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+ "dependencies": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.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==",
+ "optional": true,
+ "peer": true,
+ "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/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/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/dom-align": {
+ "version": "1.12.4",
+ "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz",
+ "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw=="
+ },
+ "node_modules/dotenv": {
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
+ "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/motdotla/dotenv?sponsor=1"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.450",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz",
+ "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw=="
+ },
+ "node_modules/esbuild": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
+ "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.17.19",
+ "@esbuild/android-arm64": "0.17.19",
+ "@esbuild/android-x64": "0.17.19",
+ "@esbuild/darwin-arm64": "0.17.19",
+ "@esbuild/darwin-x64": "0.17.19",
+ "@esbuild/freebsd-arm64": "0.17.19",
+ "@esbuild/freebsd-x64": "0.17.19",
+ "@esbuild/linux-arm": "0.17.19",
+ "@esbuild/linux-arm64": "0.17.19",
+ "@esbuild/linux-ia32": "0.17.19",
+ "@esbuild/linux-loong64": "0.17.19",
+ "@esbuild/linux-mips64el": "0.17.19",
+ "@esbuild/linux-ppc64": "0.17.19",
+ "@esbuild/linux-riscv64": "0.17.19",
+ "@esbuild/linux-s390x": "0.17.19",
+ "@esbuild/linux-x64": "0.17.19",
+ "@esbuild/netbsd-x64": "0.17.19",
+ "@esbuild/openbsd-x64": "0.17.19",
+ "@esbuild/sunos-x64": "0.17.19",
+ "@esbuild/win32-arm64": "0.17.19",
+ "@esbuild/win32-ia32": "0.17.19",
+ "@esbuild/win32-x64": "0.17.19"
+ }
+ },
+ "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.44.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz",
+ "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.1.0",
+ "@eslint/js": "8.44.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "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.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.6.0",
+ "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",
+ "import-fresh": "^3.0.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",
+ "strip-json-comments": "^3.1.0",
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+ "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.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "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/espree": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz",
+ "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==",
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
+ "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==",
+ "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==",
+ "dev": true
+ },
+ "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/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==",
+ "devOptional": true,
+ "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/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/fs-readdir-recursive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
+ },
+ "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/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==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "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/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "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/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dev": true,
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "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/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==",
+ "optional": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "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/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "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==",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "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/json2mq": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz",
+ "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==",
+ "dependencies": {
+ "string-convert": "^0.2.0"
+ }
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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/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.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+ },
+ "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/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==",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "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/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/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/node-releases": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
+ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ=="
+ },
+ "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==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.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/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/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/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/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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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/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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.24",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz",
+ "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+ "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-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qrcode.react": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-3.1.0.tgz",
+ "integrity": "sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "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/rc-align": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz",
+ "integrity": "sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "2.x",
+ "dom-align": "^1.7.0",
+ "rc-util": "^5.26.0",
+ "resize-observer-polyfill": "^1.5.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-cascader": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.12.1.tgz",
+ "integrity": "sha512-g6In2y6eudHXS/Fs9dKFhp9acvHRUPqem/7xReR9ng8M1pNAE137uGBOt9WNpgsKT/cDGudXZQVehaBwAKg6hQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "array-tree-filter": "^2.1.0",
+ "classnames": "^2.3.1",
+ "rc-select": "~14.5.0",
+ "rc-tree": "~5.7.0",
+ "rc-util": "^5.6.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-checkbox": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.1.0.tgz",
+ "integrity": "sha512-PAwpJFnBa3Ei+5pyqMMXdcKYKNBMS+TvSDiLdDnARnMJHC8ESxwPfm4Ao1gJiKtWLdmGfigascnCpwrHFgoOBQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "^2.3.2",
+ "rc-util": "^5.25.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-collapse": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.7.0.tgz",
+ "integrity": "sha512-Cir1c89cENiK5wryd9ut+XltrIfx/+KH1/63uJIVjuXkgfrIvIy6W1fYGgEYtttbHW2fEfxg1s31W+Vm98fSRw==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "2.x",
+ "rc-motion": "^2.3.4",
+ "rc-util": "^5.27.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-dialog": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.1.0.tgz",
+ "integrity": "sha512-5ry+JABAWEbaKyYsmITtrJbZbJys8CtMyzV8Xn4LYuXMeUx5XVHNyJRoqLFE4AzBuXXzOWeaC49cg+XkxK6kHA==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/portal": "^1.0.0-8",
+ "classnames": "^2.2.6",
+ "rc-motion": "^2.3.0",
+ "rc-util": "^5.21.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-drawer": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.2.0.tgz",
+ "integrity": "sha512-spPkZ3WvP0U0vy5dyzSwlUJ/+vLFtjP/cTwSwejhQRoDBaexSZHsBhELoCZcEggI7LQ7typmtG30lAue2HEhvA==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/portal": "^1.1.1",
+ "classnames": "^2.2.6",
+ "rc-motion": "^2.6.1",
+ "rc-util": "^5.21.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-dropdown": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.1.0.tgz",
+ "integrity": "sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@rc-component/trigger": "^1.7.0",
+ "classnames": "^2.2.6",
+ "rc-util": "^5.17.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.11.0",
+ "react-dom": ">=16.11.0"
+ }
+ },
+ "node_modules/rc-field-form": {
+ "version": "1.34.1",
+ "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.34.1.tgz",
+ "integrity": "sha512-oohdrjUHYWzY4H5EOw/9xk324oatZOKiCfo3FwnK9G/LswoqflWoxeaAGMkjI5Ug4YxSq80fehoJjVYApSheYA==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.0",
+ "async-validator": "^4.1.0",
+ "rc-util": "^5.32.2"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-image": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.17.1.tgz",
+ "integrity": "sha512-oR4eviLyQxd/5A7pn843w2/Z1wuBA27L2lS4agq0sjl2z97ssNIVEzRzgwgB0ZxVZG/qSu9Glit2Zgzb/n+blQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "@rc-component/portal": "^1.0.2",
+ "classnames": "^2.2.6",
+ "rc-dialog": "~9.1.0",
+ "rc-motion": "^2.6.2",
+ "rc-util": "^5.0.6"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-input": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.0.4.tgz",
+ "integrity": "sha512-clY4oneVHRtKHYf/HCxT/MO+4BGzCIywSNLosXWOm7fcQAS0jQW7n0an8Raa8JMB8kpxc8m28p7SNwFZmlMj6g==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.1",
+ "classnames": "^2.2.1",
+ "rc-util": "^5.18.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.0.0",
+ "react-dom": ">=16.0.0"
+ }
+ },
+ "node_modules/rc-input-number": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.4.2.tgz",
+ "integrity": "sha512-yGturTw7WGP+M1GbJ+UTAO7L4buxeW6oilhL9Sq3DezsRS8/9qec4UiXUbeoiX9bzvRXH11JvgskBtxSp4YSNg==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/mini-decimal": "^1.0.1",
+ "classnames": "^2.2.5",
+ "rc-util": "^5.28.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-mentions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.3.0.tgz",
+ "integrity": "sha512-gNpsSKsBHSXvyAA1ZowVTqXSWUIw7+OI9wmjL87KcYURvtm9nDo8R0KtOc2f1PT7q9McUpFzhm6AvQdIly0aRA==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/trigger": "^1.5.0",
+ "classnames": "^2.2.6",
+ "rc-input": "~1.0.0",
+ "rc-menu": "~9.9.0",
+ "rc-textarea": "~1.2.0",
+ "rc-util": "^5.22.5"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-menu": {
+ "version": "9.9.2",
+ "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.9.2.tgz",
+ "integrity": "sha512-kVJwaQn5VUu6DIddxd/jz3QupTPg0tNYq+mpFP8wYsRF5JgzPA9fPVw+CfwlTPwA1w7gzEY42S8pj6M3uev5CQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/trigger": "^1.6.2",
+ "classnames": "2.x",
+ "rc-motion": "^2.4.3",
+ "rc-overflow": "^1.2.8",
+ "rc-util": "^5.27.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-motion": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.7.3.tgz",
+ "integrity": "sha512-2xUvo8yGHdOHeQbdI8BtBsCIrWKchEmFEIskf0nmHtJsou+meLd/JE+vnvSX2JxcBrJtXY2LuBpxAOxrbY/wMQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.1",
+ "classnames": "^2.2.1",
+ "rc-util": "^5.21.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-notification": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.0.4.tgz",
+ "integrity": "sha512-3535oellIRlt1LspERfK8yvCqb8Gio3R02rULciaSc1xe3H7ArTU/khlUTv1ddGzua4HhmF4D4Rwz/+mBxETvg==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "2.x",
+ "rc-motion": "^2.6.0",
+ "rc-util": "^5.20.1"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-overflow": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.1.tgz",
+ "integrity": "sha512-RY0nVBlfP9CkxrpgaLlGzkSoh9JhjJLu6Icqs9E7CW6Ewh9s0peF9OHIex4OhfoPsR92LR0fN6BlCY9Z4VoUtA==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.1",
+ "classnames": "^2.2.1",
+ "rc-resize-observer": "^1.0.0",
+ "rc-util": "^5.19.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-pagination": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.5.0.tgz",
+ "integrity": "sha512-lUBVtVVUn7gGsq4mTyVpcZQr+AMcljbMiL/HcCmSdFrcsK0iZVKwwbXDxhz2IV0JXUs9Hzepr5sQFaF+9ad/pQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "^2.2.1",
+ "rc-util": "^5.32.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-picker": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-3.8.2.tgz",
+ "integrity": "sha512-q6jnMwBoOi6tFA4xohrKIhzq80Fc3dH0Kiw5VRx6Tf1db7y27PBFCLwu6f66niXidZKD8F4R0M9VIui/jkL4cg==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/trigger": "^1.5.0",
+ "classnames": "^2.2.1",
+ "rc-util": "^5.30.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "date-fns": ">= 2.x",
+ "dayjs": ">= 1.x",
+ "luxon": ">= 3.x",
+ "moment": ">= 2.x",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ },
+ "peerDependenciesMeta": {
+ "date-fns": {
+ "optional": true
+ },
+ "dayjs": {
+ "optional": true
+ },
+ "luxon": {
+ "optional": true
+ },
+ "moment": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/rc-progress": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.2.tgz",
+ "integrity": "sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "^2.2.6",
+ "rc-util": "^5.16.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-rate": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.12.0.tgz",
+ "integrity": "sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "^2.2.5",
+ "rc-util": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-resize-observer": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz",
+ "integrity": "sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.7",
+ "classnames": "^2.2.1",
+ "rc-util": "^5.27.0",
+ "resize-observer-polyfill": "^1.5.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-segmented": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.2.2.tgz",
+ "integrity": "sha512-Mq52M96QdHMsNdE/042ibT5vkcGcD5jxKp7HgPC2SRofpia99P5fkfHy1pEaajLMF/kj0+2Lkq1UZRvqzo9mSA==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.1",
+ "classnames": "^2.2.1",
+ "rc-motion": "^2.4.4",
+ "rc-util": "^5.17.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.0.0",
+ "react-dom": ">=16.0.0"
+ }
+ },
+ "node_modules/rc-select": {
+ "version": "14.5.2",
+ "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.5.2.tgz",
+ "integrity": "sha512-Np/lDHvxCnVhVsheQjSV1I/OMJTWJf1n10wq8q1AGy3ytyYLfjNpi6uaz/pmjsbbiSddSWzJnNZCli9LmgBZsA==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/trigger": "^1.5.0",
+ "classnames": "2.x",
+ "rc-motion": "^2.0.1",
+ "rc-overflow": "^1.0.0",
+ "rc-util": "^5.16.1",
+ "rc-virtual-list": "^3.5.2"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-dom": "*"
+ }
+ },
+ "node_modules/rc-slider": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.1.1.tgz",
+ "integrity": "sha512-gn8oXazZISEhnmRinI89Z/JD/joAaM35jp+gDtIVSTD/JJMCCBqThqLk1SVJmvtfeiEF/kKaFY0+qt4SDHFUDw==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "^2.2.5",
+ "rc-util": "^5.27.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-steps": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-6.0.0.tgz",
+ "integrity": "sha512-+KfMZIty40mYCQSDvYbZ1jwnuObLauTiIskT1hL4FFOBHP6ZOr8LK0m143yD3kEN5XKHSEX1DIwCj3AYZpoeNQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.16.7",
+ "classnames": "^2.2.3",
+ "rc-util": "^5.16.1"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-switch": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-4.1.0.tgz",
+ "integrity": "sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "classnames": "^2.2.1",
+ "rc-util": "^5.30.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-table": {
+ "version": "7.32.1",
+ "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.32.1.tgz",
+ "integrity": "sha512-fHMQteKMocUC9I9Vex3eBLH7QsiaMR/qtzh3B1Ty2PoNGwVTwVdDFyRL05zch+JU3KnNNczgQeVvtf/p//gdrQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "@rc-component/context": "^1.3.0",
+ "classnames": "^2.2.5",
+ "rc-resize-observer": "^1.1.0",
+ "rc-util": "^5.27.1"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-tabs": {
+ "version": "12.7.1",
+ "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.7.1.tgz",
+ "integrity": "sha512-NrltXEYIyiDP5JFu85NQwc9eR+7e50r/6MNXYDyG1EMIFNc7BgDppzdpnD3nW4NHYWw5wLIThCURGib48OCTBg==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "classnames": "2.x",
+ "rc-dropdown": "~4.1.0",
+ "rc-menu": "~9.9.0",
+ "rc-motion": "^2.6.2",
+ "rc-resize-observer": "^1.0.0",
+ "rc-util": "^5.16.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-textarea": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.2.3.tgz",
+ "integrity": "sha512-YvN8IskIVBRRzcS4deT0VAMim31+T3IoVX4yoCJ+b/iVCvw7yf0usR7x8OaHiUOUoURKcn/3lfGjmtzplcy99g==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "^2.2.1",
+ "rc-input": "~1.0.4",
+ "rc-resize-observer": "^1.0.0",
+ "rc-util": "^5.27.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-tooltip": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.0.1.tgz",
+ "integrity": "sha512-MdvPlsD1fDSxKp9+HjXrc/CxLmA/s11QYIh1R7aExxfodKP7CZA++DG1AjrW80F8IUdHYcR43HAm0Y2BYPelHA==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "@rc-component/trigger": "^1.0.4",
+ "classnames": "^2.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-tree": {
+ "version": "5.7.8",
+ "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.7.8.tgz",
+ "integrity": "sha512-Ei+wID0SWA8BNCdEMO6UMblHs/jnSRDqz7csWXZ0o5VB08iDhxVnF+VHYTGDsJ9pARJ2xEXfjyTksOkEx5R4RQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "2.x",
+ "rc-motion": "^2.0.1",
+ "rc-util": "^5.16.1",
+ "rc-virtual-list": "^3.5.1"
+ },
+ "engines": {
+ "node": ">=10.x"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-dom": "*"
+ }
+ },
+ "node_modules/rc-tree-select": {
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.9.0.tgz",
+ "integrity": "sha512-oh3blESzLfLCBPSiVDtZ2irzrWWZUMeHvnSwRvFo79br8Z+K/1OhXhXBZmROvfKwaH8YUugAQy8B2j5EGQbdyA==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "2.x",
+ "rc-select": "~14.5.0",
+ "rc-tree": "~5.7.0",
+ "rc-util": "^5.16.1"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-dom": "*"
+ }
+ },
+ "node_modules/rc-upload": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.4.tgz",
+ "integrity": "sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "classnames": "^2.2.5",
+ "rc-util": "^5.2.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-util": {
+ "version": "5.34.1",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.34.1.tgz",
+ "integrity": "sha512-SqiUT8Ssgh5C+hu4y887xwCrMNcxLm6ScOo8AFlWYYF3z9uNNiPpwwSjvicqOlWd79rNw1g44rnP7tz9MrO1ZQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "react-is": "^16.12.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/rc-virtual-list": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.5.2.tgz",
+ "integrity": "sha512-sE2G9hTPjVmatQni8OP2Kx33+Oth6DMKm67OblBBmgMBJDJQOOFpSGH7KZ6Pm85rrI2IGxDRXZCr0QhYOH2pfQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.0",
+ "classnames": "^2.2.6",
+ "rc-resize-observer": "^1.0.0",
+ "rc-util": "^5.15.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-dom": "*"
+ }
+ },
+ "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-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-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.14.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz",
+ "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==",
+ "dependencies": {
+ "@remix-run/router": "1.7.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz",
+ "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==",
+ "dependencies": {
+ "@remix-run/router": "1.7.1",
+ "react-router": "6.14.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "optional": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+ "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ },
+ "node_modules/regenerator-transform": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "node_modules/regexpu-core": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+ "dependencies": {
+ "@babel/regjsgen": "^0.8.0",
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsparser": "^0.9.1",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsparser": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
+ "node_modules/resize-observer-polyfill": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dependencies": {
+ "is-core-module": "^2.11.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-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/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==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.26.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.0.tgz",
+ "integrity": "sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==",
+ "dev": true,
+ "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/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/scroll-into-view-if-needed": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.0.10.tgz",
+ "integrity": "sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==",
+ "dependencies": {
+ "compute-scroll-into-view": "^3.0.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
+ "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "node_modules/shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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/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/string-convert": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz",
+ "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A=="
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "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/styled-components": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.0.2.tgz",
+ "integrity": "sha512-CRWTuYme0W4zVqzXpODByyocgVbBpRoXmaEgPGb67dvweV1igp7Ik4Z5C9e83wZ2l2hPg/XKV7cjuNxhRlC7Mg==",
+ "dependencies": {
+ "@babel/cli": "^7.21.0",
+ "@babel/core": "^7.21.0",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/plugin-external-helpers": "^7.18.6",
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
+ "@babel/plugin-proposal-object-rest-spread": "^7.20.7",
+ "@babel/preset-env": "^7.20.2",
+ "@babel/preset-react": "^7.18.6",
+ "@babel/preset-typescript": "^7.21.0",
+ "@babel/traverse": "^7.21.2",
+ "@emotion/is-prop-valid": "^1.2.1",
+ "@emotion/unitless": "^0.8.0",
+ "@types/stylis": "^4.0.2",
+ "css-to-react-native": "^3.2.0",
+ "csstype": "^3.1.2",
+ "postcss": "^8.4.23",
+ "shallowequal": "^1.1.0",
+ "stylis": "^4.3.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/styled-components"
+ },
+ "peerDependencies": {
+ "babel-plugin-styled-components": ">= 2",
+ "react": ">= 16.8.0",
+ "react-dom": ">= 16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-styled-components": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/styled-components/node_modules/tslib": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
+ "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA=="
+ },
+ "node_modules/stylis": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz",
+ "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ=="
+ },
+ "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/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/throttle-debounce": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
+ "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==",
+ "engines": {
+ "node": ">=12.22"
+ }
+ },
+ "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==",
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toggle-selection": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+ "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="
+ },
+ "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.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/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/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "engines": {
+ "node": ">=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==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "4.3.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
+ "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.17.5",
+ "postcss": "^8.4.23",
+ "rollup": "^3.21.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "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"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..9b66a862
--- /dev/null
+++ b/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "react-ts",
+ "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": {
+ "antd": "^5.6.4",
+ "chart.js": "^4.3.0",
+ "dayjs": "^1.11.9",
+ "dotenv": "^16.3.1",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-icons": "^4.10.1",
+ "react-router-dom": "^6.14.1",
+ "styled-components": "^6.0.2"
+ },
+ "devDependencies": {
+ "@types/node": "^20.3.3",
+ "@types/react": "^18.0.37",
+ "@types/react-dom": "^18.0.11",
+ "@types/styled-components": "^5.1.26",
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
+ "@typescript-eslint/parser": "^5.59.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "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/favicon.ico b/public/favicon.ico
new file mode 100644
index 00000000..96ac126b
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/src/App.css b/src/App.css
new file mode 100644
index 00000000..7c2372e9
--- /dev/null
+++ b/src/App.css
@@ -0,0 +1,19 @@
+.ant-picker-panels > *:first-child button.ant-picker-header-next-btn {
+ visibility: visible !important;
+}
+
+.ant-picker-panels > *:first-child button.ant-picker-header-super-next-btn {
+ visibility: visible !important;
+}
+
+.ant-picker-panels > *:last-child {
+ display: none !important;
+}
+
+.ant-picker-panel-container, .ant-picker-footer {
+ width: 280px !important;
+}
+
+.ant-picker-footer-extra > div {
+ flex-wrap: wrap !important;
+}
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 00000000..d2a29925
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,28 @@
+import Graph from '@/components/graph/Graph';
+import Layout from '@/components/common/Layout';
+import NotFound from '@/components/common/NotFound';
+import Detail from '@/components/detail/Detail';
+import { BrowserRouter, Routes, Route } from 'react-router-dom';
+import Home from '@/components/Home/Home';
+import '@/App.css'
+
+const App = () => {
+ return (
+
+
+
+ {/* }> */}
+ }>
+ }>
+ }>
+ {/* ์๋จ์ ์์นํ๋ ๋ผ์ฐํธ๋ค์ ๊ท์น์ ๋ชจ๋ ํ์ธ, ์ผ์นํ๋ ๋ผ์ฐํธ๊ฐ ์๋๊ฒฝ์ฐ ์ฒ๋ฆฌ */}
+ } />
+ }>
+
+
+
+
+ );
+};
+
+export default App;
diff --git a/src/components/Home/Calendar.tsx b/src/components/Home/Calendar.tsx
new file mode 100644
index 00000000..ff50502f
--- /dev/null
+++ b/src/components/Home/Calendar.tsx
@@ -0,0 +1,245 @@
+import styled from 'styled-components';
+import { theme } from '@/styles/theme';
+import { useEffect, useState } from 'react';
+import { expenseSummary } from '@/lib/api/Api';
+import Header from '@/components/common/Header';
+import CurrentMonth from '@/components/Home/CurrentMonth';
+import WeeklyExpenses from '@/components/Home/WeeklyExpenses';
+import NotCurrentMonth from '@/components/Home/NotCurrentMonth';
+import { SelectedDailyProps } from '@/components/Home/ExpensesList';
+
+export interface DayProps {
+ $isCurrentMonth?: boolean;
+ $day?: number;
+}
+interface GetDaysProps {
+ year: number;
+ month: number;
+}
+
+interface CalendarProps {
+ // eslint-disable-next-line no-unused-vars
+ onDayClick: (year: number, month: number, currentDay: number) => void;
+ setTag: React.Dispatch>;
+ monthlyList: SelectedDailyProps[];
+ currentMonth: number;
+ setCurrentMonth: React.Dispatch>;
+ currentYear: number;
+ setCurrentYear: React.Dispatch>;
+ onItemUpdated: () => void;
+}
+
+interface WeeklyListProps {
+ _id: string;
+ totalAmount: number;
+}
+
+const TheCalendar = ({
+ setTag,
+ onDayClick,
+ monthlyList,
+ currentMonth,
+ setCurrentMonth,
+ currentYear,
+ setCurrentYear,
+ onItemUpdated,
+}: CalendarProps) => {
+ const [currentDate, setCurrentDate] = useState(new Date());
+ const [weeklyList, setWeeklyList] = useState([]);
+ const weekDate = ['์ผ', '์', 'ํ', '์', '๋ชฉ', '๊ธ', 'ํ '];
+
+ // ๋ง์ง๋ง ๋ ์ง ๋ฐํ ํจ์
+ const getLastDate = ({ year, month }: GetDaysProps) => {
+ // month index๋ 0๋ถํฐ
+ // ๊ตฌํ๊ณ ์ ํ๋ ์ฐ์์ ๋ง์ง๋ง ๋ ์ง ๋ฐํ (8์ 0์ผ => 7์ 31์ผ)
+ return new Date(year, month + 1, 0).getDate();
+ };
+
+ // ์ฒซ ์์ผ ๋ฐํ ํจ์ (0: ์์์ผ ~ 6: ์ผ์์ผ)
+ const getFirstDayIdx = ({ year, month }: GetDaysProps) => {
+ return new Date(year, month, 1).getDay();
+ };
+ // ์ด์ Month๋ก ์ด๋ํ๋ ํด๋ฆญ ์ด๋ฒคํธ
+ const handlePrevMonth = () => {
+ let prevMonth: Date;
+ // ํ์ฌ 1์์์ prevํ ๋
+ if (currentMonth === 1) {
+ // ์๋
12์ 1์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
+ prevMonth = new Date(currentYear - 1, 11);
+ // ์ฐ๋๋ฅผ ์๋
์ฐ๋๋ก ๋ฐ๊ฟ
+ setCurrentYear(currentYear - 1);
+ // 1์ -> 12์์ด ์๋, ์ผ๋ฐ์ ์ผ๋ก 1๊ฐ์์ฉ ์ค์ผ ๋
+ } else {
+ // prevMonth์ ํ์ฌ๋
๋ ์ด์ ์ ์ ์ฅ
+ prevMonth = new Date(currentYear, currentMonth - 2);
+ }
+ //
+ setCurrentDate(prevMonth); // ์ด์ ์ 1์ผ๋ก ์ ์ฅ
+ setCurrentMonth(prevMonth.getMonth() + 1);
+ };
+
+ // ๋ค์ Month๋ก ์ด๋ํ๋ ํด๋ฆญ ์ด๋ฒคํธ
+ const handleNextMonth = () => {
+ let nextMonth: Date;
+ // ํ์ฌ 12์์์ nextํ ๋
+ if (currentMonth === 12) {
+ // ๋ด๋
1์ 1์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
+ nextMonth = new Date(currentYear + 1, 0);
+ // ์ฐ๋๋ฅผ ๋ด๋
์ฐ๋๋ก ๋ฐ๊ฟ
+ setCurrentYear(currentYear + 1);
+ // 12์ -> 1์์ด ์๋, ์ผ๋ฐ์ ์ผ๋ก 1๊ฐ์์ฉ ์ค์ผ ๋
+ } else {
+ // nextMonth์ ํ์ฌ๋
๋ ๋ด๋
์ ์ ์ฅ
+ nextMonth = new Date(currentYear, currentMonth);
+ }
+ //
+ setCurrentDate(nextMonth); // ์ด์ ์ 1์ผ๋ก ์ ์ฅ
+ setCurrentMonth(nextMonth.getMonth() + 1);
+ };
+
+ const year = currentDate.getFullYear();
+ const month = currentDate.getMonth();
+ const lastDate = getLastDate({ year, month }); // ํด๋น ์์ ๋ง์ง๋ง ๋ ์ง
+ const firstDayIdx = getFirstDayIdx({ year, month }); // ํด๋น ์์ ์ฒซ ๋ฒ์งธ ์์ผ ์ธ๋ฑ์ค
+
+ const prevMonth = new Date(year, month - 1); // ์ด์ ๋ฌ
+ const prevMonthLastDate = getLastDate({
+ year: prevMonth.getFullYear(), // ์ด์ month์ ์ฐ๋(2023)
+ month: prevMonth.getMonth(), // ์ด์ month index (5)
+ });
+
+ const nextMonth = new Date(year, month + 1);
+ const nextMonthFirstIdx = getFirstDayIdx({
+ year: nextMonth.getFullYear(), // ์ดํ month์ ์ฐ๋(2023)
+ month: nextMonth.getMonth(), // ์ดํ month index (7)
+ });
+
+ const calendar = []; // ํ๋ฉด์ ๋ฟ๋ฆด ๋ฌ๋ ฅ ์์๋ค์ ๋ด๋ Array
+ let currentDay = 1; // 1์ผ๋ถํฐ ์ฑ์๋๊ฐ
+
+ // week 0์ฃผ์ฐจ๋ถํฐ 5์ฃผ์ฐจ๊น์ง
+ for (let week = 0; week <= 5; week++) {
+ // ํ ์ฃผ๋ฅผ ๋ด๋ ๋ฐฐ์ด ์ ์ธ
+ const weekDays = [];
+
+ // day ํ ์ฃผ์ 1์ผ๋ถํฐ 7์ผ๊น์ง
+ for (let day = 1; day <= 7; day++) {
+ // ๊ตฌํ๊ณ ์ ํ๋ ๋ฌ๋ ฅ ์ธ์ ๋ ์ง ํ๊ธฐ
+ if ((week === 0 && day <= firstDayIdx) || currentDay > lastDate) {
+ weekDays.push(
+ ,
+ );
+ } else {
+ weekDays.push(
+ ,
+ );
+ currentDay++;
+ }
+ }
+ // ์บ๋ฆฐ๋๋ผ๋ ๋ฐฐ์ด์ ํ ์ฃผ์ฐจ์ฉ push
+ calendar.push(
+
+
+ {weekDays}
+ ,
+ );
+ // ํ์ฌ ๋ ์ง(currentDay)๊ฐ ๋ง์ง๋ง ๋ ์ง(lastDate)๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ,
+ // ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํ์ฌ ๋จ์ ์ฃผ์ฐจ๋ฅผ ํ์ํ์ง ์์
+ if (currentDay > lastDate) {
+ break;
+ }
+ }
+
+ // Weekly ์กฐํ
+ useEffect(() => {
+ const fetchList = async () => {
+ const res = await expenseSummary('weekly');
+ setWeeklyList(res);
+ };
+ fetchList();
+ }, [monthlyList]);
+
+ return (
+
+
+
+ {weekDate.map((date) => (
+ {date}
+ ))}
+
+ {calendar}
+
+ );
+};
+
+const Container = styled.div`
+ width: 100%;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+`;
+
+const Calendar = styled.div`
+ width: 100%;
+`;
+
+const WeekWrapper = styled.div``;
+
+const Week = styled.div`
+ width: 100%;
+ display: flex;
+ min-height: 3.5rem;
+ margin-bottom: 0.5rem;
+ justify-content: space-evenly;
+`;
+
+const WeekDay = styled.div`
+ width: 100%;
+ display: flex;
+ align-items: end;
+ justify-content: space-evenly;
+`;
+
+const Dates = styled.div`
+ display: flex;
+ align-items: end;
+ min-height: 3.5rem;
+ margin-bottom: 0.5rem;
+ justify-content: center;
+ min-width: calc(100% / 7);
+ color: ${theme.colors.gray[1]};
+`;
+
+export default TheCalendar;
diff --git a/src/components/Home/CurrentMonth.tsx b/src/components/Home/CurrentMonth.tsx
new file mode 100644
index 00000000..738ff52b
--- /dev/null
+++ b/src/components/Home/CurrentMonth.tsx
@@ -0,0 +1,121 @@
+import { theme } from '@/styles/theme';
+import { css, styled } from 'styled-components';
+import { DayProps } from '@/components/Home/Calendar';
+import { SelectedDailyProps } from '@/components/Home/ExpensesList';
+
+interface CurrentMonthProps {
+ year: number;
+ month: number;
+ currentDay: number;
+ day: number;
+ $isCurrentMonth: boolean;
+ // eslint-disable-next-line no-unused-vars
+ onDayClick: (year: number, month: number, currentDay: number) => void;
+ monthlyList?: SelectedDailyProps[];
+}
+
+function CurrentMonth({
+ year,
+ month,
+ day,
+ currentDay,
+ $isCurrentMonth,
+ onDayClick,
+ monthlyList,
+}: CurrentMonthProps) {
+ const handleClick = () => {
+ onDayClick(year, month, currentDay); // ํด๋ฆญ ์ year, month, currentDay ๊ฐ์ ์ ๋ฌ
+ };
+
+ const dailyIncome = (currentDay: number) => {
+ let income = 0;
+
+ if (monthlyList) {
+ if (monthlyList[currentDay]) {
+ income = Object.values(monthlyList[currentDay])
+ .filter((cur) => cur.amount > 0)
+ .reduce((acc: number, cur: SelectedDailyProps) => acc + cur.amount, 0)
+ .toLocaleString();
+ }
+ }
+ return income !== 0 ? `+${income}` : '';
+ };
+
+ const dailyExpense = (currentDay: number) => {
+ let expense = 0;
+
+ if (monthlyList) {
+ if (monthlyList[currentDay]) {
+ expense = Object.values(monthlyList[currentDay])
+ .filter((cur) => cur.amount < 0)
+ .reduce((acc: number, cur: SelectedDailyProps) => acc + cur.amount, 0)
+ .toLocaleString();
+ }
+ }
+ return expense !== 0 ? expense : '';
+ };
+
+ return (
+
+
+ {currentDay}
+
+ {dailyIncome(currentDay)}
+ {dailyExpense(currentDay)}
+
+ );
+}
+const Day = styled.button`
+ color: black;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ min-width: calc(100% / 7);
+`;
+
+const DayContent = styled.div`
+ width: 2rem;
+ padding: 4px 0;
+ border-radius: 10%;
+
+ &:hover {
+ scale: calc(110%);
+ background-color: ${theme.colors.lightGreen};
+ }
+
+ ${(props) =>
+ props.$day === 7 &&
+ css`
+ color: ${theme.colors.deepBlue};
+ `}
+
+ ${(props) =>
+ props.$day === 1 &&
+ css`
+ color: ${theme.colors.red};
+ `}
+
+
+ ${(props) => props.$isCurrentMonth && css``}
+
+ ${(props) =>
+ !props.$isCurrentMonth &&
+ css`
+ color: ${theme.colors.gray[1]};
+ `}
+`;
+
+const Income = styled.div`
+ font-size: 0.5rem;
+ color: ${theme.colors.deepGreen};
+`;
+
+const Expense = styled.div`
+ font-size: 0.5rem;
+ color: ${theme.colors.gray[1]};
+`;
+export default CurrentMonth;
diff --git a/src/components/Home/ExpensesDailyList.tsx b/src/components/Home/ExpensesDailyList.tsx
new file mode 100644
index 00000000..0eb4caa8
--- /dev/null
+++ b/src/components/Home/ExpensesDailyList.tsx
@@ -0,0 +1,157 @@
+import { useState } from 'react';
+import { theme } from '@/styles/theme';
+import { tags } from '@/lib/utils/Tags';
+import Button from '@/components/common/Button';
+import { css, styled } from 'styled-components';
+import InfoModal from '@/components/modal/InfoModal';
+import UpdateModal from '@/components/modal/UpdateModal';
+
+interface SelectedDailyProps {
+ amount: number;
+ category: string;
+ date: string;
+ userId: string;
+ _id: string;
+}
+
+interface ExpensesDailyList {
+ dailyList: SelectedDailyProps[];
+ onItemUpdated: () => void;
+}
+
+function ExpensesDailyList({ dailyList, onItemUpdated }: ExpensesDailyList) {
+ const [showUpdateModal, setShowUpdateModal] = useState(null);
+ const [showInfoModal, setShowInfoModal] = useState(null);
+ const [selelctItem, setSelectItem] = useState(
+ null,
+ );
+
+ const handleOpenUpdateModal = (item: SelectedDailyProps, index: number) => {
+ setShowUpdateModal(index);
+ setSelectItem(item);
+ };
+
+ const handleCloseUpdateModal = () => {
+ setShowUpdateModal(null);
+ };
+
+ const handleOpenInfoModal = (item: SelectedDailyProps, index: number) => {
+ setShowInfoModal(index);
+ setSelectItem(item);
+ };
+
+ const handleCloseInfoModal = () => {
+ setShowInfoModal(null);
+ };
+
+ const Icon = ({ label }: { label: string }) => {
+ const tag = tags.find((tag) => tag.label === label);
+ if (tag) {
+ return {tag.icon}
;
+ }
+ };
+ return (
+ <>
+
+
+ {dailyList
+ ? dailyList.map((item, index) => (
+ -
+
+
+
+ {[...item.category.split(',')][0]}
+
+
+ 0}>
+ {item.amount.toLocaleString()}์
+
+
+
+
+
+
+
+ {showInfoModal === index && selelctItem && (
+
+ )}
+
+ {showUpdateModal === index && selelctItem && (
+
+ )}
+
+ ))
+ : '๋ด์ญ์ด ์์ต๋๋ค!'}
+
+ >
+ );
+}
+
+const Title = styled.h1`
+ margin-left: 0.5rem;
+`;
+
+const Wrapper = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-top: 1px solid #000;
+ margin-bottom: 0.5rem;
+ padding: 1rem 0.5rem 0.5rem;
+`;
+
+const Category = styled.div`
+ color: ${theme.colors.gray};
+ display: flex;
+`;
+
+const Detail = styled.div`
+ display: flex;
+`;
+
+const Amount = styled.div<{
+ $isSpend?: boolean;
+}>`
+ margin: 2px 8px;
+ ${(props) =>
+ props.$isSpend &&
+ css`
+ color: ${theme.colors.blue};
+ `}
+`;
+const Buttons = styled.div`
+ > button {
+ font-size: 0.5rem;
+ padding: 4px 8px;
+ margin-left: 5px;
+ }
+ > button:hover {
+ transform: scale(110%);
+ }
+`;
+
+export default ExpensesDailyList;
diff --git a/src/components/Home/ExpensesList.tsx b/src/components/Home/ExpensesList.tsx
new file mode 100644
index 00000000..1f6dfb4e
--- /dev/null
+++ b/src/components/Home/ExpensesList.tsx
@@ -0,0 +1,37 @@
+import ExpensesTagList from '@/components/Home/ExpensesTagList';
+import ExpensesDailyList from '@/components/Home/ExpensesDailyList';
+
+export interface SelectedDailyProps {
+ amount: number;
+ category: string;
+ date: string;
+ userId: string;
+ _id: string;
+}
+interface CalendarDataProps {
+ dailyList: SelectedDailyProps[];
+ tag: string;
+ onItemUpdated: () => void;
+}
+
+function ExpensesList({ dailyList, tag, onItemUpdated }: CalendarDataProps) {
+ // tag๊ฐ ์กด์ฌ๋ฉด TagList, ๊ทธ๋ ์ง ์์ผ๋ฉด DailyList ๋ฐํ
+ return (
+ <>
+ {tag ? (
+
+ ) : (
+
+ )}
+ >
+ );
+}
+
+export default ExpensesList;
diff --git a/src/components/Home/ExpensesTagList.tsx b/src/components/Home/ExpensesTagList.tsx
new file mode 100644
index 00000000..b8d5da9d
--- /dev/null
+++ b/src/components/Home/ExpensesTagList.tsx
@@ -0,0 +1,161 @@
+import { useState } from 'react';
+import Button from '../common/Button';
+import { theme } from '@/styles/theme';
+import { tags } from '@/lib/utils/Tags';
+import InfoModal from '../modal/InfoModal';
+import UpdateModal from '../modal/UpdateModal';
+import { css, styled } from 'styled-components';
+
+interface SelectedDailyProps {
+ amount: number;
+ category: string;
+ date: string;
+ userId: string;
+ _id: string;
+}
+
+interface ExpensesTagList {
+ dailyList: SelectedDailyProps[];
+ tag: string;
+ onItemUpdated: () => void;
+}
+
+function ExpensesTagList({ dailyList, onItemUpdated }: ExpensesTagList) {
+ const [showUpdateModal, setShowUpdateModal] = useState(null);
+ const [showInfoModal, setShowInfoModal] = useState(null);
+ const [selelctItem, setSelectItem] = useState(
+ null,
+ );
+
+ const handleOpenUpdateModal = (item: SelectedDailyProps, index: number) => {
+ setShowUpdateModal(index);
+ setSelectItem(item);
+ };
+
+ const handleCloseUpdateModal = () => {
+ setShowUpdateModal(null);
+ };
+
+ const handleOpenInfoModal = (item: SelectedDailyProps, index: number) => {
+ setShowInfoModal(index);
+ setSelectItem(item);
+ };
+
+ const handleCloseInfoModal = () => {
+ setShowInfoModal(null);
+ };
+
+ const Icon = ({ label }: { label: string }) => {
+ const iconTag = tags.find((iconTag) => iconTag.label === label);
+ if (iconTag) {
+ return {iconTag.icon}
;
+ }
+ };
+
+ return (
+ <>
+
+
+ {dailyList
+ ? dailyList.map((item, index) => (
+ -
+
+
+
+ {[...item.category.split(',')][0]}
+
+
+ 0}>
+ {item.amount.toLocaleString()}์
+
+
+
+
+
+
+
+ {showInfoModal === index && selelctItem && (
+
+ )}
+
+ {showUpdateModal === index && selelctItem && (
+
+ )}
+
+ ))
+ : '๋ด์ญ์ด ์์ต๋๋ค!'}
+
+ >
+ );
+}
+
+const Title = styled.h1`
+ margin-left: 0.5rem;
+`;
+
+const Wrapper = styled.div`
+ display: flex;
+ align-items: center;
+ margin-bottom: 0.5rem;
+ border-top: 1px solid #000;
+ padding: 1rem 0.5rem 0.5rem;
+ justify-content: space-between;
+`;
+
+const Category = styled.div`
+ display: flex;
+ color: ${theme.colors.gray};
+`;
+
+const Detail = styled.div`
+ display: flex;
+`;
+
+const Amount = styled.div<{
+ $isSpend?: boolean;
+}>`
+ margin: 2px 8px;
+
+ ${(props) =>
+ props.$isSpend &&
+ css`
+ color: ${theme.colors.blue};
+ `}
+`;
+
+const Buttons = styled.div`
+ > button {
+ padding: 4px 8px;
+ margin-left: 5px;
+ font-size: 0.5rem;
+ }
+ > button:hover {
+ transform: scale(110%);
+ }
+`;
+
+export default ExpensesTagList;
diff --git a/src/components/Home/Home.tsx b/src/components/Home/Home.tsx
new file mode 100644
index 00000000..fa25ecdb
--- /dev/null
+++ b/src/components/Home/Home.tsx
@@ -0,0 +1,89 @@
+import { useEffect, useState } from 'react';
+import UserId from '@/components/Home/UserId';
+import Calendar from '@/components/Home/Calendar';
+import ExpensesList from '@/components/Home/ExpensesList';
+import { calendarData, expenseSearch } from '@/lib/api/Api';
+
+export interface SelectedDateProps {
+ year: number;
+ month: number;
+ currentDay: number;
+}
+
+interface SelectedDailyProps {
+ amount: number;
+ category: string;
+ date: string;
+ userId: string;
+ _id: string;
+}
+
+function Home() {
+ const [tag, setTag] = useState(''); // ์นดํ
๊ณ ๋ฆฌ ์๋น ํ๊ทธ
+ const [dailyList, setDailyList] = useState([]);
+ const [monthlyList, setMonthlyList] = useState([]);
+ const [selectedDate, setSelectedDate] = useState();
+ const [currentMonth, setCurrentMonth] = useState(new Date().getMonth() + 1);
+ const [currentYear, setCurrentYear] = useState(new Date().getFullYear());
+
+ const onDayClick = (year: number, month: number, currentDay: number) => {
+ setSelectedDate({ year, month, currentDay });
+ };
+
+ const onItemUpdated = async () => {
+ const res = await calendarData(currentYear, currentMonth);
+ setMonthlyList(res);
+ if (selectedDate) {
+ setDailyList(res[selectedDate.currentDay]);
+ }
+ };
+
+ useEffect(() => {
+ const fetchData = async () => {
+ const res = await calendarData(currentYear, currentMonth);
+ setMonthlyList(res);
+ };
+
+ fetchData();
+ }, [currentYear, currentMonth, tag]);
+
+ useEffect(() => {
+ if (selectedDate) {
+ setDailyList(monthlyList[selectedDate.currentDay]);
+ }
+ }, [selectedDate, monthlyList]);
+
+ useEffect(() => {
+ const fetchCategoryList = async () => {
+ if (tag) {
+ const res = await expenseSearch(tag);
+ setDailyList(res);
+ }
+ };
+ fetchCategoryList();
+ }, [tag]);
+
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+export default Home;
diff --git a/src/components/Home/NotCurrentMonth.tsx b/src/components/Home/NotCurrentMonth.tsx
new file mode 100644
index 00000000..e507cc1d
--- /dev/null
+++ b/src/components/Home/NotCurrentMonth.tsx
@@ -0,0 +1,77 @@
+import { theme } from '@/styles/theme';
+import { css, styled } from 'styled-components';
+import { DayProps } from '@/components/Home/Calendar';
+
+interface NotCurrentMonthProps {
+ week: number;
+ day: number;
+ prevMonthLastDate: number;
+ firstDayIdx: number;
+ $isCurrentMonth: boolean;
+ currentDay: number;
+ lastDate: number;
+ nextMonthFirstIdx: number;
+}
+
+function NotCurrentMonth({
+ week,
+ day,
+ prevMonthLastDate,
+ firstDayIdx,
+ $isCurrentMonth,
+ currentDay,
+ lastDate,
+ nextMonthFirstIdx,
+}: NotCurrentMonthProps) {
+ return (
+ <>
+ {/* '0์ฃผ์ฐจ์ด๊ณ , ์ฒซ ๋ฒ์งธ ์์ผ ์ธ๋ฑ์ค๋ณด๋ค day ๊ฐ์ด ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ' ๋๋
+ 'ํ์ฌ ๋ ์ง(currentDay)๊ฐ ๋ง์ง๋ง ๋ ์ง(lastDate)๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ' */}
+ {week === 0 && day <= firstDayIdx ? (
+ // 0์ฃผ์ฐจ์ด๊ณ , ์ฒซ ๋ฒ์งธ ์์ผ ์ธ๋ฑ์ค๋ณด๋ค day ๊ฐ์ด ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ (1์ผ ์ด์ )
+
+
+ {/* 30 - firstDayIndex + day */}
+ {prevMonthLastDate - (firstDayIdx - day)}
+
+
+ ) : (
+ // ํ์ฌ ๋ ์ง(currentDay)๊ฐ ๋ง์ง๋ง ๋ ์ง๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ(31์ผ ์ดํ)
+
+
+ {/* ํ์ฌ ๋ ์ง - ๋ง์ง๋ง ํด๋น ์์ ๋ ์ง + day - ๋ค์ ๋ฌ์ ์ฒซ ๋ ์ง index - 1 */}
+ {currentDay - lastDate + day - nextMonthFirstIdx - 1}
+
+
+ )}
+ >
+ );
+}
+const Day = styled.button`
+ width: 100%;
+ display: flex;
+ justify-content: space-evenly;
+`;
+
+const DayContent = styled.div`
+ padding: 4px 0;
+
+ ${(props) =>
+ props.$day === 7 &&
+ css`
+ color: ${theme.colors.blue};
+ `}
+
+ ${(props) =>
+ props.$day === 1 &&
+ css`
+ color: ${theme.colors.red};
+ `}
+
+ ${(props) =>
+ !props.$isCurrentMonth &&
+ css`
+ color: ${theme.colors.gray[1]};
+ `}
+`;
+export default NotCurrentMonth;
diff --git a/src/components/Home/UserId.tsx b/src/components/Home/UserId.tsx
new file mode 100644
index 00000000..5187411b
--- /dev/null
+++ b/src/components/Home/UserId.tsx
@@ -0,0 +1,131 @@
+import { useState } from 'react';
+import styled from 'styled-components';
+
+function UserId() {
+ const inittialUserId = localStorage.getItem('userId') || '';
+ const initialIsSubmit = !!localStorage.getItem('userId'); // localStorage์ userId๊ฐ ์์ผ๋ฉด false, ์์ผ๋ฉด true๊ฐ ๋๋ค.
+ const [userId, setUserId] = useState(inittialUserId);
+ const [isSubmit, setIsSubmit] = useState(initialIsSubmit);
+
+ const handleUserId = (e: React.ChangeEvent) => {
+ setUserId(e.target.value);
+ };
+
+ const setLocalStorage = (event: React.FormEvent) => {
+ event.preventDefault();
+ localStorage.setItem('userId', userId);
+ setIsSubmit(true);
+ window.location.reload();
+ };
+
+ const DeleteLocalStorage = (event: React.FormEvent) => {
+ event.preventDefault();
+ localStorage.clear();
+ setIsSubmit(false);
+ setUserId(''); // ๋ก๊ทธ์์์ ํ๋ฉด userId๊ฐ์ ๋น ๊ฐ์ผ๋ก ๋ณ๊ฒฝ
+ window.location.reload();
+ };
+
+ return (
+
+ {isSubmit ? (
+ <>
+
+ {userId}๋ ํ์ํฉ๋๋ค.
+ ๋ก๊ทธ์์
+
+ >
+ ) : (
+ <>
+
+
+
+ ๋ก๊ทธ์ธ
+
+
+ >
+ )}
+
+ );
+}
+
+const Wrapper = styled.div`
+ padding: 20px;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ justify-content: center;
+`;
+
+const User = styled.span`
+ font-weight: bold;
+ text-align: center;
+`;
+
+const LogOutForm = styled.form`
+ height: 25px;
+`;
+
+const LogOutButton = styled.button`
+ margin-left: 10px;
+ font-weight: bold;
+ border-radius: 8px;
+ background-color: #fff;
+ color: #000;
+
+ &:hover {
+ color: #fff;
+ background-color: #000;
+ }
+
+ @media screen and (max-width: 500px) {
+ background-color: #fff;
+ color: #000;
+
+ &:hover {
+ background-color: #000;
+ color: #fff;
+ }
+ }
+`;
+
+const LogInForm = styled.form`
+ height: 25px;
+`;
+
+const LogInInput = styled.input`
+ line-height: 1.3;
+`;
+
+const LogInButton = styled.button`
+ margin-left: 10px;
+ font-weight: bold;
+ border-radius: 8px;
+ background-color: #fff;
+ color: #000;
+
+ &:hover {
+ color: #fff;
+ background-color: #000;
+
+ @media screen and (max-width: 500px) {
+ background-color: #fff;
+ color: #000;
+
+ &:hover {
+ background-color: #000;
+ color: #fff;
+ }
+ }
+ }
+
+ &:disabled {
+ cursor: not-allowed;
+ }
+`;
+
+export default UserId;
diff --git a/src/components/Home/WeeklyExpenses.tsx b/src/components/Home/WeeklyExpenses.tsx
new file mode 100644
index 00000000..37d3034d
--- /dev/null
+++ b/src/components/Home/WeeklyExpenses.tsx
@@ -0,0 +1,61 @@
+import { theme } from '@/styles/theme';
+import { css, styled } from 'styled-components';
+import { weekToNumFn } from '@/lib/utils/weekNumFn';
+
+interface WeeklyListProps {
+ _id?: string;
+ totalAmount?: number;
+}
+interface WeeklyExpensesProps {
+ year?: number;
+ month?: number;
+ week?: number;
+ weeklyList?: WeeklyListProps[];
+}
+
+function WeeklyExpenses({ ...props }: WeeklyExpensesProps) {
+ const weekOfYear = weekToNumFn(
+ props.year as number,
+ props.month as number,
+ props.week as number,
+ );
+
+ // weekOfYear์ ํด๋นํ๋ id๊ฐ์ ์ฐพ์
+ const targetWeek = props.weeklyList
+ ? props.weeklyList.find((target) => target._id === `2023-${weekOfYear}`)
+ : undefined;
+
+ // ํด๋น ์ฃผ์ฐจ์ totalAmount ์ ์ฅ
+ const targetAmount = targetWeek ? targetWeek?.totalAmount : undefined;
+
+ // ์ฃผ๊ฐ ๊ฑฐ๋๋ด์ญ์ด ์๋ค๋ฉด, ์์ ์์์ ๋ฐ๋ผ ๊ตฌ๋ถ์ง์ด ๋ ๋๋ง, ๊ฑฐ๋๋ด์ญ์ด ์๋ค๋ฉด non-breaking space
+ return (
+ <>
+ {targetAmount ? (
+ 0}>
+ {targetAmount > 0 ? '+' : ''}
+ {targetAmount ? targetAmount.toLocaleString() : ''}
+
+ ) : (
+
+ )}
+ >
+ );
+}
+const Wrapper = styled.div<{
+ $isPositive?: boolean;
+}>`
+ display: flex;
+ font-size: 0.8rem;
+ padding-right: 2px;
+ align-items: center;
+ justify-content: right;
+ background-color: ${theme.colors.gray[0]};
+ ${(props) =>
+ props.$isPositive &&
+ css`
+ color: ${theme.colors.deepGreen};
+ `}
+`;
+
+export default WeeklyExpenses;
diff --git a/src/components/common/Button.tsx b/src/components/common/Button.tsx
new file mode 100644
index 00000000..c9f6fdbe
--- /dev/null
+++ b/src/components/common/Button.tsx
@@ -0,0 +1,45 @@
+import { theme } from '@/styles/theme';
+import styled, { css } from 'styled-components';
+
+interface IButtonProps {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ [props: string]: any;
+}
+
+function Button({ ...props }: IButtonProps) {
+ return ;
+}
+
+const StyledButton = styled.button<{
+ green?: boolean;
+ lightgreen?: boolean;
+ red?: boolean;
+ $gray?: boolean;
+}>`
+ cursor: pointer;
+ border-radius: 5px;
+
+ ${(props) =>
+ props.green &&
+ css`
+ background-color: ${theme.colors.green};
+ `}
+ ${(props) =>
+ props.lightgreen &&
+ css`
+ background-color: ${theme.colors.lightGreen};
+ `}
+ ${(props) =>
+ props.red &&
+ css`
+ background-color: ${theme.colors.red};
+ `}
+ ${(props) =>
+ props.$gray &&
+ css`
+ color: ${theme.colors.gray[2]};
+ background-color: ${theme.colors.gray[0]};
+ `};
+`;
+
+export default Button;
diff --git a/src/components/common/Header.tsx b/src/components/common/Header.tsx
new file mode 100644
index 00000000..3e4cf9cc
--- /dev/null
+++ b/src/components/common/Header.tsx
@@ -0,0 +1,240 @@
+import Button from './Button';
+import { theme } from '@/styles/theme';
+import { Link } from 'react-router-dom';
+import AddModal from '@/components/modal/AddModal';
+import { useEffect, useState } from 'react';
+import { css, styled } from 'styled-components';
+import SearchModal from '@/components/modal/SearchModal';
+import { SelectedDailyProps } from '@/components/Home/ExpensesList';
+import { leftIcon, rightIcon, searchIcon } from '@/lib/utils/Icons';
+
+interface HeaderProps {
+ onPrev: () => void;
+ onNext: () => void;
+ currentYear?: number;
+ currentMonth?: number;
+ setTag: React.Dispatch>;
+ onItemUpdated: () => void;
+ monthlyList: SelectedDailyProps[];
+}
+
+function Header({
+ onPrev,
+ onNext,
+ currentYear,
+ currentMonth,
+ setTag,
+ onItemUpdated,
+ monthlyList,
+}: HeaderProps) {
+ const [dailyList, setDailyList] = useState([]);
+ const [showSearchModal, setShowSearchModal] = useState(false);
+ const [showAddModal, setShowAddModal] = useState(false);
+ useEffect(() => {
+ setDailyList(Object.values(monthlyList));
+ }, [monthlyList]);
+
+ const handleOpenSearchModal = () => {
+ setShowSearchModal(true);
+ };
+ const handleCloseSearchModal = () => {
+ setShowSearchModal(false);
+ };
+
+ const handleOpenAddModal = () => {
+ setShowAddModal(true);
+ };
+
+ const handleCloseAddModal = () => {
+ setShowAddModal(false);
+ };
+
+ const expense =
+ // dailyList๊ฐ ์กด์ฌํ ๋,
+ dailyList.length > 0
+ ? dailyList.reduce((acc, cur) => {
+ // amount๊ฐ ์์์ธ ํญ๋ชฉ filterling
+ const expenses = Object.values(cur).filter(
+ (item: { amount: number }) => item.amount * 1 < 0,
+ );
+ // ํํฐ๋ง ๋ expenses์ amount๋ฅผ reduce๋ก ๋ชจ๋ ํฉํจ
+ const total = expenses.reduce(
+ (sum: number, item: { amount: number }) => sum + item.amount,
+ 0,
+ );
+ return acc + total * -1;
+ }, 0)
+ : 0;
+
+ const income = // dailyList๊ฐ ์กด์ฌํ ๋,
+ dailyList.length > 0
+ ? dailyList.reduce((acc, cur) => {
+ // amount๊ฐ ์์์ธ ํญ๋ชฉ filterling
+ const expenses = Object.values(cur).filter(
+ (item: { amount: number }) => item.amount * 1 >= 0,
+ );
+ // ํํฐ๋ง ๋ expenses์ amount๋ฅผ reduce๋ก ๋ชจ๋ ํฉํจ
+ const total = expenses.reduce(
+ (sum: number, item: { amount: number }) => sum + item.amount,
+ 0,
+ );
+ return acc + total;
+ }, 0)
+ : 0;
+
+ return (
+
+
+
+ {leftIcon}
+ {currentYear}.{currentMonth}
+ {rightIcon}
+
+ {searchIcon}
+
+
+
+
+ ์ง์ถ{expense.toLocaleString()}์
+
+
+ ์์
{income.toLocaleString()}์
+
+
+
+
+
+
+
+
+
+
+
+ + ์ถ๊ฐ
+
+
+ {showAddModal && (
+
+ )}
+ {showSearchModal && (
+
+ )}
+
+ );
+}
+
+const Search = styled.button`
+ margin-right: 10px;
+ > svg {
+ color: black;
+ font-size: 1rem;
+ }
+`;
+
+const StyledHeader = styled.header`
+ width: 100%;
+ display: flex;
+ padding: 0.5rem 0;
+ align-items: center;
+ flex-direction: column;
+ justify-content: space-between;
+`;
+
+const SearchWrapper = styled.div`
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+`;
+
+const Month = styled.div`
+ display: flex;
+ font-size: 1.5rem;
+ align-items: center;
+ margin-left: 0.5rem;
+`;
+
+const Arrow = styled.button`
+ border: none;
+ cursor: pointer;
+ background: none;
+ font-size: 1.5rem;
+ > svg {
+ color: black;
+ }
+`;
+
+const InfoWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+`;
+
+const Balance = styled.div`
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+`;
+
+const Buttons = styled.div`
+ display: flex;
+ padding: 1.4rem 0;
+ margin-right: 1rem;
+ flex-direction: column;
+`;
+
+const ButtonWrapper = styled.div`
+ display: flex;
+
+ > a > button {
+ padding: 8px 8px;
+ font-size: 0.5rem;
+ }
+
+ > a:first-child {
+ margin-right: 0.5rem;
+ }
+`;
+
+const Add = styled.button`
+ display: flex;
+ color: black;
+ font-size: 1rem;
+ margin-top: 1rem;
+ align-items: center;
+ justify-content: right;
+`;
+
+const Expense = styled.div`
+ display: flex;
+ font-size: 12px;
+ margin-left: 1.5rem;
+ margin-bottom: 1rem;
+ align-items: center;
+ color: ${theme.colors.gray[1]};
+`;
+
+const Income = styled.div`
+ display: flex;
+ font-size: 12px;
+ align-items: center;
+ margin-left: 1.5rem;
+ color: ${theme.colors.gray[1]};
+`;
+
+const Price = styled.div<{
+ $deepGreen?: boolean;
+}>`
+ color: black;
+ font-size: 1rem;
+ margin-left: 4px;
+
+ ${(props) =>
+ props.$deepGreen &&
+ css`
+ color: ${theme.colors.deepGreen};
+ `};
+`;
+
+export default Header;
diff --git a/src/components/common/Layout.tsx b/src/components/common/Layout.tsx
new file mode 100644
index 00000000..1652a384
--- /dev/null
+++ b/src/components/common/Layout.tsx
@@ -0,0 +1,19 @@
+import { Outlet } from 'react-router-dom';
+import { styled } from 'styled-components';
+
+function Layout() {
+ return (
+
+
+
+ );
+}
+const Container = styled.div`
+ height: 100vh;
+ margin: 0 auto;
+ max-width: 480px;
+ overflow-y: auto;
+ overflow-x: hidden;
+`;
+
+export default Layout;
diff --git a/src/components/common/NotFound.tsx b/src/components/common/NotFound.tsx
new file mode 100644
index 00000000..48a61741
--- /dev/null
+++ b/src/components/common/NotFound.tsx
@@ -0,0 +1,5 @@
+function NotFound() {
+ return NotFound
;
+}
+
+export default NotFound;
diff --git a/src/components/detail/Detail.tsx b/src/components/detail/Detail.tsx
new file mode 100644
index 00000000..8570b94c
--- /dev/null
+++ b/src/components/detail/Detail.tsx
@@ -0,0 +1,256 @@
+import { useState, useEffect } from 'react';
+import SelectPeriod from './SelectPeriod';
+import styled from 'styled-components';
+import {expenseSummary, expenseSearch} from '@/lib/api/Api';
+import DetailChart from './DetailChart';
+import DetailList from './DetailList';
+import { DatePicker } from 'antd';
+import SelectChart from './SelectChart';
+import SelectCategory from './SelectCategory';
+import SelectMonthly from './SelectMonthly';
+import {Table} from 'antd'
+import { FaArrowLeft } from 'react-icons/fa';
+import { useNavigate } from 'react-router-dom';
+import { theme } from '@/styles/theme';
+
+const { RangePicker } = DatePicker;
+
+
+function Detail () {
+
+ // ๊ธฐ๊ฐ
+ const [period, setPeriod] = useState('monthly');
+ const [selectPeriod, setSelectPeriod] = useState('')
+ const [summaries, setSummeries] = useState([])
+ const [sortSummaries, setSortSummeries] = useState([])
+ const [selectDays, setSelectDays] = useState(false)
+ const navigate = useNavigate()
+
+ const periodApi = async (selectedPeriod: string) => {
+ try {
+ const response = await expenseSummary(selectedPeriod);
+ setSummeries(response )
+ } catch (error) {
+ console.log('error :', error)
+ }
+ }
+
+ useEffect(() => {
+ if(period !== '๊ธฐ๊ฐ์ ํ') {
+ periodApi(period)
+ } else {
+ setPeriod('daily')
+ }
+ }, [period])
+
+ const sortSummariesFunc = () => {
+ setSortSummeries(summaries.sort((acc, cur) => {
+ const idA = Number(acc._id.replace(/-/g, ''))
+ const idB = Number(cur._id.replace(/-/g, ''))
+ return idA - idB
+ }))
+ }
+
+ useEffect(() => {
+ sortSummariesFunc()
+ }, [summaries])
+
+ const handlePeriod = (value: string) => {
+ setPeriod(value);
+ }
+
+ const selectDay = (dates: any, dateStrings: string[]) => {
+ if (dates && dates.length > 0) {
+ setSelectDays(true);
+ console.log(selectDays)
+ const [startDay, endDay] = dateStrings;
+ const filteredSummaries = summaries.filter((summary) => {
+ return summary._id >= startDay && summary._id <= endDay;
+ });
+ setSortSummeries(filteredSummaries);
+ } else {
+ setSelectDays(false);
+ sortSummariesFunc();
+ }
+ };
+
+ const handleSelectPeriod = (value: string) => {
+ setSelectPeriod(value)
+ }
+
+ // ์นดํ
๊ณ ๋ฆฌ ๊ฒ์
+ const [categories, setCategories] = useState([])
+ const [selectCategories, setSelectCategories] = useState('')
+
+ const categoryApi = async() => {
+ try {
+ const response = await expenseSearch(selectCategories)
+ setCategories(response)
+ } catch (error) {
+ console.log('error :' + error)
+ }
+ }
+
+
+
+ useEffect(() => {
+ categoryApi()
+ }, [selectCategories])
+
+ const handleSelectCategory = (value: string) => {
+ setSelectCategories(value)
+ }
+
+ categories
+ .sort((acc, cur) => {
+ const dateA: any = new Date(acc.date)
+ const dateB: any = new Date(cur.date)
+ return dateA - dateB
+ })
+
+ // ํํฐ
+
+ const filterCategories = selectPeriod ? categories.filter((category) => category.date.includes(selectPeriod) ) : categories
+
+ // ์ฐจํธ
+ const [chart, setChart] = useState('bar')
+
+ const handleChart = (value: string) => {
+ setChart(value)
+ }
+ // table
+ const tableitemSource = filterCategories.map((categories, index) => ({
+ key : index + 1,
+ categoryName: categories.category.replace(/, .*$/, ''),
+ categoryAmount: Number(categories.amount) >= 0 ? categories.amount.toLocaleString() : {categories.amount.toLocaleString()},
+ categoryDate: categories.date.replace(/T.*$/, '')
+ }))
+
+ const itemColumns = [
+ {
+ title:'๋ฒํธ',
+ dataIndex: 'key',
+ key: 'key'
+ },
+ {
+ title: '์นดํ
๊ณ ๋ฆฌ',
+ dataIndex: 'categoryName',
+ key: 'categoryName'
+ },
+ {
+ title: '๊ธ์ก',
+ dataIndex: 'categoryAmount',
+ key: 'categoryAmount'
+ },
+ {
+ title: '๋ ์ง',
+ dataIndex: 'categoryDate',
+ key: 'categoryDate'
+ },
+ ]
+
+ const selectCategoryAmount = selectCategories ? categories.filter((category) => category.date.includes(selectPeriod)) : categories;
+
+ let income = 0
+ let expenses = 0
+ for(let i = 0; i < filterCategories.length; i++) {
+ if(selectCategoryAmount[i].amount >= 0) {
+ income += selectCategoryAmount[i].amount
+ } else {
+ expenses += selectCategoryAmount[i].amount
+ }
+ }
+
+ const hanldeBackPage = () => {
+ navigate('/')
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+
+ {period === 'daily' && (
+
+
+
+ )}
+
+
+
+
+
+
+
+
+ ์์
: {income.toLocaleString()}์
+ ์ง์ถ : {expenses.toLocaleString()}์
+
+ >
+ );
+}
+
+export default Detail
+
+const Check = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+`;
+
+const StyleDatePicker = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+`
+
+const StyledSelect = styled.div `
+ display: flex;
+ justify-content: center;
+ flex-align: justify;
+ margin-bottom: 20px;
+`
+
+const StyledTotalCategoryAmount = styled.div`
+ display: flex;
+ margin: 30px;
+ justify-content: center;
+`
+
+const StyleIncome = styled.div`
+ color: black;
+ margin-left: auto;
+`
+
+const StyleExpeses = styled.div `
+ color: red;
+ margin-left: auto;
+ margin-right: auto;
+`
+
+const BackButton = styled.button`
+ border: none;
+ font-size: 20px;
+ margin: 15px;
+ cursor: pointer;
+ background-color: #fff;
+ position: relative;
+/* left: - 50px; */
+
+ &:hover {
+ color: ${theme.colors.red};
+ }
+`;
+
diff --git a/src/components/detail/DetailChart.tsx b/src/components/detail/DetailChart.tsx
new file mode 100644
index 00000000..07b78fa7
--- /dev/null
+++ b/src/components/detail/DetailChart.tsx
@@ -0,0 +1,90 @@
+import {useEffect, useRef} from 'react'
+import Chart, {ChartType} from 'chart.js/auto';
+import styled from 'styled-components';
+
+interface Summaries {
+ summaries: SummaryResponseItem[]
+ period: string
+ selectChart: string
+}
+
+function DeatilChart({summaries, period, selectChart}: Summaries) {
+
+ const chartRef = useRef(null);
+
+ useEffect(() => {
+ if (!chartRef.current) return;
+
+ const chartLabels = summaries.map((item) => {
+ if(period === 'monthly') {
+ const [year, month] = item._id.split('-')
+ return `${year}๋
${month}์`
+ } else if ( period === 'weekly'){
+ const weekNum = item._id.split('-')[1]
+ return `์ฃผ${weekNum}`
+ } else if ( period === 'daily') {
+ const [, monthNum, dayNum] = item._id.split('-')
+ return `${monthNum}์ ${dayNum}์ผ`
+ }
+ })
+
+ const dynaminColor = function () {
+ const r: number = Math.floor(Math.random() * 255)
+ const g: number = Math.floor(Math.random() * 255)
+ const b: number = Math.floor(Math.random() * 255)
+ return 'rgba(' + r + ',' + g + ',' + b + ',0.6)'
+ }
+
+ const chartData = {
+ labels: chartLabels,
+ datasets: [
+ {
+ label: '์ง์ถ ๋ด์ญ',
+ data: summaries.map((item) => item.totalAmount), // ๊ฐ ์ฃผ์ ํด๋นํ๋ ์ง์ถ ๋ฐ์ดํฐ
+ backgroundColor: summaries.map(() => dynaminColor()), // ์ฐจํธ ์์ญ ๋ฐฐ๊ฒฝ์
+ borderColor: 'rgba(75, 192, 192, 1)', // ์ฐจํธ ์ ์์
+ borderWidth: 2, // ์ฐจํธ ์ ๋๊ป
+ },
+ ],
+ };
+ // ์ฐจํธ ์ต์
+ const chartOptions = {
+ responsive: true,
+ scales: {
+ y: {
+ beginAtZero: true,
+ ticks: {
+ stepSize: 1000, // y ์ถ ๊ฐ๊ฒฉ
+ },
+ },
+ },
+ };
+
+ // ์ฐจํธ ์์ฑ
+ const chartType = selectChart as ChartType
+ const myChart = new Chart(chartRef.current, {
+ type: chartType,
+ data: chartData,
+ options: chartOptions,
+ });
+
+ // ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ ์ ์ฐจํธ ์ธ์คํด์ค ์ ๊ฑฐ
+ return () => {
+ myChart.destroy();
+ };
+
+ }, [summaries, period, selectChart]);
+
+ return (
+
+
+
+ )
+}
+
+export default DeatilChart
+
+const StyledCanvas = styled.canvas`
+ max-height: 250px;
+ margin-bottom: 40px;
+`
\ No newline at end of file
diff --git a/src/components/detail/DetailList.tsx b/src/components/detail/DetailList.tsx
new file mode 100644
index 00000000..651d287b
--- /dev/null
+++ b/src/components/detail/DetailList.tsx
@@ -0,0 +1,82 @@
+import styled from "styled-components"
+import { Table } from "antd"
+interface Summaries {
+ summaries: SummaryResponse
+}
+
+function DetailList({summaries}: Summaries) {
+ let income = 0
+ let expenses = 0
+
+ for(let i = 0; i < summaries.length; i++) {
+ if(summaries[i].totalAmount >= 0) {
+ income += summaries[i].totalAmount
+ } else {
+ expenses += summaries[i].totalAmount
+ }
+ }
+
+ // table
+ const tableitemSource = summaries.map((item, index) => ({
+ key: index+1,
+ summaiesDate : item._id,
+ summariesAmount: item.totalAmount >= 0 ? item.totalAmount.toLocaleString() : {item.totalAmount.toLocaleString()}
+ }))
+
+ const itemColumns = [
+ {
+ title: '๋ ์ง',
+ dataIndex: 'summaiesDate',
+ key: 'summaiesDate'
+ },
+ {
+ title: '๊ธ์ก',
+ dataIndex: 'summariesAmount',
+ key: 'summariesAmount',
+ }
+ ]
+
+
+ return (
+
+
+
+
+ ์์
: {income.toLocaleString()} ์
+
+
+ ์ง์ถ : {expenses.toLocaleString()} ์
+
+
+
+
+ )
+}
+
+export default DetailList
+
+const StyleListExpense = styled.span`
+ color: red
+`
+
+const StyleAmount = styled.div`
+ margin-top: 50px;
+ margin-bottom: 20px;
+ display: flex;
+ justify-content: center;
+`
+
+const StyleIncome = styled.div`
+ display: inline-block;
+`
+
+const SytleExpese = styled.div`
+ display: inline-block;
+ margin-left: 40px;
+ color: red
+`
diff --git a/src/components/detail/SelectCategory.tsx b/src/components/detail/SelectCategory.tsx
new file mode 100644
index 00000000..3a007d9d
--- /dev/null
+++ b/src/components/detail/SelectCategory.tsx
@@ -0,0 +1,40 @@
+import styled from 'styled-components'
+
+interface OnSelectCategory {
+ summaries: SearchResponseItem[]
+ onSelectCategory: (value: string) => void
+}
+
+function SelectCategory({summaries, onSelectCategory}: OnSelectCategory) {
+
+ const handleChangeCategory = (e:React.ChangeEvent) => {
+ onSelectCategory(e.target.value)
+ e.target.blur();
+ }
+
+ return (
+ <>
+
+
+ {summaries.map((item, index) =>
+
+ )}
+
+ >
+
+ )
+}
+
+export default SelectCategory
+
+const StyledSelectCategory = styled.select`
+ width: 140px;
+ height: 30px;
+ font-size: 18px;
+ text-align: center;
+ margin-left: 20px;
+`
\ No newline at end of file
diff --git a/src/components/detail/SelectChart.tsx b/src/components/detail/SelectChart.tsx
new file mode 100644
index 00000000..d4649c43
--- /dev/null
+++ b/src/components/detail/SelectChart.tsx
@@ -0,0 +1,37 @@
+import styled from 'styled-components'
+
+interface OnSelectChartProps {
+ onSelectChart: (value: string) => void
+}
+
+function SelectChart({onSelectChart}: OnSelectChartProps) {
+ const handleSelectChart = (e: React.ChangeEvent) => {
+ const value = e.target.value
+ onSelectChart(value)
+ e.target.blur();
+ }
+
+ return (
+
+
+
+
+
+ )
+}
+
+export default SelectChart
+
+const StyledSelectChart = styled.select`
+ width: 120px;
+ height: 30px;
+ font-size: 20px;
+ text-align: center;
+ margin-left: 20px;
+`
\ No newline at end of file
diff --git a/src/components/detail/SelectMonthly.tsx b/src/components/detail/SelectMonthly.tsx
new file mode 100644
index 00000000..5374eeff
--- /dev/null
+++ b/src/components/detail/SelectMonthly.tsx
@@ -0,0 +1,37 @@
+import styled from "styled-components"
+
+interface Summaries {
+ summaries: SummaryResponseItem[]
+ onSelectPeriod: (value: string) => void
+}
+
+const SelectMonthly = ({summaries, onSelectPeriod}: Summaries) => {
+ const handleChange = (e: React.ChangeEvent) => {
+ onSelectPeriod(e.target.value)
+ e.target.blur();
+ }
+
+ return (
+ <>
+
+
+ {summaries.map((item, index) =>
+
+ )}
+
+ >
+ )
+}
+
+export default SelectMonthly
+
+const StyledSelectMonthly = styled.select`
+ width: 140px;
+ height: 30px;
+ font-size: 18px;
+ text-align: center;
+`
diff --git a/src/components/detail/SelectPeriod.tsx b/src/components/detail/SelectPeriod.tsx
new file mode 100644
index 00000000..9bbfdb3f
--- /dev/null
+++ b/src/components/detail/SelectPeriod.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import styled from 'styled-components';
+interface OnPeriodProps {
+ onPeriodChange: (value: string) => void;
+}
+
+const SelectPeriod: React.FC = ({ onPeriodChange }) => {
+ const handleChange = (e: React.ChangeEvent) => {
+ const value = e.target.value;
+ onPeriodChange(value);
+ e.target.blur();
+ };
+
+ return (
+
+
+
+
+ );
+};
+
+export default SelectPeriod;
+
+const StyledSelectPeriod = styled.select`
+ width: 120px;
+ height: 30px;
+ font-size: 20px;
+ text-align: center;
+`
\ No newline at end of file
diff --git a/src/components/graph/Graph.tsx b/src/components/graph/Graph.tsx
new file mode 100644
index 00000000..91877afa
--- /dev/null
+++ b/src/components/graph/Graph.tsx
@@ -0,0 +1,280 @@
+/* eslint-disable no-console */
+import React, { useState, useEffect, useRef } from 'react';
+import { Collapse } from 'antd';
+import Chart from 'chart.js/auto';
+import { expenseSummary } from '@/lib/api/Api';
+import { FaArrowLeft } from 'react-icons/fa';
+import { useNavigate } from 'react-router-dom';
+import { theme } from '@/styles/theme';
+import styled from 'styled-components';
+
+interface ExpenseItem {
+ _id: string;
+ totalAmount: number;
+}
+
+function getWeeksInMonth(year: number, month: number): string[][] {
+ const weeks: string[][] = [];
+
+ const firstDay = new Date(year, month - 1, 1);
+ const lastDay = new Date(year, month, 0);
+
+ let currentWeek: string[] = [];
+ const currentDate = firstDay;
+
+ while (currentDate <= lastDay) {
+ const dateStr = `${year}-${month.toString().padStart(2, '0')}-${currentDate.getDate().toString().padStart(2, '0')}`;
+ currentWeek.push(dateStr);
+
+ if (currentDate.getDay() === 6 || currentDate === lastDay) {
+ weeks.push(currentWeek);
+ currentWeek = [];
+ }
+
+ currentDate.setDate(currentDate.getDate() + 1);
+ }
+
+ if (currentWeek.length > 0) {
+ weeks.push(currentWeek);
+ }
+
+ return weeks;
+}
+
+function getOrdinalWeek(index: number): string {
+ const ordinalNumbers = ['์ฒซ์งธ', '๋์งธ', '์
์งธ', '๋ท์งธ', '๋ค์ฏ์งธ', '์ฌ์ฏ์งธ'];
+ return ordinalNumbers[index] || '';
+}
+
+function App() {
+ const [expenseData, setExpenseData] = useState([]);
+ const currentDate = new Date();
+ const currentYear = currentDate.getFullYear();
+ const currentMonth = currentDate.getMonth() + 1;
+ const [selectedYear, setSelectedYear] = useState(currentYear);
+ const [selectedMonth, setSelectedMonth] = useState(currentMonth);
+ const chartRefs = useRef<(HTMLCanvasElement | null)[]>([]);
+ const navigate = useNavigate()
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ useEffect(() => {
+ updateCharts();
+ },);
+
+ const fetchData = async () => {
+ try {
+ const data = await expenseSummary('daily');
+ setExpenseData(data);
+ } catch (error) {
+ console.error('Failed to fetch expense data:', error);
+ }
+ };
+
+ const handleYearChange = (event: React.ChangeEvent): void => {
+ setSelectedYear(Number(event.target.value));
+ };
+
+ const handleMonthChange = (event: React.ChangeEvent): void => {
+ setSelectedMonth(Number(event.target.value));
+ };
+
+ const handlePreviousMonth = (): void => {
+ if (selectedMonth === 1) {
+ setSelectedYear((prevYear) => prevYear - 1);
+ setSelectedMonth(12);
+ } else {
+ setSelectedMonth((prevMonth) => prevMonth - 1);
+ }
+ };
+
+ const handleNextMonth = (): void => {
+ if (selectedMonth === 12) {
+ setSelectedYear((prevYear) => prevYear + 1);
+ setSelectedMonth(1);
+ } else {
+ setSelectedMonth((prevMonth) => prevMonth + 1);
+ }
+ };
+
+ const updateCharts = () => {
+ chartRefs.current.forEach((chartRef, index) => {
+ if (chartRef) {
+ const ctx = chartRef.getContext('2d');
+ if (ctx) {
+ const weeksInMonth = getWeeksInMonth(selectedYear, selectedMonth);
+ if (weeksInMonth[index]) {
+ const week = weeksInMonth[index];
+ const weekTitle = index === 0 ? '์ฒซ์งธ ์ฃผ' : `${getOrdinalWeek(index)} ์ฃผ`;
+ let existingChart = Chart.getChart(chartRef);
+ if (existingChart) {
+ existingChart.data.labels = week.map((date) => date.split('-')[2]);
+ existingChart.data.datasets[0].data = week.map((date) => {
+ const expenseItem = expenseData.find((item) => item._id === date);
+ return expenseItem ? expenseItem.totalAmount : 0;
+ });
+ existingChart.update();
+ } else {
+ existingChart = new Chart(ctx, {
+ type: 'bar',
+ data: {
+ labels: week.map((date) => date.split('-')[2]),
+ datasets: [
+ {
+ label: `${weekTitle} ๊ทธ๋ํ`,
+ data: week.map((date) => {
+ const expenseItem = expenseData.find((item) => item._id === date);
+ return expenseItem ? expenseItem.totalAmount : 0;
+ }),
+ backgroundColor: 'rgba(75, 192, 192, 0.2)',
+ borderColor: 'rgba(75, 192, 192, 1)',
+ borderWidth: 1,
+ },
+ ],
+ },
+ options: {
+ scales: {
+ y: {
+ beginAtZero: true,
+ },
+ },
+ },
+ });
+ }
+ }
+ }
+ }
+ });
+ };
+
+ const renderMonthGraph = (year: number, month: number) => {
+ const weeksInMonth = getWeeksInMonth(year, month);
+
+ const weekData = weeksInMonth.map((week, index) => {
+ const weekTitle = index === 0 ? '์ฒซ์งธ ์ฃผ' : `${getOrdinalWeek(index)} ์ฃผ`;
+
+ const weekExpense = week.reduce((total, date) => {
+ const expenseItem = expenseData.find((item) => item._id === date);
+ const totalAmount = expenseItem ? expenseItem.totalAmount : 0;
+ return total + totalAmount;
+ }, 0);
+
+ const startDay = Number(week[0].split('-')[2]);
+ const endDay = Number(week[week.length - 1].split('-')[2]);
+
+ return {
+ title: weekTitle,
+ period: `${month}์ ${startDay}์ผ - ${month}์ ${endDay}์ผ`,
+ totalExpense: weekExpense,
+ };
+ });
+
+
+ return (
+
+ {weekData.map((week, index) => (
+
+
+ - {`${week.period}`}
+ - {`์ด ๊ธ์ก: ${week.totalExpense .toLocaleString()} ์`}
+
+
+
+
+ ))}
+
+ );
+ };
+
+ const years = [];
+ for (let i = 2022; i <= 2099; i++) {
+ years.push(
+
+ );
+ }
+
+ const months = [];
+ for (let i = 1; i <= 12; i++) {
+ months.push(
+
+ );
+ }
+
+ const hanldeBackPage = () => {
+ navigate('/')
+ }
+
+ return (
+
+
+
+
+
์ฃผ๊ฐ ๊ทธ๋ํ
+
+
+
+
+
+
+
{renderMonthGraph(selectedYear, selectedMonth)}
+
+ );
+}
+
+const Div = styled.div`
+ display: flex;
+ justify-content: center;
+ margin: 20px;
+`
+
+const BackButton = styled.button`
+ border: none;
+ font-size: 20px;
+ margin: 15px;
+ cursor: pointer;
+ background-color: #fff;
+ position: relative;
+/* left: - 50px; */
+
+ &:hover {
+ color: ${theme.colors.red};
+ }
+`;
+
+const Button = styled.button`
+ font-size: 20px;
+`
+
+const Li = styled.li`
+ color: red;
+`
+
+const H1 = styled.h1`
+ font-size: 25px;
+ margin-bottom: 33px;
+ padding-left: 190px;
+`
+
+const Select = styled.select`
+ font-size: 16px;
+`
+
+export default App;
\ No newline at end of file
diff --git a/src/components/modal/AddModal.tsx b/src/components/modal/AddModal.tsx
new file mode 100644
index 00000000..82e4b84c
--- /dev/null
+++ b/src/components/modal/AddModal.tsx
@@ -0,0 +1,282 @@
+import React, { useState, useRef } from 'react';
+import ExpensesAmount from './ExpensesAmount';
+import ExpensesTag from './ExpensesTag';
+import DepositTag from './DepositTag';
+import PaymentMethod from './PaymentMethod';
+import { numeric } from '@/lib/utils/Numeric';
+import { createdExpense } from '@/lib/api/Api';
+import { styled, css } from 'styled-components';
+import { theme } from '@/styles/theme';
+import { FaArrowLeft } from 'react-icons/fa';
+
+interface AddModalProps {
+ close: () => void;
+ onItemUpdated?: () => void;
+}
+
+function AddModal({ close, onItemUpdated }: AddModalProps) {
+ const [type, setType] = useState(''); // ์
๊ธ/์ง์ถ form
+ const [amount, setAmount] = useState(0); // ์๋น ๊ธ์ก
+ const [tag, setTag] = useState(''); // ์นดํ
๊ณ ๋ฆฌ ์๋น ํ๊ทธ
+ const [paymentMethod, setPaymentMethod] = useState(''); // ๊ฒฐ์ ๋ฐฉ์
+ const [activeButton, setActiveButton] = useState(''); // ๋ฒํผ ํ์ฑํ ์ํ ํ์ธ
+ const today = new Date().toISOString().slice(0, 10);
+ const [selectDate, setSelectDate] = useState(today);
+ const modalRef = useRef(null);
+
+ const handleButtonClick = (
+ e: React.MouseEvent,
+ ) => {
+ const formType = e.currentTarget.dataset.formType; // ๋ฐ์ดํฐ์
์ ์ด์ฉํ ํ์
์ง์
+ setType(formType); // ์ง์ ๋ ํ์
์ type๊ฐ์ผ๋ก
+ setActiveButton(formType || ''); // ์ง์ ๋ type์ ๋ฐ๋ผ ๋ฒํผ ํ์ฑํ
+ };
+
+ // numeric
+ const handleAmountChange = (e: React.ChangeEvent) => {
+ const input = e.target.value;
+ setAmount(numeric(input));
+ };
+
+ const handleTagChange = (tags: string) => {
+ setTag(tags);
+ };
+
+ const handleMethodChange = (tags: string) => {
+ setPaymentMethod(tags);
+ };
+
+ const handleSubmit = async () => {
+ // type์ด expense์ผ ๋ amount๊ฐ ์์๋ก ์๋ฒ์ ๋ฐ์ดํฐ์ ์ ๋ฌ๋๊ฒ
+ let formAmount = amount;
+ if (type === 'expense') {
+ formAmount = -amount;
+ }
+ // category์ ์๋น ํ๊ทธ ๊ฐ์ด ์๊ณ , paymentMethod๊ฐ์ด ์์ ๋ ์นดํ
๊ณ ๋ฆฌ์ ์ถ๊ฐ
+ let category = tag;
+ if (paymentMethod) {
+ category += `, ${paymentMethod}`;
+ }
+
+ const data = {
+ amount: formAmount,
+ category: category,
+ date: new Date(selectDate).toString(),
+ };
+
+ await createdExpense(data);
+ if (onItemUpdated) {
+ onItemUpdated();
+ }
+ close();
+ };
+
+ const handleDate = (e: React.ChangeEvent) => {
+ const input = e.target.value;
+ setSelectDate(input);
+ };
+
+ const handleClick = (e: React.MouseEvent) => {
+ if (e.target === modalRef.current) close();
+ };
+
+ return (
+
+
+
+
+
+
+ ๋ ์ง ์ ํ
+
+
+ {/*์
๊ธ ๋ฒํผ*/}
+
+ ์
๊ธ
+
+ {/*์ง์ถ ๋ฒํผ*/}
+
+ ์ง์ถ
+
+
+
+ {type === 'deposit' ? (
+
+ ) : type === 'expense' ? (
+
+ ) : null}
+ {type === 'deposit' ? null : type === 'expense' ? (
+
+ ) : null}
+ ํ์ธ
+
+
+
+ );
+}
+
+const Container = styled.div`
+ width: 390px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin: 0 auto;
+`;
+
+const BackButton = styled.button`
+ border: none;
+ font-size: 20px;
+ margin: 15px;
+ cursor: pointer;
+ background-color: #fff;
+ position: relative;
+ left: -150px;
+
+ &:hover {
+ color: ${theme.colors.red};
+ }
+`;
+
+const StyleDateLabel = styled.label`
+ margin-bottom: 8px;
+ font-weight: bold;
+`;
+
+const StyleDate = styled.input`
+ width: 50%;
+ text-align: center;
+`;
+
+const ButtonCotainer = styled.div`
+ display: flex;
+ gap: 50px;
+ justify-content: center;
+ margin: 10px;
+`;
+
+const DepositButton = styled.button<{
+ $green?: string;
+ $active?: boolean;
+}>`
+ width: 100px;
+ height: 30px;
+ border-radius: 8px;
+ font-size: 18px;
+ font-weight: bold;
+ border: none;
+ cursor: pointer;
+ transition: all ease 1s 0s;
+
+ ${(props) =>
+ props.$green &&
+ css`
+ &:hover {
+ background-color: ${theme.colors.green};
+ color: #ffffffdb;
+ background-image: linear-gradient(315deg, #b9fad9, transparent);
+ }
+ `}
+
+ ${(props) =>
+ props.$active &&
+ css`
+ background-color: ${theme.colors.green};
+ color: #ffffffdb;
+ background-image: linear-gradient(315deg, #b9fad9, transparent);
+ `}
+`;
+
+const ExpenseButton = styled.button<{
+ $red?: string;
+ $active?: boolean;
+}>`
+ width: 100px;
+ height: 30px;
+ border-radius: 8px;
+ font-size: 18px;
+ font-weight: bold;
+ border: none;
+ cursor: pointer;
+ transition: all ease 1s 0s;
+
+ ${(props) =>
+ props.$red &&
+ css`
+ &:hover {
+ background-color: ${theme.colors.red};
+ color: #ffffffdb;
+ background-image: linear-gradient(315deg, #e6b0c3, transparent);
+ }
+ `}
+
+ ${(props) =>
+ props.$active &&
+ css`
+ background-color: ${theme.colors.red};
+ color: #ffffffdb;
+ background-image: linear-gradient(315deg, #e6b0c3, transparent);
+ `}
+`;
+
+const Submit = styled.button`
+ width: 250px;
+ height: 50px;
+ margin: 10px;
+ cursor: pointer;
+ border-radius: 8px;
+ border: none;
+ font-size: 18px;
+ font-weight: bold;
+
+ &:hover {
+ background-color: #33ff99;
+ color: #ffffffdb;
+ }
+`;
+
+const AddModalWraaper = styled.div`
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 9999;
+`;
+
+const Modal = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ background-color: #fff;
+ padding: 20px;
+ border-radius: 4px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ max-width: 400px;
+ width: 100%;
+`;
+export default AddModal;
diff --git a/src/components/modal/AllTag.tsx b/src/components/modal/AllTag.tsx
new file mode 100644
index 00000000..2d34f107
--- /dev/null
+++ b/src/components/modal/AllTag.tsx
@@ -0,0 +1,78 @@
+/* eslint-disable no-unused-vars */
+import { useState } from 'react';
+import styled from 'styled-components';
+import { tags } from '@/lib/utils/Tags';
+
+interface Option {
+ label: string;
+ icon: React.ReactNode;
+}
+
+interface AllTagProps {
+ handleTagChange: (tags: string) => void;
+}
+
+function AllTag({ handleTagChange }: AllTagProps) {
+ const [isClosed, setIsClosed] = useState(true); // ๋๋กญ๋ค์ด ํ์์ ์ฌ๋ซ๋ ์ํ๊ด๋ฆฌ
+
+ // ํ๊ทธ๋ฅผ ์ ํํ๋ฉด selectedOption๊ฐ์ผ๋ก ์ ํํ option์ label์ ์ ๋ฌ
+ // ๊ทธ๋ฆฌ๊ณ ๋๋กญ๋ค์ด ๋ฉ๋ด ๋ซํ
+ // ์์ ์ปดํฌ๋ํธ๋ก option.label์ ์ ๋ฌ
+ const handleOptionSelect = (option: Option) => {
+ setIsClosed(!isClosed);
+ handleTagChange(option.label);
+ };
+ return (
+ <>
+ ๊ฒ์ํ ํ๊ทธ๋ฅผ ์ ํํ์ธ์.
+
+ {/*์ ๋ฌ ๋ฐ์ options ๋ฐฐ์ด์ map๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๊ฐ๊ฐ์ label๊ณผ icon์ ๋ ๋๋ง๋๊ฒ*/}
+ {tags.map((option: Option, index: number) => (
+
+ ))}
+
+ >
+ );
+}
+
+const Title = styled.h2`
+ height: 3rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
+
+const ItemBoard = styled.div`
+ display: flex;
+ flex-wrap: wrap;
+`;
+
+const MenuItem = styled.div`
+ margin: 0.5%;
+ flex: 1 0 24%;
+ display: flex;
+ font-size: 16px;
+ padding: 14px 10px;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+
+ &:hover {
+ color: red;
+ cursor: pointer;
+ transform: scale(1.1);
+ }
+`;
+
+const IconWrapper = styled.div`
+ margin-bottom: 0.5rem;
+`;
+
+const Label = styled.span`
+ font-size: 12px;
+`;
+
+export default AllTag;
diff --git a/src/components/modal/DepositTag.tsx b/src/components/modal/DepositTag.tsx
new file mode 100644
index 00000000..7d9cc727
--- /dev/null
+++ b/src/components/modal/DepositTag.tsx
@@ -0,0 +1,18 @@
+/* eslint-disable no-unused-vars */
+import Dropdown from './Dropdown';
+import { depositTags } from '@/lib/utils/Tags';
+
+interface DepositTagProps {
+ handleTagChange: (tags: string) => void;
+ tag?: string;
+}
+
+function DepositTag({ handleTagChange, tag }: DepositTagProps) {
+ return (
+ // options์ผ๋ก depositTags ๋ฐฐ์ด์ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ
+ // ์์ ์ปดํฌ๋ํธ์์ ์ ๋ฌ ๋ฐ์ handleTagChange๋ฅผ onSelect๋ก ํ์ ์ปดํฌ๋ํธ๋ก props ์ ๋ฌ
+
+ );
+}
+
+export default DepositTag;
diff --git a/src/components/modal/Dropdown.tsx b/src/components/modal/Dropdown.tsx
new file mode 100644
index 00000000..6efdad68
--- /dev/null
+++ b/src/components/modal/Dropdown.tsx
@@ -0,0 +1,109 @@
+/* eslint-disable no-unused-vars */
+import { useState } from 'react';
+import styled from 'styled-components';
+
+interface Option {
+ label: string;
+ icon: React.ReactNode;
+}
+
+interface DropdownProps {
+ options: Option[];
+ onSelect: (selectedOption: string) => void;
+ tag?: string;
+}
+
+function Dropdown({
+ options,
+ onSelect,
+ tag = 'ํ๊ทธ๋ฅผ ์ ํํ์ธ์.',
+}: DropdownProps) {
+ const [isClosed, setIsClosed] = useState(true); // ๋๋กญ๋ค์ด ํ์์ ์ฌ๋ซ๋ ์ํ๊ด๋ฆฌ
+ const [selectedOption, setSelectedOption] = useState(tag); // tag๋ฅผ ์ ํํ๊ธฐ ์ ์ด๊ธฐ๊ฐ
+
+ // ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ํ ๊ธ์์ผ๋ก
+ const toggleDropdown = () => {
+ setIsClosed(!isClosed);
+ };
+
+ // ํ๊ทธ๋ฅผ ์ ํํ๋ฉด selectedOption๊ฐ์ผ๋ก ์ ํํ option์ label์ ์ ๋ฌ
+ // ๊ทธ๋ฆฌ๊ณ ๋๋กญ๋ค์ด ๋ฉ๋ด ๋ซํ
+ // ์์ ์ปดํฌ๋ํธ๋ก option.label์ ์ ๋ฌ
+ const handleOptionSelect = (option: Option) => {
+ setSelectedOption(option.label);
+ setIsClosed(!isClosed);
+ onSelect(option.label);
+ };
+
+ return (
+
+ {selectedOption}
+
+
+ );
+}
+
+const DropdownWrapper = styled.div`
+ transition: all 0.2s ease-in-out;
+ overflow: hidden;
+ margin: 30px;
+ background: rgb(248, 248, 248);
+ border: solid 1px rgb(222, 222, 222);
+ width: 320px;
+ cursor: pointer;
+ text-align: center;
+`;
+
+const Title = styled.h2`
+ height: 48px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
+
+const Menu = styled.div<{ $closed?: string | undefined }>`
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ height: ${(props) => (props.$closed === 'true' ? '0px' : 'auto')};
+`;
+
+const ItemBoard = styled.div`
+ display: flex;
+ flex-wrap: wrap;
+`;
+
+const MenuItem = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ font-size: 16px;
+ padding: 14px 10px;
+ flex: 1 0 24%;
+ margin: 0.5%;
+
+ &:hover {
+ color: red;
+ }
+`;
+
+const IconWrapper = styled.div`
+ margin-bottom: 8px;
+`;
+
+const Label = styled.span`
+ font-size: 12px;
+`;
+
+export default Dropdown;
diff --git a/src/components/modal/ExpensesAmount.tsx b/src/components/modal/ExpensesAmount.tsx
new file mode 100644
index 00000000..de9ebaed
--- /dev/null
+++ b/src/components/modal/ExpensesAmount.tsx
@@ -0,0 +1,54 @@
+/* eslint-disable no-unused-vars */
+import { ChangeEvent, useRef, useEffect } from 'react';
+import styled from 'styled-components';
+
+interface ExpensesAmountProps {
+ amount: number;
+ handleAmountChange: (e: ChangeEvent) => void;
+}
+
+function ExpensesAmount({ amount, handleAmountChange }: ExpensesAmountProps) {
+ const inputRef = useRef(null);
+
+ useEffect(() => {
+ if (inputRef.current) {
+ inputRef.current.focus();
+ }
+ }, []);
+
+ return (
+
+ ₩
+
+
+ );
+}
+
+const AmountContainer = styled.div`
+ width: 150px;
+ border-bottom: 1px solid;
+ display: flex;
+ justify-content: space-between;
+ line-height: 1.5;
+`;
+
+const Won = styled.span``;
+
+const AmountInput = styled.input`
+ border: none;
+ width: 100px;
+
+ &:focus {
+ border: none;
+ outline: none;
+ font-weight: bold;
+ }
+`;
+
+export default ExpensesAmount;
diff --git a/src/components/modal/ExpensesTag.tsx b/src/components/modal/ExpensesTag.tsx
new file mode 100644
index 00000000..5b3ee19e
--- /dev/null
+++ b/src/components/modal/ExpensesTag.tsx
@@ -0,0 +1,16 @@
+/* eslint-disable no-unused-vars */
+import Dropdown from './Dropdown';
+import { expenseTags } from '@/lib/utils/Tags';
+
+interface ExpensesTagProps {
+ handleTagChange: (tags: string) => void;
+ tag?: string;
+}
+
+function ExpensesTag({ handleTagChange, tag }: ExpensesTagProps) {
+ return (
+
+ );
+}
+
+export default ExpensesTag;
diff --git a/src/components/modal/InfoModal.tsx b/src/components/modal/InfoModal.tsx
new file mode 100644
index 00000000..e473a8ad
--- /dev/null
+++ b/src/components/modal/InfoModal.tsx
@@ -0,0 +1,186 @@
+import React, { useState, useRef, useEffect } from 'react';
+import { styled } from 'styled-components';
+import { FaArrowLeft } from 'react-icons/fa';
+import { theme } from '@/styles/theme';
+
+interface UpdateModalProps {
+ amount: number;
+ category: string;
+ date: string;
+ close: () => void;
+}
+
+function InfoModal({
+ amount: initialAmount,
+ category,
+ date,
+ close,
+}: UpdateModalProps) {
+ const [type, setType] = useState();
+ const amount = Math.abs(initialAmount);
+ const splitCategory = category.split(', ');
+ const tag = splitCategory[0];
+ const paymentMethod = splitCategory[1];
+ const modalRef = useRef(null);
+
+ useEffect(() => {
+ setType(initialAmount >= 0 ? 'deposit' : 'expense');
+ }, [initialAmount]);
+
+ const handleRef = (e: React.MouseEvent) => {
+ if (e.target === modalRef.current) close();
+ };
+
+ const krDate = new Date(date);
+ const year = krDate.getFullYear(); // ์ฐ๋
+ const month = krDate.getMonth() + 1; // ์ (0๋ถํฐ ์์ํ๋ฏ๋ก +1์ ํด์ค)
+ const day = krDate.getDate(); // ์ผ
+ const creationDate = `${year}๋
${month}์ ${day}์ผ`;
+
+ return (
+
+
+
+
+
+
+ {type === 'deposit' ? (
+ <>
+
+ < ์
๊ธ ์์ธ ์ ๋ณด >
+
+ >
+ ) : (
+ <>
+
+ < ์ง์ถ ์์ธ ์ ๋ณด >
+
+ >
+ )}
+ {creationDate}
+
+ ๊ธ์ก {amount.toLocaleString()}์
+
+ {type === 'deposit' ? (
+ <>
+
+ ์
๊ธ๋ด์ญ {tag}
+
+ >
+ ) : (
+ <>
+
+ ์ง์ถ๋ด์ญ {tag}
+
+
+ ๊ฒฐ์ ๋ฐฉ๋ฒ {paymentMethod}
+
+ >
+ )}
+
+
+
+ );
+}
+
+const Container = styled.div`
+ width: 390px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin: 0 auto;
+`;
+
+const BackButton = styled.button`
+ border: none;
+ font-size: 20px;
+ margin: 15px;
+ cursor: pointer;
+ background-color: #fff;
+ position: relative;
+ left: -150px;
+
+ &:hover {
+ color: ${theme.colors.red};
+ }
+`;
+
+const ModalWrapper = styled.div`
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 9999;
+`;
+
+const Modal = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ background-color: #fff;
+ padding: 20px;
+ border-radius: 4px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ max-width: 400px;
+ width: 100%;
+`;
+
+const Span = styled.span`
+ font-size: 16px;
+ font-weight: bold;
+ color: #000;
+`;
+
+const TitleDeposit = styled.div`
+ margin-bottom: 25px;
+ font-size: 18px;
+ font-weight: bold;
+ text-align: center;
+ color: ${theme.colors.green};
+ display: flex;
+ gap: 5px;
+`;
+
+const TitleExpense = styled.div`
+ margin-bottom: 25px;
+ font-size: 18px;
+ font-weight: bold;
+ text-align: center;
+ color: ${theme.colors.red};
+ display: flex;
+ gap: 5px;
+`;
+
+const InfoDate = styled.div`
+ margin-bottom: 25px;
+ font-weight: bold;
+`;
+
+const InfoAmount = styled.div`
+ margin-bottom: 25px;
+ text-align: center;
+`;
+const Title = styled.div`
+ margin-bottom: 15px;
+ font-size: 18px;
+ font-weight: 600;
+`;
+
+const InfoTag = styled.div`
+ margin-bottom: 25px;
+ text-align: center;
+`;
+
+const InfoPaymentMethod = styled.div`
+ margin-bottom: 25px;
+ text-align: center;
+`;
+
+export default InfoModal;
diff --git a/src/components/modal/PaymentMethod.tsx b/src/components/modal/PaymentMethod.tsx
new file mode 100644
index 00000000..26ad5def
--- /dev/null
+++ b/src/components/modal/PaymentMethod.tsx
@@ -0,0 +1,16 @@
+/* eslint-disable no-unused-vars */
+import Dropdown from './Dropdown';
+import { PaymentTags } from '@/lib/utils/Tags';
+
+interface PaymentTagProps {
+ handleMethodChange: (tags: string) => void;
+ tag?: string;
+}
+
+function PaymentTag({ handleMethodChange, tag }: PaymentTagProps) {
+ return (
+
+ );
+}
+
+export default PaymentTag;
diff --git a/src/components/modal/SearchModal.tsx b/src/components/modal/SearchModal.tsx
new file mode 100644
index 00000000..c0acd10a
--- /dev/null
+++ b/src/components/modal/SearchModal.tsx
@@ -0,0 +1,86 @@
+import React, { useRef } from 'react';
+import { styled } from 'styled-components';
+import { theme } from '@/styles/theme';
+import { FaArrowLeft } from 'react-icons/fa';
+import AllTag from './AllTag';
+
+interface SearchModalProps {
+ close: () => void;
+ setTag: React.Dispatch>;
+}
+
+function SearchModal({ close, setTag }: SearchModalProps) {
+ const modalRef = useRef(null);
+
+ const handleTagChange = (tags: string) => {
+ setTag(tags);
+ close();
+ };
+
+ const handleClick = (e: React.MouseEvent) => {
+ if (e.target === modalRef.current) close();
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+const Container = styled.div`
+ width: 390px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin: 0 auto;
+`;
+
+const BackButton = styled.button`
+ border: none;
+ font-size: 20px;
+ margin: 15px;
+ cursor: pointer;
+ background-color: #fff;
+ position: relative;
+ left: -150px;
+
+ &:hover {
+ color: ${theme.colors.red};
+ }
+`;
+
+const SearchModalWraaper = styled.div`
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 9999;
+`;
+
+const Modal = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ background-color: #fff;
+ padding: 20px;
+ border-radius: 4px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ max-width: 400px;
+ width: 100%;
+`;
+export default SearchModal;
diff --git a/src/components/modal/UpdateModal.tsx b/src/components/modal/UpdateModal.tsx
new file mode 100644
index 00000000..21472170
--- /dev/null
+++ b/src/components/modal/UpdateModal.tsx
@@ -0,0 +1,230 @@
+import React, { useState, useEffect, useRef } from 'react';
+import ExpensesAmount from './ExpensesAmount';
+import ExpensesTag from './ExpensesTag';
+import DepositTag from './DepositTag';
+import PaymentMethod from './PaymentMethod';
+import { numeric } from '@/lib/utils/Numeric';
+import { updatedRecord, deletedRecord } from '@/lib/api/Api';
+import { styled } from 'styled-components';
+import { FaTrashAlt, FaArrowLeft } from 'react-icons/fa';
+import { theme } from '@/styles/theme';
+
+interface UpdateModalProps {
+ amount: number;
+ category: string;
+ date: string;
+ _id: string;
+ close: () => void;
+ onItemUpdated: () => void;
+}
+
+// props๋ก ์ ๋ฌ๋ฐ์ amount๋ฅผ initialAmount๋ก ๋ฐ์.
+function UpdateModal({
+ amount: initialAmount,
+ category,
+ _id,
+ date,
+ close,
+ onItemUpdated,
+}: UpdateModalProps) {
+ const [type, setType] = useState();
+ const [amount, setAmount] = useState(Math.abs(initialAmount)); // porps๋ก ๋ฐ์ amount๊ฐ์ ๋ ๋๋ง๋ ๋ ์ ์๋ก
+ // props๋ก ๋ฐ์ category์ ๊ฐ์ด "์๋น ํ๊ทธ, ๊ฒฐ์ ๋ฐฉ๋ฒ" ํ์์ด๊ณ ์ด๊ธฐ ์์ ํผ์ ๋ ๋๋ง ํ ๋
+ // ์ ๋ฌ ๋ฐ์ ์๋น ํ๊ทธ์ ๊ฒฐ์ ๋ฐฉ๋ฒ์ด ๋ ๋๋ง ๋ ์ ์๊ฒ split์ ์ด์ฉํด์ , ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ์์ฑ
+ const splitCategory = category.split(', ');
+ const [tag, setTag] = useState(splitCategory[0]);
+ const [paymentMethod, setPaymentMethod] = useState(splitCategory[1]);
+ const modalRef = useRef(null);
+
+ // useEffect๋ฅผ ์ฌ์ฉํด์ ๋ง์ดํธ ๋ ๋ initialAmount๊ฐ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด type์ deposit ์๋๋ฉด expense๊ฐ ๋๋ค.
+ useEffect(() => {
+ setType(initialAmount >= 0 ? 'deposit' : 'expense');
+ }, [initialAmount]);
+
+ const handleAmountChange = (e: React.ChangeEvent) => {
+ const input = e.target.value;
+ setAmount(numeric(input));
+ };
+
+ const handleTagChange = (tags: string) => {
+ setTag(tags);
+ };
+
+ const handleMethodChange = (tags: string) => {
+ setPaymentMethod(tags);
+ };
+
+ const handleSubmit = async () => {
+ const chageData =
+ // amount ๋๋ tag๋ paymentMethod์ state์ด๊ธฐ๊ฐ์ด ๋ฐ๋๋์ง ํ์ธ
+ amount !== Math.abs(initialAmount) ||
+ tag !== splitCategory[0] ||
+ paymentMethod !== splitCategory[1];
+ // ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ชจ๋ฌ์ ๋ซ๊ณ ํจ์๋ฅผ ์ข
๋ฃํ๋ค.
+ if (!chageData) {
+ close();
+ return;
+ }
+
+ // ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ์๋ ์ฝ๋๋ค์ ์คํ
+ // type์ด expense์ผ ๋ ์๋ฒ๋ก ์ ๋ฌํ๋ ๋ฐ์ดํฐ amount๊ฐ ์์๊ฐ ๋๊ฒ ์๋๋ฉด ์ ์๋ก
+ const formAmount = type === 'expense' ? -amount : amount;
+
+ // paymentMethod๊ฐ ์์ผ๋ฉด category์ paymentMethod์ ๊ฐ์ ์ถ๊ฐํด์ ์๋ฒ๋ก ์ ๋ฌ
+ let updatedCategory = tag;
+ if (paymentMethod) {
+ updatedCategory += `, ${paymentMethod}`;
+ }
+
+ const data = {
+ amount: formAmount,
+ category: updatedCategory,
+ date: date,
+ };
+
+ await updatedRecord(_id, data);
+ onItemUpdated();
+ close();
+ };
+
+ const handleDeleted = async () => {
+ await deletedRecord(_id);
+ onItemUpdated();
+ close();
+ };
+
+ // useRef๋ฅผ ์ฌ์ฉํด์ ModalWrapper๋ฅผ ํด๋ฆญํ๊ฒ ๋๋ฉด ๋ชจ๋ฌ์ด ๋ซํ๊ฒ
+ const handleRef = (e: React.MouseEvent) => {
+ if (e.target === modalRef.current) close();
+ };
+
+ // props๋ก ์ ๋ฌ ๋ฐ์ date๊ฐ์ ๋ณํ
+ const krDate = new Date(date);
+ const year = krDate.getFullYear(); // ์ฐ๋
+ const month = krDate.getMonth() + 1; // ์ (0๋ถํฐ ์์ํ๋ฏ๋ก +1์ ํด์ค)
+ const day = krDate.getDate(); // ์ผ
+ const creationDate = `${year}๋
${month}์ ${day}์ผ`;
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {creationDate}
+
+ {/* type์ด deposit์ผ ๋์ expense์ผ ๋ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ ์ค์ */}
+ {type === 'deposit' ? (
+
+ ) : (
+
+ )}
+ {/* type์ด expense์ผ ๋๋ง PaymentMethod ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๊ฒ*/}
+ {type === 'expense' ? (
+
+ ) : null}
+ ํ์ธ
+
+
+
+ );
+}
+
+const Container = styled.div`
+ width: 390px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin: 0 auto;
+`;
+
+const ButtonContainer = styled.div`
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+`;
+
+const BackButton = styled.button`
+ border: none;
+ font-size: 20px;
+ margin: 15px;
+ cursor: pointer;
+ background-color: #fff;
+
+ &:hover {
+ color: ${theme.colors.red};
+ }
+`;
+
+const DeleteButton = styled.button`
+ border: none;
+ font-size: 20px;
+ margin: 15px;
+ cursor: pointer;
+ background-color: #fff;
+
+ &:hover {
+ color: ${theme.colors.red};
+ }
+`;
+
+const DateContainer = styled.div`
+ margin-bottom: 10px;
+`;
+
+const Submit = styled.button`
+ width: 250px;
+ height: 50px;
+ margin: 10px;
+ cursor: pointer;
+ border-radius: 8px;
+ border: none;
+ font-size: 18px;
+ font-weight: bold;
+
+ &:hover {
+ background-color: #33ff99;
+ color: #ffffffdb;
+ }
+`;
+
+const ModalWrapper = styled.div`
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 9999;
+`;
+
+const Modal = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ background-color: #fff;
+ padding: 20px;
+ border-radius: 4px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ max-width: 400px;
+ width: 100%;
+`;
+
+export default UpdateModal;
diff --git a/src/lib/api/Api.ts b/src/lib/api/Api.ts
new file mode 100644
index 00000000..a9646f40
--- /dev/null
+++ b/src/lib/api/Api.ts
@@ -0,0 +1,154 @@
+/* eslint-disable no-console */
+import { API_URL, HEADERS, userId } from '@/lib/api/Base';
+
+// ์๋น ๊ธฐ๋ก ์์ฑ
+export const createdExpense = async (data: ExpenseData) => {
+ try {
+ const res = await fetch(`${API_URL}/expenses`, {
+ method: 'POST',
+ headers: HEADERS,
+ body: JSON.stringify({ ...data, userId }),
+ });
+ // ์๋น ๊ธฐ๋ก ์์ฑ ์ฑ๊ณต
+ if (res.ok) {
+ const data: ExpenseResponse = await res.json();
+ return data;
+ }
+ // ์คํจํ ๊ฒฝ์ฐ
+ throw new Error('๊ธฐ๋ก ์์ฑ์ ์คํจํ์ต๋๋ค.');
+ } catch (error) {
+ console.error(error);
+ throw error;
+ }
+};
+
+// ์๋น ํ๋ชฉ ๋ชฉ๋ก
+export const expenseCategory = async () => {
+ try {
+ const res = await fetch(`${API_URL}/categories?userId=${userId}`, {
+ method: 'GET',
+ headers: HEADERS,
+ });
+ // ๋ชฉ๋ก ํธ์ถ ์ฑ๊ณต
+ if (res.ok) {
+ const data: CategoriesResponse = await res.json();
+ return data;
+ }
+ // ์คํจํ ๊ฒฝ์ฐ
+ throw new Error('์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ ์คํจํ์ต๋๋ค.');
+ } catch (error) {
+ console.error(error);
+ throw error;
+ }
+};
+
+// ๊ฒ์์ด์ ํด๋นํ๋ ์๋น ํญ๋ชฉ ๋ฐ ๊ธ์ก ์กฐํ
+export const expenseSearch = async (keyword: string) => {
+ try {
+ const encodedKeyword = encodeURIComponent(keyword);
+ const res = await fetch(
+ `${API_URL}/expenses/search?q=${encodedKeyword}&userId=${userId}`,
+ {
+ method: 'GET',
+ headers: HEADERS,
+ },
+ );
+
+ // ์ฑ๊ณต
+ if (res.ok) {
+ const data: SearchResponse = await res.json();
+ return data;
+ }
+ // ์คํจ
+ throw new Error('๊ฒ์์ ์คํจํ์ต๋๋ค.');
+ } catch (error) {
+ console.error(error);
+ throw error;
+ }
+};
+
+// ์ผ๋ณ, ์ฃผ๋ณ, ์๋ณ ์๋น ์กฐํ
+export const expenseSummary = async (period: string) => {
+ try {
+ const res = await fetch(
+ `${API_URL}/expenses/summary?period=${period}&userId=${userId}`,
+ {
+ method: 'GET',
+ headers: HEADERS,
+ },
+ );
+ if (res.ok) {
+ const data: SummaryResponseItem[] = await res.json();
+ return data;
+ }
+
+ throw new Error('์กฐํ์ ์คํจํ์ต๋๋ค.');
+ } catch (error) {
+ console.error(error);
+ throw error;
+ }
+};
+
+// ์๋น ๊ธฐ๋ก ์์
+export const updatedRecord = async (id: string, data: ExpenseData) => {
+ try {
+ const res = await fetch(`${API_URL}/expenses/${id}`, {
+ method: 'PUT',
+ headers: HEADERS,
+ body: JSON.stringify(data),
+ });
+
+ if (res.ok) {
+ const data: UpdateResponse = await res.json();
+ return data;
+ }
+
+ throw new Error('์์ ์ ์คํจํ์ต๋๋ค.');
+ } catch (error) {
+ console.error(error);
+ throw error;
+ }
+};
+
+// ์๋น ๊ธฐ๋ก ์ญ์
+export const deletedRecord = async (id: string) => {
+ try {
+ const res = await fetch(`${API_URL}/expenses/${id}`, {
+ method: 'DELETE',
+ headers: HEADERS,
+ });
+
+ if (res.ok) {
+ const data: DeleteResponse = await res.json();
+ return data;
+ }
+
+ throw new Error('์ญ์ ์ ์คํจํ์ต๋๋ค.');
+ } catch (error) {
+ console.error(error);
+ throw error;
+ }
+};
+
+// ์๋น ๊ธฐ๋ก ๋ฌ๋ ฅ ํธ์ถ
+export const calendarData = async (year: number, month: number) => {
+ try {
+ const res = await fetch(
+ `${API_URL}/expenses/calendar?year=${year}&month=${month}&userId=${userId}`,
+ {
+ method: 'GET',
+ headers: HEADERS,
+ },
+ );
+
+ if (res.ok) {
+ const data = await res.json();
+ return data;
+ }
+
+ throw new Error('ํธ์ถ์ ์คํจํ์ต๋๋ค.');
+ } catch (error) {
+ console.error(error);
+ throw error;
+ }
+};
diff --git a/src/lib/api/Base.ts b/src/lib/api/Base.ts
new file mode 100644
index 00000000..3c7366ce
--- /dev/null
+++ b/src/lib/api/Base.ts
@@ -0,0 +1,7 @@
+export const API_URL = import.meta.env.VITE_BASE_URL;
+
+export const HEADERS = {
+ 'content-Type': 'application/json',
+}
+
+export const userId = localStorage.getItem('userId')
\ No newline at end of file
diff --git a/src/lib/utils/Icons.tsx b/src/lib/utils/Icons.tsx
new file mode 100644
index 00000000..7339baf4
--- /dev/null
+++ b/src/lib/utils/Icons.tsx
@@ -0,0 +1,76 @@
+import {
+ FaUtensils,
+ FaBus,
+ FaFilm,
+ FaSprayCan,
+ FaTshirt,
+ FaCut,
+ FaStethoscope,
+ FaPencilAlt,
+ FaMobileAlt,
+ FaBeer,
+ FaRegHandshake,
+ FaPiggyBank,
+ FaTv,
+ FaReceipt,
+ FaCreditCard,
+ FaEllipsisH,
+ FaMoneyBill,
+ FaMoneyCheck,
+ FaMoneyCheckAlt,
+ FaAngleLeft,
+ FaAngleRight,
+ FaSearch,
+} from 'react-icons/fa';
+
+const foodIcon = ; // ์๋น
+const transportationIcon = ; // ๊ตํต๋น
+const culturalIcon = ; // ๋ฌธํ์ํ
+const dailyNecessityIcon = ; // ์ํํ
+const clothesIcon = ; // ์๋ฅ
+const beautyIcon = ; // ๋ฏธ์ฉ
+const medicalHealthIcon = ; // ์๋ฃ/๊ฑด๊ฐ
+const educationIcon = ; // ๊ต์ก
+const communicationIcon = ; // ํต์ ๋น
+const gatheringIcon = ; // ํ์/๋ชจ์
+const eventsIcon = ; // ๊ฒฝ์กฐ์ฌ
+const savingIcon = ; // ์ ์ถ
+const electronicsIcon = ; // ๊ฐ์
+const utilitiesIcon = ; // ๊ณต๊ณผ๊ธ
+const cardIcon = ; // ์นด๋๋๊ธ
+const etcIcon = ; // ๊ธฐํ
+const salaryIcon = ; //
+const moneyIcon = ;
+const cashIcon = ;
+const debitCardIcon = ;
+const creditCardIcon = ;
+const leftIcon = ;
+const rightIcon = ;
+const searchIcon = ;
+
+export {
+ foodIcon,
+ transportationIcon,
+ culturalIcon,
+ dailyNecessityIcon,
+ clothesIcon,
+ beautyIcon,
+ medicalHealthIcon,
+ educationIcon,
+ communicationIcon,
+ gatheringIcon,
+ eventsIcon,
+ savingIcon,
+ electronicsIcon,
+ utilitiesIcon,
+ cardIcon,
+ etcIcon,
+ salaryIcon,
+ moneyIcon,
+ cashIcon,
+ debitCardIcon,
+ creditCardIcon,
+ leftIcon,
+ rightIcon,
+ searchIcon,
+};
diff --git a/src/lib/utils/Numeric.ts b/src/lib/utils/Numeric.ts
new file mode 100644
index 00000000..4a681eeb
--- /dev/null
+++ b/src/lib/utils/Numeric.ts
@@ -0,0 +1,5 @@
+// input์ ์ซ์๊ฐ ์๋ ๋ถ๋ถ์ ์ฐพ์์ ์ ๊ฑฐ
+// ์ซ์ ๋จ์์ , ๊ฐ ํ์ํ๋ฉด input value๊ฐ์ .toLocaleString()
+export const numeric = (input: string) => {
+ return Number(input.replace(/[^0-9]/g, ''));
+}
\ No newline at end of file
diff --git a/src/lib/utils/Tags.tsx b/src/lib/utils/Tags.tsx
new file mode 100644
index 00000000..38834c75
--- /dev/null
+++ b/src/lib/utils/Tags.tsx
@@ -0,0 +1,95 @@
+import {
+ foodIcon,
+ transportationIcon,
+ culturalIcon,
+ dailyNecessityIcon,
+ clothesIcon,
+ beautyIcon,
+ medicalHealthIcon,
+ educationIcon,
+ communicationIcon,
+ gatheringIcon,
+ eventsIcon,
+ savingIcon,
+ electronicsIcon,
+ utilitiesIcon,
+ cardIcon,
+ etcIcon,
+ salaryIcon,
+ moneyIcon,
+ cashIcon,
+ debitCardIcon,
+ creditCardIcon,
+} from '@/lib/utils/Icons';
+import styled from 'styled-components';
+
+export const tags = [
+ { label: '์๋น', icon: foodIcon },
+ { label: '๋ฌธํ์ํ', icon: culturalIcon },
+ { label: '๊ตํต๋น', icon: transportationIcon },
+ { label: '์ํํ', icon: dailyNecessityIcon },
+ { label: '์๋ฅ', icon: clothesIcon },
+ { label: '๋ฏธ์ฉ', icon: beautyIcon },
+ { label: '์๋ฃ/๊ฑด๊ฐ', icon: medicalHealthIcon },
+ { label: '๊ต์ก', icon: educationIcon },
+ { label: 'ํต์ ๋น', icon: communicationIcon },
+ { label: 'ํ์/๋ชจ์', icon: gatheringIcon },
+ { label: '๊ฒฝ์กฐ์ฌ', icon: eventsIcon },
+ { label: '์ ์ถ', icon: savingIcon },
+ { label: '๊ฐ์ ', icon: electronicsIcon },
+ { label: '๊ณต๊ณผ๊ธ', icon: utilitiesIcon },
+ { label: '์นด๋๋๊ธ', icon: cardIcon },
+ { label: '๊ธฐํ', icon: etcIcon },
+ { label: '์๊ธ', icon: salaryIcon },
+ { label: '์ฉ๋', icon: moneyIcon },
+ { label: 'ํ๊ธ', icon: cashIcon },
+ { label: '์ฒดํฌ์นด๋', icon: debitCardIcon },
+ { label: '์ ์ฉ์นด๋', icon: creditCardIcon },
+];
+
+export const expenseTags = [
+ { label: '์๋น', icon: foodIcon },
+ { label: '๋ฌธํ์ํ', icon: culturalIcon },
+ { label: '๊ตํต๋น', icon: transportationIcon },
+ { label: '์ํํ', icon: dailyNecessityIcon },
+ { label: '์๋ฅ', icon: clothesIcon },
+ { label: '๋ฏธ์ฉ', icon: beautyIcon },
+ { label: '์๋ฃ/๊ฑด๊ฐ', icon: medicalHealthIcon },
+ { label: '๊ต์ก', icon: educationIcon },
+ { label: 'ํต์ ๋น', icon: communicationIcon },
+ { label: 'ํ์/๋ชจ์', icon: gatheringIcon },
+ { label: '๊ฒฝ์กฐ์ฌ', icon: eventsIcon },
+ { label: '์ ์ถ', icon: savingIcon },
+ { label: '๊ฐ์ ', icon: electronicsIcon },
+ { label: '๊ณต๊ณผ๊ธ', icon: utilitiesIcon },
+ { label: '์นด๋๋๊ธ', icon: cardIcon },
+ { label: '๊ธฐํ', icon: etcIcon },
+];
+
+export const depositTags = [
+ { label: '์๊ธ', icon: salaryIcon },
+ { label: '์ฉ๋', icon: moneyIcon },
+ { label: '๊ธฐํ', icon: etcIcon },
+];
+
+const CashIcon = () => {cashIcon};
+const DebitCardIcon = () => {debitCardIcon};
+const CreditCardIcon = () => {creditCardIcon};
+
+export const PaymentTags = [
+ { label: 'ํ๊ธ', icon: },
+ { label: '์ฒดํฌ์นด๋', icon: },
+ { label: '์ ์ฉ์นด๋', icon: }
+];
+
+const StyledCashIcon = styled.span `
+ color: green;
+`;
+
+const StyledDebitCardIcon = styled.span `
+ color: blue;
+`;
+
+const StyledCreditCardIcon = styled.span `
+ color: red;
+`;
diff --git a/src/lib/utils/weekNumFn.ts b/src/lib/utils/weekNumFn.ts
new file mode 100644
index 00000000..474494a4
--- /dev/null
+++ b/src/lib/utils/weekNumFn.ts
@@ -0,0 +1,33 @@
+// year(์ฐ), month(์), day(์ผ)์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์, ํ์ฌ ๋ ์ง๊ฐ ํด๋น ์ฐ๋์ ๋ช ์ฃผ์ฐจ์ธ์ง ๊ตฌํ๋ ํจ์.
+
+function weekNumFn(year: number, month: number, day: number): number {
+ const date = new Date(year, month - 1, day);
+ const firstDayOfYear = new Date(year, 0, 1); // ํด๋น ์ฐ๋์ ์ฒซ ๋ (****-01-01)
+ const daysDifference =
+ // (date.valueof() - firstDayOfYear.valueOf()): ๊ตฌํ๊ณ ์ ํ๋ ๋ ์ง์ ํด๋น ๋
๋ ์ฒซ์งธ ๋ ์ ์๊ฐ ์ฐจ์ด ๊ณ์ฐ
+ // ์๊ฐ ์ฐจ์ด๋ฅผ ์ผ ๋จ์๋ก ๋ณํํ๊ธฐ ์ํด (1000(ms) * 60(s) * 60(m) + 24(H))๋ก ๋๋.
+ // daysDiffernece = ๋ ๋ ์ง ์ฌ์ด์ ์ฐจ (์ผ)
+ (date.valueOf() - firstDayOfYear.valueOf()) / (1000 * 60 * 60 * 24);
+
+ // 1์ 1์ผ์ด 1์ฃผ์ฐจ์ด๋ฏ๋ก, 1๋ฅผ ๋ํ ๋ค, 7๋ก ๋๋์ด ์ฃผ์ฐจ ๊ณ์ฐ
+ const weekNumber = Math.ceil((daysDifference + 1) / 7);
+
+ return weekNumber;
+}
+
+function weekToNumFn(year: number, month: number, week: number): number {
+ const firstDayOfYear = new Date(year, 0, 1);
+ const firstWeekDay = firstDayOfYear.getDay(); // ํด๋น ์ฐ๋์ ์ฒซ์งธ ๋ ์ ์์ผ (0-6)
+ const daysOffset = (week - 1) * 7 - firstWeekDay; // ํด๋น ์ฐ๋์ ์ฒซ์งธ ๋ ๋ก๋ถํฐ์ ๋ ์ง ์ฐจ์ด ๊ณ์ฐ์ ์ํ ์คํ์
+
+ const date = new Date(year, month - 1, 1); // ์ง์ ๋ ์์ ์ฒซ์งธ ๋ ๋ก ์์
+ date.setDate(date.getDate() + daysOffset); // ๊ณ์ฐ๋ ๋ ์ง ์ฐจ์ด๋งํผ ๋ ์ง ์คํ์
+
+ const daysDifference =
+ (date.valueOf() - firstDayOfYear.valueOf()) / (1000 * 60 * 60 * 24); // ์คํ์
๋ ๋ ์ง์ ํด๋น ์ฐ๋์ ์ฒซ์งธ ๋ ์ฌ์ด์ ๋ ์ง ์ฐจ์ด ๊ณ์ฐ
+
+ const weekNumber = Math.ceil((daysDifference + 1) / 7); // ์ฃผ์ฐจ ๊ณ์ฐ
+
+ return weekNumber;
+}
+export { weekNumFn, weekToNumFn };
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 00000000..f2afc7b5
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,15 @@
+import React from 'react';
+import App from '@/App.tsx';
+import { theme } from '@/styles/theme';
+import ReactDOM from 'react-dom/client';
+import GlobalStyle from '@/styles/GlobalStyle';
+import { ThemeProvider } from 'styled-components';
+
+ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
+
+
+
+
+
+ ,
+);
diff --git a/src/styles/GlobalStyle.ts b/src/styles/GlobalStyle.ts
new file mode 100644
index 00000000..31e8dbdf
--- /dev/null
+++ b/src/styles/GlobalStyle.ts
@@ -0,0 +1,68 @@
+import { createGlobalStyle } from 'styled-components';
+
+const GlobalStyle = createGlobalStyle`
+ 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;
+ box-sizing: border-box;
+ }
+ /* HTML5 display-role reset for older browsers */
+ article, aside, details, figcaption, figure,
+ footer, header, hgroup, menu, nav, section {
+ display: block;
+ }
+ body {
+ font-family: 'NanumSquare', sans-serif;
+ line-height: 1;
+ -ms-overflow-style: none;
+ ::-webkit-scrollbar {
+ display: none !important;
+ }
+ }
+ 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;
+ }
+ a {
+ text-decoration: none;
+ color: inherit;
+ display: block;
+ }
+ button {
+ border: none;
+ cursor: pointer;
+ background: none;
+ }
+ * {
+ box-sizing: inherit;
+ }
+`;
+
+export default GlobalStyle;
diff --git a/src/styles/styled.d.ts b/src/styles/styled.d.ts
new file mode 100644
index 00000000..b8fcb3de
--- /dev/null
+++ b/src/styles/styled.d.ts
@@ -0,0 +1,15 @@
+import 'styled-components';
+
+declare module 'styled-components' {
+ export interface DefaultTheme {
+ colors: {
+ green: string;
+ lightGreen: string;
+ deepGreen: string;
+ red: string;
+ gray: string[];
+ blue: string;
+ deepBlue: string;
+ };
+ }
+}
diff --git a/src/styles/theme.ts b/src/styles/theme.ts
new file mode 100644
index 00000000..6b226b6b
--- /dev/null
+++ b/src/styles/theme.ts
@@ -0,0 +1,14 @@
+import { DefaultTheme } from 'styled-components';
+
+//์์ธ ๋์์ธ ์คํ์ผ์ ์ฐ์ฃผ๋ถ๋์ฐ ํผ๊ทธ๋ง์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
+export const theme: DefaultTheme = {
+ colors: {
+ green: '#33ff99',
+ lightGreen: '#b9fad9',
+ deepGreen: '#13bd7e',
+ red: '#e73273',
+ gray: ['#eaeaea96', '#B2B2B2', '#3C4048'],
+ blue: '#8CC0DE',
+ deepBlue: '#0000ff',
+ },
+};
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.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..170ba466
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,41 @@
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react';
+import * as path from 'path';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src'),
+ },
+ },
+
+ build: {
+ rollupOptions: {
+ output: {
+ manualChunks(id) {
+ if (id.includes('node_modules')) {
+ return id
+ .toString()
+ .split('node_modules/')[1]
+ .split('/')[0]
+ .toString();
+ }
+ },
+ },
+ },
+ },
+
+ server: {
+ proxy: {
+ '/api': {
+ target: 'https://chickenlecture.xyz/',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/api/, ''),
+ },
+ },
+ port: 3000,
+ },
+ envDir: '.',
+});
\ No newline at end of file