diff options
| author | Baoyuan <baoyuan.top@gmail.com> | 2021-07-16 23:02:03 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-16 08:02:03 -0700 |
| commit | bc51f1b761763ca585f225190e7d859e0cd03209 (patch) | |
| tree | ff95dfbc8db6a9adda815dc8f39ec7588130bfbe | |
| parent | a283fe4628aad3750be0cd300983b9a3100fdf05 (diff) | |
[Issue #49] feat: add i18n (#58)
* feat: add i18n
* fix: code clean
| -rw-r--r-- | package.json | 2 | ||||
| -rw-r--r-- | src/App.js | 23 | ||||
| -rw-r--r-- | src/components/Card.js | 31 | ||||
| -rw-r--r-- | src/i18n.js | 64 | ||||
| -rw-r--r-- | src/index.js | 1 | ||||
| -rw-r--r-- | yarn.lock | 153 |
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": { |
| @@ -1,25 +1,32 @@ | |||
| 1 | import React from 'react'; | 1 | import React from 'react'; |
| 2 | import { useTranslation } from 'react-i18next'; | ||
| 2 | import { Card } from './components/Card'; | 3 | import { Card } from './components/Card'; |
| 3 | import './style.css'; | 4 | import './style.css'; |
| 4 | import logo from '../src/images/wifi.png'; | 5 | import logo from '../src/images/wifi.png'; |
| 5 | 6 | ||
| 6 | function App() { | 7 | function 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 | WiFi Card | 14 | {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 @@ | |||
| 1 | import QRCode from 'qrcode.react'; | 1 | import QRCode from 'qrcode.react'; |
| 2 | import { useEffect, useRef, useState } from 'react'; | 2 | import { useEffect, useRef, useState } from 'react'; |
| 3 | import { useTranslation } from 'react-i18next'; | ||
| 3 | import './style.css'; | 4 | import './style.css'; |
| 4 | 5 | ||
| 5 | export const Card = () => { | 6 | export 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 | 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 @@ | |||
| 1 | import i18n from 'i18next'; | ||
| 2 | import { initReactI18next } from 'react-i18next'; | ||
| 3 | |||
| 4 | const 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 | |||
| 56 | i18n.use(initReactI18next).init({ | ||
| 57 | resources, | ||
| 58 | lng: 'en-US', | ||
| 59 | interpolation: { | ||
| 60 | escapeValue: false, | ||
| 61 | }, | ||
| 62 | }); | ||
| 63 | |||
| 64 | export 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 @@ | |||
| 1 | import React from 'react'; | 1 | import React from 'react'; |
| 2 | import ReactDOM from 'react-dom'; | 2 | import ReactDOM from 'react-dom'; |
| 3 | import App from './App'; | 3 | import App from './App'; |
| 4 | import './i18n'; | ||
| 4 | 5 | ||
| 5 | ReactDOM.render( | 6 | ReactDOM.render( |
| 6 | <React.StrictMode> | 7 | <React.StrictMode> |
| @@ -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 | ||
| 4293 | dom-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 | |||
| 4228 | dom-serializer@0: | 4301 | dom-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 | ||
| 5595 | hoist-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 | |||
| 5522 | hoopy@^0.1.4: | 5602 | hoopy@^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 | ||
| 5662 | html-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 | |||
| 5582 | html-webpack-plugin@4.5.0: | 5669 | html-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 | ||
| 5782 | i18next@^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 | |||
| 5695 | iconv-lite@0.4.24: | 5789 | iconv-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 | ||
| 7252 | memoize-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 | |||
| 7158 | memory-fs@^0.4.1: | 7257 | memory-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 | ||
| 8905 | prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: | 9004 | prop-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 | ||
| 9135 | react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: | 9234 | react-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 | |||
| 9242 | react-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 | |||
| 9249 | react-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 | ||
| 9330 | react-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 | |||
| 9343 | react-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 | |||
| 9216 | react@^16.13.1: | 9353 | react@^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 | ||
| 10492 | stylis@^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 | |||
| 10355 | supports-color@^5.3.0: | 10497 | supports-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 | ||
| 11125 | void-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 | |||
| 10983 | w3c-hr-time@^1.0.2: | 11130 | w3c-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" |
