aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package.json2
-rw-r--r--src/App.js23
-rw-r--r--src/components/Card.js31
-rw-r--r--src/i18n.js64
-rw-r--r--src/index.js1
-rw-r--r--yarn.lock153
6 files changed, 249 insertions, 25 deletions
diff --git a/package.json b/package.json
index af43a10..e35ddc8 100644
--- a/package.json
+++ b/package.json
@@ -6,9 +6,11 @@
6 "@testing-library/jest-dom": "^4.2.4", 6 "@testing-library/jest-dom": "^4.2.4",
7 "@testing-library/react": "^9.3.2", 7 "@testing-library/react": "^9.3.2",
8 "@testing-library/user-event": "^7.1.2", 8 "@testing-library/user-event": "^7.1.2",
9 "i18next": "^20.3.3",
9 "qrcode.react": "^1.0.0", 10 "qrcode.react": "^1.0.0",
10 "react": "^16.13.1", 11 "react": "^16.13.1",
11 "react-dom": "^16.13.1", 12 "react-dom": "^16.13.1",
13 "react-i18next": "^11.11.2",
12 "react-scripts": "^4.0.1" 14 "react-scripts": "^4.0.1"
13 }, 15 },
14 "scripts": { 16 "scripts": {
diff --git a/src/App.js b/src/App.js
index 3832de1..1b97aec 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,25 +1,32 @@
1import React from 'react'; 1import React from 'react';
2import { useTranslation } from 'react-i18next';
2import { Card } from './components/Card'; 3import { Card } from './components/Card';
3import './style.css'; 4import './style.css';
4import logo from '../src/images/wifi.png'; 5import logo from '../src/images/wifi.png';
5 6
6function App() { 7function App() {
8 const { t, i18n } = useTranslation();
9
7 return ( 10 return (
8 <div className="App"> 11 <div className="App">
9 <h1> 12 <h1>
10 <img alt="icon" src={logo} width="32" height="32" /> 13 <img alt="icon" src={logo} width="32" height="32" />
11 &nbsp; WiFi Card 14 &nbsp; {t('title')}
12 </h1> 15 </h1>
13 16
14 <p className="tag"> 17 <div>
15 Print a simple card with your WiFi login details. Tape it to the fridge, 18 <label>{t('select')}</label>
16 keep it in your wallet, etc. 19 <select onChange={(e) => i18n.changeLanguage(e.target.value)}>
17 </p> 20 <option value="en-US">en-US</option>
21 <option value="简体中文">简体中文</option>
22 </select>
23 </div>
24
25 <p className="tag">{t('desc.use')}</p>
18 26
19 <p className="tag"> 27 <p className="tag">
20 Your WiFi information is never sent to the server. No tracking, 28 {t('desc.privacy')}{' '}
21 analytics, or fingerprinting are used on this website. View the{' '} 29 <a href="https://github.com/bndw/wifi-card">{t('desc.source')}</a>.
22 <a href="https://github.com/bndw/wifi-card">source code</a>.
23 </p> 30 </p>
24 31
25 <Card /> 32 <Card />
diff --git a/src/components/Card.js b/src/components/Card.js
index 7409d6c..50db589 100644
--- a/src/components/Card.js
+++ b/src/components/Card.js
@@ -1,5 +1,6 @@
1import QRCode from 'qrcode.react'; 1import QRCode from 'qrcode.react';
2import { useEffect, useRef, useState } from 'react'; 2import { useEffect, useRef, useState } from 'react';
3import { useTranslation } from 'react-i18next';
3import './style.css'; 4import './style.css';
4 5
5export const Card = () => { 6export const Card = () => {
@@ -12,7 +13,7 @@ export const Card = () => {
12 hidePassword: false, 13 hidePassword: false,
13 }); 14 });
14 const [portrait, setPortrait] = useState(false); 15 const [portrait, setPortrait] = useState(false);
15 16 const { t } = useTranslation();
16 const escape = (v) => { 17 const escape = (v) => {
17 const needsEscape = ['"', ';', ',', ':', '\\']; 18 const needsEscape = ['"', ';', ',', ':', '\\'];
18 19
@@ -31,17 +32,17 @@ export const Card = () => {
31 const onPrint = () => { 32 const onPrint = () => {
32 if (network.ssid.length > 0) { 33 if (network.ssid.length > 0) {
33 if (network.password.length < 8 && network.encryptionMode === 'WPA') { 34 if (network.password.length < 8 && network.encryptionMode === 'WPA') {
34 alert('Password must be at least 8 characters'); 35 alert(t('wifi.alert.password.8'));
35 } else if ( 36 } else if (
36 network.password.length < 5 && 37 network.password.length < 5 &&
37 network.encryptionMode === 'WEP' 38 network.encryptionMode === 'WEP'
38 ) { 39 ) {
39 alert('Password must be at least 5 characters'); 40 alert(t('wifi.alert.password.5'));
40 } else { 41 } else {
41 window.print(); 42 window.print();
42 } 43 }
43 } else { 44 } else {
44 alert('Network name cannot be empty'); 45 alert(t('wifi.alert.name'));
45 } 46 }
46 }; 47 };
47 48
@@ -62,7 +63,9 @@ export const Card = () => {
62 id="print-area" 63 id="print-area"
63 style={{ maxWidth: portrait ? '350px' : '100%' }} 64 style={{ maxWidth: portrait ? '350px' : '100%' }}
64 > 65 >
65 <h1 style={{ textAlign: portrait ? 'center' : 'left' }}>WiFi Login</h1> 66 <h1 style={{ textAlign: portrait ? 'center' : 'left' }}>
67 {t('wifi.login')}
68 </h1>
66 69
67 <div 70 <div
68 className="details" 71 className="details"
@@ -76,12 +79,12 @@ export const Card = () => {
76 /> 79 />
77 80
78 <div className="inputs"> 81 <div className="inputs">
79 <label>Network name</label> 82 <label>{t('wifi.name')}</label>
80 <textarea 83 <textarea
81 id="ssid" 84 id="ssid"
82 type="text" 85 type="text"
83 maxLength="32" 86 maxLength="32"
84 placeholder="WiFi Network name" 87 placeholder={t('wifi.name.placeholder')}
85 autoComplete="off" 88 autoComplete="off"
86 autoCorrect="off" 89 autoCorrect="off"
87 autoCapitalize="none" 90 autoCapitalize="none"
@@ -95,7 +98,7 @@ export const Card = () => {
95 ${network.encryptionMode === 'nopass' && 'hidden'} 98 ${network.encryptionMode === 'nopass' && 'hidden'}
96 `} 99 `}
97 > 100 >
98 Password 101 {t('wifi.password')}
99 </label> 102 </label>
100 <textarea 103 <textarea
101 id="password" 104 id="password"
@@ -109,7 +112,7 @@ export const Card = () => {
109 portrait && network.password.length > 40 ? '5em' : 'auto', 112 portrait && network.password.length > 40 ? '5em' : 'auto',
110 }} 113 }}
111 maxLength="63" 114 maxLength="63"
112 placeholder="Password" 115 placeholder={t('wifi.password.placeholder')}
113 autoComplete="off" 116 autoComplete="off"
114 autoCorrect="off" 117 autoCorrect="off"
115 autoCapitalize="none" 118 autoCapitalize="none"
@@ -136,12 +139,12 @@ export const Card = () => {
136 for="hide-password-checkbox" 139 for="hide-password-checkbox"
137 className={network.encryptionMode === 'nopass' ? 'hidden' : ''} 140 className={network.encryptionMode === 'nopass' ? 'hidden' : ''}
138 > 141 >
139 Hide password 142 {t('wifi.password.hide')}
140 </label> 143 </label>
141 </div> 144 </div>
142 145
143 <div className="no-print"> 146 <div className="no-print">
144 <label>Encryption:</label> 147 <label>{t('wifi.password.encryption')}:</label>
145 <input 148 <input
146 type="radio" 149 type="radio"
147 name="encrypt-select" 150 name="encrypt-select"
@@ -181,16 +184,16 @@ export const Card = () => {
181 <span role="img" aria-label="mobile-phone"> 184 <span role="img" aria-label="mobile-phone">
182 📸📱 185 📸📱
183 </span> 186 </span>
184 Point your phone's camera at the QR Code to connect automatically 187 {t('wifi.tip')}
185 </p> 188 </p>
186 </fieldset> 189 </fieldset>
187 190
188 <div className="buttons"> 191 <div className="buttons">
189 <button id="rotate" onClick={() => setPortrait(!portrait)}> 192 <button id="rotate" onClick={() => setPortrait(!portrait)}>
190 Rotate 193 {t('button.rotate')}
191 </button> 194 </button>
192 <button id="print" onClick={onPrint}> 195 <button id="print" onClick={onPrint}>
193 Print 196 {t('button.print')}
194 </button> 197 </button>
195 </div> 198 </div>
196 </div> 199 </div>
diff --git a/src/i18n.js b/src/i18n.js
new file mode 100644
index 0000000..2990dcb
--- /dev/null
+++ b/src/i18n.js
@@ -0,0 +1,64 @@
1import i18n from 'i18next';
2import { initReactI18next } from 'react-i18next';
3
4const resources = {
5 'en-US': {
6 translation: {
7 title: 'WiFi Card',
8 'desc.use':
9 'Print a simple card with your WiFi login details. Tape it to the fridge, keep it in your wallet, etc.',
10 'desc.privacy':
11 'Your WiFi information is never sent to the server. No tracking, analytics, or fingerprinting are used on this website. View the',
12 'desc.source': 'source code',
13 'wifi.login': 'WiFi Login',
14 'wifi.name': 'Network name',
15 'wifi.name.placeholder': 'WiFi Network name',
16 'wifi.password': 'Password',
17 'wifi.password.placeholder': 'Password',
18 'wifi.password.hide': 'Hide password field before printing',
19 'wifi.password.encryption': 'Encryption',
20 'wifi.tip':
21 "Point your phone's camera at the QR Code to connect automatically",
22 'wifi.alert.name': 'Network name cannot be empty',
23 'wifi.alert.password.length.5': 'Password must be at least 5 characters',
24 'wifi.alert.password.8': 'Password must be at least 8 characters',
25 'button.rotate': 'Rotate',
26 'button.print': 'Print',
27 select: 'Select Language',
28 },
29 },
30 简体中文: {
31 translation: {
32 title: 'WiFi 连接卡',
33 'desc.use':
34 '打印一张带有 WiFi 详细信息的登录卡片,把它贴到冰箱上、放到你的钱包里...',
35 'desc.privacy':
36 '您的 WiFi 信息永远不会发送到服务端。本网站不使用追踪、分析或指纹识别。查看',
37 'desc.source': '源码',
38 'wifi.login': '连接 WiFi',
39 'wifi.name': '网络名称',
40 'wifi.name.placeholder': 'WiFi 网络名称',
41 'wifi.password': '密码',
42 'wifi.password.placeholder': '密码',
43 'wifi.password.hide': '打印前隐藏密码字段',
44 'wifi.password.encryption': '加密',
45 'wifi.tip': '将手机摄像头对准二维码即可自动连接',
46 'wifi.alert.name': '网络名称不能为空',
47 'wifi.alert.password.length.5': '密码至少 5 个字符',
48 'wifi.alert.password.8': '密码至少 8 个字符',
49 'button.rotate': '翻转',
50 'button.print': '打印',
51 select: '选择语言',
52 },
53 },
54};
55
56i18n.use(initReactI18next).init({
57 resources,
58 lng: 'en-US',
59 interpolation: {
60 escapeValue: false,
61 },
62});
63
64export default i18n;
diff --git a/src/index.js b/src/index.js
index c1f31c5..30091ec 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,6 +1,7 @@
1import React from 'react'; 1import React from 'react';
2import ReactDOM from 'react-dom'; 2import ReactDOM from 'react-dom';
3import App from './App'; 3import App from './App';
4import './i18n';
4 5
5ReactDOM.render( 6ReactDOM.render(
6 <React.StrictMode> 7 <React.StrictMode>
diff --git a/yarn.lock b/yarn.lock
index 1b746e0..fd1e0c1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1157,7 +1157,7 @@
1157 dependencies: 1157 dependencies:
1158 regenerator-runtime "^0.13.4" 1158 regenerator-runtime "^0.13.4"
1159 1159
1160"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": 1160"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
1161 version "7.14.6" 1161 version "7.14.6"
1162 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" 1162 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d"
1163 integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== 1163 integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==
@@ -1219,6 +1219,71 @@
1219 resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" 1219 resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18"
1220 integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== 1220 integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==
1221 1221
1222"@emotion/cache@^11.4.0":
1223 version "11.4.0"
1224 resolved "https://registry.nlark.com/@emotion/cache/download/@emotion/cache-11.4.0.tgz?cache=0&sync_timestamp=1620348775479&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40emotion%2Fcache%2Fdownload%2F%40emotion%2Fcache-11.4.0.tgz#293fc9d9a7a38b9aad8e9337e5014366c3b09ac0"
1225 integrity sha1-KT/J2aeji5qtjpM35QFDZsOwmsA=
1226 dependencies:
1227 "@emotion/memoize" "^0.7.4"
1228 "@emotion/sheet" "^1.0.0"
1229 "@emotion/utils" "^1.0.0"
1230 "@emotion/weak-memoize" "^0.2.5"
1231 stylis "^4.0.3"
1232
1233"@emotion/hash@^0.8.0":
1234 version "0.8.0"
1235 resolved "https://registry.npm.taobao.org/@emotion/hash/download/@emotion/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
1236 integrity sha1-u7/2iXj+/b5ozLUzvIy+HRr7VBM=
1237
1238"@emotion/memoize@^0.7.4":
1239 version "0.7.5"
1240 resolved "https://registry.npm.taobao.org/@emotion/memoize/download/@emotion/memoize-0.7.5.tgz?cache=0&sync_timestamp=1615986337535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40emotion%2Fmemoize%2Fdownload%2F%40emotion%2Fmemoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
1241 integrity sha1-LED4FEmk5VTp/GOWkQ7UhD7CvlA=
1242
1243"@emotion/react@^11.1.1":
1244 version "11.4.0"
1245 resolved "https://registry.nlark.com/@emotion/react/download/@emotion/react-11.4.0.tgz?cache=0&sync_timestamp=1620348776949&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40emotion%2Freact%2Fdownload%2F%40emotion%2Freact-11.4.0.tgz#2465ad7b073a691409b88dfd96dc17097ddad9b7"
1246 integrity sha1-JGWtewc6aRQJuI39ltwXCX3a2bc=
1247 dependencies:
1248 "@babel/runtime" "^7.13.10"
1249 "@emotion/cache" "^11.4.0"
1250 "@emotion/serialize" "^1.0.2"
1251 "@emotion/sheet" "^1.0.1"
1252 "@emotion/utils" "^1.0.0"
1253 "@emotion/weak-memoize" "^0.2.5"
1254 hoist-non-react-statics "^3.3.1"
1255
1256"@emotion/serialize@^1.0.2":
1257 version "1.0.2"
1258 resolved "https://registry.npm.taobao.org/@emotion/serialize/download/@emotion/serialize-1.0.2.tgz?cache=0&sync_timestamp=1617886963064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40emotion%2Fserialize%2Fdownload%2F%40emotion%2Fserialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965"
1259 integrity sha1-d8shoFccn2jrZgh3VKZfqXv82WU=
1260 dependencies:
1261 "@emotion/hash" "^0.8.0"
1262 "@emotion/memoize" "^0.7.4"
1263 "@emotion/unitless" "^0.7.5"
1264 "@emotion/utils" "^1.0.0"
1265 csstype "^3.0.2"
1266
1267"@emotion/sheet@^1.0.0", "@emotion/sheet@^1.0.1":
1268 version "1.0.1"
1269 resolved "https://registry.npm.taobao.org/@emotion/sheet/download/@emotion/sheet-1.0.1.tgz#245f54abb02dfd82326e28689f34c27aa9b2a698"
1270 integrity sha1-JF9Uq7At/YIybihonzTCeqmyppg=
1271
1272"@emotion/unitless@^0.7.5":
1273 version "0.7.5"
1274 resolved "https://registry.npm.taobao.org/@emotion/unitless/download/@emotion/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
1275 integrity sha1-dyESkcGQCnALinjPr9oxYNdpSe0=
1276
1277"@emotion/utils@^1.0.0":
1278 version "1.0.0"
1279 resolved "https://registry.npm.taobao.org/@emotion/utils/download/@emotion/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af"
1280 integrity sha1-q+BqgxYLEFcIFskTmQJFgTov1q8=
1281
1282"@emotion/weak-memoize@^0.2.5":
1283 version "0.2.5"
1284 resolved "https://registry.npm.taobao.org/@emotion/weak-memoize/download/@emotion/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
1285 integrity sha1-ju2YLi7m9/TkTCU+EpYpgHke/UY=
1286
1222"@eslint/eslintrc@^0.4.2": 1287"@eslint/eslintrc@^0.4.2":
1223 version "0.4.2" 1288 version "0.4.2"
1224 resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" 1289 resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"
@@ -4225,6 +4290,14 @@ dom-converter@^0.2.0:
4225 dependencies: 4290 dependencies:
4226 utila "~0.4" 4291 utila "~0.4"
4227 4292
4293dom-helpers@^5.0.1:
4294 version "5.2.1"
4295 resolved "https://registry.nlark.com/dom-helpers/download/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
4296 integrity sha1-2UAFNrK/giWtmP4FLgKUUaxA6QI=
4297 dependencies:
4298 "@babel/runtime" "^7.8.7"
4299 csstype "^3.0.2"
4300
4228dom-serializer@0: 4301dom-serializer@0:
4229 version "0.2.2" 4302 version "0.2.2"
4230 resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 4303 resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
@@ -5519,6 +5592,13 @@ hmac-drbg@^1.0.1:
5519 minimalistic-assert "^1.0.0" 5592 minimalistic-assert "^1.0.0"
5520 minimalistic-crypto-utils "^1.0.1" 5593 minimalistic-crypto-utils "^1.0.1"
5521 5594
5595hoist-non-react-statics@^3.3.1:
5596 version "3.3.2"
5597 resolved "https://registry.npm.taobao.org/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
5598 integrity sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=
5599 dependencies:
5600 react-is "^16.7.0"
5601
5522hoopy@^0.1.4: 5602hoopy@^0.1.4:
5523 version "0.1.4" 5603 version "0.1.4"
5524 resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" 5604 resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
@@ -5579,6 +5659,13 @@ html-minifier-terser@^5.0.1:
5579 relateurl "^0.2.7" 5659 relateurl "^0.2.7"
5580 terser "^4.6.3" 5660 terser "^4.6.3"
5581 5661
5662html-parse-stringify@^3.0.1:
5663 version "3.0.1"
5664 resolved "https://registry.nlark.com/html-parse-stringify/download/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2"
5665 integrity sha1-38EBc0fOn3fIFBpQfyMwQMWcVdI=
5666 dependencies:
5667 void-elements "3.1.0"
5668
5582html-webpack-plugin@4.5.0: 5669html-webpack-plugin@4.5.0:
5583 version "4.5.0" 5670 version "4.5.0"
5584 resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" 5671 resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c"
@@ -5692,6 +5779,13 @@ human-signals@^1.1.1:
5692 resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" 5779 resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
5693 integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 5780 integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
5694 5781
5782i18next@^20.3.3:
5783 version "20.3.3"
5784 resolved "https://registry.nlark.com/i18next/download/i18next-20.3.3.tgz#e3fdae045f9f0893e74826ce224715e43c62862b"
5785 integrity sha1-4/2uBF+fCJPnSCbOIkcV5Dxihis=
5786 dependencies:
5787 "@babel/runtime" "^7.12.0"
5788
5695iconv-lite@0.4.24: 5789iconv-lite@0.4.24:
5696 version "0.4.24" 5790 version "0.4.24"
5697 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 5791 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -7155,6 +7249,11 @@ media-typer@0.3.0:
7155 resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 7249 resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
7156 integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 7250 integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
7157 7251
7252memoize-one@^5.0.0:
7253 version "5.2.1"
7254 resolved "https://registry.nlark.com/memoize-one/download/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
7255 integrity sha1-gzeqPEM1WBg57AHD1ZQJDOvo8A4=
7256
7158memory-fs@^0.4.1: 7257memory-fs@^0.4.1:
7159 version "0.4.1" 7258 version "0.4.1"
7160 resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" 7259 resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
@@ -8902,7 +9001,7 @@ prompts@^2.0.1:
8902 kleur "^3.0.3" 9001 kleur "^3.0.3"
8903 sisteransi "^1.0.5" 9002 sisteransi "^1.0.5"
8904 9003
8905prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: 9004prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
8906 version "15.7.2" 9005 version "15.7.2"
8907 resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 9006 resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
8908 integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 9007 integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -9132,7 +9231,22 @@ react-error-overlay@^6.0.9:
9132 resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" 9231 resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a"
9133 integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== 9232 integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==
9134 9233
9135react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: 9234react-i18next@^11.11.2:
9235 version "11.11.2"
9236 resolved "https://registry.nlark.com/react-i18next/download/react-i18next-11.11.2.tgz#b8568b9f02e323ceb82cb895f41e4e588b8b066c"
9237 integrity sha1-uFaLnwLjI864LLiV9B5OWIuLBmw=
9238 dependencies:
9239 "@babel/runtime" "^7.14.5"
9240 html-parse-stringify "^3.0.1"
9241
9242react-input-autosize@^3.0.0:
9243 version "3.0.0"
9244 resolved "https://registry.npm.taobao.org/react-input-autosize/download/react-input-autosize-3.0.0.tgz#6b5898c790d4478d69420b55441fcc31d5c50a85"
9245 integrity sha1-a1iYx5DUR41pQgtVRB/MMdXFCoU=
9246 dependencies:
9247 prop-types "^15.5.8"
9248
9249react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4:
9136 version "16.13.1" 9250 version "16.13.1"
9137 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 9251 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
9138 integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 9252 integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -9213,6 +9327,29 @@ react-scripts@^4.0.1:
9213 optionalDependencies: 9327 optionalDependencies:
9214 fsevents "^2.1.3" 9328 fsevents "^2.1.3"
9215 9329
9330react-select@^4.3.1:
9331 version "4.3.1"
9332 resolved "https://registry.nlark.com/react-select/download/react-select-4.3.1.tgz#389fc07c9bc7cf7d3c377b7a05ea18cd7399cb81"
9333 integrity sha1-OJ/AfJvHz308N3t6BeoYzXOZy4E=
9334 dependencies:
9335 "@babel/runtime" "^7.12.0"
9336 "@emotion/cache" "^11.4.0"
9337 "@emotion/react" "^11.1.1"
9338 memoize-one "^5.0.0"
9339 prop-types "^15.6.0"
9340 react-input-autosize "^3.0.0"
9341 react-transition-group "^4.3.0"
9342
9343react-transition-group@^4.3.0:
9344 version "4.4.2"
9345 resolved "https://registry.nlark.com/react-transition-group/download/react-transition-group-4.4.2.tgz?cache=0&sync_timestamp=1622301030407&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-transition-group%2Fdownload%2Freact-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
9346 integrity sha1-i1mlbwnO17VcvVPDZ2i5IokNVHA=
9347 dependencies:
9348 "@babel/runtime" "^7.5.5"
9349 dom-helpers "^5.0.1"
9350 loose-envify "^1.4.0"
9351 prop-types "^15.6.2"
9352
9216react@^16.13.1: 9353react@^16.13.1:
9217 version "16.14.0" 9354 version "16.14.0"
9218 resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" 9355 resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
@@ -10352,6 +10489,11 @@ stylehacks@^4.0.0:
10352 postcss "^7.0.0" 10489 postcss "^7.0.0"
10353 postcss-selector-parser "^3.0.0" 10490 postcss-selector-parser "^3.0.0"
10354 10491
10492stylis@^4.0.3:
10493 version "4.0.10"
10494 resolved "https://registry.npm.taobao.org/stylis/download/stylis-4.0.10.tgz?cache=0&sync_timestamp=1617798385355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylis%2Fdownload%2Fstylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240"
10495 integrity sha1-RGUS0Qlxl6s/Avs8JYNYw/ehQkA=
10496
10355supports-color@^5.3.0: 10497supports-color@^5.3.0:
10356 version "5.5.0" 10498 version "5.5.0"
10357 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 10499 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -10980,6 +11122,11 @@ vm-browserify@^1.0.1:
10980 resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" 11122 resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
10981 integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== 11123 integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
10982 11124
11125void-elements@3.1.0:
11126 version "3.1.0"
11127 resolved "https://registry.npm.taobao.org/void-elements/download/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
11128 integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=
11129
10983w3c-hr-time@^1.0.2: 11130w3c-hr-time@^1.0.2:
10984 version "1.0.2" 11131 version "1.0.2"
10985 resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" 11132 resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"