From 5f481d0d31589880f875eac10fc35bbb5fad8db0 Mon Sep 17 00:00:00 2001 From: eunsu Date: Tue, 26 Mar 2024 13:36:27 +0900 Subject: [PATCH 01/71] =?UTF-8?q?chore:=20.prettierrc=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..1dc7164 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} \ No newline at end of file From 73815b5074c720482fc5d0cebf8622c0faeb8f63 Mon Sep 17 00:00:00 2001 From: eunsu Date: Tue, 26 Mar 2024 13:38:22 +0900 Subject: [PATCH 02/71] =?UTF-8?q?chore:=20styled-components=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 163 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 ++ 2 files changed, 167 insertions(+) diff --git a/package-lock.json b/package-lock.json index c27bbe4..11623e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,12 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "styled-components": "^6.1.8", "typescript": "^4.9.5", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@types/styled-components": "^5.1.34" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2288,6 +2292,24 @@ "postcss-selector-parser": "^6.0.10" } }, + "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.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, "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", @@ -4103,6 +4125,16 @@ "@types/node": "*" } }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dev": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -4290,6 +4322,22 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" }, + "node_modules/@types/styled-components": { + "version": "5.1.34", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", + "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", + "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/@types/testing-library__jest-dom": { "version": "5.14.9", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", @@ -5750,6 +5798,14 @@ "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-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -6182,6 +6238,14 @@ "postcss": "^8.4" } }, + "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-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -6372,6 +6436,16 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, + "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/css-tree": { "version": "1.0.0-alpha.37", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", @@ -8953,6 +9027,21 @@ "he": "bin/he" } }, + "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/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -15719,6 +15808,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "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", @@ -16260,6 +16354,70 @@ "webpack": "^5.0.0" } }, + "node_modules/styled-components": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz", + "integrity": "sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.1", + "@emotion/unitless": "0.8.0", + "@types/stylis": "4.2.0", + "css-to-react-native": "3.2.0", + "csstype": "3.1.2", + "postcss": "8.4.31", + "shallowequal": "1.1.0", + "stylis": "4.3.1", + "tslib": "2.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/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/styled-components/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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/styled-components/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -16275,6 +16433,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", diff --git a/package.json b/package.json index ea335d3..b0d6675 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "styled-components": "^6.1.8", "typescript": "^4.9.5", "web-vitals": "^2.1.4" }, @@ -39,5 +40,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "@types/styled-components": "^5.1.34" } } From 5f1c4fc2e9d96845dd323477a330a668f558f776 Mon Sep 17 00:00:00 2001 From: eunsu Date: Tue, 26 Mar 2024 14:30:04 +0900 Subject: [PATCH 03/71] =?UTF-8?q?style:=20globalStyle=20=EB=B0=8F=20theme?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.tsx | 8 +++- src/styles/GlobalStyle.ts | 46 ++++++++++++++++++++ src/styles/theme.ts | 88 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 src/styles/GlobalStyle.ts create mode 100644 src/styles/theme.ts diff --git a/src/index.tsx b/src/index.tsx index d10be77..723c2d4 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -2,12 +2,18 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; +import GlobalStyle from "./styles/GlobalStyle"; +import { ThemeProvider } from "styled-components"; +import theme from "./styles/theme"; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render( - + + + + ); diff --git a/src/styles/GlobalStyle.ts b/src/styles/GlobalStyle.ts new file mode 100644 index 0000000..731cf7e --- /dev/null +++ b/src/styles/GlobalStyle.ts @@ -0,0 +1,46 @@ +import { createGlobalStyle } from 'styled-components'; + +const GlobalStyle = createGlobalStyle` + *, + *::before, + *::after { + box-sizing: border-box; + font-family: 'Pretendard-Regular'; + } + * { + margin: 0; + padding: 0; + } + body { + line-height: 1.5; + -webkit-font-smoothing: antialiased; + } + img, + picture, + video, + canvas, + svg { + display: block; + max-width: 100%; + } + input, + button, + textarea, + select { + font: inherit; + } + p, + h1, + h2, + h3, + h4, + h5, + h6 { + overflow-wrap: break-word; + } + .scroll-box::-webkit-scrollbar { + display: none; + } +`; + +export default GlobalStyle; diff --git a/src/styles/theme.ts b/src/styles/theme.ts new file mode 100644 index 0000000..c27edbc --- /dev/null +++ b/src/styles/theme.ts @@ -0,0 +1,88 @@ +const colors = { + black: '#121212', + white: '#FFFFFF', + orange: '#FF6128', + yellow: '#FEE500', + blue: '#ABC1D1', + gray_1: '#5C666E', + gray_2: '#828282', + gray_3: '#A7ACAF', + gray_4: '#E0E0E0', + gray_5: '#F5F5F5', + gray_6: '#F9F9FA', +}; + +const textStyles = { + title: { + font_size: '22px', + line_height: '32px', + font_weight: '600', + }, + subTitle: { + font_size: '18px', + line_height: '28px', + font_weight: '600', + }, + body1_1: { + font_size: '14px', + line_height: '16px', + font_weight: '400', + }, + body1_2: { + font_size: '14px', + line_height: '16px', + font_weight: '500', + }, + body2_1: { + font_size: '15px', + line_height: '20px', + font_weight: '500', + }, + body2_2: { + font_size: '15px', + line_height: '24px', + font_weight: '600', + }, + body3: { + font_size: '16px', + line_height: '24px', + font_weight: '400', + }, + body4: { + font_size: '18px', + line_height: '28px', + font_weight: '500', + }, + caption1: { + font_size: '8px', + line_height: '12px', + font_weight: '600', + }, + caption2: { + font_size: '9px', + line_height: '12px', + font_weight: '400', + }, + caption3: { + font_size: '10px', + line_height: '16px', + font_weight: '500', + }, + caption4: { + font_size: '11px', + line_height: '16px', + font_weight: '400', + }, + caption5: { + font_size: '12px', + line_height: '16px', + font_weight: '500', + }, +}; + +const theme = { + colors, + textStyles, +}; + +export default theme; From 348558feaf13c3ee4194e9e180e737a2239d432c Mon Sep 17 00:00:00 2001 From: eunsu Date: Tue, 26 Mar 2024 14:36:18 +0900 Subject: [PATCH 04/71] =?UTF-8?q?feat:=20svg,=20svg.d.ts=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/svg/arrowLeft.svg | 3 +++ src/assets/svg/chat.svg | 3 +++ src/assets/svg/edit.svg | 3 +++ src/assets/svg/emoji.svg | 4 ++++ src/assets/svg/etc.svg | 12 ++++++++++++ src/assets/svg/friends.svg | 13 +++++++++++++ src/assets/svg/mic.svg | 10 ++++++++++ src/assets/svg/peoplePlus.svg | 6 ++++++ src/assets/svg/search.svg | 4 ++++ src/assets/svg/setting.svg | 4 ++++ src/assets/svg/times.svg | 3 +++ src/svg.d.ts | 1 + 12 files changed, 66 insertions(+) create mode 100644 src/assets/svg/arrowLeft.svg create mode 100644 src/assets/svg/chat.svg create mode 100644 src/assets/svg/edit.svg create mode 100644 src/assets/svg/emoji.svg create mode 100644 src/assets/svg/etc.svg create mode 100644 src/assets/svg/friends.svg create mode 100644 src/assets/svg/mic.svg create mode 100644 src/assets/svg/peoplePlus.svg create mode 100644 src/assets/svg/search.svg create mode 100644 src/assets/svg/setting.svg create mode 100644 src/assets/svg/times.svg create mode 100644 src/svg.d.ts diff --git a/src/assets/svg/arrowLeft.svg b/src/assets/svg/arrowLeft.svg new file mode 100644 index 0000000..aa00b26 --- /dev/null +++ b/src/assets/svg/arrowLeft.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/chat.svg b/src/assets/svg/chat.svg new file mode 100644 index 0000000..4b644e5 --- /dev/null +++ b/src/assets/svg/chat.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/edit.svg b/src/assets/svg/edit.svg new file mode 100644 index 0000000..3d3e5a2 --- /dev/null +++ b/src/assets/svg/edit.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/emoji.svg b/src/assets/svg/emoji.svg new file mode 100644 index 0000000..6c34946 --- /dev/null +++ b/src/assets/svg/emoji.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/svg/etc.svg b/src/assets/svg/etc.svg new file mode 100644 index 0000000..9aae936 --- /dev/null +++ b/src/assets/svg/etc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/svg/friends.svg b/src/assets/svg/friends.svg new file mode 100644 index 0000000..ddf053f --- /dev/null +++ b/src/assets/svg/friends.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/svg/mic.svg b/src/assets/svg/mic.svg new file mode 100644 index 0000000..6791471 --- /dev/null +++ b/src/assets/svg/mic.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/svg/peoplePlus.svg b/src/assets/svg/peoplePlus.svg new file mode 100644 index 0000000..08733d7 --- /dev/null +++ b/src/assets/svg/peoplePlus.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/svg/search.svg b/src/assets/svg/search.svg new file mode 100644 index 0000000..755fbbd --- /dev/null +++ b/src/assets/svg/search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/svg/setting.svg b/src/assets/svg/setting.svg new file mode 100644 index 0000000..c1d8633 --- /dev/null +++ b/src/assets/svg/setting.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/svg/times.svg b/src/assets/svg/times.svg new file mode 100644 index 0000000..a6cf74a --- /dev/null +++ b/src/assets/svg/times.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/svg.d.ts b/src/svg.d.ts new file mode 100644 index 0000000..bff9471 --- /dev/null +++ b/src/svg.d.ts @@ -0,0 +1 @@ +declare module '*.svg'; From f3c30cee4bb6294816f26c7077eb042aeda3e2df Mon Sep 17 00:00:00 2001 From: eunsu Date: Tue, 26 Mar 2024 14:39:07 +0900 Subject: [PATCH 05/71] =?UTF-8?q?feat:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.css | 38 -------------------------------------- src/index.css | 13 ------------- src/index.tsx | 1 - 3 files changed, 52 deletions(-) delete mode 100644 src/App.css delete mode 100644 src/index.css diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 74b5e05..0000000 --- a/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/index.css b/src/index.css deleted file mode 100644 index ec2585e..0000000 --- a/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/src/index.tsx b/src/index.tsx index 723c2d4..a4aaedd 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,6 +1,5 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; -import './index.css'; import App from './App'; import GlobalStyle from "./styles/GlobalStyle"; import { ThemeProvider } from "styled-components"; From 160690de8d0eb489ff772c3ccab78c8f830efa69 Mon Sep 17 00:00:00 2001 From: eunsu Date: Tue, 26 Mar 2024 18:53:29 +0900 Subject: [PATCH 06/71] =?UTF-8?q?chore:=20=EC=A0=88=EB=8C=80=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- craco.config.js | 14 + package-lock.json | 4071 ++++++++++++++++++++++++++++++++++++- package.json | 10 +- src/index.tsx | 14 +- src/styles/GlobalStyle.ts | 2 + tsconfig.json | 11 +- tsconfig.paths.json | 12 + 7 files changed, 4036 insertions(+), 98 deletions(-) create mode 100644 craco.config.js create mode 100644 tsconfig.paths.json diff --git a/craco.config.js b/craco.config.js new file mode 100644 index 0000000..f76d5c5 --- /dev/null +++ b/craco.config.js @@ -0,0 +1,14 @@ +const { CracoAliasPlugin } = require('react-app-alias'); + +module.exports = { + plugins: [ + { + plugin: CracoAliasPlugin, + options: { + source: 'tsconfig', + baseUrl: './src', + tsConfigPath: './tsconfig.paths.json', // 위에서 작성한 tsconfig.paths.json입니다. + }, + }, + ], +}; diff --git a/package-lock.json b/package-lock.json index 11623e7..b868a8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,9 @@ "web-vitals": "^2.1.4" }, "devDependencies": { - "@types/styled-components": "^5.1.34" + "@types/styled-components": "^5.1.34", + "craco": "^0.0.3", + "react-app-alias": "^2.2.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2022,6 +2024,26 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, + "node_modules/@craco/craco": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-5.9.0.tgz", + "integrity": "sha512-2Q8gIB4W0/nPiUxr9iAKUhGsFlXYN0/wngUdK1VWtfV2NtBv+yllNn2AjieaLbttgpQinuOYmDU65vocC0NMDg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "lodash": "^4.17.15", + "webpack-merge": "^4.2.2" + }, + "bin": { + "craco": "bin/craco.js" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "react-scripts": "*" + } + }, "node_modules/@csstools/normalize.css": { "version": "12.1.1", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", @@ -4317,6 +4339,12 @@ "@types/node": "*" } }, + "node_modules/@types/source-list-map": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", + "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", + "devOptional": true + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -4338,6 +4366,12 @@ "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" }, + "node_modules/@types/tapable": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", + "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", + "devOptional": true + }, "node_modules/@types/testing-library__jest-dom": { "version": "5.14.9", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", @@ -4351,6 +4385,58 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" }, + "node_modules/@types/uglify-js": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", + "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", + "devOptional": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.38", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz", + "integrity": "sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==", + "devOptional": true, + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", + "devOptional": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -4619,6 +4705,75 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", @@ -4717,6 +4872,49 @@ "@webassemblyjs/utf8": "1.11.6" } }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", @@ -4855,6 +5053,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, "node_modules/ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", @@ -4960,6 +5167,12 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -4981,6 +5194,33 @@ "dequal": "^2.0.3" } }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", @@ -5028,6 +5268,15 @@ "node": ">=8" } }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -5169,6 +5418,57 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -5179,6 +5479,19 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "optional": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5192,6 +5505,18 @@ "node": ">= 4.0.0" } }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", @@ -5543,6 +5868,56 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -5582,11 +5957,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -5676,55 +6067,203 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "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" - } - ], + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/buffer/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -5736,6 +6275,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -5744,6 +6289,67 @@ "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cacache/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/cacache/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -5904,6 +6510,12 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -5926,11 +6538,61 @@ "node": ">=8" } }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/cjs-module-lexer": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -5987,6 +6649,19 @@ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -6047,6 +6722,15 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -6098,6 +6782,57 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/confusing-browser-globals": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", @@ -6111,6 +6846,18 @@ "node": ">=0.8" } }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -6148,6 +6895,41 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/core-js": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", @@ -6158,46 +6940,785 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", - "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", + "node_modules/core-js-compat": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", + "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/craco": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/craco/-/craco-0.0.3.tgz", + "integrity": "sha512-eeibbwJm1CTf/j3xvNgNmsRS7abegp4Cfm5qtn5nE9/0JjZRas+FHj8IlT8FMFWR0XOyZFGcWZgzaTU19DNGoQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.6.0", + "@craco/craco": "^5.5.0", + "@types/babel__core": "^7.1.3", + "@types/webpack": "^4.39.2", + "webpack": "^4.41.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/craco/node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/craco/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/craco/node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/craco/node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/craco/node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/craco/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/craco/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/craco/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/craco/node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/craco/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/craco/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/craco/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/craco/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/craco/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/craco/node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/craco/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/craco/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/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==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/craco/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/craco/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/craco/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/craco/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/craco/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/craco/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/craco/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/craco/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/craco/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/craco/node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/craco/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/craco/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/craco/node_modules/webpack": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", + "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } } }, - "node_modules/core-js-pure": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", - "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "node_modules/craco/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "node_modules/cross-spawn": { @@ -6213,6 +7734,28 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -6643,6 +8186,12 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/cyclist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", + "dev": true + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -6730,6 +8279,15 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -6830,6 +8388,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6854,6 +8425,16 @@ "node": ">=6" } }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -6918,6 +8499,23 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6982,6 +8580,16 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -7067,6 +8675,54 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -7096,6 +8752,27 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" }, + "node_modules/elliptic": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -7128,6 +8805,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", @@ -7148,6 +8834,18 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -8075,6 +9773,16 @@ "node": ">=0.8.x" } }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -8105,6 +9813,85 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/expect": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", @@ -8168,10 +9955,75 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -8241,6 +10093,13 @@ "bser": "2.1.1" } }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "deprecated": "This module is no longer supported.", + "dev": true + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -8271,6 +10130,13 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -8396,6 +10262,52 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -8423,6 +10335,15 @@ "is-callable": "^1.1.3" } }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -8638,6 +10559,18 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -8646,6 +10579,52 @@ "node": ">= 0.6" } }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -8664,6 +10643,54 @@ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -8789,6 +10816,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -9008,6 +11044,92 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -9027,6 +11149,17 @@ "he": "bin/he" } }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -9267,6 +11400,12 @@ } } }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -9325,6 +11464,32 @@ "node": ">=4" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -9399,6 +11564,12 @@ "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9439,6 +11610,18 @@ "node": ">= 10" } }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -9525,6 +11708,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -9547,6 +11736,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-data-view": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", @@ -9575,6 +11776,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -9589,6 +11803,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -9725,6 +11951,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -9881,6 +12119,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9902,6 +12149,15 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -12085,6 +14341,12 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -12399,6 +14661,38 @@ "tmpl": "1.0.5" } }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -12423,6 +14717,52 @@ "node": ">= 4.0.0" } }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/memory-fs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -12461,6 +14801,25 @@ "node": ">=8.6" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -12580,6 +14939,12 @@ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12607,6 +14972,40 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -12618,6 +15017,32 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -12645,6 +15070,13 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "dev": true, + "optional": true + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -12662,6 +15094,28 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -12707,6 +15161,79 @@ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -12774,6 +15301,57 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -12813,6 +15391,18 @@ "node": ">= 0.4" } }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.assign": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", @@ -12909,6 +15499,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -13003,6 +15605,12 @@ "node": ">= 0.8.0" } }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -13043,12 +15651,65 @@ "node": ">=8" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parallel-transform/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/parallel-transform/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/parallel-transform/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" } }, "node_modules/param-case": { @@ -13071,6 +15732,23 @@ "node": ">=6" } }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -13110,6 +15788,28 @@ "tslib": "^2.0.3" } }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "optional": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -13175,6 +15875,22 @@ "node": ">=8" } }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -13338,6 +16054,15 @@ "node": ">=4" } }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -14597,6 +17322,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -14610,6 +17344,12 @@ "asap": "~2.0.6" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -14657,11 +17397,68 @@ "node": ">= 0.10" } }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -14693,6 +17490,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -14733,6 +17539,16 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -14785,6 +17601,12 @@ "node": ">=0.10.0" } }, + "node_modules/react-app-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-app-alias/-/react-app-alias-2.2.2.tgz", + "integrity": "sha512-mkebUkGLEBA8A8jripu5h1e3cccGl8wWHCUmyJo43/KhaN91DO3qyCLWGWneogqkG4PWhp2JHtlCJ06YSdHVYQ==", + "dev": true + }, "node_modules/react-app-polyfill": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", @@ -15129,6 +17951,19 @@ "@babel/runtime": "^7.8.4" } }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regex-parser": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", @@ -15194,6 +18029,13 @@ "node": ">= 0.10" } }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "optional": true + }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -15206,6 +18048,24 @@ "strip-ansi": "^6.0.1" } }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -15262,6 +18122,13 @@ "node": ">=8" } }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, "node_modules/resolve-url-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", @@ -15331,6 +18198,15 @@ "node": ">=10" } }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -15362,6 +18238,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -15453,6 +18339,15 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", @@ -15489,6 +18384,15 @@ } ] }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", @@ -15803,11 +18707,66 @@ "node": ">= 0.4" } }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -15872,7 +18831,146 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/sockjs": { @@ -15926,6 +19024,20 @@ "webpack": "^5.0.0" } }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -15943,6 +19055,13 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -15977,11 +19096,32 @@ "wbuf": "^1.7.3" } }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -16105,6 +19245,44 @@ "node": ">= 0.8.0" } }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -16124,6 +19302,117 @@ "node": ">= 0.4" } }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-browserify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-browserify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-http/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-http/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -16845,16 +20134,80 @@ "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -16863,6 +20216,45 @@ "node": ">=4" } }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16979,6 +20371,12 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -17090,6 +20488,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -17165,6 +20569,48 @@ "node": ">=4" } }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -17192,10 +20638,64 @@ "node": ">= 0.8" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "node_modules/upath": { "version": "1.2.0", @@ -17243,6 +20743,23 @@ "punycode": "^2.1.0" } }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -17252,6 +20769,45 @@ "requires-port": "^1.0.0" } }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/url/node_modules/qs": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", + "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -17271,6 +20827,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", @@ -17318,6 +20880,12 @@ "node": ">= 0.8" } }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -17358,6 +20926,324 @@ "node": ">=10.13.0" } }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", @@ -17658,6 +21544,15 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -18142,6 +22037,15 @@ "workbox-core": "6.6.0" } }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -18281,6 +22185,15 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index b0d6675..5b421cc 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,9 @@ "web-vitals": "^2.1.4" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", + "start": "craco start", + "build": "craco build", + "test": "craco test", "eject": "react-scripts eject" }, "eslintConfig": { @@ -42,6 +42,8 @@ ] }, "devDependencies": { - "@types/styled-components": "^5.1.34" + "@types/styled-components": "^5.1.34", + "craco": "^0.0.3", + "react-app-alias": "^2.2.2" } } diff --git a/src/index.tsx b/src/index.tsx index a4aaedd..718fb11 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,18 +1,18 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; -import GlobalStyle from "./styles/GlobalStyle"; -import { ThemeProvider } from "styled-components"; -import theme from "./styles/theme"; +import { ThemeProvider } from 'styled-components'; +import GlobalStyle from '@styles/GlobalStyle'; +import theme from '@styles/theme'; const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement + document.getElementById('root') as HTMLElement ); root.render( - - + + - + ); diff --git a/src/styles/GlobalStyle.ts b/src/styles/GlobalStyle.ts index 731cf7e..065c589 100644 --- a/src/styles/GlobalStyle.ts +++ b/src/styles/GlobalStyle.ts @@ -14,6 +14,8 @@ const GlobalStyle = createGlobalStyle` body { line-height: 1.5; -webkit-font-smoothing: antialiased; + display: flex; + justify-content: center; } img, picture, diff --git a/tsconfig.json b/tsconfig.json index a273b0c..8a96cb3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,8 @@ { + "extends": "./tsconfig.paths.json", "compilerOptions": { "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, @@ -20,7 +17,5 @@ "noEmit": true, "jsx": "react-jsx" }, - "include": [ - "src" - ] + "include": ["src"] } diff --git a/tsconfig.paths.json b/tsconfig.paths.json new file mode 100644 index 0000000..5f54877 --- /dev/null +++ b/tsconfig.paths.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "baseUrl": "./src", + "paths": { + "@components/*": ["./components/*"], + "@styles/*": ["./styles/*"], + "@constant/*": ["./constant/*"], + "@hooks/*": ["./hooks/*"], + "@pages/*": ["./pages/*"] + } + } +} From 6408700a34467597556c950f3b33b85a56f6536e Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 12:59:18 +0900 Subject: [PATCH 07/71] =?UTF-8?q?feat:=20tsconfig.paths.json=EC=97=90=20as?= =?UTF-8?q?sets=20=EC=A0=88=EB=8C=80=20=EA=B2=BD=EB=A1=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tsconfig.paths.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.paths.json b/tsconfig.paths.json index 5f54877..0e03b02 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -3,6 +3,7 @@ "baseUrl": "./src", "paths": { "@components/*": ["./components/*"], + "@assets/*": ["./assets/*"], "@styles/*": ["./styles/*"], "@constant/*": ["./constant/*"], "@hooks/*": ["./hooks/*"], From 5256a15b13a89bb3fd202ac497a24ec814803736 Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 13:12:24 +0900 Subject: [PATCH 08/71] =?UTF-8?q?feat:=20Chathead=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 12 +-- src/assets/svg/menu.svg | 5 ++ src/assets/svg/status.svg | 8 ++ .../ChattingRoomPage/ChattingRoomPage.tsx | 22 ++++++ .../ChattingRoomPage/components/ChatHead.tsx | 76 +++++++++++++++++++ 5 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 src/assets/svg/menu.svg create mode 100644 src/assets/svg/status.svg create mode 100644 src/pages/ChattingRoomPage/ChattingRoomPage.tsx create mode 100644 src/pages/ChattingRoomPage/components/ChatHead.tsx diff --git a/src/App.tsx b/src/App.tsx index bd79c18..67d0fb7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,9 +1,11 @@ +import ChattingRoomPage from '@pages/ChattingRoomPage/ChattingRoomPage'; + function App() { - return ( -
-

19기 프론트엔드 파이팅!!! 디자인과 사이좋게 지내요~~~

-
- ); + return ( +
+ +
+ ); } export default App; diff --git a/src/assets/svg/menu.svg b/src/assets/svg/menu.svg new file mode 100644 index 0000000..bf40cde --- /dev/null +++ b/src/assets/svg/menu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/svg/status.svg b/src/assets/svg/status.svg new file mode 100644 index 0000000..96b21c5 --- /dev/null +++ b/src/assets/svg/status.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/pages/ChattingRoomPage/ChattingRoomPage.tsx b/src/pages/ChattingRoomPage/ChattingRoomPage.tsx new file mode 100644 index 0000000..45c8315 --- /dev/null +++ b/src/pages/ChattingRoomPage/ChattingRoomPage.tsx @@ -0,0 +1,22 @@ +import theme from '@styles/theme'; +import styled from 'styled-components'; +import ChatHead from './components/ChatHead'; + +export default function ChattingRoomPage() { + return ( + + + + ); +} + +const ContainerLayout = styled.div` + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 375px; + height: 100vh; + background-color: ${theme.colors.blue}; +`; diff --git a/src/pages/ChattingRoomPage/components/ChatHead.tsx b/src/pages/ChattingRoomPage/components/ChatHead.tsx new file mode 100644 index 0000000..828bee3 --- /dev/null +++ b/src/pages/ChattingRoomPage/components/ChatHead.tsx @@ -0,0 +1,76 @@ +import theme from '@styles/theme'; +import styled from 'styled-components'; +import { ReactComponent as StatusSvg } from '@assets/svg/status.svg'; +import { ReactComponent as ArrowLeftSvg } from '@assets/svg/arrowLeft.svg'; +import { ReactComponent as SearchSvg } from '@assets/svg/search.svg'; +import { ReactComponent as MenuSvg } from '@assets/svg/menu.svg'; + +const DUMMYNAME = '플래시'; +const DUMMYLEFTCOUNT = 3; + +export default function ChatHead() { + return ( + + + + + + + {DUMMYLEFTCOUNT} + + {DUMMYNAME} + + + + + + ); +} + +const Statusbox = styled.div` + position: fixed; + top: 0; +`; + +const ChatHeaderWrapper = styled.section` + position: fixed; + top: 47px; + display: flex; + justify-content: space-between; + align-items: center; + width: 375px; + height: 28px; + padding: 0 4px; + margin: 0 16px; + background-color: ${theme.colors.blue}; + opacity: 0.8; +`; + +const GobackBox = styled.div` + display: flex; + align-items: center; + height: 100%; + span { + font-size: ${theme.textStyles.body3.font_size}; + line-height: ${theme.textStyles.body3.line_height}; + font-weight: ${theme.textStyles.body3.font_weight}; + color: ${theme.colors.black}; + } +`; + +const ChatTitle = styled.h1` + position: absolute; + left: 50%; + transform: translateX(-50%); + font-size: ${theme.textStyles.subTitle.font_size}; + line-height: ${theme.textStyles.subTitle.line_height}; + font-weight: ${theme.textStyles.subTitle.font_weight}; + color: ${theme.colors.black}; +`; + +const MenuBox = styled.div` + display: flex; + align-items: center; + gap: 6px; + height: 100%; +`; From 721f57ebff61ae7f5f807dedb75854257dd7d00b Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 13:36:19 +0900 Subject: [PATCH 09/71] =?UTF-8?q?ChatBottom=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/svg/emoji.svg | 4 +- src/assets/svg/mic.svg | 2 +- src/assets/svg/plus.svg | 4 ++ .../ChattingRoomPage/ChattingRoomPage.tsx | 2 + .../components/ChatBottom.tsx | 50 +++++++++++++++++++ 5 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 src/assets/svg/plus.svg create mode 100644 src/pages/ChattingRoomPage/components/ChatBottom.tsx diff --git a/src/assets/svg/emoji.svg b/src/assets/svg/emoji.svg index 6c34946..deb1ad2 100644 --- a/src/assets/svg/emoji.svg +++ b/src/assets/svg/emoji.svg @@ -1,4 +1,4 @@ - - + + diff --git a/src/assets/svg/mic.svg b/src/assets/svg/mic.svg index 6791471..9394798 100644 --- a/src/assets/svg/mic.svg +++ b/src/assets/svg/mic.svg @@ -1,6 +1,6 @@ - + diff --git a/src/assets/svg/plus.svg b/src/assets/svg/plus.svg new file mode 100644 index 0000000..e9cab9d --- /dev/null +++ b/src/assets/svg/plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/pages/ChattingRoomPage/ChattingRoomPage.tsx b/src/pages/ChattingRoomPage/ChattingRoomPage.tsx index 45c8315..70d26e6 100644 --- a/src/pages/ChattingRoomPage/ChattingRoomPage.tsx +++ b/src/pages/ChattingRoomPage/ChattingRoomPage.tsx @@ -1,11 +1,13 @@ import theme from '@styles/theme'; import styled from 'styled-components'; +import ChatBottom from './components/ChatBottom'; import ChatHead from './components/ChatHead'; export default function ChattingRoomPage() { return ( + ); } diff --git a/src/pages/ChattingRoomPage/components/ChatBottom.tsx b/src/pages/ChattingRoomPage/components/ChatBottom.tsx new file mode 100644 index 0000000..486d0bc --- /dev/null +++ b/src/pages/ChattingRoomPage/components/ChatBottom.tsx @@ -0,0 +1,50 @@ +import theme from '@styles/theme'; +import styled from 'styled-components'; +import { ReactComponent as PlusSvg } from '@assets/svg/plus.svg'; +import { ReactComponent as EmojiSvg } from '@assets/svg/emoji.svg'; +import { ReactComponent as MicSvg } from '@assets/svg/mic.svg'; + +export default function ChatBottom() { + return ( + + + + + + + + + ); +} + +const ChatBottomWrapper = styled.section` + position: fixed; + bottom: 0; + display: flex; + width: 375px; + height: 48px; + padding: 4px 16px 0 16px; + background-color: ${theme.colors.white}; +`; + +const InputBox = styled.div` + display: flex; + align-items: center; + gap: 12px; + flex-grow: 1; + height: 30px; + padding: 0 8px; + border-radius: 15px; + background-color: ${theme.colors.gray_5}; +`; + +const InputSytle = styled.input` + flex-grow: 1; + font-size: ${theme.textStyles.body3.font_size}; + line-height: ${theme.textStyles.body3.line_height}; + font-weight: ${theme.textStyles.body3.font_weight}; + color: ${theme.colors.black}; + border: none; + outline: none; + background-color: ${theme.colors.gray_5}; +`; From fe0701bd4a4ce61b7d60351a30e133e4f74250f8 Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 13:38:30 +0900 Subject: [PATCH 10/71] =?UTF-8?q?fix:=20ChatHead=20margin=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/ChattingRoomPage/components/ChatHead.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/ChattingRoomPage/components/ChatHead.tsx b/src/pages/ChattingRoomPage/components/ChatHead.tsx index 828bee3..20524af 100644 --- a/src/pages/ChattingRoomPage/components/ChatHead.tsx +++ b/src/pages/ChattingRoomPage/components/ChatHead.tsx @@ -40,8 +40,7 @@ const ChatHeaderWrapper = styled.section` align-items: center; width: 375px; height: 28px; - padding: 0 4px; - margin: 0 16px; + padding: 0 16px; background-color: ${theme.colors.blue}; opacity: 0.8; `; From d8cfc29129a8a01f0d2e37f402adaa982d92f77d Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 18:52:56 +0900 Subject: [PATCH 11/71] =?UTF-8?q?chore:=20recoil=20=EC=84=A4=EC=B9=98=20fe?= =?UTF-8?q?at:=20chatAtom=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 25 +++++++++++++++++ package.json | 1 + src/App.tsx | 5 ++-- src/assets/data/chattingRoomData.json | 25 +++++++++++++++++ .../ChattingRoomPage/ChattingRoomPage.tsx | 2 ++ .../ChattingRoomPage/components/Chatting.tsx | 16 +++++++++++ src/recoil/chatAtom.ts | 27 +++++++++++++++++++ src/types/type.ts | 10 +++++++ tsconfig.paths.json | 3 ++- 9 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 src/assets/data/chattingRoomData.json create mode 100644 src/pages/ChattingRoomPage/components/Chatting.tsx create mode 100644 src/recoil/chatAtom.ts create mode 100644 src/types/type.ts diff --git a/package-lock.json b/package-lock.json index b868a8b..a0b2494 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "recoil": "^0.7.7", "styled-components": "^6.1.8", "typescript": "^4.9.5", "web-vitals": "^2.1.4" @@ -10971,6 +10972,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/hamt_plus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz", + "integrity": "sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==" + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -17879,6 +17885,25 @@ "node": ">=8.10.0" } }, + "node_modules/recoil": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.7.tgz", + "integrity": "sha512-8Og5KPQW9LwC577Vc7Ug2P0vQshkv1y3zG3tSSkWMqkWSwHmE+by06L8JtnGocjW6gcCvfwB3YtrJG6/tWivNQ==", + "dependencies": { + "hamt_plus": "1.0.2" + }, + "peerDependencies": { + "react": ">=16.13.1" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", diff --git a/package.json b/package.json index 5b421cc..37e6167 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "recoil": "^0.7.7", "styled-components": "^6.1.8", "typescript": "^4.9.5", "web-vitals": "^2.1.4" diff --git a/src/App.tsx b/src/App.tsx index 67d0fb7..581d4fb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,10 +1,11 @@ import ChattingRoomPage from '@pages/ChattingRoomPage/ChattingRoomPage'; +import { RecoilRoot } from 'recoil'; function App() { return ( -
+ -
+ ); } diff --git a/src/assets/data/chattingRoomData.json b/src/assets/data/chattingRoomData.json new file mode 100644 index 0000000..d333750 --- /dev/null +++ b/src/assets/data/chattingRoomData.json @@ -0,0 +1,25 @@ +{ + "chattings": [ + { + "id": "1", + "chat": [ + { + "chatId": "1", + "to": "송은수", + "from": "플래시", + "content": "안녕하세요", + "date": "2024-03-01", + "time": "12:00" + }, + { + "chatId": "2", + "to": "송은수", + "from": "플래시", + "content": "반가워요", + "date": "2024-03-01", + "time": "12:01" + } + ] + } + ] +} diff --git a/src/pages/ChattingRoomPage/ChattingRoomPage.tsx b/src/pages/ChattingRoomPage/ChattingRoomPage.tsx index 70d26e6..31f9730 100644 --- a/src/pages/ChattingRoomPage/ChattingRoomPage.tsx +++ b/src/pages/ChattingRoomPage/ChattingRoomPage.tsx @@ -2,11 +2,13 @@ import theme from '@styles/theme'; import styled from 'styled-components'; import ChatBottom from './components/ChatBottom'; import ChatHead from './components/ChatHead'; +import Chatting from './components/Chatting'; export default function ChattingRoomPage() { return ( + ); diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx new file mode 100644 index 0000000..6c200a1 --- /dev/null +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -0,0 +1,16 @@ +import { currentChatRoomIdState } from "@recoil/chatAtom"; +import { useRecoilValue } from "recoil"; +import styled from "styled-components" + +//이번 과제는 한 명뿐이라 채팅방은 1개 +const DUMMYID = '1'; + + + + +export default function Chatting() { + const chattingData = useRecoilValue(currentChatRoomIdState(DUMMYID)); + return ( +
Chatting
+ ) +} diff --git a/src/recoil/chatAtom.ts b/src/recoil/chatAtom.ts new file mode 100644 index 0000000..4a2a89f --- /dev/null +++ b/src/recoil/chatAtom.ts @@ -0,0 +1,27 @@ +import { atom, selectorFamily } from 'recoil' +import chattingData from '@assets/data/chattingRoomData.json' + +interface ChattingRoom { + id: string; + chat: { + chatId: string; + to: string; + from: string; + content: string; + date: string; + time: string; + }[]; +} + +export const chatDataState = atom({ + key: 'chatDataState', + default: chattingData.chattings +}) + +export const currentChatRoomIdState = selectorFamily({ + key: 'currentChatRoomIdState', + get: (id: string) => ({ get }) => { + const chatData = get(chatDataState) + return chatData.find((room) => room.id === id) + }, +}) \ No newline at end of file diff --git a/src/types/type.ts b/src/types/type.ts new file mode 100644 index 0000000..f13dc8e --- /dev/null +++ b/src/types/type.ts @@ -0,0 +1,10 @@ +export interface ChattingRoom { + id: string; + chat: { + chatId: number; + to: string; + from: string; + content: string; + time: string; + }[]; +} diff --git a/tsconfig.paths.json b/tsconfig.paths.json index 0e03b02..2017c7c 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -7,7 +7,8 @@ "@styles/*": ["./styles/*"], "@constant/*": ["./constant/*"], "@hooks/*": ["./hooks/*"], - "@pages/*": ["./pages/*"] + "@pages/*": ["./pages/*"], + "@recoil/*": ["./recoil/*"] } } } From 6a352d783954fc6941235bb7e0d71ccd7ea2fa96 Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 21:40:24 +0900 Subject: [PATCH 12/71] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A6=84=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=8B=9C=20=EB=B0=98=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/ChattingRoomPage/components/ChatHead.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pages/ChattingRoomPage/components/ChatHead.tsx b/src/pages/ChattingRoomPage/components/ChatHead.tsx index 20524af..c1de197 100644 --- a/src/pages/ChattingRoomPage/components/ChatHead.tsx +++ b/src/pages/ChattingRoomPage/components/ChatHead.tsx @@ -4,11 +4,22 @@ import { ReactComponent as StatusSvg } from '@assets/svg/status.svg'; import { ReactComponent as ArrowLeftSvg } from '@assets/svg/arrowLeft.svg'; import { ReactComponent as SearchSvg } from '@assets/svg/search.svg'; import { ReactComponent as MenuSvg } from '@assets/svg/menu.svg'; +import { useRecoilState, useSetRecoilState } from 'recoil'; +import { UserState } from '@recoil/userAtom'; const DUMMYNAME = '플래시'; const DUMMYLEFTCOUNT = 3; export default function ChatHead() { + const [userName,setUserName] = useRecoilState(UserState); + const HandleNameToggle = () => { + if(userName==='송은수'){ + setUserName('플래시') + } + else{ + setUserName('송은수') + } + } return ( @@ -18,7 +29,7 @@ export default function ChatHead() { {DUMMYLEFTCOUNT} - {DUMMYNAME} + {DUMMYNAME} @@ -65,6 +76,7 @@ const ChatTitle = styled.h1` line-height: ${theme.textStyles.subTitle.line_height}; font-weight: ${theme.textStyles.subTitle.font_weight}; color: ${theme.colors.black}; + cursor: pointer; `; const MenuBox = styled.div` From bc2440eb6e34be675f3a50366c5b8e6be1ec9949 Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 21:41:37 +0900 Subject: [PATCH 13/71] =?UTF-8?q?feat:=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=A8=EC=88=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChattingRoomPage/components/Chatting.tsx | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx index 6c200a1..bc67aaa 100644 --- a/src/pages/ChattingRoomPage/components/Chatting.tsx +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -1,16 +1,47 @@ -import { currentChatRoomIdState } from "@recoil/chatAtom"; -import { useRecoilValue } from "recoil"; -import styled from "styled-components" +import { currentChatRoomIdState } from '@recoil/chatAtom'; +import { UserState } from '@recoil/userAtom'; +import { useState } from 'react'; +import { useRecoilValue } from 'recoil'; +import styled from 'styled-components'; + +interface Chat { + chatId: string; + to: string; + from: string; + content: string; + date: string; + time: string; + isDisplay: boolean; + isRead: boolean; +} //이번 과제는 한 명뿐이라 채팅방은 1개 const DUMMYID = '1'; - - - export default function Chatting() { + //이름 클릭시 반전을 위한 더미상태 + const userName = useRecoilValue(UserState); const chattingData = useRecoilValue(currentChatRoomIdState(DUMMYID)); + + //메시지 출력 함수: 상대일 경우 이미지와 이름 출력 + const showMessage = (chat: Chat, idx: number) => { + if ( + (idx === 0 || chat.from !== chattingData?.chat[idx - 1].from) && + chat.from !== userName + ) { + return
교체 {chat.content}
; + } else if (idx === 0) { + return
{chat.content}
; + } else if (chat.from === chattingData?.chat[idx - 1].from) { + return
{chat.content}
; + } else { + return
{chat.content}
; + } + }; return ( -
Chatting
- ) +
+ {chattingData && + chattingData?.chat.map((chat, idx) => showMessage(chat, idx))} +
+ ); } From 294e908cb534170c58abfb1b9f33c6d49bd7612f Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 22:27:44 +0900 Subject: [PATCH 14/71] =?UTF-8?q?fix:=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=A8=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChattingRoomPage/components/Chatting.tsx | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx index bc67aaa..9c2e2f8 100644 --- a/src/pages/ChattingRoomPage/components/Chatting.tsx +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -1,8 +1,11 @@ import { currentChatRoomIdState } from '@recoil/chatAtom'; import { UserState } from '@recoil/userAtom'; -import { useState } from 'react'; +import theme from '@styles/theme'; import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; +import Mychat from './Mychat'; +import OppoChangeChat from './OppoChangeChat'; +import Oppochat from './OppoChat'; interface Chat { chatId: string; @@ -26,22 +29,61 @@ export default function Chatting() { //메시지 출력 함수: 상대일 경우 이미지와 이름 출력 const showMessage = (chat: Chat, idx: number) => { if ( + //내가 아니고 처음이거나 이전과 보낸사람이 다르면 출력 (idx === 0 || chat.from !== chattingData?.chat[idx - 1].from) && chat.from !== userName ) { - return
교체 {chat.content}
; - } else if (idx === 0) { - return
{chat.content}
; - } else if (chat.from === chattingData?.chat[idx - 1].from) { - return
{chat.content}
; + return ( + + ); + } else if (chat.from === userName) { + //내가 보낸 메시지 + return ( + + ); } else { - return
{chat.content}
; + //상대방이 보낸 메세지 + return ( + + ); } }; return ( -
+ + {chattingData && chattingData?.chat.map((chat, idx) => showMessage(chat, idx))} -
+ ); } + +const SpaceBox = styled.div` + height: 85px; +`; + +const ChatWrapper = styled.section` + display: flex; + flex-direction: column; + gap: 6px; + width: 375px; + height: 100vh; + padding: 0 16px; + background-color: ${theme.colors.blue}; +`; From ed499917b806d72c75dfa301c334025f0854c435 Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 22:28:09 +0900 Subject: [PATCH 15/71] =?UTF-8?q?feat:=20MyChat=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChattingRoomPage/components/Mychat.tsx | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/pages/ChattingRoomPage/components/Mychat.tsx diff --git a/src/pages/ChattingRoomPage/components/Mychat.tsx b/src/pages/ChattingRoomPage/components/Mychat.tsx new file mode 100644 index 0000000..1be9e02 --- /dev/null +++ b/src/pages/ChattingRoomPage/components/Mychat.tsx @@ -0,0 +1,69 @@ +import theme from '@styles/theme'; +import styled from 'styled-components'; + +interface MychatProps { + content: string; + time: string; + isDisplay: boolean; + isRead: boolean; +} + +export default function Mychat({ + content, + time, + isDisplay, + isRead, +}: MychatProps) { + return ( + + + {!isRead && 1} + {isDisplay && {time}} + + {content} + + ); +} + +const MychatIsRead = styled.span` + color: ${theme.colors.yellow}; + font-size: ${theme.textStyles.caption2.font_size}; + line-height: ${theme.textStyles.caption2.line_height}; + font-weight: ${theme.textStyles.caption2.font_weight}; +`; + +const MychatTime = styled.span` + color: ${theme.colors.gray_1}; + font-size: ${theme.textStyles.caption2.font_size}; + line-height: ${theme.textStyles.caption2.line_height}; + font-weight: ${theme.textStyles.caption2.font_weight}; +`; + +const MyChatInfo = styled.div` + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: flex-end; + gap: 2px; +`; + +const MychatWrapper = styled.section` + display: flex; + gap: 4px; + align-self: flex-end; +`; + +const MychatBox = styled.div` + display: flex; + align-items: flex-end; + padding: 10px; + background-color: ${theme.colors.white}; + border-radius: 12px; + max-width: 240px; + word-wrap: break-word; + background-color: ${theme.colors.yellow}; + color: ${theme.colors.black}; + font-size: ${theme.textStyles.body1_1.font_size}; + line-height: ${theme.textStyles.body1_1.line_height}; + font-weight: ${theme.textStyles.body1_1.font_weight}; +`; From 4ab1954302a96af7f9f154c144f1381d965faafb Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 22:28:42 +0900 Subject: [PATCH 16/71] =?UTF-8?q?feat:=20OppoChat=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChattingRoomPage/components/OppoChat.tsx | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/pages/ChattingRoomPage/components/OppoChat.tsx diff --git a/src/pages/ChattingRoomPage/components/OppoChat.tsx b/src/pages/ChattingRoomPage/components/OppoChat.tsx new file mode 100644 index 0000000..5b5760b --- /dev/null +++ b/src/pages/ChattingRoomPage/components/OppoChat.tsx @@ -0,0 +1,60 @@ +import theme from '@styles/theme'; +import styled from 'styled-components'; + +interface OppochatProps { + content: string; + time: string; + isDisplay: boolean; +} + +export default function Oppochat({ + content, + time, + isDisplay, +}: OppochatProps) { + return ( + + {content} + + {isDisplay && {time}} + + + ); +} + +const OppochatTime = styled.span` + color: ${theme.colors.gray_1}; + font-size: ${theme.textStyles.caption2.font_size}; + line-height: ${theme.textStyles.caption2.line_height}; + font-weight: ${theme.textStyles.caption2.font_weight}; +`; + +const OppoChatInfo = styled.div` + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: flex-start; + gap: 2px; +`; + +const OppochatWrapper = styled.section` + display: flex; + gap: 4px; + align-self: flex-start; + margin-left: 40px; +`; + +const OppochatBox = styled.div` + display: flex; + align-items: flex-end; + padding: 10px; + background-color: ${theme.colors.white}; + border-radius: 12px; + max-width: 240px; + word-wrap: break-word; + background-color: ${theme.colors.white}; + color: ${theme.colors.black}; + font-size: ${theme.textStyles.body1_1.font_size}; + line-height: ${theme.textStyles.body1_1.line_height}; + font-weight: ${theme.textStyles.body1_1.font_weight}; +`; From 961879e71615a83137dba83deba09b4976098d87 Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 22:29:04 +0900 Subject: [PATCH 17/71] =?UTF-8?q?feat:=20OppoChangeChat=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/OppoChangeChat.tsx | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/pages/ChattingRoomPage/components/OppoChangeChat.tsx diff --git a/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx new file mode 100644 index 0000000..fb19f53 --- /dev/null +++ b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx @@ -0,0 +1,90 @@ +import theme from '@styles/theme'; +import styled from 'styled-components'; +import Pic from '@assets/img/pic.png'; + +interface OppoChangeChatProps { + content: string; + time: string; + isDisplay: boolean; + from: string; +} + +export default function OppoChangeChat({ + content, + time, + isDisplay, + from, +}: OppoChangeChatProps) { + return ( + + + + + + {from} + {content} + + + {isDisplay && {time}} + + + ); +} + +const OppoContentBox = styled.div` + display: flex; + flex-direction: column; +`; + +const OppoImageBox = styled.div` + width: 32px; +`; + +const OppoImg = styled.img` + width: 32px; + height: 32px; + border-radius: 12px; +`; + +const OppoChangeChatName = styled.span` + color: ${theme.colors.gray_1}; + font-size: ${theme.textStyles.caption4.font_size}; + line-height: ${theme.textStyles.caption4.line_height}; + font-weight: ${theme.textStyles.caption4.font_weight}; +`; + +const OppoChangeChatTime = styled.span` + color: ${theme.colors.gray_1}; + font-size: ${theme.textStyles.caption2.font_size}; + line-height: ${theme.textStyles.caption2.line_height}; + font-weight: ${theme.textStyles.caption2.font_weight}; +`; + +const OppoChangeChatInfo = styled.div` + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: flex-start; + gap: 2px; +`; + +const OppoChangeChatWrapper = styled.section` + display: flex; + gap: 8px; + align-self: flex-start; +`; + +const OppoChangeChatBox = styled.div` + display: flex; + align-items: flex-end; + padding: 10px; + background-color: ${theme.colors.white}; + border-radius: 12px; + max-width: 240px; + word-wrap: break-word; + background-color: ${theme.colors.white}; + color: ${theme.colors.black}; + font-size: ${theme.textStyles.body1_1.font_size}; + line-height: ${theme.textStyles.body1_1.line_height}; + font-weight: ${theme.textStyles.body1_1.font_weight}; +`; From c37740867baf84974ad1e774db5dfe71fc59377b Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 22:29:31 +0900 Subject: [PATCH 18/71] =?UTF-8?q?feat:=20type.d.ts=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types.d.ts | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/types.d.ts diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 0000000..a0993ed --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,4 @@ +declare module '*.png' { + const value: any; + export = value; +} From 5842eeb20205345498a511ab63771d3b7c1ff678 Mon Sep 17 00:00:00 2001 From: eunsu Date: Wed, 27 Mar 2024 22:30:19 +0900 Subject: [PATCH 19/71] =?UTF-8?q?feat:=20Chatting=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/data/chattingRoomData.json | 18 +++++++- src/assets/img/pic.png | Bin 0 -> 2898 bytes .../ChattingRoomPage/components/ChatHead.tsx | 2 +- src/recoil/chatAtom.ts | 40 ++++++++++-------- src/recoil/userAtom.ts | 6 +++ src/svg.d.ts | 1 + 6 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 src/assets/img/pic.png create mode 100644 src/recoil/userAtom.ts diff --git a/src/assets/data/chattingRoomData.json b/src/assets/data/chattingRoomData.json index d333750..89079e8 100644 --- a/src/assets/data/chattingRoomData.json +++ b/src/assets/data/chattingRoomData.json @@ -9,7 +9,9 @@ "from": "플래시", "content": "안녕하세요", "date": "2024-03-01", - "time": "12:00" + "time": "12:00", + "isDisplay": false, + "isRead": true }, { "chatId": "2", @@ -17,7 +19,19 @@ "from": "플래시", "content": "반가워요", "date": "2024-03-01", - "time": "12:01" + "time": "12:00", + "isDisplay": true, + "isRead": true + }, + { + "chatId": "3", + "to": "플래시", + "from": "송은수", + "content": "반가워요", + "date": "2024-03-01", + "time": "12:02", + "isDisplay": true, + "isRead": true } ] } diff --git a/src/assets/img/pic.png b/src/assets/img/pic.png new file mode 100644 index 0000000000000000000000000000000000000000..4e08ef6a915a3cb45d843cbf9dcdd4a441b382bf GIT binary patch literal 2898 zcmV-Y3$65tP)Ki@EoNYA4(?pPfjggmf=VvJ0CX*o{>NvJT_h;!P` z;h9%P#!n$fE@-}oBd1QHFg}5mkN$(ZH*aC-O&(tq|+$J2@8X-wC!zNu@@B|7IiQw9 zB}Jb&RqOjWvUD8nu7@YA)*^m!7@=0Hp*UWKO}1x73i!=$f5mRxAy>M%cymGJ>}z$03$>=jMH^KY0SvNMpciGlqd~qmD{>5su?v zuin7zRRgDw(cA)6x~75~iil92kjtd;`JFYKy?7b#|9OQZa$wtOSiK&4WLIJ}9E7R^eEu_*I&I*sR>&tPTpDA7Z9YYk}pT=_t(=}LY< z5)C^*QktQI`hFeXdE<2$&0P!zZMaSog;azu?%sk$OAZE$c&53y_Sxq+u`q)!?YQGa z@M%c3y&CH69zs7rmQr-60FigVB0b-S428m6fpL;y#s8lJVvtAsC z)f0&5ZjT>5#4cf}_gu`7R4=xu6Jl#?eONlB>oGu_LX#Npk^`diUZ3q}@LVQ~COsrW z{-k(Z94#O}I|ALM*?2*4KtfOfLP8S*VpX&?yu5T6XJ0;ooEgdqUTl%sBoG7cJ%2%o z=@86UN1ASRA4l<{Oc##TSTetm$$bCU?d0aE;Ox7$UJ-KchZsJD7B34_NQ z=}v#x`cOEOVKNR*fA=g4A=LB+GhtPcDjx_*M$v-2^@Nr*88`_({NNgRY%9|z+m!*7Qtn}E``3c--U=-aQCUOUZ=xROsAz1Oghs1D+|b$GBhUXPzclI zMZ#1WNRgTYLoY}eNqAw>THQg227~C94U_UrB@X5fm&oK;wcPVUbT}uPJrAPllwrar z*3wboh8VpNdu(xv!A%DDNK_p@Bbt4>lmxOYlhqlt;)Fy>)J7zjMNyzUqTOu6wE7%K zF}i^UpY1bf-Jos9BwHwIV&*A}xDt19)sXy3Sh8Cj;G z)-t-18d4$&wZBBf(Tvq1!K_p=kv~w$9iE-zppk`@6SdEK(Oh!5G$s}%xSXa)K0|$9 zek75EU2nD<$Z*dv1IjN}5kT)Y**aaxP}VFkTt7&D5WC)3@ z;YKpNIL1LPvQQ?m%1vOADdN$94BLXoEolBwQ8}PME9y$f3AsK^^$6Jul&8-7S2+vB z7tA*C8?gQM&Y)GT;q#BLk=%yr24kq#_+U+s4!RN_Som+dq)!Tu+Y_6`4G; zIUut=5-L#tWVw3Jfy4K5ED#1H-OQwof8Fk>&1%2Vr4oYS62o*&KET-Ao-)x* zN#zSUWOM95lsgK)_FvvGfX8X}?CBcyT0w&hjfIe6r!pYR#~{3Q(R%qh71?%b_x-;9yn=@dB|Uz6uW_=?5>VEHBan zI1|h%q_f-^xl1-_&r{RW#JGrdqs7mv=y6yz>82_;*Lm5LBT1;rRRUwve@WdpdmX8ZZ=g@i9JJyZ2B!^%{29dPq7il>0^6!2_yDNxVXypopuk4WI0+ z@(8raF*NtvIHZS|nk?dj2i%U!dGwv0+68nPhx{g-l$sPnH8rUH`SO&iURrMc@cbdf z=@B%OP0U}sf{Ek_Zm<1YK@!Jes|Sx!UmFj9txN`)`8n14KDVRH07*qoM6N<$g37CBfdBvi literal 0 HcmV?d00001 diff --git a/src/pages/ChattingRoomPage/components/ChatHead.tsx b/src/pages/ChattingRoomPage/components/ChatHead.tsx index c1de197..ddbc257 100644 --- a/src/pages/ChattingRoomPage/components/ChatHead.tsx +++ b/src/pages/ChattingRoomPage/components/ChatHead.tsx @@ -4,7 +4,7 @@ import { ReactComponent as StatusSvg } from '@assets/svg/status.svg'; import { ReactComponent as ArrowLeftSvg } from '@assets/svg/arrowLeft.svg'; import { ReactComponent as SearchSvg } from '@assets/svg/search.svg'; import { ReactComponent as MenuSvg } from '@assets/svg/menu.svg'; -import { useRecoilState, useSetRecoilState } from 'recoil'; +import { useRecoilState } from 'recoil'; import { UserState } from '@recoil/userAtom'; const DUMMYNAME = '플래시'; diff --git a/src/recoil/chatAtom.ts b/src/recoil/chatAtom.ts index 4a2a89f..5405416 100644 --- a/src/recoil/chatAtom.ts +++ b/src/recoil/chatAtom.ts @@ -1,27 +1,33 @@ -import { atom, selectorFamily } from 'recoil' -import chattingData from '@assets/data/chattingRoomData.json' +import { atom, selectorFamily } from 'recoil'; +import chattingData from '@assets/data/chattingRoomData.json'; + +interface Chat { + chatId: string; + to: string; + from: string; + content: string; + date: string; + time: string; + isDisplay: boolean; + isRead: boolean; +} interface ChattingRoom { id: string; - chat: { - chatId: string; - to: string; - from: string; - content: string; - date: string; - time: string; - }[]; + chat: Chat[]; } export const chatDataState = atom({ key: 'chatDataState', - default: chattingData.chattings -}) + default: chattingData.chattings, +}); export const currentChatRoomIdState = selectorFamily({ key: 'currentChatRoomIdState', - get: (id: string) => ({ get }) => { - const chatData = get(chatDataState) - return chatData.find((room) => room.id === id) - }, -}) \ No newline at end of file + get: + (id: string) => + ({ get }) => { + const chatData = get(chatDataState); + return chatData.find((room) => room.id === id); + }, +}); diff --git a/src/recoil/userAtom.ts b/src/recoil/userAtom.ts new file mode 100644 index 0000000..9ba0149 --- /dev/null +++ b/src/recoil/userAtom.ts @@ -0,0 +1,6 @@ +import { atom } from 'recoil'; + +export const UserState = atom({ + key: 'userState', + default: '송은수', +}); diff --git a/src/svg.d.ts b/src/svg.d.ts index bff9471..ad3fc1e 100644 --- a/src/svg.d.ts +++ b/src/svg.d.ts @@ -1 +1,2 @@ declare module '*.svg'; +declare module '*.png'; \ No newline at end of file From 2aeb732b48666401e9f56d08af313e201d9f51e7 Mon Sep 17 00:00:00 2001 From: eunsu Date: Thu, 28 Mar 2024 01:37:16 +0900 Subject: [PATCH 20/71] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ChatBottom.tsx | 87 ++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) diff --git a/src/pages/ChattingRoomPage/components/ChatBottom.tsx b/src/pages/ChattingRoomPage/components/ChatBottom.tsx index 486d0bc..f1f6683 100644 --- a/src/pages/ChattingRoomPage/components/ChatBottom.tsx +++ b/src/pages/ChattingRoomPage/components/ChatBottom.tsx @@ -3,15 +3,98 @@ import styled from 'styled-components'; import { ReactComponent as PlusSvg } from '@assets/svg/plus.svg'; import { ReactComponent as EmojiSvg } from '@assets/svg/emoji.svg'; import { ReactComponent as MicSvg } from '@assets/svg/mic.svg'; +import { useState } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; +import { chatDataState } from '@recoil/chatAtom'; +import { UserState } from '@recoil/userAtom'; + +interface Chat { + chatId: string; + to: string; + from: string; + content: string; + date: string; + time: string; + isDisplay: boolean; + isRead: boolean; +} export default function ChatBottom() { + const [inputValue, setInputValue] = useState(''); + const userName = useRecoilValue(UserState); + const [chattingData, setChattingData] = useRecoilState(chatDataState); + + const formatDate = (date: Date) => { + const year = date.getFullYear().toString(); + let month = (date.getMonth() + 1).toString().padStart(2, '0'); + let day = date.getDate().toString().padStart(2, '0'); + return `${year}-${month}-${day}`; + }; + + const formatTime = (date: Date) => { + let hour = date.getHours().toString().padStart(2, '0'); + let minute = date.getMinutes().toString().padStart(2, '0'); + return `${hour}:${minute}`; + }; + + const HandleSubmit = () => { + setInputValue(''); + const newChat: Chat = { + chatId: Date.now().toString(), + to: userName === '송은수' ? '플래시' : '송은수', + from: userName === '송은수' ? '송은수' : '플래시', + content: inputValue, + date: formatDate(new Date()), + time: formatTime(new Date()), + isDisplay: true, + isRead: false, + }; + const lastChat = chattingData[0].chat[chattingData[0].chat.length - 1]; + if (lastChat.from === newChat.from && lastChat.time === newChat.time) { + setChattingData((prev) => { + const lastChatIndex = prev[0].chat.length - 1; + const lastChat = { + ...prev[0].chat[lastChatIndex], + isDisplay: false, + }; + lastChat.isDisplay = false; + const newChats = [ + ...prev[0].chat.slice(0, lastChatIndex), + lastChat, + newChat, + ]; + return [{ ...prev[0], chat: newChats }, ...prev.slice(1)]; + }); + } else { + setChattingData((prev) => { + const newChats = [...prev[0].chat, newChat]; + return [{ ...prev[0], chat: newChats }, ...prev.slice(1)]; + }); + } + }; return ( - + { + setInputValue(e.target.value); + }} + onKeyPress={(e) => { + if (e.key === 'Enter') { + HandleSubmit(); + } + }} + /> - + {inputValue ? ( +
+ +
+ ) : ( + + )}
); From b5d677d8ab953e213b40deacb91176a75794a8d8 Mon Sep 17 00:00:00 2001 From: eunsu Date: Thu, 28 Mar 2024 02:04:28 +0900 Subject: [PATCH 21/71] =?UTF-8?q?feat:=20=EB=82=A0=EC=A7=9C=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChattingRoomPage/components/ChatHead.tsx | 21 +++--- .../ChattingRoomPage/components/Chatting.tsx | 75 +++++++++++++++---- 2 files changed, 71 insertions(+), 25 deletions(-) diff --git a/src/pages/ChattingRoomPage/components/ChatHead.tsx b/src/pages/ChattingRoomPage/components/ChatHead.tsx index ddbc257..5068499 100644 --- a/src/pages/ChattingRoomPage/components/ChatHead.tsx +++ b/src/pages/ChattingRoomPage/components/ChatHead.tsx @@ -7,19 +7,18 @@ import { ReactComponent as MenuSvg } from '@assets/svg/menu.svg'; import { useRecoilState } from 'recoil'; import { UserState } from '@recoil/userAtom'; -const DUMMYNAME = '플래시'; const DUMMYLEFTCOUNT = 3; export default function ChatHead() { - const [userName,setUserName] = useRecoilState(UserState); + const [userName, setUserName] = useRecoilState(UserState); + const displayName = userName === '송은수' ? '플래시' : '송은수'; const HandleNameToggle = () => { - if(userName==='송은수'){ - setUserName('플래시') + if (userName === '송은수') { + setUserName('플래시'); + } else { + setUserName('송은수'); } - else{ - setUserName('송은수') - } - } + }; return ( @@ -29,7 +28,7 @@ export default function ChatHead() { {DUMMYLEFTCOUNT} - {DUMMYNAME} + {displayName} @@ -40,7 +39,11 @@ export default function ChatHead() { const Statusbox = styled.div` position: fixed; + width: 375px; top: 0; + left: 50%; + transform: translateX(-50%); + flex-shrink: 0; `; const ChatHeaderWrapper = styled.section` diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx index 9c2e2f8..95ad2a1 100644 --- a/src/pages/ChattingRoomPage/components/Chatting.tsx +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -28,34 +28,34 @@ export default function Chatting() { //메시지 출력 함수: 상대일 경우 이미지와 이름 출력 const showMessage = (chat: Chat, idx: number) => { - if ( - //내가 아니고 처음이거나 이전과 보낸사람이 다르면 출력 - (idx === 0 || chat.from !== chattingData?.chat[idx - 1].from) && - chat.from !== userName - ) { - return ( - ); - } else if (chat.from === userName) { - //내가 보낸 메시지 - return ( - ); - } else { - //상대방이 보낸 메세지 - return ( + } + // 상대방이 보낸 메세지 + else { + messageComponent = ( ); } + // 이전과 날짜가 다르면 날짜 출력 + if (idx === 0 || chat.date !== chattingData?.chat[idx - 1].date) { + const year = chat.date.slice(0, 4); + const month = chat.date.slice(5, 7); + const day = chat.date.slice(8, 10); + return ( + <> + + {year}년 {month}월 {day}일 + + {messageComponent} + + ); + } + return messageComponent; }; return ( @@ -74,6 +89,34 @@ export default function Chatting() { ); } +const DateContainer = styled.div` + margin: 10px 0; + color: ${theme.colors.gray_1}; + font-size: ${theme.textStyles.caption4.font_size}; + line-height: ${theme.textStyles.caption4.line_height}; + font-weight: ${theme.textStyles.caption4.font_weight}; + text-align: center; + &::before { + display: inline-block; + width: calc(40% - 20px); + height: 1px; + margin: 8px 10px 8px 0; + background-color: ${theme.colors.gray_2}; + vertical-align: top; + content: ''; + } + + &::after { + display: inline-block; + width: calc(40% - 20px); + height: 1px; + margin: 8px 0 8px 10px; + background-color: ${theme.colors.gray_2}; + vertical-align: top; + content: ''; + } +`; + const SpaceBox = styled.div` height: 85px; `; From c305c964583a2ffde03610e3b117ed86c1fa503e Mon Sep 17 00:00:00 2001 From: eunsu Date: Thu, 28 Mar 2024 02:25:57 +0900 Subject: [PATCH 22/71] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=EC=B0=BD=20ove?= =?UTF-8?q?rflow=EC=8B=9C=20=EB=8F=99=EC=9E=91=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChattingRoomPage/components/ChatHead.tsx | 2 ++ .../ChattingRoomPage/components/Chatting.tsx | 22 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/pages/ChattingRoomPage/components/ChatHead.tsx b/src/pages/ChattingRoomPage/components/ChatHead.tsx index 5068499..2d54b33 100644 --- a/src/pages/ChattingRoomPage/components/ChatHead.tsx +++ b/src/pages/ChattingRoomPage/components/ChatHead.tsx @@ -39,11 +39,13 @@ export default function ChatHead() { const Statusbox = styled.div` position: fixed; + z-index: 1; width: 375px; top: 0; left: 50%; transform: translateX(-50%); flex-shrink: 0; + background-color: ${theme.colors.blue}; `; const ChatHeaderWrapper = styled.section` diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx index 95ad2a1..aef0ddb 100644 --- a/src/pages/ChattingRoomPage/components/Chatting.tsx +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -1,6 +1,7 @@ import { currentChatRoomIdState } from '@recoil/chatAtom'; import { UserState } from '@recoil/userAtom'; import theme from '@styles/theme'; +import { Fragment, useEffect, useRef } from 'react'; import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; import Mychat from './Mychat'; @@ -25,6 +26,7 @@ export default function Chatting() { //이름 클릭시 반전을 위한 더미상태 const userName = useRecoilValue(UserState); const chattingData = useRecoilValue(currentChatRoomIdState(DUMMYID)); + const chatRef = useRef(null); //메시지 출력 함수: 상대일 경우 이미지와 이름 출력 const showMessage = (chat: Chat, idx: number) => { @@ -70,18 +72,25 @@ export default function Chatting() { const month = chat.date.slice(5, 7); const day = chat.date.slice(8, 10); return ( - <> + {year}년 {month}월 {day}일 {messageComponent} - + ); } return messageComponent; }; + + useEffect(() => { + if (chatRef.current) { + chatRef.current.scrollTop = chatRef.current.scrollHeight; + } + }); + return ( - + {chattingData && chattingData?.chat.map((chat, idx) => showMessage(chat, idx))} @@ -126,7 +135,12 @@ const ChatWrapper = styled.section` flex-direction: column; gap: 6px; width: 375px; - height: 100vh; + height: 100%; padding: 0 16px; + margin-bottom: 48px; background-color: ${theme.colors.blue}; + overflow-y: scroll; + &::-webkit-scrollbar { + display: none; + } `; From 174d617486d6605e80ab28aa566ce3ff5d5be449 Mon Sep 17 00:00:00 2001 From: eunsu Date: Thu, 28 Mar 2024 02:26:28 +0900 Subject: [PATCH 23/71] =?UTF-8?q?feat:=20=EB=82=A0=EC=A7=9C=EA=B0=80=20?= =?UTF-8?q?=EB=B0=94=EB=80=94=EB=95=8C=EB=8F=84=20OppochangeChat=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/ChattingRoomPage/components/Chatting.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx index aef0ddb..37eab56 100644 --- a/src/pages/ChattingRoomPage/components/Chatting.tsx +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -44,7 +44,7 @@ export default function Chatting() { ); } // 내가 아니고 처음이거나 이전과 보낸 사람이 다르면 출력 - else if (idx === 0 || chat.from !== chattingData?.chat[idx - 1].from) { + else if (idx === 0 || chat.from !== chattingData?.chat[idx - 1].from || chat.date !== chattingData?.chat[idx - 1].date) { messageComponent = ( Date: Thu, 28 Mar 2024 02:52:36 +0900 Subject: [PATCH 24/71] =?UTF-8?q?feat:=20localStorage=EB=A5=BC=20=ED=86=B5?= =?UTF-8?q?=ED=95=9C=20=EC=83=81=ED=83=9C=EA=B4=80=EB=A6=AC=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/recoil/chatAtom.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/recoil/chatAtom.ts b/src/recoil/chatAtom.ts index 5405416..150d499 100644 --- a/src/recoil/chatAtom.ts +++ b/src/recoil/chatAtom.ts @@ -19,7 +19,20 @@ interface ChattingRoom { export const chatDataState = atom({ key: 'chatDataState', - default: chattingData.chattings, + default: [], + effects: [ + ({ setSelf, onSet }) => { + const savedData = localStorage.getItem('chatData'); + if (savedData) setSelf(JSON.parse(savedData)); + else setSelf(chattingData.chattings); + + onSet((newValue: ChattingRoom[], _: any, isReset: boolean) => { + isReset + ? localStorage.removeItem('chatData') + : localStorage.setItem('chatData', JSON.stringify(newValue)); + }); + }, + ], }); export const currentChatRoomIdState = selectorFamily({ From 4740e79df3c713fcbb29caca22d8e0af58396db9 Mon Sep 17 00:00:00 2001 From: eunsu Date: Thu, 28 Mar 2024 02:58:53 +0900 Subject: [PATCH 25/71] =?UTF-8?q?feat:=20=EB=B0=B0=ED=8F=AC=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/svg/send.svg | 4 ++++ src/pages/ChattingRoomPage/components/ChatBottom.tsx | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/assets/svg/send.svg diff --git a/src/assets/svg/send.svg b/src/assets/svg/send.svg new file mode 100644 index 0000000..67cd108 --- /dev/null +++ b/src/assets/svg/send.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/pages/ChattingRoomPage/components/ChatBottom.tsx b/src/pages/ChattingRoomPage/components/ChatBottom.tsx index f1f6683..2c041fe 100644 --- a/src/pages/ChattingRoomPage/components/ChatBottom.tsx +++ b/src/pages/ChattingRoomPage/components/ChatBottom.tsx @@ -1,6 +1,7 @@ import theme from '@styles/theme'; import styled from 'styled-components'; import { ReactComponent as PlusSvg } from '@assets/svg/plus.svg'; +import { ReactComponent as SendSvg } from '@assets/svg/send.svg'; import { ReactComponent as EmojiSvg } from '@assets/svg/emoji.svg'; import { ReactComponent as MicSvg } from '@assets/svg/mic.svg'; import { useState } from 'react'; @@ -90,7 +91,7 @@ export default function ChatBottom() { {inputValue ? (
- +
) : ( From 3649082a3b907c996b8447806adb2f29ad8a7a06 Mon Sep 17 00:00:00 2001 From: eunsu Date: Fri, 29 Mar 2024 00:44:53 +0900 Subject: [PATCH 26/71] =?UTF-8?q?style:=20=EC=9D=B4=EB=A6=84=EA=B3=BC=20?= =?UTF-8?q?=EB=A7=90=ED=92=8D=EC=84=A0=20=EA=B0=84=EA=B2=A9=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/ChattingRoomPage/components/OppoChangeChat.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx index fb19f53..ba2e1e2 100644 --- a/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx +++ b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx @@ -34,6 +34,7 @@ export default function OppoChangeChat({ const OppoContentBox = styled.div` display: flex; flex-direction: column; + gap: 2px; `; const OppoImageBox = styled.div` From 38daf648d86b220846babd442d0f4623f0ae50ca Mon Sep 17 00:00:00 2001 From: eunsu Date: Fri, 29 Mar 2024 00:47:06 +0900 Subject: [PATCH 27/71] =?UTF-8?q?refactor:=20=EC=A0=84=EC=86=A1=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/svg/send.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/svg/send.svg b/src/assets/svg/send.svg index 67cd108..4c5a3c7 100644 --- a/src/assets/svg/send.svg +++ b/src/assets/svg/send.svg @@ -1,4 +1,4 @@ - - + + From 4540f8095849ba7c9528457be46fcfd9c752f7a7 Mon Sep 17 00:00:00 2001 From: eunsu Date: Fri, 29 Mar 2024 01:18:33 +0900 Subject: [PATCH 28/71] =?UTF-8?q?feat:=20=EB=8D=94=EB=B8=94=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=BB=A4=EC=8A=A4=ED=85=80=ED=9B=85=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useDoubleClick.tsx | 21 ++++++++++ .../components/OppoChangeChat.tsx | 39 +++++++++++++------ .../ChattingRoomPage/components/OppoChat.tsx | 32 +++++++++------ 3 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 src/hooks/useDoubleClick.tsx diff --git a/src/hooks/useDoubleClick.tsx b/src/hooks/useDoubleClick.tsx new file mode 100644 index 0000000..c69acf8 --- /dev/null +++ b/src/hooks/useDoubleClick.tsx @@ -0,0 +1,21 @@ +import { useEffect, useState } from "react"; + + +export default function useDoubleClick() { + const [click, setClick] = useState(0); + const [isDoubleClicked, setIsDoubleClicked] = useState(false); + + const handleClick = () => { + setClick((prev) => prev + 1); + }; + + useEffect(() => { + const timer = setTimeout(() => { + setClick(0); + }, 300); + if (click === 2) setIsDoubleClicked((prev) => !prev); + + return () => clearTimeout(timer); + }, [click]); + return { handleClick, isDoubleClicked} +} diff --git a/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx index ba2e1e2..4d6ecb5 100644 --- a/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx +++ b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx @@ -1,6 +1,7 @@ import theme from '@styles/theme'; import styled from 'styled-components'; import Pic from '@assets/img/pic.png'; +import useDoubleClick from '@hooks/useDoubleClick'; interface OppoChangeChatProps { content: string; @@ -15,22 +16,36 @@ export default function OppoChangeChat({ isDisplay, from, }: OppoChangeChatProps) { + const { handleClick, isDoubleClicked } = useDoubleClick(); return ( - - - - - - {from} - {content} - - - {isDisplay && {time}} - - + + + + + + + {from} + {content} + + + {isDisplay && {time}} + + + {isDoubleClicked && 하트} + ); } +const DUMMYBOX = styled.div` + margin-left: 40px; +`; + +const OppoChangeChatContainer = styled.section` + display: flex; + flex-direction: column; + gap: 4px; +`; + const OppoContentBox = styled.div` display: flex; flex-direction: column; diff --git a/src/pages/ChattingRoomPage/components/OppoChat.tsx b/src/pages/ChattingRoomPage/components/OppoChat.tsx index 5b5760b..3f69b94 100644 --- a/src/pages/ChattingRoomPage/components/OppoChat.tsx +++ b/src/pages/ChattingRoomPage/components/OppoChat.tsx @@ -1,4 +1,6 @@ +import useDoubleClick from '@hooks/useDoubleClick'; import theme from '@styles/theme'; +import { useEffect, useState } from 'react'; import styled from 'styled-components'; interface OppochatProps { @@ -7,21 +9,28 @@ interface OppochatProps { isDisplay: boolean; } -export default function Oppochat({ - content, - time, - isDisplay, -}: OppochatProps) { +export default function Oppochat({ content, time, isDisplay }: OppochatProps) { + const { handleClick, isDoubleClicked } = useDoubleClick(); return ( - - {content} - - {isDisplay && {time}} - - + + + {content} + + {isDisplay && {time}} + + + {isDoubleClicked &&
하트
} +
); } +const OppochatContainer = styled.section` + display: flex; + flex-direction: column; + gap: 4px; + margin-left: 40px; +`; + const OppochatTime = styled.span` color: ${theme.colors.gray_1}; font-size: ${theme.textStyles.caption2.font_size}; @@ -41,7 +50,6 @@ const OppochatWrapper = styled.section` display: flex; gap: 4px; align-self: flex-start; - margin-left: 40px; `; const OppochatBox = styled.div` From 4a5c4b1ae727d17b997fac4c8bc69ccedad143e4 Mon Sep 17 00:00:00 2001 From: eunsu Date: Fri, 29 Mar 2024 13:18:02 +0900 Subject: [PATCH 29/71] =?UTF-8?q?style:=20=ED=95=98=ED=8A=B8=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=8A=A4=ED=83=80=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/svg/heart.svg | 18 +++++++++++++ .../ChattingRoomPage/components/HeartBox.tsx | 25 +++++++++++++++++++ .../components/OppoChangeChat.tsx | 9 +++++-- .../ChattingRoomPage/components/OppoChat.tsx | 3 ++- src/styles/theme.ts | 1 + 5 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/assets/svg/heart.svg create mode 100644 src/pages/ChattingRoomPage/components/HeartBox.tsx diff --git a/src/assets/svg/heart.svg b/src/assets/svg/heart.svg new file mode 100644 index 0000000..a3e35ea --- /dev/null +++ b/src/assets/svg/heart.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/pages/ChattingRoomPage/components/HeartBox.tsx b/src/pages/ChattingRoomPage/components/HeartBox.tsx new file mode 100644 index 0000000..5721f74 --- /dev/null +++ b/src/pages/ChattingRoomPage/components/HeartBox.tsx @@ -0,0 +1,25 @@ +import theme from '@styles/theme'; +import styled from 'styled-components'; +import { ReactComponent as HeartSvg } from '@assets/svg/heart.svg'; + +export default function HeartBox() { + return ( + + + 1 + + ); +} + +const HeartBoxContatiner = styled.section` + width: 32px; + height: 22px; + padding: 0 6px 0px 4px; + display: flex; + justify-content: space-between; + align-items: center; + color: ${theme.colors.yellow}; + font-size: 8px; + background-color: ${theme.colors.darkblue}; + border-radius: 24px; +`; diff --git a/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx index 4d6ecb5..3218cbb 100644 --- a/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx +++ b/src/pages/ChattingRoomPage/components/OppoChangeChat.tsx @@ -2,6 +2,7 @@ import theme from '@styles/theme'; import styled from 'styled-components'; import Pic from '@assets/img/pic.png'; import useDoubleClick from '@hooks/useDoubleClick'; +import HeartBox from './HeartBox'; interface OppoChangeChatProps { content: string; @@ -31,12 +32,16 @@ export default function OppoChangeChat({ {isDisplay && {time}} - {isDoubleClicked && 하트} + {isDoubleClicked && ( + + + + )} ); } -const DUMMYBOX = styled.div` +const EmotionBox = styled.div` margin-left: 40px; `; diff --git a/src/pages/ChattingRoomPage/components/OppoChat.tsx b/src/pages/ChattingRoomPage/components/OppoChat.tsx index 3f69b94..b97a27c 100644 --- a/src/pages/ChattingRoomPage/components/OppoChat.tsx +++ b/src/pages/ChattingRoomPage/components/OppoChat.tsx @@ -2,6 +2,7 @@ import useDoubleClick from '@hooks/useDoubleClick'; import theme from '@styles/theme'; import { useEffect, useState } from 'react'; import styled from 'styled-components'; +import HeartBox from './HeartBox'; interface OppochatProps { content: string; @@ -19,7 +20,7 @@ export default function Oppochat({ content, time, isDisplay }: OppochatProps) { {isDisplay && {time}} - {isDoubleClicked &&
하트
} + {isDoubleClicked && } ); } diff --git a/src/styles/theme.ts b/src/styles/theme.ts index c27edbc..09b42bf 100644 --- a/src/styles/theme.ts +++ b/src/styles/theme.ts @@ -4,6 +4,7 @@ const colors = { orange: '#FF6128', yellow: '#FEE500', blue: '#ABC1D1', + darkblue: '#91A4B1', gray_1: '#5C666E', gray_2: '#828282', gray_3: '#A7ACAF', From ee5b0fb85705fdfd07cad5698ed54c3b243c1541 Mon Sep 17 00:00:00 2001 From: eunsu Date: Fri, 29 Mar 2024 13:52:49 +0900 Subject: [PATCH 30/71] =?UTF-8?q?refactor:=20=EC=9C=88=EB=8F=84=EC=9A=B0?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B9=A8=EC=A7=90=ED=98=84=EC=83=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20refactor:=20DUMMYDATA=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/data/chattingRoomData.json | 42 +++++++++++++++--- src/assets/img/capture.png | Bin 0 -> 124175 bytes .../ChattingRoomPage/components/Chatting.tsx | 4 +- 3 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 src/assets/img/capture.png diff --git a/src/assets/data/chattingRoomData.json b/src/assets/data/chattingRoomData.json index 89079e8..29604e8 100644 --- a/src/assets/data/chattingRoomData.json +++ b/src/assets/data/chattingRoomData.json @@ -7,9 +7,9 @@ "chatId": "1", "to": "송은수", "from": "플래시", - "content": "안녕하세요", + "content": "내일 저녁은 햄버거를 먹을거야. 왜냐하면 어제 파스타를 먹었고 오늘은 한끼도 못먹었거든.", "date": "2024-03-01", - "time": "12:00", + "time": "19:00", "isDisplay": false, "isRead": true }, @@ -17,9 +17,9 @@ "chatId": "2", "to": "송은수", "from": "플래시", - "content": "반가워요", + "content": "너는 먹고 싶은게 있어?", "date": "2024-03-01", - "time": "12:00", + "time": "19:00", "isDisplay": true, "isRead": true }, @@ -27,11 +27,41 @@ "chatId": "3", "to": "플래시", "from": "송은수", - "content": "반가워요", + "content": "음...", "date": "2024-03-01", - "time": "12:02", + "time": "19:01", + "isDisplay": true, + "isRead": true + }, + { + "chatId": "4", + "to": "송은수", + "from": "플래시", + "content": "현기증 나니깐 얼른 답변해줘.", + "date": "2024-03-02", + "time": "08:31", "isDisplay": true, "isRead": true + }, + { + "chatId": "5", + "to": "플래시", + "from": "송은수", + "content": "조금만 기다려", + "date": "2024-03-03", + "time": "12:02", + "isDisplay": false, + "isRead": false + }, + { + "chatId": "6", + "to": "플래시", + "from": "송은수", + "content": "고민좀 해볼게", + "date": "2024-03-03", + "time": "12:02", + "isDisplay": true, + "isRead": false } ] } diff --git a/src/assets/img/capture.png b/src/assets/img/capture.png new file mode 100644 index 0000000000000000000000000000000000000000..2d3af9ca61d4bda4db4034a135aac4f16e0cfe31 GIT binary patch literal 124175 zcmeFYby!r<);N4-7)lyMKx$}^4hJL$X=yq*IV?q`Mow zgZIAgd!OI;{O`fAODQQe1t}@G+8aAFOKVdAkPrRv98+7P^Ip2{`xxY7Y&e|hkU2yi8_pDX z&qI#zLktXysST-CoD+WM$14s4spm3x3;eXzTKlrcE{r54b;xjBmXz1U_|UoejqgL{dUysVK#b=gERm6jxhDziK1tUGSEJsRqRK|t&0~$!g^~oi zW#O7Xu>Xvk$G)pqrRv2&xu6AT4p+WZUiC+K-17 zFh;llSGP5(e6QM1h~WSaVuz(Y;FxQbD!|-(Ea_vA`pdl3{keAvW@QK*-m<5V-sJdV?@uNZ1e8-7d>Z8sF`X0}U2h)$WT2v`qKI z60p*dvZv9jFUQz0}7R5>e?JTxRjVgyZMcpx43BV)n+JXE53nwaom{uChG`5uFXFZQf}C8;%4D27F+nE z$)b4Q>rH0VF6|!1PC>!@GnI!bVk-J~z0u!(EpZhvP$gE4!{RT!L(Xw3L&zgUpT39{ zR2o-`1C;E9FB}~)%U(|-ohIuY53Yg68g~POxeiyZG73NM?cF_z%d}F%X4T*azzY7s zr}vN1gS+uzrwMAos>$L!7|V?qeeD#L5bills3dC$bPrCU1vbW07VtoQGf=g^n@w zVUg@fLSyY2?^)?w)TGxcoT>aREV5*JorzT$a>dEz^ zcUm|0v@Rc96YjJ$5PgA3y%lSUYov={G9k_-e1f$UxD_ZBIJB#?PG8GF99k`Hl`Z0R zFD`Vvb*=ShD_*Pc0=5z69&d4mH2qrKrozl8R^miWHrHLt$pem2W%(^7mE_l;A1 zGRx)h7HWd>!H3r}M>)A_IA0XM{2taA#vCRP5blj_%i6OnwInU`m>``{bS|m>EUf7L z)+5%V>Kt;UxL$YP1dkmLh4I`tLH1pnVPwkvt7NBM^%WK1zxj>|L`KjuwxukMv2N`K&yQ8dC`6JUNC1hHnkSgMQ=J@NL%3*o#Ss`RjevOPg`7Q$5GM zLS9i_EuG_?pWxY}i3E@buwhW*sZbu`kJ4;EOcktkI=!BE#Z{LQY0++33)01##Jz}& zh4qccINo1^<-f;s1` zu8uB~4rkHpqIJ|r>9RJN&ZzcmY1YK)gc9m&NtKymnd!vxm~By=b?`*hgz5ORu~#K> zThp8Gjwv@qWC>;6A_ybD+;(Wsm5JsnqTd(0n0HBCHhOm5k9*GgDJm(=W2xJ)9$<3ydj>S)vns zBuhn;mpnwaP9w};_E3qFgUi}`EXTgaUcpTRcAw~eG2epTC(}=?C3JVB9kR7#r=w9( z=~Ui~LF6RV8bk*IE}EMWW2Fv{8d3+Bc=CDuUY9Y*6&Rd~F7{>|#O!g}Q1$YNfUghZ3U|okjS`}X@ zOSfRYX#Vq#dq2qPyYM?_;;+P69+=DZA#I=9zDj?h_hQB{Hi1=cSh&;e*RTS$k*7mw zrDMs;pWks8jE3*G&g8F8FWaCtrwp^q<+0cF-rB1g+UlokD`cR?EyjIr~i3mD<(SUC*)1 zS--pSMSt{KxQNkM;o@nwpGVC;k5!yNpVa4B^eoy`;d7i=T z$~IdTR3clQ>u7U2(dK+_BjNi+iMZ9((Vd&H>L)E-G9PvXcLiULuT~Vh#0}<_C}$vW z1ZO9RYd_a_ef#Fc?qD@Pk~c|Qk#-e%rhDWPuw^>guuZtNIz>@aT0T)%?U6YD*Y)jgPw270i14uO*P-w1lQ_puPQ+&uQ9EtdMOU1dNtmw*UeFYXN=sS211=vk$y zQTMclvFa6Z2 z4W#(_0Jl0c;58rMR4I`Yp|N@MCy4d9;0^4WL~E01X&D2_dFdOy_Rd#O5HePSXWNij z@9_W_)C3m90AY_qHOi^{&XW&(49(t+%X5Wm?rU?iNk;u=QZo`6{z|{mFTJkG@=m=% z#Q8-LU`P>Ws;ywAtPDH=+gJb$avwkkTM+ORhfw}^TNc6!p#8lM1%O~n0QS#5D&Y0@ z69b;NWBzePdmjW~g1?Bt(=8MFU%fGaOtk-ML(9NtfTV_$f&zHeFn(idYU^lW=k&Ad z+zh;dZ7;9m2mtq(Zcm89Q^sBJ{iBwe+D_WaO2Wo=He7}#c1EULZZ`I}?*T;Jgu$kb zsgohx&Bof+QP@q4{%;Rquzh=*n;!nRi<6ZYy|%I%T*~f^DICGY!^J}{eg_VRi@q^2 z6MiZ!`_JLvFEM%xCntMhZf;jsS1wn6F1t78+`Nw-J>ur!K}3t+5#|1GqKV%T zMk5IT=}2WMt*QxLK`y)fKwf}ftpB*)wpR_>c+&j=00}5aOKQ47HtTSvUdepS)0HRg zpq7VEz3~UI19fA<8ChMkEZ^B~sizi~H?6s7+P9(5`#%zWNOz2yv&b0AM2Rt=T>7z4 z9x!#JZ5RxSMfZ|K9#^4~krDC+lh}0q>z}Kqvt1LOg>@(A#}%)4e6M^uXFOlM{_XMF z`$((qrsDP1e%g-L3TGZ8lpg+XkAY_}msnun+0oY&A_x)Tzd8JoNT?qT?BDi*5UoCj z5(CvmPn{M217J7=+3$xH@^23(ItVuKO8aXy(|>>(17w;bVbcHhsE+Z2`EeC!PQU*T zQ00LE{(p}&IP{e~5{e|#`ev)}AD}VtF-2a!&{tq1f|AWnt&+h;io2Ai{R)uv_C8pg|xymV13M^@Vj%PgW zPB!#!Ccf)8)Gxi5b?g_LF3>5R`t~e;%Fg#f_as>2GV61#Yy|ndirA56g<%VZ>&?|k z&3D}jRJ^JP3$@dLr0wcJ*7mr0hO=GWQG&=`D+%?K&q2y;Wx3TTD*mV=mSMVP=7_7p z{lLt1r|ty5%e!3DKJBl>ru$h3J8I-AIkW`fIfmckyo1<2U5s`mVOFv~nRd*n~)Z)5W&kD>&=qxZH!C(Yu_rCncz`em8 z-U}Zcc;3_gc-JLhY zm4DP3T^#jS#SJsSb=9L)HZCk?XV3avF(hWEsvM^iICWq2E18EOqlx5I0Jq7>nR}@M z;~v>Vp^pB6Ek+<#2>P5;j|2#Xc6^WW^{bpWM&22>MNx0yKl(#h(alv8IO~2h*qI{X z>ywe=dwIIIO}*n5tXpcPyn6W&u>TV)SFI4oTop{~Ggf!G-+e{JD5PT6m%6q(Cw@F; z93|QwK|zvA7eaDGwN$f(N)g#A8=Cr2v%S7ud(f9AT(~K5(8Dh^XxDIcoO{3FpiiV9 zkAkmt+UuZq{@T8;5eovasHWnJ?jl`#c-sTtv`%LDoLg47?JbCl=g3ChfdXkZt@lU} zs{)I_+lNP*g>ljLEm!r|=Nq<*ZIM}}y^U}Cj@N(ZUld1nXYbrfPa z?J7y2aw$Rgt+M1HjiBvI`>BTW_57=eIW&BsMr!ZFK}n^V*Z@bIdmLD(rU?&gGz3P9 zeZSbr;rRL~)kRcVW-qOnM_Egop(^2LqMhF5iDEA!-J-ZL-2D+aJU8bSTrcsevu+bP zI#H#1_IFby8A2k&TLbnsg2U18TZM_3#thb2?u59%l_n#V=aVDI$e+i^jffja5i)g< zK`3?KCt?K|UAB1hZx`(`o{+Losf^a0U{vj|Kqm^~da54ypW&=qT-GA8trEITUOVcu=?mr3<)qc9ipQjNeS z7crUKH|zRpER#uz&By`_be`u(oadyizwINBgnkVHkbkh-2i-=WI2ky+)y^wP0FdH; zPC6K(D--oRzUoU!wYW_=w7=6q6L9&XqX`II?zT)fVbW63^MUY4FgUT#HtFt+sA5TX%Pu^yb5^dSaTzm|3~X27%UAwu%U>`JY@ncdclwg7 zDN~me27Xh!P7wu8o1p`3dgf`)36tI@(^4py1*yZZffcz1(M!_kSweuuV>N58vEt1= zB7hK%weZ+Fip2QyN``O!toG-0pz#bAVz?2;*oCi;Q_Y7-YAh7#9!5CKOV4w9OCB|} z9{bGRu*pS_hf*~?#RZ>;E_!-aK2WQ+x(_zAue>ApngBHJo%XQ~g>%=hrhBY^&23#e z^*HB(PCtP^g80cAhv{d-QxdrKXHGC@KwP$pN4Yy{njDm?P)v%j0S1~X5?6pZO9bk^_9Ta!|ZkqsDgWFI)dKYstp0+8otXN<9%W%J{R z>b+1kPS1upr()rX`|DMZejoNb`$}l7L)|jrc`1SQb!0U9piQr67HU&WS+?WO4+urO z912MAC+PrNTsPE-QnNCdx>%rm+=a{*0BTNRH?mNGT7ARq#iNh1ia9b2qdmBQV^C%k zF`ixbns)tAo+?2fF}>!P9kr&Fb`^_o>A1;bNd|~thsr*mxe_8{(~h2-4M!zi6w-L# zSa_f~V0J%?MCA`oyD2(UJ9D|&XukQK2ro+XknI*>TZF4-lZGI~)!L=u9)tifU>`FV z$W|f^b8af&wnjVtG(wC-Y0|hG(H2>vrU(NdR7{{HoV-YQ-q>k;QH8O>>xoMl8F@Or zWlB9+5Pnm_8MzcKt2cgKuk*YBzms*K19Y|uy1@&pQO)Ds0jqnJ)`TvWPq!K0PU(tiAA$VyRv zmw|h_W8b4J-X4`KK8T;E9MF-#a<}VdR36AQ4(mXUhcjmTg-m6|_K^S`0jnCgbZO4H zqc0eVsO?iV1h)4MxoWtkDBx<$;R(gw=XYR+2K zAcaI3rF`$;Gw!5r)8rVGx=<2PN$Kvh*%hZ1_deKZX zpr7ZRCl<8@$rl^QU>O^deksDe6L%6ZSZ_?QORZC52Lvd>;Q9qPjndswK@BSdoPvh7jX|M3`A9Gp5*3*{^^0P{K0iQE&%!wha%~__=|fA$Oa{ZWHFk zcTOAA;k?^m@efgETKty1q=`(R&2u1RixLH)47SN^i9Yyg9pK#YmBd==JCh$PNfbF1 z%lJ`D=~1YCG)V})go@7(Id}Up9&({x)w7?uF{&;IJp}jFy<5IW0`aC~Jn1^&HnJ|* zj<|AZ15mhZ84gAq0g=VUkZeHxqHLUTVu>Zgiw}n2Ee#*nAH%(-Bc9uA(i_N)vtNc| z@R${Ks85`1@@2;d9B1r7P5%gkluE!e(n51*U^dB-8W;S@E!Zv6jiuF`{+k3Kr{z2T zbN&7$O@@h7_4RLGFXm=QEG3*Oo}IEZ8pbtYM=meg``h8sS3@QvZWCDrIXa);7bR;w86~5fFElBxu?A`d3P)?Du&{VM%M=6QOX;lyt4B93WA*clZ!UBxB z@3FYVefA*)-1Pm?1q}%(5}V^32o^J~OLz&4uoYK-F4k@qpL0U#c`9#1hl4^UU?3=c z`Q3|&`ANHmI@_8cz_XP|4kjnwRC!!aQS<&R&*J%kmnl_y5@7i8pful7Tm1a4zaC=@ zs0THDh3%XQY^#<>! zAU&{NU10WOmm!z(_Vp>xd-pn9N2QO z0VmX2&*Ev8VIQK}X*1L(6qCTo-ew}ZUnk=Ur{LDyUQSxEn-9~7Cu zVC2jJ420&PMFC1RJ>u4ATOugPN*lNDS@(ce3V^&D%{gs=@?Z7cWIT>g@zC1sOF)Bs zq%f}4ox622DUk+w#aHpzdDu~uf9;&b2V~*IokdgrB+CkH{Os>-{!)ixQ5%)txz6!{ z?v(x)P^4FcxB1H^CD_}L*PJT`ii%^KJS2d9t8Q~_pU;oTG@~h^aAFrKmxy!o&6cq! zPa7?uQDwfvJR&H@P;ru|r)+VaO52AdX2n+yXzsJ6S z0_}rAi#JV}L4+~NsohHYR3{M(7QRGk#`)2L(lO-B_gBUzg&^9drBag%d`;C3(jt zD_vQX)_Rnr-dJ2tYZxfr~fDCM3l1Wa!6a0f5Ylzi4bySwW;j z0Dk({7MY=yoe3>eyvOup_iYjm{8N|${Y5{JMPWVQ$-!TZF;5gO5j`!lpdK^EU8knZ z$om^m5t6Jvn;a|v{OYoM+i3<-?fgIyo{(-)ijc999ASZ>(p?r6da8@m{(ZbubL`2+ zsxejTN6lO}B`$4I6{^`v#T8?6R9DO~af01)MV|<%y`?Swg=`bfj(z+zMyZnV;`HoW zLio;RuLsFisJSDE_F+Jve%pgTv57@QLY)+ObnwZf2c8_p)NiAU9*w>C;0KbhT~^Xu zG4iUhftRy-`{CY_Ma(f_o~C0YtSw-N%?Vm2{xMNjrJm9s!EKAG<9nn9oR} z*wLL{G9k|AuYUB`D=`>-zl>xODwZt_8R#{v55sKJlxnD``HdNN6lIP8omYXjay_V0dcj#| z_06BqmRaF;r!T!9TO1s+OZ(iNeyIokrifZwtpTkQ5wy-)r0XtV5cz73mcQQOpcroq z;Yd~N1XXdHaMFc_^oe%&{Or4zk{vFuGD#z1xxYS~@R|R@0u6?NKgLeQVwSkyH;VXg zt&4uOKXkcod)Vzz+rD7i6Jd&U@Q_$B$Kb)}Oo1S2s9MZLuu~czh9H<8-whU()Y)_M z|ExhlK#w$#E8+z$su?Yu*|8yn9O3gR)taFZ+tZ9cl_LKSXiA#gw8lnN=!GAqhi3As ziU>IWz;cQLwQ*PpHh+5K%s|lS9gN7r&I0{}*Dd&jha?xxn?h#l^CHdWhjRf02rB(C zcTk7gvc#kUev27x3HWqFNcEG|!@=>35Bdw3EY6_eQo$82lRg-V%^3(9N zgoCaL?azcD%6ExgA!S)!PJSP4DQBZUptXPoF)n1W3>FhR2+G$j$!tZGfX1&l$pL*1SP%X@_I zcbWR}GbzePj6cXKGO{PD|Fp*pGIv-^)_6eC;58G)(y)mObOn9S;gFtXU`^ra?E%{C z$M{-dx;`wbKu1kG9|{y344EZ5D4JsCsEv$LA}Z}9g-0q8mE@9qoOYb(BX*OtByF#j zUOKZ+AA<>r-&2SUEbM+8S<*g~z<}@gYUaeq#_L$<>Yl$ILrgs2$B=yFtFYJo+QE8Y zbwI&1i~tWa3R^g&)@yXcObV`DVLPqjtknKNw4gX^(Ta#gK+gddE^{w=h^{ZfculRO zm4Mn@xb#bufDjh0blkw2DJ>qIM#91ul5QMxEES@7wN$F{KAypY%{Td4yI|O98}VXZd$fiUg^SEh3HVo7~+8ui_IueoD&7 z)uqREbmjkbF8%zh+fg4)IXcz)5k;Z|)MlH{h#-yWT&+5RZmp*D{H58>U=ZvXiq}XH zSjuz{pTqZ}6=S>r&Ft#uV;+~}Ysi^8#%BEgM0A*(sX_%c{p3M=8mL#Z4xhTyAcQ;Z z+eI||JFv$3;U^Jj_Jq7Dof|78fDCo48v(AVQLWrXv^){_!GJtqFeQnkKw-}No4&&e zT%heM&{mrB0OfEydXH=g{!75lT8>6WLv&eE&Ai|f7%;0*LrX|S*55Wh*KH2|ej2>1 zJSaXibI{*LW6eSsdMu)}=RDo$l) zIV~8hR9myyU8^$-4>>(?NKOSawexzfdjVv@94&VJWdPfag*BT9MN0qs7<4bl` zfQN->rC65L-GFgblYxq`Nr4*vy7fewqEdg`v*|5*)^@3qknG=tU&(ENPV{ks;eIjR zrvjVI-ZsSU4ww~jwFtMu2Fga=QU1pilW%#_%JIe?Z3>R|azUislSqSJi3-HN_6@O=fflZ*M?JB#g%=@t1_db&Ju?$BK=mXwzL%QE9#$*q~4mrAl2yIc6OH z(n{^1F^2-|F9$~Z&pS4|%61}WAO?_JtS&74^8FIgBQ|K=V>kuGFN%UXd*yQ2Cl$>- zR5nC5?<136(j$YYQ2p!u#4BOXajUtPEDr*rsHul4jXR2^y9Uk}Uc=;EQ0k?Z7G+5v z8n40V!<)st;^Awjw`>|ySxf}?)#=wPk#=CJKMe-0QK{<(Q~HHJ0HgrRV8Y8B^=vd% z3Uw!UZ1UMsD01^p9?|mHSf^bn4G&x>e1XkqxUQE9{y5(Ibt~oXuw&5sLLyN)RV#o4 zIg1A;#BZ&tY_#lmBhz+Qs!=uw(wHWn)H@9M5TyC$ z7qSB~9Rn4H8(hc_*gCO%_tSxK6bj5n2n*kCZ^XR*-k448nq@~npbL9X1SEe=FawFZ zCT$aA|H3@yW~*9&al~TYudOq~rp(@lfffF=NLuB)tbN#XBoT3lPgVe>NOKhp^+ai( zFuPO2N?#gfw&j9VaR#e$DxJV<_d$f#_KS>2@Re*+I48<-X`aQtPGx7oIT=yqOu_@@ z2>>5y!i53QSl1r9Vb66WnNDRq8VkrcHb(F9PlYHzXm#)`ntDHt!?%u4`+{ly5i3 z!Gt;vDw_iWn2U4&{%o@%#w|2vRo;))ja3y1^P@i+i2&3X8&t4?2=^k>h_B=fC1tUo zW<(~#s;9MD#W}s6F4uJCbHelzx^ivI+U`NJihaW!yNH3LXG(tDF2SxrW>+fiOG5~v zRZ^%JH=s5s#B9O38be&w{|h2uAXIBvVDZIm5GPH7ibVSTA5L|@meinhd=6^Fuo?_K z^`3Rh*FIuls^Ejbw&;gjrIECzCC=SRPkxpN>clp-VvRgB_SK{Lqrv`=7fdE+^*Aju{w5BR*S_Wf9v{9v$19nWB(m8DSk9;gEw9bHC z2{5>P%KciRJBdkr>t_`zx?Ze%YrsWfCE$}aHoOf{b|iE;uIig{oa!UqXV<3sJ-3Mv zz%nvQ5JKe38{x{S>4>%sCFNl~qGo_v60W-FN_r~aq+g5FQ%~@FnJmlYc(-G#UZ`Z^ zH+-~|L9#SG9yfskXM}UfE8GiIUT?}ij3w8)0zA4O_h8~;UaDJT@2x40bYV|f20lQ6 zjc{;pQ_qkBLa%(k4n}S+s*&XOh*V|$1$Lfz6uNjRK9)!@t8Dhgn%hX2(I?~X8Vo(J zy`RZv12Io+g=2e^IuI{6S+avd6zN|t^yPf`Jj256@rh{Jr;^OkWITS-V`XIGxgzkz z*=umCr@)WBl&i$*&Anc!_P7pV0VrD^rYO{E*mk~Wx-!$4jIfM!Po}%w9ZQCJG-=I=7=N_B zv^bo$I%^A7~z9-B(fB{+`;6-I=#fq^T8{|atv9~+e<6)WV%@D)E zfbpy26pZjyyllNwxkckX%=&=UqQC^Y3gFB`MMCQ||Hf%5 zpmt=HO>y{ry0;i$VMWgkQ5wV8#Ob@SZqz7Fbrrt@3BXd{H#XBQ^?y1}Rs66v9OFX9 zXOH;HxUuflcV5-}KThdbpCmIUZP2%bZ3@9yIj*ef)PWGVfA$T_eo3E`h)%crPp_xJ zg4bST@jh(QJ!mrTdAyZ!GYDLZuxfUl!|!gT_Mrrx&`?vC z6V+$?n+G|!$you#%-AgpM8gAGTDhBzrG{re*gk-YC-XJTqf<*W(p%4+<6Pf3T~v62 z8O)by!=4tCVqx~Q(Vy#c-%uCi$&7v%25VtR3$w(I#~73nmp%u(6CKso_=SLcPpo-4 za)&hf!aS6DWY}8JBX0oRIp!9q6U1K@m4jo;I|V%^5D6jdQxf|tvxNQ&Fpr;FcUkz{ zq{aTx@8&vi|!5tpKoW=Fs5t zM#62W!2kWI&H&4swhN7?vu@}2e?5={xAj2*AAacGW}*M@$Epvs6AQ>85E{mt_EtI> z4cS(MNgE7cS^F%>RGj@z#MnBowm*ZlsXY4C!0KJGި-Em~HMS)tRtt_4-iwyT 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�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 literal 0 HcmV?d00001 diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx index 37eab56..a7a6e62 100644 --- a/src/pages/ChattingRoomPage/components/Chatting.tsx +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -107,7 +107,7 @@ const DateContainer = styled.div` text-align: center; &::before { display: inline-block; - width: calc(40% - 20px); + width: calc(40% - 25px); height: 1px; margin: 8px 10px 8px 0; background-color: ${theme.colors.gray_2}; @@ -117,7 +117,7 @@ const DateContainer = styled.div` &::after { display: inline-block; - width: calc(40% - 20px); + width: calc(40% - 25px); height: 1px; margin: 8px 0 8px 10px; background-color: ${theme.colors.gray_2}; From 3fb91cb021df5ddd71166d8a9dea44232c3cb2a2 Mon Sep 17 00:00:00 2001 From: eunsu Date: Fri, 29 Mar 2024 14:28:13 +0900 Subject: [PATCH 31/71] =?UTF-8?q?feat:=20readme.md=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 166 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 121 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 82b92ad..257d29b 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,142 @@ -# 서론 +# 배포링크 +[카카오톡](https://vercel.com/songess/ceos-week3-react-messenger) -안녕하세요 🙌🏻 19기 프론트 운영진 배성준입니다. 이번 미션에서는 드디어 투두리스트에서 벗어나 새로운 프로젝트인 **messenger** 만들기를 진행합니다. +# 후기 및 구현기능 -이번주는 특별히 **디자이너와의 협업**으로 진행되는 미션입니다. 디자이너분께서 열심히 리디자인 한 메신저 프로젝트를 여러분들께서 구현해주시면 됩니다. +생각보다 할 게 많았던 과제였던거 같습니다..! -동시에, 이번주부터는 새로 **TypeScript**를 적용해보려고 합니다. +디자이너분과 협업을 하면서 진행했기 떄문에 `styled-components`의 `theme`을 사용해 `font`, `textStyles`을 설정하고 시작했습니다. 또 375x812 맞춤으로 코드를 작성할 것이라 `rem`단위를 사용하지 않고 `px`을 사용했습니다. -프로젝트의 규모가 커지게 될 수록, 컴포넌트가 가지는 props의 종류 또한 다양해지게 됩니다. 무지성 코딩을 하다보면 가끔 이 props의 구성과 이름, 어떤 타입이 들어가야 하는지 헷갈리기 마련이죠. 보통 그럴 때 다시 컴포넌트 정의 부분으로 돌아가 props의 구성을 보고 오곤 합니다. +절대경로를 설정했는데, cra를 사용한 프로젝트이기 때문에 `baseUrl`및 `paths`만으로는 설정이 부족했고 `craco`, `react-app-alias`의 라이브러리의 도움을 받아 해결했습니다. 다만 `@types`는 적용이 되지 않아 `type`들은 직접 선언해서 사용했습니다. -하지만 이럴 때, typescript를 적용한다면 컴포넌트의 구성과 그 이름, 심지어 타입까지 한번에 자동완성으로 편리하게 관리할 수 있고, 생산성이 증대되겠죠. +과제에 `recoil`사용이 권장되어 있어서 사용해봤습니다. `recoil`을 사용해보지 않았던 이유가 `redux`처럼 보일러 플레이트가 많고, 디스패치를 많이 사용해야 할 것 같아 사용해보지 않았으나, 직접 사용해보니 잘못된 생각이였다는 걸 깨달았습니다. `useRecoilState`를 `useState`처럼 사용할 수 있었고, 보일러 플레이트도 필요하지 않았습니다. 또한 `selector`를 통해 디스패치의 기능을 훨씬 쉽게 사용한 느낌이였습니다. +공식문서를 찾아보니 `effects`를 통해 다른 `built-in`함수들도 많아 찾아보던 중 `onSet`과 `setSelf`는 유용하게 사용할 수 있을 거 같아 적용시켜 보았습니다. -또한, **React Hooks**에 조금 더 익숙해지는 것을 목표로 합니다. 여러 Hook들이 있지만 그 중에서도 `useState`, `useEffect`, `useRef`를 중점적으로 사용해 보는 미션인데요, React를 사용하면서 굉장히 자주 쓰이는 Hook들이기 때문에 이 부분을 집중적으로 공부해 보아요! +`effects`는 '부수효과를 관리하고 atom을 초기화 또는 동기화하기 위한 API'라고 나와있어 `localStorage`에 제격이라 생각했습니다. +`setSelf`는 초기값을 설정하는 함수로, `localStorage`에 값이 있다면 받아오고, 없다면 저장해놓은 `json`데이터를 가져왔습니다. +`onSet`은 atom을 모니터하며 값이 갱신되면 함수가 실행되어 `localStorage`를 최신화 시켰습니다. -그럼 이번 미션도 파이팅입니다!!🎉 +이름을 눌렀을때 변하는 것을 구현하기 위해 `recoil`을 사용해 현재`user`가 누구인지를 토클시켜주었습니다. -# 미션 +정말 카카오톡처럼 구현해보고자 하니 어려운 부분이 두 개 있었습니다. -## Key Questions +### 언제 상대방의 프로필과 이름을 띄우지? -- JavaScript를 사용할때에 비해 TypeScript를 사용할 때의 장점은 무엇인가요? -- 디자이너로부터 전달받은 피그마 링크 혹은, 피그마 캡처본 -- 컴포넌트를 분리한 기준은 무엇인가요? -- 디자인 시스템을 적용하면서 느낀 점은 무엇인가요? -- 디자이너와 소통하며 느낀점은 무엇인가요? +상대방의 프로필과 이름이 항상 뜨면 안되고, 특정상황에만 떠야 했습니다. -## 미션 목표 +- 처음 나한테 보냈다 +- 이전 채팅이 상대방이 아니고 나다 +- 날짜가 바뀌었다 + 3가지 경우의 수 + 내가 아닌 경우에는 상대방의 프로필과 사진을 띄워줬습니다. -- TypeScript를 사용해봅시다. -- useState로 컴포넌트의 상태를 관리합니다. -- useEffect와 useRef의 사용법을 이해합니다. -- styled-components를 통한 CSS-in-JS 및 CSS Preprocessor의 사용법에 익숙해집니다. +### 타임스탬프가 분 단위로 같을때는 가장 밑에 것만 찍히게 하고싶어 -## 기한 +`chat`객체를 만들때 `isDisplay:boolean`속성을 넣었고 최초에 만들어질때는 `true`를 갖게 했습니다. 그리고 새로운 채팅이 입력될 때마다 이전 채팅을 확인하고 이전채팅과 새로운 채팅의 발신자가 같은지, 날짜 및 시간이 같은지 확인하여 모두 일치한다면 이전 채팅의 `isDisplay`를 `false`로 바꿔주었습니다. -2024년 3월 29일 금요일 +```ts +interface Chat { + chatId: string; + to: string; + from: string; + content: string; + date: string; + time: string; + isDisplay: boolean; + isRead: boolean; +} -## 필수 구현 기능 +interface ChattingRoom { + id: string; + chat: Chat[]; +} +``` -- 피그마를 보고 [결과화면](https://3th-fb-messenger.netlify.app)과 같이 구현합니다. -- 디자인 시스템을 구축합니다. -- 채팅방 상단의 프로필을 클릭하면 사용자를 변경할 수 있습니다. -- 메세지를 보내면 채팅방 하단으로 스크롤을 이동시킵니다. -- 메세지에 유저 정보(프로필 사진, 이름)를 표시합니다. -- user와 message 데이터를 json 파일에 저장합니다. -- UI는 **반응형을 제외**하고 피그마파일을 따라서 진행합니다. +확장성을 고려해 채팅관련된 것을 하나의 객체배열 안에서 해결하고자 하여 `ChattingRoom`이라는 객체를 배열로 만들어 관리했고, 채팅이 갱신되면 `ChattingRoom`의 속성 중 하나인 `Chat[]`의 마지막 원소에 접근하고 새로운 원소를 추가해줘야 했습니다. -### 추가 구현 기능 +리액트는 상태의 불변성을 중요시 여기는데, 이렇게 중첩된 구조의 배열에 접근하여 값을 바꿔주어야 하다보니 `prev`의 값을 받아와 새로운 변수에 할당하고 이를 다시 넣어줘야하는 과정을 반복해야 했기 때문에 로직이 조금 복잡해졌습니다. 더 나은 방법을 고민해봤지만 떠오르지 않아 이렇게 해결했습니다. -- 더블 클릭 하면 감정표현을 추가합니다. -- 그 외 추가하고 싶은 기능이 있다면 마음껏 추가해 주세요! +날짜가 변경될 때도 날짜 변경선이 나오도록 구현했습니다. -참고로 이번 과제는 다음주까지 이어지는 과제이므로 **확장성**을 충분히 고려해 주세요. 참고로 **4주차 과제에서는 유저 및 기능 추가와 Routing을** 진행합니다. 이를 위해 [recoil](https://recoiljs.org/ko/)이나 [redux](https://ko.redux.js.org/introduction/getting-started/)를 이용한 상태관리를 미리 해보시는 것을 추천합니다!! 모두 공식문서 많이 읽어보시고 자신만의 상태관리 조합도 찾아보면 재밌을 거에요 XD +카카오톡에서처럼 상단 navigation이 반투명하게 설정했습니다. -## 링크 및 참고자료 +`useDoubleClick`훅을 만들어 상대방 채팅을 더블클릭하면 좋아요를 표시할 수 있도록 했습니다. -- [React docs - Hook](https://ko.reactjs.org/docs/hooks-intro.html) -- [React의 Hooks 완벽 정복하기](https://velog.io/@velopert/react-hooks#1-usestate) -- [useEffect 완벽 가이드](https://overreacted.io/ko/a-complete-guide-to-useeffect/) -- [코딩 컨벤션](https://ui.toast.com/fe-guide/ko_CODING-CONVENTION) -- [타입스크립트 핸드북](https://joshua1988.github.io/ts/intro.html) -- [리액트 프로젝트에서 타입스크립트 사용하기 (시리즈)](https://velog.io/@velopert/series/react-with-typescript) -- [디자인 시스템 구축기](https://yozm.wishket.com/magazine/detail/1830/) -- [[영상] : 컴포넌트에 대한 이해](https://www.youtube.com/watch?v=21eiJc90ggo) -- [Styled Component로 디자인 시스템 구축하기](https://zaat.dev/blog/building-a-design-system-in-react-with-styled-components/) -- [ts 절대경로 설정하기](https://tesseractjh.tistory.com/232) +# Key Questions + +## JavaScript를 사용할때에 비해 TypeScript를 사용할 때의 장점은 무엇인가요? + +자동완성기능을 사용할 수 있고, 에러를 사전에 방지할 수 있습니다. + +js는 유연한 언어인만큼 어떻게 작동할 지 모르는 부분들이 있습니다. + +```javascript +[] + [] = '' +[] + {} = '[object object]' +{} + [] = 0 +{} + {} = NaN +``` + +이렇게 원하지 않는 형태로 동작할 수 있습니다. 이처럼 예상치 못한 연산으로 에러가 발생하면 컴파일 에러를 띄워주지 않고 런타임에 에러를 띄웁니다. 타입스크립트는 이런 부분을 사전에 방지해줄 수 있습니다. + +컴포넌트들이 많아지고 주고받는 props들이 생기거나 컴포넌트를 선언할 때 어떤 props가 필요한지 헷갈릴 수 있는데, 자동완성기능을 통해 어떤 속성들이 필요한지 알 수 있습니다. + +타입을 너무 제한적으로 사용한다고 느낄 수도 있겠지만, 유니온타입이나 제네릭을 통해 타입을 확장성있게 사용할 수도 있습니다. + +## 디자이너로부터 전달받은 피그마 링크 혹은, 피그마 캡처본 + +![캡쳐본](./src/assets/img/capture.png) + +## 컴포넌트를 분리한 기준은 무엇인가요? + +채팅 박스역할을 하는 코드들, 채팅의 상단바역할을 하는 코드들, 하단바 역할을 하는 코드들 처럼 기능에 따라 분류 했습니다. + +``` +src + ┣ assets + ┃ ┣ data + ┃ ┃ ┗ chattingRoomData.json + ┃ ┣ img + ┃ ┃ ┗ ... + ┃ ┣ svg + ┃ ┃ ┣ ... + ┣ hooks + ┃ ┗ useDoubleClick.tsx + ┣ pages + ┃ ┗ ChattingRoomPage + ┃ ┃ ┣ components + ┃ ┃ ┃ ┣ ChatBottom.tsx + ┃ ┃ ┃ ┣ ChatHead.tsx + ┃ ┃ ┃ ┣ Chatting.tsx + ┃ ┃ ┃ ┣ HeartBox.tsx + ┃ ┃ ┃ ┣ Mychat.tsx + ┃ ┃ ┃ ┣ OppoChangeChat.tsx + ┃ ┃ ┃ ┗ OppoChat.tsx + ┃ ┃ ┗ ChattingRoomPage.tsx + ┣ recoil + ┃ ┣ chatAtom.ts + ┃ ┗ userAtom.ts + ┣ styles + ┃ ┣ GlobalStyle.ts + ┃ ┗ theme.ts + ┣ types + ┃ ┗ type.ts + ┣ App.tsx + ┣ index.tsx + ┣ svg.d.ts + ┗ types.d.ts +``` + +페이지폴더를 만들고, 컴포넌트 폴더를 만들어서 페이지에서 사용하는 컴포넌트들을 만들어줬습니다. 기능별로 컴포넌트들을 구현했기 때문에 원하는 위치에서 컴포넌트를 호출해주고 css만 설정해주면 페이지를 만들 수 있었습니다. + +## 디자인 시스템을 적용하면서 느낀 점은 무엇인가요? + +혼자 만들다 보면 색상이나 텍스트스타일을 미리 지정해놓는게 아니기 때문에 한번 해보고 렌더링 해보면서 어떤게 제일 적합한지 여러번 시도해봐야 했습니다. 하지만 `figma`를 통해 디자인을 받아서 개발했기 때문에 그런 고민을 할 필요가 없었습니다. + +또한 이미 정해진 규격(ex. body1, body2, body3, ...)이 있고 그것들을 사용해 디자인을 해주셨기 때문에, 미리 `theme`으로 규격을 저장해놓으면 개발하면서 호출하기만 하면 되니깐 굉장히 편했습니다. + + +## 디자이너와 소통하며 느낀점은 무엇인가요? + +기능적인 부분을 위주로 생각하다보니 디자인적 요소를 가끔 잘못 만들 때가 있습니다. 버튼이 의도한게 아니거나, 간격이 이상하거나 하는 부분들을 놓쳐서 배포했는데 이런 부분들을 피드백 해주셔서 나는 개발하는 부분에 더 집중하면 돼서 좋다! 라고 느꼈습니다. + +또한 디자이너와 개발자의 시선이 다르기 때문에 원활한 소통을 통해 프로젝트를 끝내면 훨씬 더 멋진 결과물의 나올 거 같다고 생각했습니다. \ No newline at end of file From a9c480363370639e1c8efc18427f4d4d10c78515 Mon Sep 17 00:00:00 2001 From: eunsu Date: Tue, 2 Apr 2024 12:35:52 +0900 Subject: [PATCH 32/71] =?UTF-8?q?style:=20=EB=B0=98=EC=9D=91=ED=98=95=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 11 ++++++++++- src/pages/ChattingRoomPage/ChattingRoomPage.tsx | 6 +++++- src/pages/ChattingRoomPage/components/ChatBottom.tsx | 5 +++++ src/pages/ChattingRoomPage/components/ChatHead.tsx | 10 ++++++++++ src/pages/ChattingRoomPage/components/Chatting.tsx | 6 +++++- src/pages/ChattingRoomPage/components/Mychat.tsx | 1 - 6 files changed, 35 insertions(+), 4 deletions(-) diff --git a/public/index.html b/public/index.html index aa069f2..58c8773 100644 --- a/public/index.html +++ b/public/index.html @@ -28,7 +28,16 @@ -
+
+ React App diff --git a/src/pages/ChattingRoomPage/components/Chatting.tsx b/src/pages/ChattingRoomPage/components/Chatting.tsx index fb17804..c11f9ef 100644 --- a/src/pages/ChattingRoomPage/components/Chatting.tsx +++ b/src/pages/ChattingRoomPage/components/Chatting.tsx @@ -109,6 +109,7 @@ const DateContainer = styled.div` font-size: ${theme.textStyles.caption4.font_size}; line-height: ${theme.textStyles.caption4.line_height}; font-weight: ${theme.textStyles.caption4.font_weight}; + font-family: 'Pretendard' text-align: center; &::before { display: inline-block; diff --git a/src/styles/GlobalStyle.ts b/src/styles/GlobalStyle.ts index 065c589..1e0069c 100644 --- a/src/styles/GlobalStyle.ts +++ b/src/styles/GlobalStyle.ts @@ -5,7 +5,7 @@ const GlobalStyle = createGlobalStyle` *::before, *::after { box-sizing: border-box; - font-family: 'Pretendard-Regular'; + font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; } * { margin: 0; From 49cac6c1dbd5a85ee5c619922958d02969583566 Mon Sep 17 00:00:00 2001 From: eunsu Date: Mon, 29 Apr 2024 22:17:42 +0900 Subject: [PATCH 39/71] =?UTF-8?q?refactor:=20root=EC=97=90=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=A0=81=EC=9A=A9=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=B0=A9=EB=B2=95=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 11 +---------- src/styles/GlobalStyle.ts | 7 +++++++ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/public/index.html b/public/index.html index 5238b94..a454c41 100644 --- a/public/index.html +++ b/public/index.html @@ -32,16 +32,7 @@ -
+