From 47a1a89e4974e341e3f3028bd40329ab67d0682d Mon Sep 17 00:00:00 2001 From: kli2m Date: Sat, 20 Feb 2021 16:24:12 +0300 Subject: [PATCH 01/16] init: webpack is completed --- .eslintrc.js | 23 + package-lock.json | 9876 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 64 + src/App.js | 11 + src/index.html | 11 + src/index.js | 12 + webpack.config.js | 93 + 7 files changed, 10090 insertions(+) create mode 100644 .eslintrc.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/App.js create mode 100644 src/index.html create mode 100644 src/index.js create mode 100644 webpack.config.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..7708ddd --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,23 @@ +module.exports = { + env: { + browser: true, + es6: true, + }, + extends: ["eslint:recommended", "plugin:react/recommended"], + parser: "babel-eslint", + globals: { + Atomics: "readonly", + SharedArrayBuffer: "readonly", + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + }, + rules: { + "react/jsx-uses-react": "error", + "react/jsx-uses-vars": "error", + }, +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6a11dfb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9876 @@ +{ + "name": "react-game", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ant-design/colors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.5.0.tgz", + "integrity": "sha512-ZAKJcmr4DBV3NWr8wm2dCxNKN4eFrX+qCaPsuFejP6FRsf+m5OKxvCVi9bSp1lmKWeOI5yECAx5s0uFm4QHuPw==", + "requires": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.0.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "insert-css": "^2.0.0", + "rc-util": "^5.0.1" + } + }, + "@ant-design/icons-svg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz", + "integrity": "sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ==" + }, + "@ant-design/react-slick": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-0.28.2.tgz", + "integrity": "sha512-nkrvXsO29pLToFaBb3MlJY4McaUFR4UHtXTz6A5HBzYmxH4SwKerX54mWdGc/6tKpHvS3vUwjEOt2T5XqZEo8Q==", + "requires": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "lodash": "^4.17.15", + "resize-observer-polyfill": "^1.5.0" + } + }, + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.13.tgz", + "integrity": "sha512-U/hshG5R+SIoW7HVWIdmy1cB7s3ki+r3FpyEZiCgpi4tFgPnX/vynY80ZGSASOIrUM6O7VxOgCZgdt7h97bUGg==", + "dev": true + }, + "@babel/core": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", + "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.17", + "@babel/helper-module-transforms": "^7.12.17", + "@babel/helpers": "^7.12.17", + "@babel/parser": "^7.12.17", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.17.tgz", + "integrity": "sha512-DSA7ruZrY4WI8VxuS1jWSRezFnghEoYEFrZcw9BizQRmOZiUsiHl59+qEARGPqPikwA/GPTyRCi7isuCK/oyqg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.17", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.17.tgz", + "integrity": "sha512-5EkibqLVYOuZ89BSg2lv+GG8feywLuvMXNYgf0Im4MssE0mFWPztSpJbildNnUgw0bLI2EsIN4MpSHC2iUJkQA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.13", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.17.tgz", + "integrity": "sha512-I/nurmTxIxHV0M+rIpfQBF1oN342+yvl2kwZUrQuOClMamHF1w5tknfZubgNOLRoA73SzBFAdFcpb4M9HwOeWQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.12.17", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.13.tgz", + "integrity": "sha512-5loeRNvMo9mx1dA/d6yNi+YiKziJZFylZnCo1nmFF4qPU4yJ14abhWESuSMQSlQxWdxdOFzxXjk/PpfudTtYyw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.12.13.tgz", + "integrity": "sha512-KSC5XSj5HreRhYQtZ3cnSnQwDzgnbdUDEFsxkN0m6Q3WrCRt72xrnZ8+h+pX7YxM7hr87zIO3a/v5p/H3TrnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.17.tgz", + "integrity": "sha512-Bzv4p3ODgS/qpBE0DiJ9qf5WxSmrQ8gVTe8ClMfwwsY2x/rhykxxy3bXzG7AGTnPB2ij37zGJ/Q/6FruxHxsxg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.17" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.17.tgz", + "integrity": "sha512-sFL+p6zOCQMm9vilo06M4VHuTxUAwa6IxgL56Tq1DVtA0ziAGTH1ThmJq7xwPqdQlgAbKX3fb0oZNbtRIyA5KQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz", + "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.13.tgz", + "integrity": "sha512-Qa6PU9vNcj1NZacZZI1Mvwt+gXDH6CTfgAkSjeRMLE8HxtDK76+YDId6NQR+z7Rgd5arhD2cIbS74r0SxD6PDA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz", + "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.13.tgz", + "integrity": "sha512-t0aZFEmBJ1LojdtJnhOaQEVejnzYhyjWHSsNSNo8vOYRbAJNh6r6GQF7pd36SqG7OKGbn+AewVQ/0IfYfIuGdw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helpers": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.17.tgz", + "integrity": "sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17" + } + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.17.tgz", + "integrity": "sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.13.tgz", + "integrity": "sha512-1KH46Hx4WqP77f978+5Ye/VUbuwQld2hph70yaw2hXS2v7ER2f3nlpNMu909HO2rbvP0NKLlMVDPh9KXklVMhA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-remap-async-to-generator": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", + "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.17.tgz", + "integrity": "sha512-ZNGoFZqrnuy9H2izB2jLlnNDAfVPlGl5NhFEiFe4D84ix9GQGygF+CWMGHKuE+bpyS/AOuDQCnkiRNqW2IzS1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.13.tgz", + "integrity": "sha512-v9eEi4GiORDg8x+Dmi5r8ibOe0VXoKDeNPYcTTxdGN4eOWikrJfDJCJrr1l5gKGvsNyGJbrfMftC2dTL6oz7pg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.13.tgz", + "integrity": "sha512-fqmiD3Lz7jVdK6kabeSr1PZlWSUVqSitmHEe3Z00dtGTKieWnX9beafvavc32kjORa5Bai4QNHgFDwWJP+WtSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz", + "integrity": "sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz", + "integrity": "sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.13" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.13.tgz", + "integrity": "sha512-9+MIm6msl9sHWg58NvqpNpLtuFbmpFYk37x8kgnGzAHvX35E1FyAwSUt5hIkSoWJFSAH+iwU8bJ4fcD1zKXOzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.17.tgz", + "integrity": "sha512-TvxwI80pWftrGPKHNfkvX/HnoeSTR7gC4ezWnAL39PuktYUe6r8kEpOLTYnkBTsaoeazXm2jHJ22EQ81sdgfcA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.13.tgz", + "integrity": "sha512-sV0V57uUwpauixvR7s2o75LmwJI6JECwm5oPUY5beZB1nBl2i37hc7CJGqB5G+58fur5Y6ugvl3LRONk5x34rg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.13.tgz", + "integrity": "sha512-tBtuN6qtCTd+iHzVZVOMNp+L04iIJBpqkdY42tWbmjIT5wvR2kx7gxMBsyhQtFzHwBbyGi9h8J8r9HgnOpQHxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.13.tgz", + "integrity": "sha512-psM9QHcHaDr+HZpRuJcE1PXESuGWSCcbiGFFhhwfzdbTxaGDVzuVtdNYliAwcRo3GFg0Bc8MmI+AvIGYIJG04A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-remap-async-to-generator": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", + "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.13.tgz", + "integrity": "sha512-cqZlMlhCC1rVnxE5ZGMtIb896ijL90xppMiuWXcwcOAuFczynpd3KYemb91XFFPi3wJSe/OcrX9lXoowatkkxA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.13.tgz", + "integrity": "sha512-dDfuROUPGK1mTtLKyDPUavmj2b6kFu82SmgpztBFEO974KMjJT+Ytj3/oWsTUMBmgPcp9J5Pc1SlcAYRpJ2hRA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.13.tgz", + "integrity": "sha512-Dn83KykIFzjhA3FDPA1z4N+yfF3btDGhjnJwxIj0T43tP0flCujnU8fKgEkf0C1biIpSv9NZegPBQ1J6jYkwvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.13.tgz", + "integrity": "sha512-xCbdgSzXYmHGyVX3+BsQjcd4hv4vA/FDy7Kc8eOpzKmBBPEOTurt0w5fCRQaGl+GSBORKgJdstQ1rHl4jbNseQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.13.tgz", + "integrity": "sha512-JHLOU0o81m5UqG0Ulz/fPC68/v+UTuGTWaZBUwpEk1fYQ1D9LfKV6MPn4ttJKqRo5Lm460fkzjLTL4EHvCprvA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.13.tgz", + "integrity": "sha512-OGQoeVXVi1259HjuoDnsQMlMkT9UkZT9TpXAsqWplS/M0N1g3TJAn/ByOCeQu7mfjc5WpSsRU+jV1Hd89ts0kQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.13.tgz", + "integrity": "sha512-aHfVjhZ8QekaNF/5aNdStCGzwTbU7SI5hUybBKlMzqIMC7w7Ho8hx5a4R/DkTHfRfLwHGGxSpFt9BfxKCoXKoA==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.12.13", + "@babel/helper-module-transforms": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.13.tgz", + "integrity": "sha512-BgZndyABRML4z6ibpi7Z98m4EVLFI9tVsZDADC14AElFaNHHBcJIovflJ6wtCqFxwy2YJ1tJhGRsr0yLPKoN+w==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.13.tgz", + "integrity": "sha512-e7QqwZalNiBRHCpJg/P8s/VJeSRYgmtWySs1JwvfwPqhBbiWfOcHDKdeAi6oAyIimoKWBlwc8oTgbZHdhCoVZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", + "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.17.tgz", + "integrity": "sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/types": "^7.12.17" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", + "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.12.17" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", + "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.13.tgz", + "integrity": "sha512-dUCrqPIowjqk5pXsx1zPftSq4sT0aCeZVAxhdgs3AMgyaDmoUT0G+5h3Dzja27t76aUEIJWlFgPJqJ/d4dbTtg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.13.tgz", + "integrity": "sha512-arIKlWYUgmNsF28EyfmiQHJLJFlAJNYkuQO10jL46ggjBpeb2re1P9K9YGxNJB45BqTbaslVysXDYm/g3sN/Qg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.17.tgz", + "integrity": "sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.13", + "@babel/helper-compilation-targets": "^7.12.17", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-proposal-async-generator-functions": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-dynamic-import": "^7.12.17", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.12.13", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.12.13", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", + "@babel/plugin-proposal-optional-chaining": "^7.12.17", + "@babel/plugin-proposal-private-methods": "^7.12.13", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.12.13", + "@babel/plugin-transform-async-to-generator": "^7.12.13", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.12.13", + "@babel/plugin-transform-computed-properties": "^7.12.13", + "@babel/plugin-transform-destructuring": "^7.12.13", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.12.13", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.12.13", + "@babel/plugin-transform-modules-commonjs": "^7.12.13", + "@babel/plugin-transform-modules-systemjs": "^7.12.13", + "@babel/plugin-transform-modules-umd": "^7.12.13", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.12.13", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.12.13", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.12.13", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.17", + "core-js-compat": "^3.8.0", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz", + "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-transform-react-display-name": "^7.12.13", + "@babel/plugin-transform-react-jsx": "^7.12.13", + "@babel/plugin-transform-react-jsx-development": "^7.12.12", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + } + }, + "@babel/runtime": { + "version": "7.12.18", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.18.tgz", + "integrity": "sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.17.tgz", + "integrity": "sha512-LGkTqDqdiwC6Q7fWSwQoas/oyiEYw6Hqjve5KOSykXkmFJFqzvGMb9niaUEag3Rlve492Mkye3gLw9FTv94fdQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.17", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.17", + "@babel/types": "^7.12.17", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.17.tgz", + "integrity": "sha512-tNMDjcv/4DIcHxErTgwB9q2ZcYyN0sUfgGKUK/mm1FJK7Wz+KstoEekxrl/tBiNDgLK1HGi+sppj1An/1DR4fQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" + }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true + }, + "@types/eslint": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", + "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", + "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "dev": true + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "14.14.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.28.tgz", + "integrity": "sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g==", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.12.0.tgz", + "integrity": "sha512-sYAF+CF9XZ5cvEBkI7RtrG9g2GtMBkviTnBxYYyq+8BWvO4QtXfwwR6a2LFwCi4evMKZfpv6U43ViYvv17Wz3Q==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "@types/webpack": { + "version": "4.41.26", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.26.tgz", + "integrity": "sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA==", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + }, + "@types/webpack-sources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", + "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz", + "integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz", + "integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz", + "integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", + "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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 + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "antd": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.12.3.tgz", + "integrity": "sha512-opzbxm6jZB+Pc9M0Kuo6+4WmniB59NJ4i/qBr6ExyMtl9hMgsGNH8GuDXsp2xgTzfq5hyobdLci2DAuPMrf0Zg==", + "requires": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons": "^4.5.0", + "@ant-design/react-slick": "~0.28.1", + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "classnames": "^2.2.6", + "copy-to-clipboard": "^3.2.0", + "lodash": "^4.17.20", + "moment": "^2.25.3", + "rc-cascader": "~1.4.0", + "rc-checkbox": "~2.3.0", + "rc-collapse": "~3.1.0", + "rc-dialog": "~8.5.1", + "rc-drawer": "~4.2.0", + "rc-dropdown": "~3.2.0", + "rc-field-form": "~1.18.0", + "rc-image": "~5.2.0", + "rc-input-number": "~6.2.0", + "rc-mentions": "~1.5.0", + "rc-menu": "~8.10.0", + "rc-motion": "^2.4.0", + "rc-notification": "~4.5.2", + "rc-pagination": "~3.1.2", + "rc-picker": "~2.5.1", + "rc-progress": "~3.1.0", + "rc-rate": "~2.9.0", + "rc-resize-observer": "^1.0.0", + "rc-select": "~12.1.0", + "rc-slider": "~9.7.1", + "rc-steps": "~4.1.0", + "rc-switch": "~3.2.0", + "rc-table": "~7.13.0", + "rc-tabs": "~11.7.0", + "rc-textarea": "~0.3.0", + "rc-tooltip": "~5.0.0", + "rc-tree": "~4.1.0", + "rc-tree-select": "~4.3.0", + "rc-trigger": "^5.2.1", + "rc-upload": "~3.3.4", + "rc-util": "^5.7.0", + "scroll-into-view-if-needed": "^2.2.25", + "warning": "^4.0.3" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "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 + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-includes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", + "is-string": "^1.0.5" + } + }, + "array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.4.13.tgz", + "integrity": "sha1-RFvQsPI1Ao9dxbUy/KJ9x7Ge11Q=", + "requires": { + "depd": "~1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=" + } + } + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "async-validator": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.1.tgz", + "integrity": "sha512-DDmKA7sdSAJtTVeNZHrnr2yojfFaoeW8MfQN8CeuXg8DDQHTqKk9Fdv38dSvnesHoO8MUwMI2HphOeSyIF+wmQ==" + }, + "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 + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "^4.2.0" + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base62": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz", + "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=" + }, + "base64-encode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-encode/-/base64-encode-1.0.1.tgz", + "integrity": "sha1-xxmL2pYZXtCBy0UlwOUldSc+HP8=" + }, + "base64-js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", + "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + } + }, + "buffer-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/buffer-browserify/-/buffer-browserify-0.0.4.tgz", + "integrity": "sha1-Sw22w6k1tx+tbxKt1VrORmwEwuU=", + "requires": { + "base64-js": "0.0.2" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "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, + "requires": { + "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" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001187", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001187.tgz", + "integrity": "sha512-w7/EP1JRZ9552CyrThUnay2RkZ1DXxKe/Q2swTC4+LElLh9RRYrL1Z+27LlakB8kzY0fSmHw9mc7XYDUKAKWMA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "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, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "dev": true, + "requires": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=" + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "cls": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/cls/-/cls-0.1.5.tgz", + "integrity": "sha1-3zIYz50UgHR/WE2IsZt0xrKBMXs=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "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 + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "commoner": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.9.8.tgz", + "integrity": "sha1-IvWViPE0o6+gSq6pfou1dJcqze0=", + "requires": { + "commander": "~2.2.0", + "glob": "~3.2.9", + "graceful-fs": "~2.0.3", + "iconv-lite": "~0.2.11", + "install": "~0.1.7", + "mkdirp": "~0.3.5", + "private": "~0.1.2", + "q": "~1.0.1", + "recast": "~0.7.0" + }, + "dependencies": { + "commander": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz", + "integrity": "sha1-F1rUuTF/P/YV8gHB5XIk9Vo+kd8=" + }, + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "requires": { + "inherits": "2", + "minimatch": "0.3" + } + }, + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" + }, + "iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=" + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" + } + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "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 + } + } + }, + "compute-scroll-into-view": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.16.tgz", + "integrity": "sha512-a85LHKY81oQnikatZYA90pufpZ6sQx++BoCxOEMsjpZx+ZnaKGQnCyCehTRr/1p9GBIAHTjcU9k71kSYWloLiQ==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-0.0.8.tgz", + "integrity": "sha1-p+p50MywtASZCR25MAUPswT2LX0=" + }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz", + "integrity": "sha1-0SijwLuINQ61YmxufHGm8P1ImDw=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "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 + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "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 + } + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, + "copy-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-SLjQNa5iE3BoCP76ESU9qYo9ZkEWtXoZxDurHoqPchAFRblJ9g96xTeC560UXBMre1Nx6ixIIUfiY3VcjpJw3g==", + "dev": true, + "requires": { + "fast-glob": "^3.2.4", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "core-js-compat": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.0.tgz", + "integrity": "sha512-YK6fwFjCOKWwGnjFUR3c544YsnA/7DoLL0ysncuOJ4pwbriAtOpvM2bygdlcXbvQCQZ7bBU9CL4t7tGl7ETRpQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-0.2.1.tgz", + "integrity": "sha1-MD7ZBG+GBKPXw17EptRtImhxIHg=" + }, + "css-loader": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.2.tgz", + "integrity": "sha512-gbkBigdcHbmNvZ1Cg6aV6qh6k9N6XOr8YWzISLQGrwk2mgOH8LLrizhkxbDhQtaLtktyKHD4970S0xwz5btfTA==", + "dev": true, + "requires": { + "camelcase": "^6.2.0", + "cssesc": "^3.0.0", + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csso": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/csso/-/csso-1.3.12.tgz", + "integrity": "sha1-/GKGlKLTiTiqrEmWdTIY/TEc254=" + }, + "date-fns": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.17.0.tgz", + "integrity": "sha512-ZEhqxUtEZeGgg9eHNSOAJ8O9xqSgiJdrL0lzSSfMF54x6KXWJiOH/xntSJ9YomJPrYH/p08t6gWjGWq1SDJlSA==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "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, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-align": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz", + "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA==" + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.667", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.667.tgz", + "integrity": "sha512-Ot1pPtAVb5nd7jeVF651zmfLFilRVFomlDzwXmdlWe5jyzOGa6mVsQ06XnAurT7wWfg5VEIY+LopbAdD/bpo5w==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "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, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/envify/-/envify-1.2.1.tgz", + "integrity": "sha1-rDTjZ2+QNdWVGP71fZkUokoYdno=", + "requires": { + "esprima-fb": "~3001.1.0-dev-harmony-fb", + "jstransform": "~3.0.0", + "through": "~2.3.4", + "xtend": "~2.1.2" + }, + "dependencies": { + "esprima-fb": { + "version": "3001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", + "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=" + } + } + }, + "envinfo": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", + "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "dev": true + }, + "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, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + } + }, + "es-module-lexer": { + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", + "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "dev": true + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "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, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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" + } + }, + "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 + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz", + "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "loader-utils": "^2.0.0", + "object-hash": "^2.0.3", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-react": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", + "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "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 + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "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, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "follow-redirects": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", + "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "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==", + "requires": { + "react-is": "^16.7.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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" + } + }, + "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 + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "html-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-2.0.0.tgz", + "integrity": "sha512-/8yd7xrPJM0ugzz4VDK/xLV39nPGpelwehonX/msg/N5ORvQj9G4VncX5coIWKkOSLBANseNaEcW+3Ga0twDWg==", + "dev": true, + "requires": { + "html-minifier-terser": "^5.1.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "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 + } + } + } + } + }, + "html-webpack-plugin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.1.0.tgz", + "integrity": "sha512-2axkp+2NHmvHUWrKe1dY4LyM3WatQEdFChr42OY7R/Ad7f0AQzaKscGCcqN/FtQBxo8rdfJP7M3RMFDttqok3g==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^2.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "http-browserify": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-0.1.6.tgz", + "integrity": "sha1-6hHebHOdR557rNHmhbBie0xibZY=", + "requires": { + "concat-stream": "0.0.8" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "insert-css": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz", + "integrity": "sha1-610Ql7dUL0x56jBg067gfQU4gPQ=" + }, + "install": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/install/-/install-0.1.8.tgz", + "integrity": "sha1-mYDvk+MN+1NHeNFjvIbd1HKtX+g=" + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "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 + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "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, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "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 + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "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 + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", + "requires": { + "string-convert": "^0.2.0" + } + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jstransform": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz", + "integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=", + "requires": { + "base62": "0.1.1", + "esprima-fb": "~3001.1.0-dev-harmony-fb", + "source-map": "0.1.31" + }, + "dependencies": { + "esprima-fb": { + "version": "3001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", + "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=" + }, + "source-map": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", + "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, + "jsx-loader": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/jsx-loader/-/jsx-loader-0.9.0.tgz", + "integrity": "sha1-DTeIzzt9KG/N27GYoeRJ5butXrE=", + "requires": { + "react-tools": "~0.9.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "less-loader": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-8.0.0.tgz", + "integrity": "sha512-tnDs0ZdwPZgNOg0NGJ0sAD2KViG9TvOMDVibT33fH1bpLkT4xMo5Ue2FsbjFsVsUKtuRTlU0tYp2/lRizrycLg==", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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" + } + }, + "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 + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "requires": { + "mime-db": "1.46.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-create-react-context": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", + "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", + "requires": { + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + } + }, + "mini-css-extract-plugin": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.8.tgz", + "integrity": "sha512-u+2kVov/Gcs74iz+x3phEBWMAGw2djjnKfYez+Pl/b5dyXL7aM4Lp5QQtIq16CDwRHT/woUJki49gBNMhfm1eA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "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, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "mini-store": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-3.0.6.tgz", + "integrity": "sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ==", + "requires": { + "hoist-non-react-statics": "^3.3.2", + "shallowequal": "^1.0.2" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "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, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "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, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "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" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-libs-browser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.1.2.tgz", + "integrity": "sha1-+TR9v97NNr2+vMtPiYMQKD/8vyk=", + "requires": { + "buffer-browserify": "0.0.4", + "console-browserify": "0.1.6", + "crypto-browserify": "0.2.1", + "http-browserify": "0.1.6", + "vm-browserify": "0.0.1", + "zlib-browserify": "0.0.1" + } + }, + "node-releases": { + "version": "1.1.70", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", + "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz", + "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==", + "dev": true + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-is": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "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, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "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==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.6.tgz", + "integrity": "sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg==", + "dev": true, + "requires": { + "colorette": "^1.2.1", + "nanoid": "^3.1.20", + "source-map": "^0.6.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "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, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz", + "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=" + }, + "rc-align": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.9.tgz", + "integrity": "sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.3.0", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-cascader": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-1.4.2.tgz", + "integrity": "sha512-JVuLGrSi+3G8DZyPvlKlGVWJjhoi9NTz6REHIgRspa5WnznRkKGm2ejb0jJtz0m2IL8Q9BG4ZA2sXuqAu71ltQ==", + "requires": { + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.0.1", + "warning": "^4.0.1" + } + }, + "rc-checkbox": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.3.2.tgz", + "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + } + }, + "rc-collapse": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.1.0.tgz", + "integrity": "sha512-EwpNPJcLe7b+5JfyaxM9ZNnkCgqArt3QQO0Cr5p5plwz/C9h8liAmjYY5I4+hl9lAjBqb7ZwLu94+z+rt5g1WQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.2.1", + "shallowequal": "^1.1.0" + } + }, + "rc-dialog": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.5.1.tgz", + "integrity": "sha512-EcLgHHjF3Jp4C+TFceO2j7gIrpx0YIhY6ronki5QJDL/z+qWYozY5RNh4rnv4a6R21SPVhV+SK+gMMlMHZ/YRQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.6.1" + } + }, + "rc-drawer": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-4.2.2.tgz", + "integrity": "sha512-zw48FATkAmJrEnfeRWiMqvKAzqGzUDLN1UXlluB7q7GgbR6mJFvc+QsmNrgxsFuMz86Lh9mKSIi7rXlPINmuzw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.7.0" + } + }, + "rc-dropdown": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.0.tgz", + "integrity": "sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-trigger": "^5.0.4" + } + }, + "rc-field-form": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.18.1.tgz", + "integrity": "sha512-/YRnelnHLxygl/ROGhFqfCT+uAZ5xLvu3qjtlETOneb7fXKk7tqp+RGfYqZ4uNViXlsfxox3qqMMTVet6wYfEA==", + "requires": { + "@babel/runtime": "^7.8.4", + "async-validator": "^3.0.3", + "rc-util": "^5.0.0" + } + }, + "rc-image": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.2.3.tgz", + "integrity": "sha512-8qWNerW1rN0s4zAF6oEa+Zm7UzM+PwTxbGdufvnR3Gcp2M0bcfoEPk9V+RgTxmzGNNELxmrMHloPL4LV5BZu3Q==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-dialog": "~8.5.0", + "rc-util": "^5.0.6" + } + }, + "rc-input-number": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-6.2.0.tgz", + "integrity": "sha512-EaDkGvJN1YZdLntY2isYjHejgX6hDCcW8Te7hIGsVp3Egzn179s1PVVLQmSEfT1YC+bf+SE5EZOpw0IH7dq33w==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + } + }, + "rc-mentions": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.5.3.tgz", + "integrity": "sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-menu": "^8.0.1", + "rc-textarea": "^0.3.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.0.1" + } + }, + "rc-menu": { + "version": "8.10.5", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.10.5.tgz", + "integrity": "sha512-8Ets93wQFy9IysmgRUm1VGdrEz6XfZTM0jQOqOPLYNXah5HgAmCh4xT0UOygfHB3IWiQeqDgr2uPB4uVhwI2+Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "mini-store": "^3.0.1", + "rc-motion": "^2.0.1", + "rc-trigger": "^5.1.2", + "rc-util": "^5.7.0", + "resize-observer-polyfill": "^1.5.0", + "shallowequal": "^1.1.0" + } + }, + "rc-motion": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.4.1.tgz", + "integrity": "sha512-TWLvymfMu8SngPx5MDH8dQ0D2RYbluNTfam4hY/dNNx9RQ3WtGuZ/GXHi2ymLMzH+UNd6EEFYkOuR5JTTtm8Xg==", + "requires": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.2.1" + } + }, + "rc-notification": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.5.4.tgz", + "integrity": "sha512-VsN0ouF4uglE5g3C9oDsXLNYX0Sz++ZNUFYCswkxhpImYJ9u6nJOpyA71uOYDVCu6bAF54Y5Hi/b+EcnMzkepg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.2.0", + "rc-util": "^5.0.1" + } + }, + "rc-overflow": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.0.2.tgz", + "integrity": "sha512-GXj4DAyNxm4f57LvXLwhJaZoJHzSge2l2lQq64MZP7NJAfLpQqOLD+v9JMV9ONTvDPZe8kdzR+UMmkAn7qlzFA==", + "requires": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.1" + } + }, + "rc-pagination": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.1.3.tgz", + "integrity": "sha512-Z7CdC4xGkedfAwcUHPtfqNhYwVyDgkmhkvfsmoByCOwAd89p42t5O5T3ORar1wRmVWf3jxk/Bf4k0atenNvlFA==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + } + }, + "rc-picker": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.5.5.tgz", + "integrity": "sha512-HZDBDDDqCkw7RiFQI9yxuQb1G9/z2KS66+0moJ3jSNVWTGZwTGa8bmdEabds7WtEZEHPDH5EGlWAJU72iimxUg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "date-fns": "^2.15.0", + "moment": "^2.24.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.4.0", + "shallowequal": "^1.1.0" + } + }, + "rc-progress": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.1.3.tgz", + "integrity": "sha512-Jl4fzbBExHYMoC6HBPzel0a9VmhcSXx24LVt/mdhDM90MuzoMCJjXZAlhA0V0CJi+SKjMhfBoIQ6Lla1nD4QNw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6" + } + }, + "rc-rate": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.1.tgz", + "integrity": "sha512-MmIU7FT8W4LYRRHJD1sgG366qKtSaKb67D0/vVvJYR0lrCuRrCiVQ5qhfT5ghVO4wuVIORGpZs7ZKaYu+KMUzA==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + } + }, + "rc-resize-observer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", + "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.0", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-select": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-12.1.3.tgz", + "integrity": "sha512-pMJ27VQRh5QbyGLSE+by4tORYucNFbZxON+Ywj81qjXAGMjvhMcOOvlv1RZRNdnZxaMwH//3iDPOf80b0AJxZg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.0.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.0.1", + "rc-virtual-list": "^3.2.0" + } + }, + "rc-slider": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.7.1.tgz", + "integrity": "sha512-r9r0dpFA3PEvxBhIfVi1lVzxuSogWxeY+tGvi2AqMM1rPgaOXQ7WbtT+9kVFkJ9K8TntA/vYPgiCCKfN29KTkw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-tooltip": "^5.0.1", + "rc-util": "^5.0.0", + "shallowequal": "^1.1.0" + } + }, + "rc-steps": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-4.1.3.tgz", + "integrity": "sha512-GXrMfWQOhN3sVze3JnzNboHpQdNHcdFubOETUHyDpa/U3HEKBZC3xJ8XK4paBgF4OJ3bdUVLC+uBPc6dCxvDYA==", + "requires": { + "@babel/runtime": "^7.10.2", + "classnames": "^2.2.3", + "rc-util": "^5.0.1" + } + }, + "rc-switch": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.2.tgz", + "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.1" + } + }, + "rc-table": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.13.1.tgz", + "integrity": "sha512-zg2ldSRHj1ENGsSykSKV5axnWkSaaly+wjRcD1Bspx4WHrf3m/I1WYjpVvOeer2e06bfKb6lmkK0HLxQ1cZtsg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.4.0", + "shallowequal": "^1.1.0" + } + }, + "rc-tabs": { + "version": "11.7.3", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.7.3.tgz", + "integrity": "sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "^3.1.3", + "rc-menu": "^8.6.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.0" + } + }, + "rc-textarea": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.3.4.tgz", + "integrity": "sha512-ILUYx831ZukQPv3m7R4RGRtVVWmL1LV4ME03L22mvT56US0DGCJJaRTHs4vmpcSjFHItph5OTmhodY4BOwy81A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.7.0" + } + }, + "rc-tooltip": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.0.2.tgz", + "integrity": "sha512-A4FejSG56PzYtSNUU4H1pVzfhtkV/+qMT2clK0CsSj+9mbc4USEtpWeX6A/jjVL+goBOMKj8qlH7BCZmZWh/Nw==", + "requires": { + "@babel/runtime": "^7.11.2", + "rc-trigger": "^5.0.0" + } + }, + "rc-tree": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-4.1.1.tgz", + "integrity": "sha512-ufq7CkWfvTQa+xMPzEWYfOjTfsEALlPr0/IyujEG4+4d8NdaR3e+0dc8LkkVWoe1VCcXV2FQqAsgr2z/ThFUrQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.0.0", + "rc-virtual-list": "^3.0.1" + } + }, + "rc-tree-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-4.3.0.tgz", + "integrity": "sha512-EEXB9dKBsJNJuKIU5NERZsaJ71GDGIj5uWLl7A4XiYr2jXM4JICfScvvp3O5jHMDfhqmgpqNc0z90mHkgh3hKg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-select": "^12.0.0", + "rc-tree": "^4.0.0", + "rc-util": "^5.0.5" + } + }, + "rc-trigger": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.2.2.tgz", + "integrity": "sha512-e6tyCw/xqp4KfYodEK2ecgiUEWQCsqrw2rMXWF6zSeq9SYoXMVZJz4ao8xct4YSiAe7zuaCKkPprS0xdqnAtMg==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.5.0" + } + }, + "rc-upload": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-3.3.4.tgz", + "integrity": "sha512-v2sirR4JL31UTHD/f0LGUdd+tpFaOVUTPeIEjAXRP9kRN8TFhqOgcXl5ixtyqj90FmtRUmKmafCv0EmhBQUHqQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + } + }, + "rc-util": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.1.tgz", + "integrity": "sha512-kXV/QjL+azh3AxMk68gm8+nltVoL6bjeJJULAZLRCLus2Fhvo/aaMZokxYov/E0dbfjo31I78pF4yVljqQB7bA==", + "requires": { + "@babel/runtime": "^7.12.5", + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + }, + "rc-virtual-list": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.2.6.tgz", + "integrity": "sha512-8FiQLDzm3c/tMX0d62SQtKDhLH7zFlSI6pWBAPt+TUntEqd3Lz9zFAmpvTu8gkvUom/HCsDSZs4wfV4wDPWC0Q==", + "requires": { + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.0.7" + } + }, + "react": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", + "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", + "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.1" + } + }, + "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==" + }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "react-tools": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-tools/-/react-tools-0.9.0.tgz", + "integrity": "sha1-VIQI1OJTCUdCRbQZC3+X2+8AUAM=", + "requires": { + "commoner": "~0.9.1", + "esprima-fb": "~3001.1.0-dev-harmony-fb", + "jstransform": "~3.0.0" + }, + "dependencies": { + "esprima-fb": { + "version": "3001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", + "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=" + } + } + }, + "react-webpack": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/react-webpack/-/react-webpack-0.4.1.tgz", + "integrity": "sha1-B8b310Uor5zYKqw+LfUeHLcmSVg=", + "requires": { + "css-loader": "~0.6.8", + "envify": "~1.2.1", + "jsx-loader": "~0.9.0", + "less-loader": "~0.7.1", + "react": "~0.9.0", + "script-loader": "~0.5.2", + "style-loader": "~0.6.2", + "webpack": "~1.0.1" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "css-loader": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.6.12.tgz", + "integrity": "sha1-lszxg6s4peyIr/jZ+CHUeGFNGkc=", + "requires": { + "csso": "1.3.x", + "loader-utils": "~0.2.2", + "source-map": "0.1.x" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "enhanced-resolve": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.7.6.tgz", + "integrity": "sha1-SkKfdhM9qCZgmOVL6CDhZdN+XM8=", + "requires": { + "graceful-fs": "~2.0.3", + "memory-fs": "~0.1.0", + "tapable": "0.1.x" + } + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + }, + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "less-loader": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-0.7.8.tgz", + "integrity": "sha1-jFNRo+4iwwtbwzH6DMP6sdri5EM=", + "requires": { + "loader-utils": "^0.2.5" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "memory-fs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.1.1.tgz", + "integrity": "sha1-vsmX6GVKKXUyBuO5IYCYab7A6UM=" + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" + }, + "react": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react/-/react-0.9.0.tgz", + "integrity": "sha1-wckeGf45H5lwEnkYOd3/3tIMaP0=" + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "style-loader": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.6.5.tgz", + "integrity": "sha1-5pC/uPtjH4tLLQue5trbFPbVTDA=" + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=" + }, + "webpack": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.0.5.tgz", + "integrity": "sha1-RCa67pIn+jHGp/wZRg6cNZlAUz4=", + "requires": { + "async": "0.2.x", + "base64-encode": "1.0.x", + "clone": "0.1.x", + "enhanced-resolve": "0.7.x", + "esprima": "1.0.x", + "mkdirp": "0.3.x", + "node-libs-browser": "0.1.x", + "optimist": "0.6.x", + "tapable": "0.1.x", + "uglify-js": "2.4.x", + "webpack-core": "0.3.x" + } + } + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "recast": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.7.5.tgz", + "integrity": "sha1-Ek589j4qc3zWkkPjeRlsRVSbHy4=", + "requires": { + "ast-types": "~0.4.7", + "cls": "~0.1.3", + "esprima-fb": "~6001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "source-map": "0.1.32" + }, + "dependencies": { + "esprima-fb": { + "version": "6001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-6001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-qYghdQ+rrbFkzdGZqUNHo5GdGsU=" + }, + "source-map": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "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, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz", + "integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", + "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", + "dev": true, + "requires": { + "css-select": "^2.0.2", + "dom-converter": "^0.2", + "htmlparser2": "^3.10.1", + "lodash": "^4.17.20", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, + "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 + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.32.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.7.tgz", + "integrity": "sha512-C8Z4bjqGWnsYa11o8hpKAuoyFdRhrSHcYjCr+XAWVPSIQqC8mp2f5Dx4em0dKYehPzg5XSekmCjqJnEZbIls9A==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-11.0.1.tgz", + "integrity": "sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "scheduler": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.1.tgz", + "integrity": "sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "script-loader": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.5.2.tgz", + "integrity": "sha1-MfHUFzJfQtvRVQhaitu4/DaZgzU=", + "requires": { + "raw-loader": "0.5.x" + } + }, + "scroll-into-view-if-needed": { + "version": "2.2.26", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.26.tgz", + "integrity": "sha512-SQ6AOKfABaSchokAmmaxVnL9IArxEnLEX9j4wAZw+x4iUTb40q7irtHG3z4GtAWz5veVZcCnubXDBRyLVQaohw==", + "requires": { + "compute-scroll-into-view": "^1.0.16" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "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, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "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, + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "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, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "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, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", + "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.4.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "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 + }, + "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==", + "dev": true, + "requires": { + "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" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "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, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.matchall": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz", + "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + } + } + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + }, + "terser": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", + "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "dev": true, + "requires": { + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.5.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "requires": { + "async": "~0.2.6", + "source-map": "0.1.34", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.5.4" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "source-map": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "yargs": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "requires": { + "camelcase": "^1.0.2", + "decamelize": "^1.0.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "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, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "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 + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vm-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.1.tgz", + "integrity": "sha1-UdJZeTZqshnf41o/xl7NavNjHVQ=" + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.23.0.tgz", + "integrity": "sha512-RC6dwDuRxiU75F8XC4H08NtzUrMfufw5LDnO8dTtaKU2+fszEdySCgZhNwSBBn516iNaJbQI7T7OPHIgCwcJmg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.46", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.7.0", + "es-module-lexer": "^0.3.26", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + } + }, + "webpack-cli": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz", + "integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.1", + "@webpack-cli/info": "^1.2.2", + "@webpack-cli/serve": "^1.3.0", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", + "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==", + "dev": true + } + } + }, + "webpack-core": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.3.5.tgz", + "integrity": "sha1-5vmZL+CxXAvS4vMZdJUDQEyeIw4=", + "requires": { + "source-map": "0.1.x" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "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" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "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" + } + }, + "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, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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, + "requires": { + "find-up": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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" + } + }, + "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, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "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 + }, + "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, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "requires": { + "object-keys": "~0.4.0" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + } + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "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, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "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, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "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, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "zlib-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/zlib-browserify/-/zlib-browserify-0.0.1.tgz", + "integrity": "sha1-T6akXQDbwV8xikr6HZr8Aljhdsw=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a5b4da1 --- /dev/null +++ b/package.json @@ -0,0 +1,64 @@ +{ + "name": "react-game", + "version": "1.0.0", + "description": "react-game", + "private": true, + "scripts": { + "dev": "webpack --mode development", + "prod": "webpack --mode production", + "start": "webpack serve --open" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/kli2m/react-game.git" + }, + "author": "kli2m", + "license": "ISC", + "bugs": { + "url": "https://github.com/kli2m/react-game/issues" + }, + "plugins": [ + "react" + ], + "babel": { + "presets": [ + "@babel/env", + "@babel/react" + ] + }, + "homepage": "https://github.com/kli2m/react-game#readme", + "devDependencies": { + "@babel/core": "^7.12.17", + "@babel/preset-env": "^7.12.17", + "@babel/preset-react": "^7.12.13", + "babel-eslint": "^8.2.6", + "babel-loader": "^8.2.2", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^7.0.0", + "cross-env": "^7.0.3", + "css-loader": "^5.0.2", + "eslint": "^4.19.1", + "eslint-config-airbnb-base": "^14.2.1", + "eslint-loader": "^4.0.2", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-react": "^7.22.0", + "file-loader": "^6.2.0", + "html-loader": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "less-loader": "^8.0.0", + "mini-css-extract-plugin": "^1.3.8", + "sass": "^1.32.7", + "sass-loader": "^11.0.1", + "style-loader": "^2.0.0", + "webpack": "^5.23.0", + "webpack-cli": "^4.5.0", + "webpack-dev-server": "^3.11.2" + }, + "dependencies": { + "antd": "^4.12.3", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "react-router-dom": "^5.2.0", + "react-webpack": "^0.4.1" + } +} diff --git a/src/App.js b/src/App.js new file mode 100644 index 0000000..aa85c7d --- /dev/null +++ b/src/App.js @@ -0,0 +1,11 @@ +import React from 'react'; + + +const App = () => { + + return ( +

Hello

+ ); +}; + +export default App; diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..c8712f8 --- /dev/null +++ b/src/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + +
+ + \ No newline at end of file diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..27d1650 --- /dev/null +++ b/src/index.js @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + + diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..5fc5b95 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,93 @@ +const webpack = require("webpack"); +const path = require("path"); +const { CleanWebpackPlugin } = require("clean-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const CopyPlugin = require("copy-webpack-plugin"); + +module.exports = (env, options) => { + const isProduction = options.mode === "production"; + + const config = { + mode: isProduction ? "production" : "development", + devtool: isProduction ? "none" : "source-map", + // entry: ['./src/index.js', './src/sass/style.scss'], + entry: ["./src/index.js"], + output: { + path: path.join(__dirname, "./dist"), + filename: "index.js", + }, + devServer: { + contentBase: path.join(__dirname, "/dist"), + compress: true, + port: 9000, + watchContentBase: true, + progress: true, + overlay: true, + open: true, + }, + module: { + rules: [ + { + enforce: "pre", + test: /\.js$/, + exclude: /node_modules/, + loader: "eslint-loader", + options: { + fix: true, + }, + }, + { + test: /\.m?js$/, + exclude: /(node_modules|bower_components)/, + use: { + loader: "babel-loader", + }, + }, + { + test: /\.s[ac]ss$/i, + use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"], + }, + { + test: /\.(png|jpe?g|gif|svg)$/i, + exclude: [/node_modules/], + loader: "file-loader", + options: { + name: "assets/[contenthash].[ext]", + outputPath: "assets/", + publicPath: "assets/", + }, + }, + { + test: /\.html$/i, + loader: "html-loader", + }, + ], + }, + plugins: [ + new CleanWebpackPlugin(), + new HtmlWebpackPlugin({ + template: "./src/index.html", + inject: true, + minify: { + removeComments: true, + collapseWhitespace: true, + removeAttributeQuotes: true, + }, + }), + new MiniCssExtractPlugin({ + filename: "style.css", + }), + new CopyPlugin({ + patterns: [ + { from: "./src/assets/img", to: "assets/img" }, + { from: "./src/assets/audio", to: "assets/audio" }, + ], + options: { + concurrency: 100, + }, + }), + ], + }; + return config; +}; From 221f2a7d441511b491ee6a7cfee9d9755ef33f95 Mon Sep 17 00:00:00 2001 From: kli2m Date: Sun, 21 Feb 2021 13:54:25 +0300 Subject: [PATCH 02/16] feat: added drag & drop --- .eslintrc.js | 1 + package-lock.json | 91 +++++++++++++++++++ package.json | 6 +- src/App.js | 6 ++ src/App.scss | 6 ++ src/Components/Cell/Cell.js | 14 +++ src/Components/Cell/Cell.scss | 7 ++ src/Components/PlayingField/PlayingField.js | 54 +++++++++++ src/Components/PlayingField/PlayingField.scss | 14 +++ src/config/config.json | 12 +++ src/store/store.js | 5 + src/utils/createArr.js | 9 ++ 12 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 src/App.scss create mode 100644 src/Components/Cell/Cell.js create mode 100644 src/Components/Cell/Cell.scss create mode 100644 src/Components/PlayingField/PlayingField.js create mode 100644 src/Components/PlayingField/PlayingField.scss create mode 100644 src/config/config.json create mode 100644 src/store/store.js create mode 100644 src/utils/createArr.js diff --git a/.eslintrc.js b/.eslintrc.js index 7708ddd..2b44e30 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -17,6 +17,7 @@ module.exports = { }, }, rules: { + "react/prop-types": "off", "react/jsx-uses-react": "error", "react/jsx-uses-vars": "error", }, diff --git a/package-lock.json b/package-lock.json index 6a11dfb..955e5ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1210,6 +1210,12 @@ "integrity": "sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g==", "dev": true }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true + }, "@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -2838,6 +2844,14 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-0.2.1.tgz", "integrity": "sha1-MD7ZBG+GBKPXw17EptRtImhxIHg=" }, + "css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "requires": { + "tiny-invariant": "^1.0.6" + } + }, "css-loader": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.2.tgz", @@ -5664,6 +5678,11 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, + "memoize-one": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", + "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -6674,6 +6693,11 @@ "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", "dev": true }, + "raf-schd": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.2.tgz", + "integrity": "sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ==" + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -7100,6 +7124,20 @@ "object-assign": "^4.1.1" } }, + "react-beautiful-dnd": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz", + "integrity": "sha512-87It8sN0ineoC3nBW0SbQuTFXM6bUqM62uJGY4BtTf0yzPl8/3+bHMWkgIe0Z6m8e+gJgjWxefGRVfpE3VcdEg==", + "requires": { + "@babel/runtime": "^7.8.4", + "css-box-model": "^1.2.0", + "memoize-one": "^5.1.1", + "raf-schd": "^4.0.2", + "react-redux": "^7.1.1", + "redux": "^4.0.4", + "use-memo-one": "^1.1.1" + } + }, "react-dom": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", @@ -7115,6 +7153,18 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-redux": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.2.tgz", + "integrity": "sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA==", + "requires": { + "@babel/runtime": "^7.12.1", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + } + }, "react-router": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", @@ -7460,6 +7510,37 @@ "resolve": "^1.9.0" } }, + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-devtools": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/redux-devtools/-/redux-devtools-3.7.0.tgz", + "integrity": "sha512-Lnx3UX7mnJij2Xs+RicPK1GyKkbuodrCKtfYmJsN603wC0mc99W//xCAskGVNmRhIXg4e57m2k1CyX0kVzCsBg==", + "dev": true, + "requires": { + "@types/prop-types": "^15.7.3", + "lodash": "^4.17.19", + "prop-types": "^15.7.2", + "redux-devtools-instrument": "^1.10.0" + } + }, + "redux-devtools-instrument": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/redux-devtools-instrument/-/redux-devtools-instrument-1.10.0.tgz", + "integrity": "sha512-X8JRBCzX2ADSMp+iiV7YQ8uoTNyEm0VPFPd4T854coz6lvRiBrFSqAr9YAS2n8Kzxx8CJQotR0QF9wsMM+3DvA==", + "dev": true, + "requires": { + "lodash": "^4.17.19", + "symbol-observable": "^1.2.0" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -8526,6 +8607,11 @@ "has-flag": "^4.0.0" } }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, "table": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", @@ -8970,6 +9056,11 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "use-memo-one": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz", + "integrity": "sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index a5b4da1..7fb850f 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "html-webpack-plugin": "^5.1.0", "less-loader": "^8.0.0", "mini-css-extract-plugin": "^1.3.8", + "redux-devtools": "^3.7.0", "sass": "^1.32.7", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", @@ -57,8 +58,11 @@ "dependencies": { "antd": "^4.12.3", "react": "^17.0.1", + "react-beautiful-dnd": "^13.0.0", "react-dom": "^17.0.1", + "react-redux": "^7.2.2", "react-router-dom": "^5.2.0", - "react-webpack": "^0.4.1" + "react-webpack": "^0.4.1", + "redux": "^4.0.5" } } diff --git a/src/App.js b/src/App.js index aa85c7d..32fd86c 100644 --- a/src/App.js +++ b/src/App.js @@ -1,10 +1,16 @@ import React from 'react'; +import './App.scss' +import PlayingField from './Components/PlayingField/PlayingField' + const App = () => { return ( +

Hello

+ +
); }; diff --git a/src/App.scss b/src/App.scss new file mode 100644 index 0000000..105c5aa --- /dev/null +++ b/src/App.scss @@ -0,0 +1,6 @@ +.context{ + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} \ No newline at end of file diff --git a/src/Components/Cell/Cell.js b/src/Components/Cell/Cell.js new file mode 100644 index 0000000..6474fe7 --- /dev/null +++ b/src/Components/Cell/Cell.js @@ -0,0 +1,14 @@ +import React from 'react'; + +import './Cell.scss' + +const Cell = ({valueCell}) => { + + return ( +
+ {valueCell} +
+ ); +}; + +export default Cell; diff --git a/src/Components/Cell/Cell.scss b/src/Components/Cell/Cell.scss new file mode 100644 index 0000000..2372ab6 --- /dev/null +++ b/src/Components/Cell/Cell.scss @@ -0,0 +1,7 @@ +.cell{ + cursor: pointer; + border: 1px solid rebeccapurple; + margin: 1px; + width: 50px; + height: 50px; +} \ No newline at end of file diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js new file mode 100644 index 0000000..8886404 --- /dev/null +++ b/src/Components/PlayingField/PlayingField.js @@ -0,0 +1,54 @@ +import React, { useState } from "react"; +import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; + +import "./PlayingField.scss"; +import Cell from "../Cell/Cell"; +import createArr from '../../utils/createArr' + +let arr = createArr(3) + +const PlayingField = () => { + + const [cells, setCells] = useState(arr); + + + function handleOnDragEnd(result) { + if(!result.destination) return + const items = Array.from(cells); + const [reorderedItem] = items.splice(result.source.index, 1); + items.splice(result.destination.index, 0, reorderedItem); + setCells(items); + } + + return ( + + + {(provided) => ( +
+ {cells.map((e, i) => ( + + {(provided) => ( +
+ +
+ )} +
+ ))} + + {provided.placeholder} +
+ )} +
+
+ ); +}; + +export default PlayingField; diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss new file mode 100644 index 0000000..4e1459e --- /dev/null +++ b/src/Components/PlayingField/PlayingField.scss @@ -0,0 +1,14 @@ +.playingField { + border: 2px solid rgb(21, 255, 0); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background-color: rgb(177, 177, 189); +} +.cells{ + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} \ No newline at end of file diff --git a/src/config/config.json b/src/config/config.json new file mode 100644 index 0000000..63db0d3 --- /dev/null +++ b/src/config/config.json @@ -0,0 +1,12 @@ +{ + "field":{ + "width":"500px", + "higth":"500px" + + }, + + "field1":3, + "field1":4, + "field1":5 + +} \ No newline at end of file diff --git a/src/store/store.js b/src/store/store.js new file mode 100644 index 0000000..4a14b68 --- /dev/null +++ b/src/store/store.js @@ -0,0 +1,5 @@ +import { createStore } from 'redux'; + +const store = createStore(reducer); + +export default store; \ No newline at end of file diff --git a/src/utils/createArr.js b/src/utils/createArr.js new file mode 100644 index 0000000..25fde38 --- /dev/null +++ b/src/utils/createArr.js @@ -0,0 +1,9 @@ +const createArr= (num)=> { + const tempArr = []; + for (let i = 0; i < num * num; i++) { + tempArr.push({ id: `el${i}`, name: `cell${i}`,index:i }); + } + return tempArr; + } + + export default createArr; \ No newline at end of file From b8062c05b3134397370c73f476275d80e111b923 Mon Sep 17 00:00:00 2001 From: kli2m Date: Sun, 21 Feb 2021 20:40:39 +0300 Subject: [PATCH 03/16] feat:added api & main page --- .eslintrc.js | 1 + package-lock.json | 70 ++++++++++++++- package.json | 2 + src/App.js | 70 +++++++++++++-- src/App.scss | 6 +- src/Components/Cell/Cell.js | 6 +- src/Components/Cell/Cell.scss | 7 ++ src/Components/LevelDropdown/LevelDropdown.js | 28 ++++++ .../LevelDropdown/level-dropdown.css | 0 src/Components/PlayingField/PlayingField.js | 85 ++++++++++--------- src/Components/PlayingField/PlayingField.scss | 2 +- src/index.js | 1 + src/utils/createArr.js | 9 +- src/utils/getWordsApi.js | 17 ++++ webpack.config.js | 21 +++-- 15 files changed, 257 insertions(+), 68 deletions(-) create mode 100644 src/Components/LevelDropdown/LevelDropdown.js create mode 100644 src/Components/LevelDropdown/level-dropdown.css create mode 100644 src/utils/getWordsApi.js diff --git a/.eslintrc.js b/.eslintrc.js index 2b44e30..c01fa82 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,5 +20,6 @@ module.exports = { "react/prop-types": "off", "react/jsx-uses-react": "error", "react/jsx-uses-vars": "error", + "no-console": "off", }, }; diff --git a/package-lock.json b/package-lock.json index 955e5ae..179f40c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1138,6 +1138,21 @@ "fastq": "^1.6.0" } }, + "@react-dnd/asap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.0.tgz", + "integrity": "sha512-0XhqJSc6pPoNnf8DhdsPHtUhRzZALVzYMTzRwV4VI6DJNJ/5xxfL9OQUwb8IH5/2x7lSf7nAZrnzUD+16VyOVQ==" + }, + "@react-dnd/invariant": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz", + "integrity": "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==" + }, + "@react-dnd/shallowequal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", + "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" + }, "@types/anymatch": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", @@ -1180,6 +1195,15 @@ "@types/node": "*" } }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -1213,8 +1237,16 @@ "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "@types/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.2.tgz", + "integrity": "sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==", + "requires": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } }, "@types/source-list-map": { "version": "0.1.2", @@ -2923,6 +2955,11 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-1.3.12.tgz", "integrity": "sha1-/GKGlKLTiTiqrEmWdTIY/TEc254=" }, + "csstype": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", + "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==" + }, "date-fns": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.17.0.tgz", @@ -3154,6 +3191,16 @@ "path-type": "^4.0.0" } }, + "dnd-core": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-11.1.3.tgz", + "integrity": "sha512-QugF55dNW+h+vzxVJ/LSJeTeUw9MCJ2cllhmVThVPEtF16ooBkxj0WBE5RB+AceFxMFo1rO6bJKXtqKl+JNnyA==", + "requires": { + "@react-dnd/asap": "^4.0.0", + "@react-dnd/invariant": "^2.0.0", + "redux": "^4.0.4" + } + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -7138,6 +7185,25 @@ "use-memo-one": "^1.1.1" } }, + "react-dnd": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-11.1.3.tgz", + "integrity": "sha512-8rtzzT8iwHgdSC89VktwhqdKKtfXaAyC4wiqp0SywpHG12TTLvfOoL6xNEIUWXwIEWu+CFfDn4GZJyynCEuHIQ==", + "requires": { + "@react-dnd/shallowequal": "^2.0.0", + "@types/hoist-non-react-statics": "^3.3.1", + "dnd-core": "^11.1.3", + "hoist-non-react-statics": "^3.3.0" + } + }, + "react-dnd-html5-backend": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-11.1.3.tgz", + "integrity": "sha512-/1FjNlJbW/ivkUxlxQd7o3trA5DE33QiRZgxent3zKme8DwF4Nbw3OFVhTRFGaYhHFNL1rZt6Rdj1D78BjnNLw==", + "requires": { + "dnd-core": "^11.1.3" + } + }, "react-dom": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", diff --git a/package.json b/package.json index 7fb850f..22157ce 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,8 @@ "antd": "^4.12.3", "react": "^17.0.1", "react-beautiful-dnd": "^13.0.0", + "react-dnd": "^11.1.3", + "react-dnd-html5-backend": "^11.1.3", "react-dom": "^17.0.1", "react-redux": "^7.2.2", "react-router-dom": "^5.2.0", diff --git a/src/App.js b/src/App.js index 32fd86c..0997a36 100644 --- a/src/App.js +++ b/src/App.js @@ -1,15 +1,71 @@ -import React from 'react'; +import React, { useState } from "react"; +import { Tooltip, Switch, Button, Typography, Form } from "antd"; +import "./App.scss"; +import PlayingField from "./Components/PlayingField/PlayingField"; +import LevelDropdown from "./Components/LevelDropdown/LevelDropdown"; -import './App.scss' -import PlayingField from './Components/PlayingField/PlayingField' +const App = () => { + const [isStart, setIsStart] = useState(false); + const [isSound, setIsSound] = useState(true); + const [level, setLevel] = useState("0"); + const { Text, Title } = Typography; + const startGame = () => { + setIsStart(true); + }; -const App = () => { + const onChangeIsSound = () => { + setIsSound((prev) => !prev); + }; return ( -
-

Hello

- +
+
+
+ + + +
+
+ +
+ {isStart ? ( + + ) : ( +
+ + <Text strong>Генератор букв</Text> + + + <Text strong> + Тренировка улучшает восприятие английской речи на слух. + </Text> + +
+
+ + +
+ +
+ )} +
+
); }; diff --git a/src/App.scss b/src/App.scss index 105c5aa..b050738 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,6 +1,8 @@ -.context{ +.letterSolver__wrapper{ + height: 100vh; + width: 100%; display: flex; flex-direction: column; - justify-content: center; + justify-content: space-around ; align-items: center; } \ No newline at end of file diff --git a/src/Components/Cell/Cell.js b/src/Components/Cell/Cell.js index 6474fe7..fbcb816 100644 --- a/src/Components/Cell/Cell.js +++ b/src/Components/Cell/Cell.js @@ -2,10 +2,12 @@ import React from 'react'; import './Cell.scss' -const Cell = ({valueCell}) => { +const Cell = ({valueCell,provided}) => { return ( -
+
{valueCell}
); diff --git a/src/Components/Cell/Cell.scss b/src/Components/Cell/Cell.scss index 2372ab6..2cb7cb3 100644 --- a/src/Components/Cell/Cell.scss +++ b/src/Components/Cell/Cell.scss @@ -4,4 +4,11 @@ margin: 1px; width: 50px; height: 50px; + background-color: salmon; + box-shadow: 0px 0px 9px 5px rgba(143,72,72,0.75) inset; + -webkit-box-shadow: 0px 0px 9px 5px rgba(143,72,72,0.75) inset; + -moz-box-shadow: 0px 0px 9px 5px rgba(143,72,72,0.75) inset; + text-align: center; + justify-content: center; + align-items: center; } \ No newline at end of file diff --git a/src/Components/LevelDropdown/LevelDropdown.js b/src/Components/LevelDropdown/LevelDropdown.js new file mode 100644 index 0000000..55b111f --- /dev/null +++ b/src/Components/LevelDropdown/LevelDropdown.js @@ -0,0 +1,28 @@ +import React from 'react'; +import { Form, Select } from 'antd'; + +import './level-dropdown.css'; + +const LevelDropdown = ({ setLevel }) => { + const changeLevel = (value) => { + setLevel(value); + }; + return ( + + + + ); +}; + +export default LevelDropdown; diff --git a/src/Components/LevelDropdown/level-dropdown.css b/src/Components/LevelDropdown/level-dropdown.css new file mode 100644 index 0000000..e69de29 diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index 8886404..a011dab 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,53 +1,58 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import "./PlayingField.scss"; import Cell from "../Cell/Cell"; -import createArr from '../../utils/createArr' - -let arr = createArr(3) - -const PlayingField = () => { - - const [cells, setCells] = useState(arr); - - +import createArr from "../../utils/createArr"; +import getWordsApi from "../../utils/getWordsApi"; + +const PlayingField = ({ isSound, selectedLevel }) => { + const [level, setLevel] = useState({ level: selectedLevel, page: 0 }); + const [words, setWords] = useState([]); + const [cells, setCells] = useState(createArr(3)); + + useEffect(() => { + async function loadWords(currentLevel, page) { + const res = await getWordsApi(currentLevel, page); + res.sort(() => Math.random() - 0.5); + setWords(res); + } + loadWords(level.level, level.page); + }, [level]); + + console.log(words); function handleOnDragEnd(result) { - if(!result.destination) return - const items = Array.from(cells); + if (!result.destination) return; + const items = Array.from(words); const [reorderedItem] = items.splice(result.source.index, 1); items.splice(result.destination.index, 0, reorderedItem); - setCells(items); + setWords(items); } return ( - - - {(provided) => ( -
- {cells.map((e, i) => ( - - {(provided) => ( -
- -
- )} -
- ))} - - {provided.placeholder} -
- )} -
-
+ <> + + + {(provided) => ( +
+ {words.map((e, i) => ( + + {(provided) => ( + + )} + + ))} + + {provided.placeholder} +
+ )} +
+
+ ); }; diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index 4e1459e..d2cdffa 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -1,7 +1,7 @@ .playingField { border: 2px solid rgb(21, 255, 0); display: flex; - flex-direction: column; + flex-direction: row; justify-content: center; align-items: center; background-color: rgb(177, 177, 189); diff --git a/src/index.js b/src/index.js index 27d1650..c05ad6b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; +import 'antd/dist/antd.css'; ReactDOM.render( diff --git a/src/utils/createArr.js b/src/utils/createArr.js index 25fde38..4f9662d 100644 --- a/src/utils/createArr.js +++ b/src/utils/createArr.js @@ -1,8 +1,11 @@ const createArr= (num)=> { + const tempArr = []; - for (let i = 0; i < num * num; i++) { - tempArr.push({ id: `el${i}`, name: `cell${i}`,index:i }); - } + + for (let i = 1; i <= num*num ; i++) { + tempArr.push({ id: `el${i}`, name: `cell${i}`,index:i }); + } + return tempArr; } diff --git a/src/utils/getWordsApi.js b/src/utils/getWordsApi.js new file mode 100644 index 0000000..2e355bc --- /dev/null +++ b/src/utils/getWordsApi.js @@ -0,0 +1,17 @@ +const getWordsSpeakit = async (group, page) => { + try { + const url = `https://afternoon-falls-25894.herokuapp.com/words?group=${group}&page=${page}&wordsPerExampleSentenceLTE=20`; + const response = await fetch(url); + + if (!response.ok) { + throw new Error(`HTTPS ${response.status}: ${await response.text()}`); + } + + const data = await response.json(); + return data; + } catch (error) { + throw new Error(`Error in herokuapp - ${error.message}`); + } +}; + +export default getWordsSpeakit; diff --git a/webpack.config.js b/webpack.config.js index 5fc5b95..0429229 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,7 +11,6 @@ module.exports = (env, options) => { const config = { mode: isProduction ? "production" : "development", devtool: isProduction ? "none" : "source-map", - // entry: ['./src/index.js', './src/sass/style.scss'], entry: ["./src/index.js"], output: { path: path.join(__dirname, "./dist"), @@ -28,15 +27,15 @@ module.exports = (env, options) => { }, module: { rules: [ - { - enforce: "pre", - test: /\.js$/, - exclude: /node_modules/, - loader: "eslint-loader", - options: { - fix: true, - }, - }, + // { + // enforce: "pre", + // test: /\.js$/, + // exclude: /node_modules/, + // loader: "eslint-loader", + // options: { + // fix: true, + // }, + // }, { test: /\.m?js$/, exclude: /(node_modules|bower_components)/, @@ -45,7 +44,7 @@ module.exports = (env, options) => { }, }, { - test: /\.s[ac]ss$/i, + test: /\.(sa|sc|c)ss$/, use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"], }, { From 57aa3e25c24321c795fa6133f4413f1981375180 Mon Sep 17 00:00:00 2001 From: kli2m Date: Mon, 22 Feb 2021 21:43:44 +0300 Subject: [PATCH 04/16] feat: added image words --- src/Components/Cell/Cell.scss | 14 +- src/Components/PlayingField/PlayingField.js | 127 ++++++++++++------ src/Components/PlayingField/PlayingField.scss | 13 +- src/Components/Word/Word.js | 55 ++++++++ src/Components/Word/Word.scss | 0 src/assets/img/loading.gif | Bin 0 -> 67590 bytes src/utils/shuffle.js | 7 + 7 files changed, 169 insertions(+), 47 deletions(-) create mode 100644 src/Components/Word/Word.js create mode 100644 src/Components/Word/Word.scss create mode 100644 src/assets/img/loading.gif create mode 100644 src/utils/shuffle.js diff --git a/src/Components/Cell/Cell.scss b/src/Components/Cell/Cell.scss index 2cb7cb3..1554dc4 100644 --- a/src/Components/Cell/Cell.scss +++ b/src/Components/Cell/Cell.scss @@ -1,14 +1,16 @@ -.cell{ +.cell { cursor: pointer; border: 1px solid rebeccapurple; margin: 1px; width: 50px; height: 50px; - background-color: salmon; - box-shadow: 0px 0px 9px 5px rgba(143,72,72,0.75) inset; - -webkit-box-shadow: 0px 0px 9px 5px rgba(143,72,72,0.75) inset; - -moz-box-shadow: 0px 0px 9px 5px rgba(143,72,72,0.75) inset; + background-color: rgb(58, 218, 106); + box-shadow: 0px 0px 9px 5px rgba(143, 72, 72, 0.75) inset; + -webkit-box-shadow: 0px 0px 9px 5px rgba(143, 72, 72, 0.75) inset; + -moz-box-shadow: 0px 0px 9px 5px rgba(143, 72, 72, 0.75) inset; text-align: center; justify-content: center; align-items: center; -} \ No newline at end of file + border-radius: 5px; + display: flex; +} diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index a011dab..ff9cd82 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,57 +1,104 @@ import React, { useState, useEffect } from "react"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; +import { Tooltip, Switch, Button, Typography, Form, Image } from "antd"; import "./PlayingField.scss"; -import Cell from "../Cell/Cell"; -import createArr from "../../utils/createArr"; import getWordsApi from "../../utils/getWordsApi"; +import shuffle from "../../utils/shuffle"; +import Word from "../Word/Word"; +import loading from "../../assets/img/loading.gif" +const RS_LANG_DATA = + "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; + const PlayingField = ({ isSound, selectedLevel }) => { const [level, setLevel] = useState({ level: selectedLevel, page: 0 }); - const [words, setWords] = useState([]); - const [cells, setCells] = useState(createArr(3)); + const [isLoading, setIsLoading] = useState(true); + const [words, setWords] = useState(null); + const [currentWord, setCurrentWord] = useState(null); + const [count, setCount] = useState(0); + + const { Text, Title } = Typography; + + async function loadWords(currentLevel, page) { + const res = await getWordsApi(currentLevel, page); + + let uppgradeRes = res.map((word) => { + word.letter = shuffle(word.word.split("")); + word.image = RS_LANG_DATA + word.image; + return word; + }); + console.log("level"); + if(words===null) setWords(shuffle(uppgradeRes)); + else{ setWords(words.concat(uppgradeRes)) + setIsLoading(false) + } + + } useEffect(() => { - async function loadWords(currentLevel, page) { - const res = await getWordsApi(currentLevel, page); - res.sort(() => Math.random() - 0.5); - setWords(res); - } loadWords(level.level, level.page); - }, [level]); - - console.log(words); - function handleOnDragEnd(result) { - if (!result.destination) return; - const items = Array.from(words); - const [reorderedItem] = items.splice(result.source.index, 1); - items.splice(result.destination.index, 0, reorderedItem); - setWords(items); - } + }, []); + + useEffect(() => { + if (currentWord !== null) setIsLoading(false); + }, [currentWord]); + + useEffect(() => { + if (words !== null) setCurrentWord(words[count]); + }, [words]); + + useEffect(() => { + if (words !== null) setCurrentWord(words[count]); + }, [count]); + +const nullify=()=>{ + setCount(0); + setCurrentWord(null) + setWords(null); + loadWords(level.level, level.page++); +} + + const onHandleClickBtnNext = () => { + if (count < words.length-1) setCount(count + 1); + else { + + setIsLoading(true) + loadWords(level.level, level.page++); + + // nullify(); + } + }; return ( <> - - - {(provided) => ( -
- {words.map((e, i) => ( - - {(provided) => ( - - )} - - ))} - - {provided.placeholder} -
- )} -
-
+ {!isLoading ? ( +
+ Loading + + + + +
+ ) : ( + + <Text strong><Image src={loading}></Image> </Text> + + )} ); }; diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index d2cdffa..5bda2e0 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -5,10 +5,21 @@ justify-content: center; align-items: center; background-color: rgb(177, 177, 189); + width: max-content; + margin: 20px 0; } .cells{ display: flex; flex-direction: row; justify-content: center; align-items: center; -} \ No newline at end of file +} +.context{ + display: flex; +flex-direction: column; +justify-content: center; +align-items: center; +margin: 10px; +padding: 10px; +} + diff --git a/src/Components/Word/Word.js b/src/Components/Word/Word.js new file mode 100644 index 0000000..e608ceb --- /dev/null +++ b/src/Components/Word/Word.js @@ -0,0 +1,55 @@ +import React, { useState, useEffect } from "react"; +import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; +import { Tooltip, Switch, Button, Typography, Form ,Image} from "antd"; +import Cell from "../Cell/Cell"; + +const Word = ({wordSplit})=>{ + + +const[letters,setLetters]=useState(wordSplit) + +useEffect(()=>{ + setLetters(wordSplit) +}) + +console.log(letters) + + function handleOnDragEnd(result) { + if (!result.destination) return; + const items = Array.from(letters); + const [reorderedItem] = items.splice(result.source.index, 1); + items.splice(result.destination.index, 0, reorderedItem); + setLetters(items); + } + + +return ( + + {(provided) => ( +
+ {letters.map((e, i) => { + + let id = `el${i}` + + return ( + {(provided) => ( + + )} + + + ) + })} + + {provided.placeholder} +
+ )} +
+
+) +} + +export default Word; \ No newline at end of file diff --git a/src/Components/Word/Word.scss b/src/Components/Word/Word.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/img/loading.gif b/src/assets/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..74b53f3e877cf5e3c6e12915d7a676beda5632a1 GIT binary patch literal 67590 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 literal 0 HcmV?d00001 diff --git a/src/utils/shuffle.js b/src/utils/shuffle.js new file mode 100644 index 0000000..b4f3b6c --- /dev/null +++ b/src/utils/shuffle.js @@ -0,0 +1,7 @@ +export default function shuffle(array) { + for (let i = array.length-1; i > 0; i-=1) { + const j=Math.floor(Math.random()*(i+1)); + [array[i],array[j]]=[array[j],array[i]]; + } + return array; +} \ No newline at end of file From 74f0e7bd2d00e10b883c745026af7e3b75447604 Mon Sep 17 00:00:00 2001 From: kli2m Date: Tue, 23 Feb 2021 19:10:08 +0300 Subject: [PATCH 05/16] feat: added Progress bar --- src/App.js | 4 +- src/App.scss | 20 +++ src/Components/Cell/Cell.scss | 1 + src/Components/PlayingField/PlayingField.js | 140 ++++++++++++------ src/Components/PlayingField/PlayingField.scss | 47 +++++- src/Components/ProgressBox/ProgressBox.js | 36 +++++ src/Components/ProgressBox/ProgressBox.scss | 6 + src/Components/Word/Word.js | 92 +++++++----- 8 files changed, 258 insertions(+), 88 deletions(-) create mode 100644 src/Components/ProgressBox/ProgressBox.js create mode 100644 src/Components/ProgressBox/ProgressBox.scss diff --git a/src/App.js b/src/App.js index 0997a36..fd6aeed 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { Tooltip, Switch, Button, Typography, Form } from "antd"; +import { Tooltip, Switch, Button, Typography, Form, Progress } from "antd"; import "./App.scss"; import PlayingField from "./Components/PlayingField/PlayingField"; import LevelDropdown from "./Components/LevelDropdown/LevelDropdown"; @@ -39,7 +39,9 @@ const App = () => {
{isStart ? ( + + ) : (
diff --git a/src/App.scss b/src/App.scss index b050738..33a904f 100644 --- a/src/App.scss +++ b/src/App.scss @@ -3,6 +3,26 @@ width: 100%; display: flex; flex-direction: column; + justify-content: space-between ; + align-items: center; + background-color: #d7f4cf; +} + + +.letterSolver__header{ + width: 1020px; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 30px 50px 10px 100px; +} + +.letterSolver__main{ + + width: 1020px; + display: flex; + flex-direction: column; justify-content: space-around ; align-items: center; } \ No newline at end of file diff --git a/src/Components/Cell/Cell.scss b/src/Components/Cell/Cell.scss index 1554dc4..8fe12d4 100644 --- a/src/Components/Cell/Cell.scss +++ b/src/Components/Cell/Cell.scss @@ -13,4 +13,5 @@ align-items: center; border-radius: 5px; display: flex; + user-select: none; } diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index ff9cd82..e0180d8 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,47 +1,83 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useRef } from "react"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; -import { Tooltip, Switch, Button, Typography, Form, Image } from "antd"; +import { Tooltip, Switch, Button, Typography, Form, Image, Progress } from "antd"; import "./PlayingField.scss"; import getWordsApi from "../../utils/getWordsApi"; import shuffle from "../../utils/shuffle"; import Word from "../Word/Word"; +import ProgressBox from '../ProgressBox/ProgressBox' import loading from "../../assets/img/loading.gif" const RS_LANG_DATA = "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; - + const PlayingField = ({ isSound, selectedLevel }) => { + + + const [level, setLevel] = useState({ level: selectedLevel, page: 0 }); const [isLoading, setIsLoading] = useState(true); + const [isCheck, setIsCheck] = useState(false); const [words, setWords] = useState(null); const [currentWord, setCurrentWord] = useState(null); const [count, setCount] = useState(0); + const [percent, setPercent] = useState(100); const { Text, Title } = Typography; async function loadWords(currentLevel, page) { const res = await getWordsApi(currentLevel, page); - let uppgradeRes = res.map((word) => { + let uppgradeRes = await res.map((word) => { word.letter = shuffle(word.word.split("")); word.image = RS_LANG_DATA + word.image; return word; }); - console.log("level"); - if(words===null) setWords(shuffle(uppgradeRes)); - else{ setWords(words.concat(uppgradeRes)) - setIsLoading(false) - } - + + if (words === null) setWords(shuffle(uppgradeRes)); + else { + setWords(words.concat(uppgradeRes)) + setCount(count + 1) + setIsLoading(false) + } + } useEffect(() => { loadWords(level.level, level.page); - }, []); + }, [level]); + + + + const onCheck = (letters) => { + setIsCheck(true); + if (letters.join("") === currentWord.word) console.log(true) + else { + + const contexImageEl = document.querySelector(".context_image"); + contexImageEl.classList.add("noActive") + + const contexWordEl = document.querySelector(".playingField "); + contexWordEl.classList.add("noActive") + + } + + + setTimeout(()=>{ + const contexImageEl = document.querySelector(".context_image"); + contexImageEl.classList.remove("noActive") + + const contexWordEl = document.querySelector(".playingField "); + contexWordEl.classList.remove("noActive") + },500) + + } + useEffect(() => { - if (currentWord !== null) setIsLoading(false); + if (currentWord !== null) setIsLoading(false); + setPercent(100) }, [currentWord]); useEffect(() => { @@ -50,55 +86,63 @@ const PlayingField = ({ isSound, selectedLevel }) => { useEffect(() => { if (words !== null) setCurrentWord(words[count]); - }, [count]); -const nullify=()=>{ - setCount(0); - setCurrentWord(null) - setWords(null); - loadWords(level.level, level.page++); -} + }, [count]); const onHandleClickBtnNext = () => { - if (count < words.length-1) setCount(count + 1); + if (count < words.length - 1) setCount(count + 1); else { - - setIsLoading(true) - loadWords(level.level, level.page++); - - // nullify(); + setIsLoading(true); + setLevel({ level: level.level, page: level.page + 1 }) } + + setIsCheck(false) }; + + return ( <> {!isLoading ? ( <div className="context"> - <Image - className="context_image context_child" - alt="Loading" - fallback={`Error loading file ${currentWord.image}`} - width="max-content" - src={currentWord.image} - ></Image> - - <Word - className="context_word context_child" - wordSplit={currentWord.letter} - /> - - <Button - className="context_btn_next context_child" - onClick={onHandleClickBtnNext} - > - Next - </Button> + <ProgressBox percent={percent} setPercent={setPercent} /> + <div className="context-playing_field"> + <Image + className="context_image context_child" + alt="Loading" + fallback={`Error loading file ${currentWord.image}`} + width="300px" + + src={currentWord.image} + ></Image> + <div className="context_answer"> + + </div> + <Word + className="context_word context_child" + wordSplit={currentWord.letter} + onCheck={onCheck} + isCheck={isCheck} + /> + {isCheck ? + + <Button + className="context_btn_next context_child" + onClick={onHandleClickBtnNext} + > + Next + </Button> + : + <> + </> + } + </div> </div> ) : ( - <Title level={4} className="text_loading"> - <Text strong><Image src={loading}></Image> </Text> - - )} + + <Text strong><img src={loading} /></Text> + + )} ); }; diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index 5bda2e0..21a5d7d 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -1,13 +1,15 @@ .playingField { - border: 2px solid rgb(21, 255, 0); + border: 3px solid #99b097; display: flex; flex-direction: row; justify-content: center; align-items: center; - background-color: rgb(177, 177, 189); + background-color: #737ae1; width: max-content; margin: 20px 0; + border-radius: 5px; } + .cells{ display: flex; flex-direction: row; @@ -16,10 +18,51 @@ } .context{ display: flex; +flex-direction: row; +justify-content:center; +text-align: center; +width: 100%; +} +.context_image{ + border-radius: 10px; + +} +.context-progress_bar{ + width: 100px; + height: 100px; + margin-top: 100px; + +} +.context-playing_field{ + display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 10px; padding: 10px; +width: 600px; } +.context_answer{ +height: 100px; +} + +.noActive{ + pointer-events: none; + box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75) ; + -webkit-box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75) ; + -moz-box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75) ; + + border: 2px solid red; + animation: 0.01s tremor ease-out ; +} + +@keyframes tremor { + 0% , 25% { + left: -0.5px; + transform: translateX(-4%); + } + 50%, 100% { left: 0.5px; + transform: translateX(4%); +} +} diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js new file mode 100644 index 0000000..86f00a9 --- /dev/null +++ b/src/Components/ProgressBox/ProgressBox.js @@ -0,0 +1,36 @@ +import React, { useState, useEffect } from "react"; +import { Progress, Tooltip } from "antd" +import './ProgressBox.scss' + + +const ProgressBox = ({percent, setPercent}) => { + + + useEffect(() => { + if (percent > 0) { + let timer = setInterval(() => progress(), 1000) + return () => clearInterval(timer); + } + }) + + const progress = () => { + setPercent(percent - 10) + } + + return ( + +
+ + (percent>1)?`${percent / 10} seconds`:`you lose!`} strokeColor="#1890ff" trailColor="red" strokeWidth="9" width="60" gapPosition="top" > + +
+ + ) + +} + +export default ProgressBox; \ No newline at end of file diff --git a/src/Components/ProgressBox/ProgressBox.scss b/src/Components/ProgressBox/ProgressBox.scss new file mode 100644 index 0000000..4b9520e --- /dev/null +++ b/src/Components/ProgressBox/ProgressBox.scss @@ -0,0 +1,6 @@ +.context-progress_bar-cirle{ + cursor: not-allowed; + width: 150px; + height: 150px; + user-select: none; +} \ No newline at end of file diff --git a/src/Components/Word/Word.js b/src/Components/Word/Word.js index e608ceb..70c6b31 100644 --- a/src/Components/Word/Word.js +++ b/src/Components/Word/Word.js @@ -1,55 +1,73 @@ import React, { useState, useEffect } from "react"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; -import { Tooltip, Switch, Button, Typography, Form ,Image} from "antd"; +import { Tooltip, Switch, Button, Typography, Form, Image } from "antd"; import Cell from "../Cell/Cell"; -const Word = ({wordSplit})=>{ +const Word = ({ wordSplit, onCheck, isCheck }) => { -const[letters,setLetters]=useState(wordSplit) + const [letters, setLetters] = useState(wordSplit) -useEffect(()=>{ - setLetters(wordSplit) -}) + useEffect(() => { + setLetters(wordSplit) + }, [wordSplit]) -console.log(letters) + function handleOnDragEnd(result) { + if (!result.destination) return; + const items = Array.from(letters); + const [reorderedItem] = items.splice(result.source.index, 1); + items.splice(result.destination.index, 0, reorderedItem); + setLetters(items); + } - function handleOnDragEnd(result) { - if (!result.destination) return; - const items = Array.from(letters); - const [reorderedItem] = items.splice(result.source.index, 1); - items.splice(result.destination.index, 0, reorderedItem); - setLetters(items); - } + return ( + <> + + + {(provided) => ( +
+ {letters.map((e, i) => { -return ( - - {(provided) => ( -
- {letters.map((e, i) => { + let id = `el${i}` + + return ( + {(provided) => ( + + )} + + + ) + })} - let id = `el${i}` + {provided.placeholder} +
+ )} +
+
- return ( - {(provided) => ( - - )} - + {isCheck ? - ) - })} + <> + + : + + + + } - {provided.placeholder} -
- )} -
-
-) + + ) } export default Word; \ No newline at end of file From 6cccfababc14f1171666bdd6e23f07a643efcc76 Mon Sep 17 00:00:00 2001 From: kli2m Date: Wed, 24 Feb 2021 20:04:30 +0300 Subject: [PATCH 06/16] feat: added Form Welcom --- src/App.js | 46 ++------ src/App.scss | 18 ++- src/Components/AnswerBox/AnswerBox.js | 22 ++++ src/Components/AnswerBox/AnswerBox.scss | 3 + src/Components/PlayingField/PlayingField.js | 103 +++++++++--------- src/Components/PlayingField/PlayingField.scss | 10 +- src/Components/ProgressBox/ProgressBox.js | 17 ++- src/Components/WelcomeForm/WelcomForm.js | 90 +++++++++++++++ src/Components/WelcomeForm/WelcomForm.scss | 0 src/Components/Word/Word.js | 19 ++-- src/config/user.js | 28 +++++ src/config/userStatistics.js | 16 +++ src/utils/getWordsApi.js | 3 +- 13 files changed, 261 insertions(+), 114 deletions(-) create mode 100644 src/Components/AnswerBox/AnswerBox.js create mode 100644 src/Components/AnswerBox/AnswerBox.scss create mode 100644 src/Components/WelcomeForm/WelcomForm.js create mode 100644 src/Components/WelcomeForm/WelcomForm.scss create mode 100644 src/config/user.js create mode 100644 src/config/userStatistics.js diff --git a/src/App.js b/src/App.js index fd6aeed..f78e821 100644 --- a/src/App.js +++ b/src/App.js @@ -1,49 +1,25 @@ import React, { useState } from "react"; import { Tooltip, Switch, Button, Typography, Form, Progress } from "antd"; import "./App.scss"; -import PlayingField from "./Components/PlayingField/PlayingField"; -import LevelDropdown from "./Components/LevelDropdown/LevelDropdown"; +import WelcomForm from './Components/WelcomeForm/WelcomForm' const App = () => { - const [isStart, setIsStart] = useState(false); - const [isSound, setIsSound] = useState(true); - const [level, setLevel] = useState("0"); + const [isStart, setIsStart] = useState(false); const { Text, Title } = Typography; const startGame = () => { setIsStart(true); }; - const onChangeIsSound = () => { - setIsSound((prev) => !prev); - }; return ( -
-
-
- - - -
-
+
-
+ {isStart ? ( - - - + ) : ( -
+
<Text strong>Генератор букв</Text> @@ -51,12 +27,7 @@ const App = () => { Тренировка улучшает восприятие английской речи на слух. - -
-
- - -
+
)} -
-
+
); }; diff --git a/src/App.scss b/src/App.scss index 33a904f..7da06cc 100644 --- a/src/App.scss +++ b/src/App.scss @@ -3,14 +3,14 @@ width: 100%; display: flex; flex-direction: column; - justify-content: space-between ; + justify-content: center ; align-items: center; background-color: #d7f4cf; } .letterSolver__header{ - width: 1020px; + width: inherit; display: flex; flex-direction: row; justify-content: space-between; @@ -20,9 +20,21 @@ .letterSolver__main{ - width: 1020px; + width: inherit; display: flex; flex-direction: column; justify-content: space-around ; align-items: center; +} +.letterSolver__start_game{ + border: 4px solid blueviolet; + border-radius: 5px; + padding: 20px; +} + +.letterSolver__wrapper-start_game{ + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; } \ No newline at end of file diff --git a/src/Components/AnswerBox/AnswerBox.js b/src/Components/AnswerBox/AnswerBox.js new file mode 100644 index 0000000..a7ca5d8 --- /dev/null +++ b/src/Components/AnswerBox/AnswerBox.js @@ -0,0 +1,22 @@ +import React, { useState, useEffect, useRef } from "react"; +import { Tooltip, Switch, Button, Typography, Form, Image, Progress } from "antd"; +import './AnswerBox.scss' + + +const AnswerBox=({currentWord,isCheck})=>{ + const { Text, Title } = Typography; + return ( +
+ {isCheck? + + <Text type="secondary" > <div className="context_answer-translate">{currentWord.wordTranslate}</div> </Text> + <Text type="warning"> <div className="context_answer-transcription">{currentWord.transcription}</div> </Text> + + : + <> + } +
+ ) +} + +export default AnswerBox \ No newline at end of file diff --git a/src/Components/AnswerBox/AnswerBox.scss b/src/Components/AnswerBox/AnswerBox.scss new file mode 100644 index 0000000..3ee2f40 --- /dev/null +++ b/src/Components/AnswerBox/AnswerBox.scss @@ -0,0 +1,3 @@ +.context_answer{ + height: 50px; +} \ No newline at end of file diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index e0180d8..4ff6dee 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,5 +1,4 @@ import React, { useState, useEffect, useRef } from "react"; -import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import { Tooltip, Switch, Button, Typography, Form, Image, Progress } from "antd"; import "./PlayingField.scss"; @@ -7,41 +6,45 @@ import getWordsApi from "../../utils/getWordsApi"; import shuffle from "../../utils/shuffle"; import Word from "../Word/Word"; import ProgressBox from '../ProgressBox/ProgressBox' +import AnswerBox from '../AnswerBox/AnswerBox' import loading from "../../assets/img/loading.gif" const RS_LANG_DATA = "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; -const PlayingField = ({ isSound, selectedLevel }) => { +const PlayingField = ({ isSound, user }) => { - + const getLocalSt = localStorage.getItem("statistics")?localStorage.setItem("statistics"):null - const [level, setLevel] = useState({ level: selectedLevel, page: 0 }); + const [level, setLevel] = useState({ level: user.wordsLevel, page: 0 }); const [isLoading, setIsLoading] = useState(true); const [isCheck, setIsCheck] = useState(false); + const [isAnswer, setIsAnswer] = useState(null); const [words, setWords] = useState(null); const [currentWord, setCurrentWord] = useState(null); const [count, setCount] = useState(0); const [percent, setPercent] = useState(100); + const [statistics,setStatistics]=useState(getLocalSt) + + const imageRef=useRef(null) + const wordRef=useRef(null) const { Text, Title } = Typography; async function loadWords(currentLevel, page) { const res = await getWordsApi(currentLevel, page); - - let uppgradeRes = await res.map((word) => { + let upgradeRes = await res.map((word) => { word.letter = shuffle(word.word.split("")); word.image = RS_LANG_DATA + word.image; return word; }); - if (words === null) setWords(shuffle(uppgradeRes)); + if (words === null) setWords(shuffle(upgradeRes)); else { - setWords(words.concat(uppgradeRes)) + setWords(words.concat(upgradeRes)) setCount(count + 1) setIsLoading(false) } - } useEffect(() => { @@ -49,32 +52,36 @@ const PlayingField = ({ isSound, selectedLevel }) => { }, [level]); +const addStatisticsUser = (user)=>{ +let userStat +for (const key in statistics) { +if(key[name]===user.name) userStat= Object.create(key[name]) +} - const onCheck = (letters) => { - setIsCheck(true); - if (letters.join("") === currentWord.word) console.log(true) - else { +if(!userStat) userStat={name:user,statistics:{}} - const contexImageEl = document.querySelector(".context_image"); - contexImageEl.classList.add("noActive") - - const contexWordEl = document.querySelector(".playingField "); - contexWordEl.classList.add("noActive") +} - } + // useEffect(() => { + // if(isAnswer) { - setTimeout(()=>{ - const contexImageEl = document.querySelector(".context_image"); - contexImageEl.classList.remove("noActive") - - const contexWordEl = document.querySelector(".playingField "); - contexWordEl.classList.remove("noActive") - },500) + // setStatistics(statistics) + // } + // }, [isAnswer]); + + const onCheck = (letters) => { + setIsCheck(true); + if (letters.join("") === currentWord.word) { + setIsAnswer(true) + }else { + setIsAnswer(false) + imageRef.current.classList.add("noActive") + wordRef.current.classList.add("noActive") + } } - useEffect(() => { if (currentWord !== null) setIsLoading(false); setPercent(100) @@ -86,7 +93,9 @@ const PlayingField = ({ isSound, selectedLevel }) => { useEffect(() => { if (words !== null) setCurrentWord(words[count]); - + setIsAnswer(false) + imageRef.current? imageRef.current.classList.remove("noActive"):null + wordRef.current? wordRef.current.classList.remove("noActive"):null }, [count]); const onHandleClickBtnNext = () => { @@ -105,43 +114,37 @@ const PlayingField = ({ isSound, selectedLevel }) => { <> {!isLoading ? (
- +
+
Loading -
-
+ - {isCheck ? - - - : - <> - - } -
+ isCheck={isCheck} + onHandleClickBtnNext={onHandleClickBtnNext} + wordRef={wordRef} + /> +
) : ( +
<Text strong><img src={loading} /></Text> +
)} ); diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index 21a5d7d..f194996 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -6,7 +6,6 @@ align-items: center; background-color: #737ae1; width: max-content; - margin: 20px 0; border-radius: 5px; } @@ -36,15 +35,16 @@ width: 100%; .context-playing_field{ display: flex; flex-direction: column; -justify-content: center; +justify-content: space-between; align-items: center; margin: 10px; padding: 10px; -width: 600px; +width: 550px; +height: 500px; } -.context_answer{ -height: 100px; +.context_btn_next .context_btn_check { + margin: 20px 0; } .noActive{ diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js index 86f00a9..0be4dfe 100644 --- a/src/Components/ProgressBox/ProgressBox.js +++ b/src/Components/ProgressBox/ProgressBox.js @@ -3,8 +3,8 @@ import { Progress, Tooltip } from "antd" import './ProgressBox.scss' -const ProgressBox = ({percent, setPercent}) => { - +const ProgressBox = ({ percent, setPercent,difficultLevel }) => { + useEffect(() => { if (percent > 0) { @@ -14,19 +14,16 @@ const ProgressBox = ({percent, setPercent}) => { }) const progress = () => { - setPercent(percent - 10) + + setPercent(percent-(100/difficultLevel)) } return (
- - (percent>1)?`${percent / 10} seconds`:`you lose!`} strokeColor="#1890ff" trailColor="red" strokeWidth="9" width="60" gapPosition="top" > - + + (percent > 1) ? `${Math.floor( percent/100*difficultLevel)} seconds` : `you lose!`} strokeColor="#1890ff" trailColor="red" strokeWidth="9" width="60" gapPosition="top" > +
) diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js new file mode 100644 index 0000000..90d3d6c --- /dev/null +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -0,0 +1,90 @@ +import React, { useState } from "react"; +import { Tooltip, Switch, Button, Typography, Form, Select, Input } from "antd"; +import "./WelcomForm.scss"; + +import PlayingField from "../PlayingField/PlayingField"; + +const WelcomForm = () => { + const [user, setUser] = useState(null); + const [isSound, setIsSound] = useState(true); + + const { Text, Title } = Typography; + + const startGame = (values) => { + if (Object.values(values.user).every(e => e !== undefined)) setUser(values.user); + }; + + const onChangeIsSound = () => { + setIsSound((prev) => !prev); + }; + + + return ( + <> + +
+
+ + + +
+
+ +
+ {user ? ( + + + + ) : ( +
+ + <Text strong>Установите начальные настройки</Text> + +
+ + + + + + + + + + +
+ +
+ )} +
+
+ + ); + +} +export default WelcomForm \ No newline at end of file diff --git a/src/Components/WelcomeForm/WelcomForm.scss b/src/Components/WelcomeForm/WelcomForm.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/Components/Word/Word.js b/src/Components/Word/Word.js index 70c6b31..292daa9 100644 --- a/src/Components/Word/Word.js +++ b/src/Components/Word/Word.js @@ -3,7 +3,7 @@ import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import { Tooltip, Switch, Button, Typography, Form, Image } from "antd"; import Cell from "../Cell/Cell"; -const Word = ({ wordSplit, onCheck, isCheck }) => { +const Word = ({ wordSplit, onCheck, isCheck, onHandleClickBtnNext,wordRef }) => { const [letters, setLetters] = useState(wordSplit) @@ -23,11 +23,12 @@ const Word = ({ wordSplit, onCheck, isCheck }) => { return ( <> +
{(provided) => ( -
{ return ( {(provided) => ( - + )} @@ -50,11 +51,15 @@ const Word = ({ wordSplit, onCheck, isCheck }) => { )} - +
{isCheck ? - <> - + :
)} - +
); }; diff --git a/src/App.scss b/src/App.scss index 7da06cc..21d3b56 100644 --- a/src/App.scss +++ b/src/App.scss @@ -35,6 +35,7 @@ .letterSolver__wrapper-start_game{ display: flex; flex-direction: column; - justify-content: center; + justify-content: space-between; align-items: center; + height: 300px; } \ No newline at end of file diff --git a/src/Components/AnswerBox/AnswerBox.scss b/src/Components/AnswerBox/AnswerBox.scss index 3ee2f40..1e4c393 100644 --- a/src/Components/AnswerBox/AnswerBox.scss +++ b/src/Components/AnswerBox/AnswerBox.scss @@ -1,3 +1,4 @@ .context_answer{ height: 50px; + user-select: none; } \ No newline at end of file diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index 4ff6dee..3db05f9 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,5 +1,5 @@ import React, { useState, useEffect, useRef } from "react"; -import { Tooltip, Switch, Button, Typography, Form, Image, Progress } from "antd"; +import { Tooltip, Switch, Button, Typography, Form, Image, Progress,Spin } from "antd"; import "./PlayingField.scss"; import getWordsApi from "../../utils/getWordsApi"; @@ -7,14 +7,17 @@ import shuffle from "../../utils/shuffle"; import Word from "../Word/Word"; import ProgressBox from '../ProgressBox/ProgressBox' import AnswerBox from '../AnswerBox/AnswerBox' -import loading from "../../assets/img/loading.gif" +import StepsField from '../StepsField/StepsField' const RS_LANG_DATA = "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; +import soundRight from '../../assets/audio/right_answer.mp3'; +import soundWrong from '../../assets/audio//wrong-answer.mp3'; +import playAudio from '../../utils/playAudio'; const PlayingField = ({ isSound, user }) => { - const getLocalSt = localStorage.getItem("statistics")?localStorage.setItem("statistics"):null + const getLocalSt = localStorage.getItem("statistics") ? localStorage.setItem("statistics") : null const [level, setLevel] = useState({ level: user.wordsLevel, page: 0 }); const [isLoading, setIsLoading] = useState(true); @@ -24,10 +27,10 @@ const PlayingField = ({ isSound, user }) => { const [currentWord, setCurrentWord] = useState(null); const [count, setCount] = useState(0); const [percent, setPercent] = useState(100); - const [statistics,setStatistics]=useState(getLocalSt) + const [statistics, setStatistics] = useState(getLocalSt) - const imageRef=useRef(null) - const wordRef=useRef(null) + const imageRef = useRef(null) + const wordRef = useRef(null) const { Text, Title } = Typography; @@ -52,15 +55,15 @@ const PlayingField = ({ isSound, user }) => { }, [level]); -const addStatisticsUser = (user)=>{ -let userStat -for (const key in statistics) { -if(key[name]===user.name) userStat= Object.create(key[name]) -} + const addStatisticsUser = (user) => { + let userStat + for (const key in statistics) { + if (key[name] === user.name) userStat = Object.create(key[name]) + } -if(!userStat) userStat={name:user,statistics:{}} + if (!userStat) userStat = { name: user, statistics: {} } -} + } // useEffect(() => { // if(isAnswer) { @@ -70,21 +73,26 @@ if(!userStat) userStat={name:user,statistics:{}} // } // }, [isAnswer]); + + const onCheck = (letters) => { - setIsCheck(true); - if (letters.join("") === currentWord.word) { + if (letters.join("") === currentWord.word) { + playAudio(soundRight) setIsAnswer(true) - }else { + imageRef.current.classList.add("allRight") + wordRef.current.classList.add("allRight") + } else { + playAudio(soundWrong) setIsAnswer(false) - imageRef.current.classList.add("noActive") + imageRef.current.classList.add("noActive") wordRef.current.classList.add("noActive") } - + setIsCheck(true); } useEffect(() => { + if (currentWord !== null) setIsLoading(false); - setPercent(100) }, [currentWord]); useEffect(() => { @@ -92,10 +100,15 @@ if(!userStat) userStat={name:user,statistics:{}} }, [words]); useEffect(() => { + setPercent(100); + setIsCheck(false) if (words !== null) setCurrentWord(words[count]); setIsAnswer(false) - imageRef.current? imageRef.current.classList.remove("noActive"):null - wordRef.current? wordRef.current.classList.remove("noActive"):null + imageRef.current ? imageRef.current.classList.remove("noActive") : null + wordRef.current ? wordRef.current.classList.remove("noActive") : null + imageRef.current ? imageRef.current.classList.remove("allRight") : null + wordRef.current ? wordRef.current.classList.remove("allRight") : null + }, [count]); const onHandleClickBtnNext = () => { @@ -104,47 +117,46 @@ if(!userStat) userStat={name:user,statistics:{}} setIsLoading(true); setLevel({ level: level.level, page: level.page + 1 }) } - - setIsCheck(false) }; - - return ( <> {!isLoading ? ( + <> +
- + +
-
- Loading +
+ Loading
- - + -
+ isCheck={isCheck} + onHandleClickBtnNext={onHandleClickBtnNext} + wordRef={wordRef} + /> +
+ +
+ ) : ( -
- - <Text strong><img src={loading} /></Text> - -
+ + )} ); diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index f194996..1e5183f 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -57,6 +57,15 @@ height: 500px; animation: 0.01s tremor ease-out ; } +.allRight{ + pointer-events: none; + box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75) ; + -webkit-box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75) ; + -moz-box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75) ; + + border: 2px solid rgba(77, 255, 60, 0.75); +} + @keyframes tremor { 0% , 25% { left: -0.5px; diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js index 0be4dfe..576e023 100644 --- a/src/Components/ProgressBox/ProgressBox.js +++ b/src/Components/ProgressBox/ProgressBox.js @@ -1,28 +1,30 @@ import React, { useState, useEffect } from "react"; import { Progress, Tooltip } from "antd" import './ProgressBox.scss' +import seconds from '../../assets/audio/seconds.mp3'; +const ProgressBox = ({ percent, setPercent, difficultLevel, isCheck, onCheck }) => { -const ProgressBox = ({ percent, setPercent,difficultLevel }) => { + const listenAudio = new Audio(seconds) useEffect(() => { - if (percent > 0) { + if (!isCheck && percent > 1) { + listenAudio.play() let timer = setInterval(() => progress(), 1000) return () => clearInterval(timer); - } + } else onCheck([]) }) const progress = () => { - - setPercent(percent-(100/difficultLevel)) + setPercent(percent - (100 / difficultLevel)) } return (
- (percent > 1) ? `${Math.floor( percent/100*difficultLevel)} seconds` : `you lose!`} strokeColor="#1890ff" trailColor="red" strokeWidth="9" width="60" gapPosition="top" > + (percent > 1) ? `${Math.ceil(percent / 100 * difficultLevel)} seconds` : `you lose!`} strokeColor="#1890ff" trailColor="red" strokeWidth="9" width="60" gapPosition="top" >
diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js new file mode 100644 index 0000000..5966778 --- /dev/null +++ b/src/Components/StepsField/StepsField.js @@ -0,0 +1,32 @@ +import React,{useState } from 'react' +import {Rate} from 'antd'; + +import './StepsField.scss' + + +let arrSteps = [1,2,3,4,5] + +const StepsField = ()=>{ + + + + return ( +
+ +
Steps:
+
+ { arrSteps.map((el,i)=> + + +
{i}
+
+ )} +
+ +
+ ) + + +} + +export default StepsField \ No newline at end of file diff --git a/src/Components/StepsField/StepsField.scss b/src/Components/StepsField/StepsField.scss new file mode 100644 index 0000000..ecf8fa8 --- /dev/null +++ b/src/Components/StepsField/StepsField.scss @@ -0,0 +1,27 @@ +.steps__field{ + background-color: #cbefc4; + width: 20%; + position: absolute; + height: 100vh; + right: 0; + border-left: 1px solid #d5d2d0; + display: flex; +flex-direction: column; +justify-content: start; +} + +.steps__field-context{ + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-around; +} +.steps__field-context-item{ + width: 70px; + height: 35px; + border: 1px solid yellow; + border-radius: 50px; + background-color: aqua; + margin: 5px; + text-align: center; +} \ No newline at end of file diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index 90d3d6c..9ea7bda 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -7,9 +7,10 @@ import PlayingField from "../PlayingField/PlayingField"; const WelcomForm = () => { const [user, setUser] = useState(null); const [isSound, setIsSound] = useState(true); - + const { Text, Title } = Typography; + const startGame = (values) => { if (Object.values(values.user).every(e => e !== undefined)) setUser(values.user); }; @@ -21,33 +22,15 @@ const WelcomForm = () => { return ( <> - -
-
- - - -
-
- -
+ <> {user ? ( ) : ( -
+
- <Text strong>Установите начальные настройки</Text> + <Text strong>Установите начальные значения</Text>
@@ -70,6 +53,24 @@ const WelcomForm = () => { Шестой + + +
+ + + +
+
+
)} -
-
+ + +
); diff --git a/src/Components/WelcomeForm/WelcomForm.scss b/src/Components/WelcomeForm/WelcomForm.scss index e69de29..ca71c9f 100644 --- a/src/Components/WelcomeForm/WelcomForm.scss +++ b/src/Components/WelcomeForm/WelcomForm.scss @@ -0,0 +1,9 @@ +.letterSolver__autoplay_box{ + text-align: right; +} +.letterSolver__settings{ + background-color: #afd9ff; +padding: 40px; + +border-radius: 6px; +} \ No newline at end of file diff --git a/src/assets/audio/right_answer.mp3 b/src/assets/audio/right_answer.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..7015fec9c2472cca1f9baa553b38c2a34b9565b6 GIT binary patch literal 45975 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 literal 0 HcmV?d00001 diff --git a/src/assets/audio/seconds.mp3 b/src/assets/audio/seconds.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..df2c5b071d811f08b753ab446b6bad4f7df0b0f5 GIT binary patch literal 4178 zcmeH}X;4#H7Jy$Cwh#~`((Dy5Xn=rW>j9dPupZM#2&ifo4^r2nhlL z0)l{zEJc8*VUbm#K?X54s4W&Kg2?uUXI1~PsOhS)XR52quj>6d_tv}TJLlFr4_qg6 zfG;_8GAMjIwrl&5001!uKm`z-y##Mz{ zK!*wdNIojncZey5;)Byj%p;pqnupMX^WN){A}CwEu2IlPH-gs{(nT}!t*sBBvgT09ox2xjISxy9hLDgAfOft15A|2Ro$Tzu*>0hkak+)vmiwm? z8}F(9I8j1gnpZ^$r;DeHnzA1A`vfE{>gk|Tl-+|wQdJOU#WJd9F^%^L8Ct!;48rE* zFc50UjZYMAm4k zdr28^WiYahk+SbmT4iL~NPC^{y{(KaQ`${Iu7EJoiawyy4HzLXXoIO1RB_{kU)GC< zGNXxCDq7kuS=b(PRLs$e?Uw0!8373yC8CF3X!MsJrrpggGjGRgTBY`+q8@AioG8B6 zCw~voz~8x^s~y-Zukih9eBqU{Gbh*6X69aO_-v{OTYUQ9mosnBF}ZSA{@lu&(8Zhk zADl9h9qp(sUJ)0{m9A>(SXf_bZ}_-c1xriEDtP8JUxH%+e*{Kb+QRb&YW1S;sLrkc zA0B4kl%|9gfxc%n!!6&f(l?gmma^|jAf^BAjjU8R+!WqsQ(<^lpnptEtH<2X#!BTZ zq4r#-?DTwvPv&9O|U0&e%PJNmL&Kg zME44E0_ZaA;DTs?KxK;AlddKS4yWkh22XRvub^M5}Bc5C*_$&N(=)#`_0Doka2h2Vta*{IL3jm1Z zJDV`63sKkU_)o;=&lOE@rs9TH1;S(;IjS**$_zc0KR8KaIkveQmBLKrJA*nk%$eC4I5YjCJojJA zo}9kI!OYjXu}1urd|LG5gz7IIKOChuXcg%_AGz=$MK;DNc2Y)3k|LM(ujdlaE^mB% zy}tYeIDtdLXyW6yHkIk$#kYiT6-j*-6{x7ZHlR7XaU`MF$pIes)XSi0-_7pd@-}^Q z^~Av5cAlCi*mvHg%d%+;62el2%#twuxG-ZiX-Ow)CN_4$GxPcF<@A9>AcFJW3@d+7 zs?|B15i06#UEV4mXK;FDuDpVx&Z051si9zhWr+c(i$=@EtgC~c!ni$oL^VR46kZ|W zzBymV9t<>N9&7wQVKj8B{-;1fI$w^V|LVm5SH^#k93+(UcN1bIeet942SwO<`7hL= tZ$dk^=v#+&EX!91p^w71E4O1Azg@W<%ktI1Kkv$Ybt-?(3;uRO{|4uP<8lB1 literal 0 HcmV?d00001 diff --git a/src/assets/audio/wrong-answer.mp3 b/src/assets/audio/wrong-answer.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..af466eb8a02afa3c318f3b725468b81454758f54 GIT binary patch literal 15047 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 literal 0 HcmV?d00001 diff --git a/src/utils/getDate.js b/src/utils/getDate.js new file mode 100644 index 0000000..eab05b8 --- /dev/null +++ b/src/utils/getDate.js @@ -0,0 +1,5 @@ +export function getDate() { + const d = new Date(); + return [d.getDate(), d.getMonth() + 1, d.getFullYear()] + .map((n) => (n < 10 ? `0${n}` : `${n}`)).join('-'); +} diff --git a/src/utils/playAudio.js b/src/utils/playAudio.js new file mode 100644 index 0000000..2cfbb65 --- /dev/null +++ b/src/utils/playAudio.js @@ -0,0 +1,5 @@ +const playAnswer = (music) => { + const audio = new Audio(music); + audio.play(); +}; +export default playAnswer; From f64973a63b17ae190ae4fd4ca37a59b5e48f8e15 Mon Sep 17 00:00:00 2001 From: kli2m Date: Thu, 25 Feb 2021 21:18:09 +0300 Subject: [PATCH 08/16] feat: added volume sound --- src/App.js | 91 +++++------ src/Components/PlayingField/PlayingField.js | 163 ++++++++++---------- src/Components/ProgressBox/ProgressBox.js | 9 +- src/Components/StepsField/StepsField.js | 26 +++- src/Components/StepsField/StepsField.scss | 10 +- 5 files changed, 166 insertions(+), 133 deletions(-) diff --git a/src/App.js b/src/App.js index bc36f09..89d2928 100644 --- a/src/App.js +++ b/src/App.js @@ -1,7 +1,15 @@ import React, { useState } from "react"; -import { Tooltip, Switch, Button, Typography, Form, Progress,Collapse } from "antd"; +import { + Tooltip, + Switch, + Button, + Typography, + Form, + Progress, + Collapse, +} from "antd"; import "./App.scss"; -import WelcomForm from './Components/WelcomeForm/WelcomForm' +import WelcomForm from "./Components/WelcomeForm/WelcomForm"; const App = () => { const [isStart, setIsStart] = useState(false); @@ -11,54 +19,49 @@ const App = () => { setIsStart(true); }; - return (
-
- - - - - -
+
+ + + +
{isStart ? ( ) : ( -
- - <Text strong>Генератор букв</Text> - - - <Text strong> - Тренировка улучшает восприятие английской речи на слух. - </Text> - - - -

Instruction...

-
-
- -
- )} - +
+ + <Text strong>Генератор букв</Text> + + + <Text strong> + Тренировка улучшает восприятие английской речи на слух. + </Text> + + + +

Instruction...

+
+
+ +
+ )}
); }; diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index 3db05f9..f6e550a 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,23 +1,33 @@ import React, { useState, useEffect, useRef } from "react"; -import { Tooltip, Switch, Button, Typography, Form, Image, Progress,Spin } from "antd"; +import { + Tooltip, + Switch, + Button, + Typography, + Form, + Image, + Progress, + Spin, +} from "antd"; import "./PlayingField.scss"; import getWordsApi from "../../utils/getWordsApi"; import shuffle from "../../utils/shuffle"; import Word from "../Word/Word"; -import ProgressBox from '../ProgressBox/ProgressBox' -import AnswerBox from '../AnswerBox/AnswerBox' -import StepsField from '../StepsField/StepsField' +import ProgressBox from "../ProgressBox/ProgressBox"; +import AnswerBox from "../AnswerBox/AnswerBox"; +import StepsField from "../StepsField/StepsField"; const RS_LANG_DATA = "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; -import soundRight from '../../assets/audio/right_answer.mp3'; -import soundWrong from '../../assets/audio//wrong-answer.mp3'; -import playAudio from '../../utils/playAudio'; +import soundRight from "../../assets/audio/right_answer.mp3"; +import soundWrong from "../../assets/audio//wrong-answer.mp3"; +import seconds from '../../assets/audio/seconds.mp3'; const PlayingField = ({ isSound, user }) => { - - const getLocalSt = localStorage.getItem("statistics") ? localStorage.setItem("statistics") : null + const getLocalSt = localStorage.getItem("statistics") + ? localStorage.setItem("statistics") + : null; const [level, setLevel] = useState({ level: user.wordsLevel, page: 0 }); const [isLoading, setIsLoading] = useState(true); @@ -27,10 +37,11 @@ const PlayingField = ({ isSound, user }) => { const [currentWord, setCurrentWord] = useState(null); const [count, setCount] = useState(0); const [percent, setPercent] = useState(100); - const [statistics, setStatistics] = useState(getLocalSt) + const [statistics, setStatistics] = useState(getLocalSt); + const [arrAudio,setArrAudio]=useState([new Audio(seconds),new Audio(soundRight),new Audio(soundWrong)]) - const imageRef = useRef(null) - const wordRef = useRef(null) + const imageRef = useRef(null); + const wordRef = useRef(null); const { Text, Title } = Typography; @@ -44,9 +55,9 @@ const PlayingField = ({ isSound, user }) => { if (words === null) setWords(shuffle(upgradeRes)); else { - setWords(words.concat(upgradeRes)) - setCount(count + 1) - setIsLoading(false) + setWords(words.concat(upgradeRes)); + setCount(count + 1); + setIsLoading(false); } } @@ -54,44 +65,37 @@ const PlayingField = ({ isSound, user }) => { loadWords(level.level, level.page); }, [level]); + const effectRightAnswer = () => { + arrAudio[1].play() + setIsAnswer(true); + imageRef.current.classList.add("allRight"); + wordRef.current.classList.add("allRight"); + }; - const addStatisticsUser = (user) => { - let userStat - for (const key in statistics) { - if (key[name] === user.name) userStat = Object.create(key[name]) - } - - if (!userStat) userStat = { name: user, statistics: {} } - - } - - // useEffect(() => { - // if(isAnswer) { - - - // setStatistics(statistics) - // } - // }, [isAnswer]); - + const effectWrongAnswer = () => { + arrAudio[2].play() + setIsAnswer(false); + imageRef.current.classList.add("noActive"); + wordRef.current.classList.add("noActive"); + }; + const delEffectsAnswer = () => { + imageRef.current ? imageRef.current.classList.remove("noActive") : null; + wordRef.current ? wordRef.current.classList.remove("noActive") : null; + imageRef.current ? imageRef.current.classList.remove("allRight") : null; + wordRef.current ? wordRef.current.classList.remove("allRight") : null; + }; const onCheck = (letters) => { if (letters.join("") === currentWord.word) { - playAudio(soundRight) - setIsAnswer(true) - imageRef.current.classList.add("allRight") - wordRef.current.classList.add("allRight") + effectRightAnswer(); } else { - playAudio(soundWrong) - setIsAnswer(false) - imageRef.current.classList.add("noActive") - wordRef.current.classList.add("noActive") + effectWrongAnswer(); } setIsCheck(true); - } + }; useEffect(() => { - if (currentWord !== null) setIsLoading(false); }, [currentWord]); @@ -101,21 +105,17 @@ const PlayingField = ({ isSound, user }) => { useEffect(() => { setPercent(100); - setIsCheck(false) + setIsCheck(false); if (words !== null) setCurrentWord(words[count]); - setIsAnswer(false) - imageRef.current ? imageRef.current.classList.remove("noActive") : null - wordRef.current ? wordRef.current.classList.remove("noActive") : null - imageRef.current ? imageRef.current.classList.remove("allRight") : null - wordRef.current ? wordRef.current.classList.remove("allRight") : null - + setIsAnswer(false); + delEffectsAnswer(); }, [count]); const onHandleClickBtnNext = () => { if (count < words.length - 1) setCount(count + 1); else { setIsLoading(true); - setLevel({ level: level.level, page: level.page + 1 }) + setLevel({ level: level.level, page: level.page + 1 }); } }; @@ -123,41 +123,44 @@ const PlayingField = ({ isSound, user }) => { <> {!isLoading ? ( <> -
-
- - -
-
- Loading -
-
+ +
+ - +
+
+ Loading +
+ + +
-
- -
+ +
) : ( - - - )} + + )} ); }; diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js index 576e023..6bc6a01 100644 --- a/src/Components/ProgressBox/ProgressBox.js +++ b/src/Components/ProgressBox/ProgressBox.js @@ -1,16 +1,17 @@ import React, { useState, useEffect } from "react"; import { Progress, Tooltip } from "antd" import './ProgressBox.scss' -import seconds from '../../assets/audio/seconds.mp3'; -const ProgressBox = ({ percent, setPercent, difficultLevel, isCheck, onCheck }) => { +const ProgressBox = ({audioSeconds, percent, setPercent, difficultLevel, isCheck, onCheck }) => { + + + - const listenAudio = new Audio(seconds) useEffect(() => { if (!isCheck && percent > 1) { - listenAudio.play() + audioSeconds.play() let timer = setInterval(() => progress(), 1000) return () => clearInterval(timer); } else onCheck([]) diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js index 5966778..52115c4 100644 --- a/src/Components/StepsField/StepsField.js +++ b/src/Components/StepsField/StepsField.js @@ -1,13 +1,27 @@ -import React,{useState } from 'react' -import {Rate} from 'antd'; +import React,{useState, useEffect } from 'react' +import {Rate,Slider } from 'antd'; +import { FrownOutlined, SmileOutlined } from '@ant-design/icons'; import './StepsField.scss' let arrSteps = [1,2,3,4,5] -const StepsField = ()=>{ +const StepsField = ({arrAudio})=>{ +const [inputValue,setInputValue]=useState(100) + +const onChange=(value)=>{ + + setInputValue(value) + +} + +useEffect(()=>{ + arrAudio.forEach(audio=>{ + audio.volume=inputValue/100 + }) +},[inputValue]) return ( @@ -22,7 +36,11 @@ const StepsField = ()=>{ )}
- +
+ + +
{inputValue}
+
) diff --git a/src/Components/StepsField/StepsField.scss b/src/Components/StepsField/StepsField.scss index ecf8fa8..a12219a 100644 --- a/src/Components/StepsField/StepsField.scss +++ b/src/Components/StepsField/StepsField.scss @@ -9,8 +9,12 @@ flex-direction: column; justify-content: start; } - +.steps__field-title{ + height: 10%; + border-bottom: 1px solid #d5d2d0; +} .steps__field-context{ + height: 70%; display: flex; flex-direction: row; flex-wrap: wrap; @@ -24,4 +28,8 @@ justify-content: start; background-color: aqua; margin: 5px; text-align: center; +} +.steps__field-audio_settings{ + height: 20%; + border-top: 1px solid #d5d2d0; } \ No newline at end of file From 45edf2be32f2c7d57767f020a8df608f76e8fccb Mon Sep 17 00:00:00 2001 From: kli2m Date: Sat, 27 Feb 2021 14:29:32 +0300 Subject: [PATCH 09/16] feat: added change language * change volue sound --- src/App.js | 87 ++++---- src/App.scss | 14 +- src/Components/Cell/Cell.js | 7 +- src/Components/Cell/Cell.scss | 5 +- src/Components/LevelDropdown/LevelDropdown.js | 28 --- .../LevelDropdown/level-dropdown.css | 0 src/Components/PlayingField/PlayingField.js | 82 ++++--- src/Components/ProgressBox/ProgressBox.js | 81 ++++--- src/Components/StepsField/StepsField.js | 89 ++++---- src/Components/StepsField/StepsField.scss | 17 +- src/Components/WelcomeForm/WelcomForm.js | 209 +++++++++++------- src/Components/WelcomeForm/WelcomForm.scss | 4 +- src/Components/Word/Word.js | 100 ++++----- src/config/config.json | 12 - src/config/user.js | 28 --- src/config/userStatistics.js | 16 -- src/language/En.json | 30 +++ src/language/Ru.json | 30 +++ src/store/store.js | 5 - src/utils/createArr.js | 12 - src/utils/getWordsApi.js | 1 - src/utils/playAudio.js | 5 - 22 files changed, 449 insertions(+), 413 deletions(-) delete mode 100644 src/Components/LevelDropdown/LevelDropdown.js delete mode 100644 src/Components/LevelDropdown/level-dropdown.css delete mode 100644 src/config/config.json delete mode 100644 src/config/user.js delete mode 100644 src/config/userStatistics.js create mode 100644 src/language/En.json create mode 100644 src/language/Ru.json delete mode 100644 src/store/store.js delete mode 100644 src/utils/createArr.js delete mode 100644 src/utils/playAudio.js diff --git a/src/App.js b/src/App.js index 89d2928..1eebe5c 100644 --- a/src/App.js +++ b/src/App.js @@ -1,69 +1,80 @@ import React, { useState } from "react"; -import { - Tooltip, - Switch, - Button, - Typography, - Form, - Progress, - Collapse, -} from "antd"; +import { Tooltip, Switch, Button, Typography, Form, Progress, Collapse } from "antd"; import "./App.scss"; -import WelcomForm from "./Components/WelcomeForm/WelcomForm"; +import WelcomForm from './Components/WelcomeForm/WelcomForm'; +import Ru from './language/Ru.json'; +import En from './language/En.json'; + const App = () => { const [isStart, setIsStart] = useState(false); + const [language,setLanguage] = useState(Ru); + const { Text, Title } = Typography; const { Panel } = Collapse; const startGame = () => { setIsStart(true); }; + return (
-
+
+ - isVal?setLanguage(En):setLanguage(Ru)} checkedChildren="En" - unCheckedChildren="Ru" - // checked={} + unCheckedChildren="Ru" /> +
{isStart ? ( - + ) : ( -
- - <Text strong>Генератор букв</Text> + <div className="letterSolver__wrapper-start_game"> + <Title level={1} className="letterSolver__start_game-title"> + <Text strong>{language.main_page_title}</Text> + + + <Text strong> + {language.main_page_phrase} + </Text> + + + +

{language.main_page_collapse_panel_text}

+
+
+ +
+ )} +
+
+ + <Text strong > + © kli2m + </Text> - - <Text strong> - Тренировка улучшает восприятие английской речи на слух. - </Text> - - - -

Instruction...

-
-
-
- )} +
+
+ ); + }; export default App; diff --git a/src/App.scss b/src/App.scss index 21d3b56..e46de22 100644 --- a/src/App.scss +++ b/src/App.scss @@ -3,14 +3,14 @@ width: 100%; display: flex; flex-direction: column; - justify-content: center ; + justify-content: space-between ; align-items: center; - background-color: #d7f4cf; + background-color:#A7EABD; } -.letterSolver__header{ - width: inherit; +.letterSolver__wrapper-header{ + width: 100%; display: flex; flex-direction: row; justify-content: space-between; @@ -38,4 +38,10 @@ justify-content: space-between; align-items: center; height: 300px; +} +.letterSolver__wrapper-footer{ + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-evenly; } \ No newline at end of file diff --git a/src/Components/Cell/Cell.js b/src/Components/Cell/Cell.js index fbcb816..6bd1a69 100644 --- a/src/Components/Cell/Cell.js +++ b/src/Components/Cell/Cell.js @@ -5,9 +5,12 @@ import './Cell.scss' const Cell = ({valueCell,provided}) => { return ( -
+ {...provided.dragHandleProps} + + > {valueCell}
); diff --git a/src/Components/Cell/Cell.scss b/src/Components/Cell/Cell.scss index 8fe12d4..bb429ec 100644 --- a/src/Components/Cell/Cell.scss +++ b/src/Components/Cell/Cell.scss @@ -1,6 +1,6 @@ .cell { cursor: pointer; - border: 1px solid rebeccapurple; + border: 1px solid #29252d; margin: 1px; width: 50px; height: 50px; @@ -14,4 +14,7 @@ border-radius: 5px; display: flex; user-select: none; + font-size: xx-large; +font-weight: bold; +color: darkgreen; } diff --git a/src/Components/LevelDropdown/LevelDropdown.js b/src/Components/LevelDropdown/LevelDropdown.js deleted file mode 100644 index 55b111f..0000000 --- a/src/Components/LevelDropdown/LevelDropdown.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import { Form, Select } from 'antd'; - -import './level-dropdown.css'; - -const LevelDropdown = ({ setLevel }) => { - const changeLevel = (value) => { - setLevel(value); - }; - return ( - - - - ); -}; - -export default LevelDropdown; diff --git a/src/Components/LevelDropdown/level-dropdown.css b/src/Components/LevelDropdown/level-dropdown.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index f6e550a..b0155e2 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from "react"; +import React, { useState, useEffect, useRef, useCallback } from "react"; import { Tooltip, Switch, @@ -21,8 +21,8 @@ const RS_LANG_DATA = "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; import soundRight from "../../assets/audio/right_answer.mp3"; import soundWrong from "../../assets/audio//wrong-answer.mp3"; -import seconds from '../../assets/audio/seconds.mp3'; - +import soundSeconds from "../../assets/audio/seconds.mp3"; +import imgLoading from '../../assets/img/loading.gif' const PlayingField = ({ isSound, user }) => { const getLocalSt = localStorage.getItem("statistics") @@ -38,7 +38,11 @@ const PlayingField = ({ isSound, user }) => { const [count, setCount] = useState(0); const [percent, setPercent] = useState(100); const [statistics, setStatistics] = useState(getLocalSt); - const [arrAudio,setArrAudio]=useState([new Audio(seconds),new Audio(soundRight),new Audio(soundWrong)]) + const [media, setMedia] = useState([ + new Audio(soundRight), + new Audio(soundWrong), + new Audio(soundSeconds), + ]); const imageRef = useRef(null); const wordRef = useRef(null); @@ -65,35 +69,41 @@ const PlayingField = ({ isSound, user }) => { loadWords(level.level, level.page); }, [level]); - const effectRightAnswer = () => { - arrAudio[1].play() - setIsAnswer(true); - imageRef.current.classList.add("allRight"); - wordRef.current.classList.add("allRight"); - }; - - const effectWrongAnswer = () => { - arrAudio[2].play() - setIsAnswer(false); - imageRef.current.classList.add("noActive"); - wordRef.current.classList.add("noActive"); - }; + const addStatisticsUser = (user) => { + let userStat; + for (const key in statistics) { + if (key[name] === user.name) userStat = Object.create(key[name]); + } - const delEffectsAnswer = () => { - imageRef.current ? imageRef.current.classList.remove("noActive") : null; - wordRef.current ? wordRef.current.classList.remove("noActive") : null; - imageRef.current ? imageRef.current.classList.remove("allRight") : null; - wordRef.current ? wordRef.current.classList.remove("allRight") : null; + if (!userStat) userStat = { name: user, statistics: {} }; }; - const onCheck = (letters) => { - if (letters.join("") === currentWord.word) { - effectRightAnswer(); - } else { - effectWrongAnswer(); - } - setIsCheck(true); - }; + // useEffect(() => { + // if(isAnswer) { + + // setStatistics(statistics) + // } + // }, [isAnswer]); + + const onCheck = useCallback( + (letters) => { + if (letters.join("") === currentWord.word) { + console.log(`Right`); + media[0].play(); + setIsAnswer(true); + imageRef.current.classList.add("allRight"); + wordRef.current.classList.add("allRight"); + } else { + console.log(`wrong`); + media[1].play(); + setIsAnswer(false); + imageRef.current.classList.add("noActive"); + wordRef.current.classList.add("noActive"); + } + setIsCheck(true); + }, + [currentWord] + ); useEffect(() => { if (currentWord !== null) setIsLoading(false); @@ -108,7 +118,10 @@ const PlayingField = ({ isSound, user }) => { setIsCheck(false); if (words !== null) setCurrentWord(words[count]); setIsAnswer(false); - delEffectsAnswer(); + imageRef.current ? imageRef.current.classList.remove("noActive") : null; + wordRef.current ? wordRef.current.classList.remove("noActive") : null; + imageRef.current ? imageRef.current.classList.remove("allRight") : null; + wordRef.current ? wordRef.current.classList.remove("allRight") : null; }, [count]); const onHandleClickBtnNext = () => { @@ -124,10 +137,9 @@ const PlayingField = ({ isSound, user }) => { {!isLoading ? ( <>
-
{ />
- +
) : ( - + )} ); diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js index 6bc6a01..c3dc31c 100644 --- a/src/Components/ProgressBox/ProgressBox.js +++ b/src/Components/ProgressBox/ProgressBox.js @@ -1,36 +1,49 @@ import React, { useState, useEffect } from "react"; -import { Progress, Tooltip } from "antd" -import './ProgressBox.scss' - - -const ProgressBox = ({audioSeconds, percent, setPercent, difficultLevel, isCheck, onCheck }) => { - - - - - - useEffect(() => { - if (!isCheck && percent > 1) { - audioSeconds.play() - let timer = setInterval(() => progress(), 1000) - return () => clearInterval(timer); - } else onCheck([]) - }) - - const progress = () => { - setPercent(percent - (100 / difficultLevel)) +import { Progress, Tooltip } from "antd"; +import "./ProgressBox.scss"; + +const ProgressBox = ({ + soundSecond, + percent, + setPercent, + difficultLevel, + isCheck, + onCheck, +}) => { + useEffect(() => { + if (!isCheck) { + if (percent > 1) { + soundSecond.play(); + let timer = setInterval(() => progress(), 1000); + return () => clearInterval(timer); + } else onCheck([]); } - - return ( - -
- - (percent > 1) ? `${Math.ceil(percent / 100 * difficultLevel)} seconds` : `you lose!`} strokeColor="#1890ff" trailColor="red" strokeWidth="9" width="60" gapPosition="top" > - -
- - ) - -} - -export default ProgressBox; \ No newline at end of file + }, [percent]); + + const progress = () => { + setPercent(percent - 100 / difficultLevel); + }; + + return ( +
+ + percent > 1 + ? `${Math.ceil((percent / 100) * difficultLevel)} seconds` + : `you lose!` + } + strokeColor="#2A9C50" + trailColor="red" + strokeWidth="9" + width="60" + gapPosition="top" + > +
+ ); +}; + +export default ProgressBox; diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js index 52115c4..fc44866 100644 --- a/src/Components/StepsField/StepsField.js +++ b/src/Components/StepsField/StepsField.js @@ -1,50 +1,39 @@ -import React,{useState, useEffect } from 'react' -import {Rate,Slider } from 'antd'; -import { FrownOutlined, SmileOutlined } from '@ant-design/icons'; - -import './StepsField.scss' - - -let arrSteps = [1,2,3,4,5] - -const StepsField = ({arrAudio})=>{ - -const [inputValue,setInputValue]=useState(100) - -const onChange=(value)=>{ - - setInputValue(value) - -} - -useEffect(()=>{ - arrAudio.forEach(audio=>{ - audio.volume=inputValue/100 - }) -},[inputValue]) - - - return ( -
- -
Steps:
-
- { arrSteps.map((el,i)=> - - -
{i}
-
- )} -
-
- - -
{inputValue}
-
-
- ) - - -} - -export default StepsField \ No newline at end of file +import React, { useState, useEffect } from "react"; +import { Rate, Slider } from "antd"; + +import "./StepsField.scss"; + +let arrSteps = [1, 2, 3, 4, 5]; + +const StepsField = ({ media }) => { + const [inputValue, setInputValue] = useState(70); + + useEffect(() => { + media.forEach((audio) => { + audio.volume = inputValue / 100; + }); + }, [inputValue]); + + const onChange = (value) => { + setInputValue(value); + }; + + return ( +
+
Steps:
+
+ {arrSteps.map((el, i) => ( + + +
{i}
+
+ ))} +
+
+ +
+
+ ); +}; + +export default StepsField; diff --git a/src/Components/StepsField/StepsField.scss b/src/Components/StepsField/StepsField.scss index a12219a..3090011 100644 --- a/src/Components/StepsField/StepsField.scss +++ b/src/Components/StepsField/StepsField.scss @@ -1,20 +1,19 @@ .steps__field{ - background-color: #cbefc4; + background-color: #7FE09F; width: 20%; position: absolute; height: 100vh; right: 0; - border-left: 1px solid #d5d2d0; + border-left: 1px solid #2A9C50; display: flex; flex-direction: column; -justify-content: start; +justify-content: space-between; } .steps__field-title{ height: 10%; - border-bottom: 1px solid #d5d2d0; + border-bottom: 1px solid #2A9C50; } .steps__field-context{ - height: 70%; display: flex; flex-direction: row; flex-wrap: wrap; @@ -22,14 +21,16 @@ justify-content: start; } .steps__field-context-item{ width: 70px; - height: 35px; + height: 70%; border: 1px solid yellow; border-radius: 50px; background-color: aqua; margin: 5px; text-align: center; } -.steps__field-audio_settings{ + +.steps__field-sounds_settings{ height: 20%; - border-top: 1px solid #d5d2d0; + padding: 10px 10px; + border-top: 1px solid #2A9C50; } \ No newline at end of file diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index 9ea7bda..f7f0473 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -4,89 +4,140 @@ import "./WelcomForm.scss"; import PlayingField from "../PlayingField/PlayingField"; -const WelcomForm = () => { - const [user, setUser] = useState(null); - const [isSound, setIsSound] = useState(true); +const WelcomForm = ({ language }) => { + const [user, setUser] = useState(null); + const [isSound, setIsSound] = useState(true); - const { Text, Title } = Typography; + const { Text, Title } = Typography; + const startGame = (values) => { + if (Object.values(values.user).every((e) => e !== undefined)) + setUser(values.user); + }; - const startGame = (values) => { - if (Object.values(values.user).every(e => e !== undefined)) setUser(values.user); - }; + const onChangeIsSound = () => { + setIsSound((prev) => !prev); + }; - const onChangeIsSound = () => { - setIsSound((prev) => !prev); - }; + return ( + <> + <> + {user ? ( + + ) : ( +
+ + <Text strong>{language.welcom_page_title}</Text> + + + + + + + + + + + + +
+ + + +
+
- return ( - <> - <> - {user ? ( + + +
+ )} + - - - ) : ( -
- - <Text strong>Установите начальные значения</Text> - -
- - - - - - - - - - - -
- - - -
-
- - -
- -
- )} - - -
- - ); - -} -export default WelcomForm \ No newline at end of file +
+ + ); +}; +export default WelcomForm; diff --git a/src/Components/WelcomeForm/WelcomForm.scss b/src/Components/WelcomeForm/WelcomForm.scss index ca71c9f..ebb0c70 100644 --- a/src/Components/WelcomeForm/WelcomForm.scss +++ b/src/Components/WelcomeForm/WelcomForm.scss @@ -2,8 +2,8 @@ text-align: right; } .letterSolver__settings{ - background-color: #afd9ff; + background-color: #57D481; padding: 40px; - +width:500px; border-radius: 6px; } \ No newline at end of file diff --git a/src/Components/Word/Word.js b/src/Components/Word/Word.js index 292daa9..d782b1d 100644 --- a/src/Components/Word/Word.js +++ b/src/Components/Word/Word.js @@ -3,14 +3,18 @@ import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import { Tooltip, Switch, Button, Typography, Form, Image } from "antd"; import Cell from "../Cell/Cell"; -const Word = ({ wordSplit, onCheck, isCheck, onHandleClickBtnNext,wordRef }) => { - - - const [letters, setLetters] = useState(wordSplit) +const Word = ({ + wordSplit, + onCheck, + isCheck, + onHandleClickBtnNext, + wordRef, +}) => { + const [letters, setLetters] = useState(wordSplit); useEffect(() => { - setLetters(wordSplit) - }, [wordSplit]) + setLetters(wordSplit); + }, [wordSplit]); function handleOnDragEnd(result) { if (!result.destination) return; @@ -20,59 +24,49 @@ const Word = ({ wordSplit, onCheck, isCheck, onHandleClickBtnNext,wordRef }) => setLetters(items); } - return ( <> -
- - - {(provided) => ( -
- {letters.map((e, i) => { - - let id = `el${i}` - - return ( - {(provided) => ( - - )} - - - ) - })} - - {provided.placeholder} -
- )} -
-
+
+ + + {(provided, snapshot) => ( +
+ {letters.map((e, i) => { + let id = `el${i}`; + + return ( + + {(provided) => } + + ); + })} + + {provided.placeholder} +
+ )} +
+
- {isCheck ? - - - : - - - - } - + )} - ) -} + ); +}; -export default Word; \ No newline at end of file +export default Word; diff --git a/src/config/config.json b/src/config/config.json deleted file mode 100644 index 63db0d3..0000000 --- a/src/config/config.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "field":{ - "width":"500px", - "higth":"500px" - - }, - - "field1":3, - "field1":4, - "field1":5 - -} \ No newline at end of file diff --git a/src/config/user.js b/src/config/user.js deleted file mode 100644 index 118fc65..0000000 --- a/src/config/user.js +++ /dev/null @@ -1,28 +0,0 @@ -import userStatistics from './userStatistics' - - -export class user { -constructor(name,levelDifficulty,levelWord){ -this.name=name; -this.datesGames=[]; -this[new Date().toTimeString()]=new userStatistics(levelDifficulty,levelWord) -} - -addDateGames(){ - this.datesGames.push({[new Date().toTimeString()]:new userStatistics(levelDifficulty,levelWord)}) -} - -addWordChecked(){ - console.log( this.datesGames[this.datesGames.length-1]) -} - -getJson(){ - console.log(JSON.stringify(this)) -} - -// setDate(){ -// let nowDate=new Date().toTimeString() -// this[new Date().toTimeString()]=new userStatistics() -// } - -} \ No newline at end of file diff --git a/src/config/userStatistics.js b/src/config/userStatistics.js deleted file mode 100644 index af8d3de..0000000 --- a/src/config/userStatistics.js +++ /dev/null @@ -1,16 +0,0 @@ -export class userStatistics { - constructor(levelDifficulty,levelWord,word) { - this.levelDifficulty = levelDifficulty; - this.levelWord = levelWord; - this.statWords=[]; - } - - addedWord(){ - this.statWords.push(word) - } - - getStatWords(){ - return this.statWords - } - -} \ No newline at end of file diff --git a/src/language/En.json b/src/language/En.json new file mode 100644 index 0000000..0872bc7 --- /dev/null +++ b/src/language/En.json @@ -0,0 +1,30 @@ +{ + "main_page_title": "Solved letters", + "main_page_tooltip_title": "Click to change language", + "main_page_phrase": "Training improves your listening comprehension in English.", + "main_page_collapse_panel_header": "Click to read instruction...", + "main_page_collapse_panel_text": "Instruction...", + "main_page_btn_start": "Click to start", + "welcom_page_title": "Set initial values", + "welcom_page_label_name": "Nick:", + "welcom_page_placeholder_name": "Enter nick...", + "welcom_page_message_name": "Enter correct Nick", + "welcom_page_label_difficult_level": "Difficult Level", + "welcom_page_placeholder_difficult_level": "Change difficult level...", + "welcom_page_placeholder_difficult_level_easy": "EASY", + "welcom_page_placeholder_difficult_level_normal": "NORMAL", + "welcom_page_placeholder_difficult_level_hard": "HARD", + "welcom_page_label_word_difficult_level": "Level difficult words", + "welcom_page_placeholder_word_difficult_level": "Change level difficult words...", + "welcom_page_placeholder_word_difficult_level_first": "FIRST", + "welcom_page_placeholder_word_difficult_level_second": "SECOND", + "welcom_page_placeholder_word_difficult_level_third": "THIRD", + "welcom_page_placeholder_word_difficult_level_fourth": "FOURTH", + "welcom_page_placeholder_word_difficult_level_fifth": "FIFTH", + "welcom_page_placeholder_word_difficult_level_sixth": "SIXTH", + "welcom_page_label_sound": "Playing sound:", + "welcom_page_label_sound_on": "ON", + "welcom_page_label_sound_off": "OFF", + "welcom_page_tooltip_label_sound": "Click to on/off for play sound", + "welcom_page_btn_next": "Next" +} \ No newline at end of file diff --git a/src/language/Ru.json b/src/language/Ru.json new file mode 100644 index 0000000..862e1c8 --- /dev/null +++ b/src/language/Ru.json @@ -0,0 +1,30 @@ +{ + "main_page_title": "Генератор букв", + "main_page_tooltip_title": "Нажми для смены языка", + "main_page_phrase": "Тренировка улучшает восприятие английской речи на слух.", + "main_page_collapse_panel_header": "Нажми для прочтения инструкции ... ", + "main_page_collapse_panel_text": "Инструкция...", + "main_page_btn_start": "Нажми чтобы начать", + "welcom_page_title": "Установите начальные значения", + "welcom_page_label_name": "Ник:", + "welcom_page_placeholder_name": "Введите ник...", + "welcom_page_message_name": "Ввведите корректный ник", + "welcom_page_label_difficult_level": "Уровень сложности", + "welcom_page_placeholder_difficult_level": "Выберите уровень сложности...", + "welcom_page_placeholder_difficult_level_easy": "Легко", + "welcom_page_placeholder_difficult_level_normal": "Нормально", + "welcom_page_placeholder_difficult_level_hard": "Сложно", + "welcom_page_label_word_difficult_level": "Уровень сложности слов", + "welcom_page_placeholder_word_difficult_level": "Выберите уровень сложности слов...", + "welcom_page_placeholder_word_difficult_level_first": "ПЕРВЫЙ", + "welcom_page_placeholder_word_difficult_level_second": "ВТОРОЙ", + "welcom_page_placeholder_word_difficult_level_third": "ТРЕТИЙ", + "welcom_page_placeholder_word_difficult_level_fourth": "ЧЕТВЕРТЫЙ", + "welcom_page_placeholder_word_difficult_level_fifth": "ПЯТЫЙ", + "welcom_page_placeholder_word_difficult_level_sixth": "ШЕСТОЙ", + "welcom_page_label_sound": "Проигрывание музыки:", + "welcom_page_label_sound_on": "Вкл", + "welcom_page_label_sound_off": "Выкл", + "welcom_page_tooltip_label_sound": "Нажми ВКЛ/ВЫКЛ для проигрывания музыки", + "welcom_page_btn_next": "Далее" +} \ No newline at end of file diff --git a/src/store/store.js b/src/store/store.js deleted file mode 100644 index 4a14b68..0000000 --- a/src/store/store.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createStore } from 'redux'; - -const store = createStore(reducer); - -export default store; \ No newline at end of file diff --git a/src/utils/createArr.js b/src/utils/createArr.js deleted file mode 100644 index 4f9662d..0000000 --- a/src/utils/createArr.js +++ /dev/null @@ -1,12 +0,0 @@ -const createArr= (num)=> { - - const tempArr = []; - - for (let i = 1; i <= num*num ; i++) { - tempArr.push({ id: `el${i}`, name: `cell${i}`,index:i }); - } - - return tempArr; - } - - export default createArr; \ No newline at end of file diff --git a/src/utils/getWordsApi.js b/src/utils/getWordsApi.js index d4c30d4..354d16b 100644 --- a/src/utils/getWordsApi.js +++ b/src/utils/getWordsApi.js @@ -8,7 +8,6 @@ const getWordsSpeakit = async (group, page) => { } const data = await response.json(); - console.log(data) return data; } catch (error) { throw new Error(`Error in herokuapp - ${error.message}`); diff --git a/src/utils/playAudio.js b/src/utils/playAudio.js deleted file mode 100644 index 2cfbb65..0000000 --- a/src/utils/playAudio.js +++ /dev/null @@ -1,5 +0,0 @@ -const playAnswer = (music) => { - const audio = new Audio(music); - audio.play(); -}; -export default playAnswer; From d8e73d5cdb6e7b97d75c9bf7ad95f71a8ffc6527 Mon Sep 17 00:00:00 2001 From: kli2m Date: Sun, 28 Feb 2021 19:02:36 +0300 Subject: [PATCH 10/16] feat: added modal window --- src/Components/ModalNext/modalNext.js | 24 +++++ src/Components/PlayingField/PlayingField.js | 95 +++++++++++++------ src/Components/PlayingField/PlayingField.scss | 2 + src/Components/StepsField/StepsField.js | 21 ++-- src/Components/StepsField/StepsField.scss | 5 + src/Components/WelcomeForm/WelcomForm.js | 1 + src/utils/getWordsApi2.js | 31 ++++++ 7 files changed, 141 insertions(+), 38 deletions(-) create mode 100644 src/Components/ModalNext/modalNext.js create mode 100644 src/utils/getWordsApi2.js diff --git a/src/Components/ModalNext/modalNext.js b/src/Components/ModalNext/modalNext.js new file mode 100644 index 0000000..6bc0d0a --- /dev/null +++ b/src/Components/ModalNext/modalNext.js @@ -0,0 +1,24 @@ +import React from "react"; +import { Modal } from 'antd'; +import { ExclamationCircleOutlined } from '@ant-design/icons'; +import WelcomeForm from '../WelcomeForm/WelcomForm' + +const { confirm } = Modal; + +function modalNext(setStepCount,stepCount) { + confirm({ + title: 'Do you Want to delete these items?', + icon: , + content: 'Some descriptions', + okText:"Следующий Уровень", + cancelText:"Выйти в главное меню", + onOk() { + setStepCount(stepCount+1) + }, + onCancel() { + setCount(6) + }, + }); + } + + export default modalNext \ No newline at end of file diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index b0155e2..c1fb3d9 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -8,34 +8,40 @@ import { Image, Progress, Spin, + Modal, } from "antd"; import "./PlayingField.scss"; import getWordsApi from "../../utils/getWordsApi"; +import getWordsApi2 from "../../utils/getWordsApi2"; import shuffle from "../../utils/shuffle"; import Word from "../Word/Word"; import ProgressBox from "../ProgressBox/ProgressBox"; import AnswerBox from "../AnswerBox/AnswerBox"; import StepsField from "../StepsField/StepsField"; +import modalNext from "../ModalNext/modalNext"; + const RS_LANG_DATA = "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; import soundRight from "../../assets/audio/right_answer.mp3"; import soundWrong from "../../assets/audio//wrong-answer.mp3"; import soundSeconds from "../../assets/audio/seconds.mp3"; -import imgLoading from '../../assets/img/loading.gif' +import imgLoading from "../../assets/img/loading.gif"; const PlayingField = ({ isSound, user }) => { const getLocalSt = localStorage.getItem("statistics") ? localStorage.setItem("statistics") : null; - const [level, setLevel] = useState({ level: user.wordsLevel, page: 0 }); + const [level, setLevel] = useState(user.wordsLevel); const [isLoading, setIsLoading] = useState(true); const [isCheck, setIsCheck] = useState(false); const [isAnswer, setIsAnswer] = useState(null); + const [arrWords, setArrWords] = useState(null); const [words, setWords] = useState(null); const [currentWord, setCurrentWord] = useState(null); const [count, setCount] = useState(0); + const [stepCount, setStepCount] = useState(0); const [percent, setPercent] = useState(100); const [statistics, setStatistics] = useState(getLocalSt); const [media, setMedia] = useState([ @@ -49,34 +55,55 @@ const PlayingField = ({ isSound, user }) => { const { Text, Title } = Typography; - async function loadWords(currentLevel, page) { - const res = await getWordsApi(currentLevel, page); - let upgradeRes = await res.map((word) => { - word.letter = shuffle(word.word.split("")); - word.image = RS_LANG_DATA + word.image; - return word; + async function loadWords(currentLevel) { + const res = await getWordsApi2(currentLevel); + + const stepWordShuffle = res.map((step) => shuffle(step)); + + const shuffleLetters = stepWordShuffle.map((words) => { + return words.map((word) => { + word.letter = shuffle(word.word.split("")); + word.image = RS_LANG_DATA + word.image; + return word; + }); }); - if (words === null) setWords(shuffle(upgradeRes)); - else { - setWords(words.concat(upgradeRes)); - setCount(count + 1); - setIsLoading(false); - } + console.log(shuffleLetters); + setArrWords(shuffleLetters); } useEffect(() => { - loadWords(level.level, level.page); + if (arrWords !== null) setWords(arrWords[stepCount]); + }, [arrWords]); + + useEffect(() => { + loadWords(level); }, [level]); - const addStatisticsUser = (user) => { - let userStat; - for (const key in statistics) { - if (key[name] === user.name) userStat = Object.create(key[name]); - } + // async function loadWords(currentLevel, page) { + // const res = await getWordsApi(currentLevel, page); + // let upgradeRes = await res.map((word) => { + // word.letter = shuffle(word.word.split("")); + // word.image = RS_LANG_DATA + word.image; + // return word; + // }); + + // if (words === null) setWords(shuffle(upgradeRes)); + // else { + // setWords(words.concat(upgradeRes)); + // setCount(count + 1); + // setIsLoading(false); + // } + // } - if (!userStat) userStat = { name: user, statistics: {} }; - }; + // const addStatisticsUser = (user) => { + // let userStat; + // for (const key in statistics) { + // if (key[name] === user.name) userStat = Object.create(key[name]); + // } + + // if (!userStat) userStat = { name: user, statistics: {} }; + // }; // useEffect(() => { // if(isAnswer) { @@ -88,13 +115,11 @@ const PlayingField = ({ isSound, user }) => { const onCheck = useCallback( (letters) => { if (letters.join("") === currentWord.word) { - console.log(`Right`); media[0].play(); setIsAnswer(true); imageRef.current.classList.add("allRight"); wordRef.current.classList.add("allRight"); } else { - console.log(`wrong`); media[1].play(); setIsAnswer(false); imageRef.current.classList.add("noActive"); @@ -110,10 +135,23 @@ const PlayingField = ({ isSound, user }) => { }, [currentWord]); useEffect(() => { + console.log(`words`); + console.log(words); if (words !== null) setCurrentWord(words[count]); }, [words]); useEffect(() => { + console.log(`stepCount`); + console.log(stepCount); + if (stepCount !== 0) { + setWords(arrWords[stepCount]); + setCount(0); + } + }, [stepCount]); + + useEffect(() => { + console.log(`count`); + console.log(count); setPercent(100); setIsCheck(false); if (words !== null) setCurrentWord(words[count]); @@ -128,7 +166,10 @@ const PlayingField = ({ isSound, user }) => { if (count < words.length - 1) setCount(count + 1); else { setIsLoading(true); - setLevel({ level: level.level, page: level.page + 1 }); + + if (stepCount < arrWords.length) { + modalNext(setStepCount, stepCount); + } else modalNext(setCount); } }; @@ -167,11 +208,11 @@ const PlayingField = ({ isSound, user }) => { />
- +
) : ( - + )} ); diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index 1e5183f..6115efb 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -21,6 +21,7 @@ flex-direction: row; justify-content:center; text-align: center; width: 100%; +flex-wrap: wrap; } .context_image{ border-radius: 10px; @@ -30,6 +31,7 @@ width: 100%; width: 100px; height: 100px; margin-top: 100px; + margin-bottom: 20px; } .context-playing_field{ diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js index fc44866..98a514d 100644 --- a/src/Components/StepsField/StepsField.js +++ b/src/Components/StepsField/StepsField.js @@ -1,11 +1,10 @@ import React, { useState, useEffect } from "react"; -import { Rate, Slider } from "antd"; - +import { Steps, Slider } from "antd"; +import { FireOutlined } from "@ant-design/icons"; +const { Step } = Steps; import "./StepsField.scss"; -let arrSteps = [1, 2, 3, 4, 5]; - -const StepsField = ({ media }) => { +const StepsField = ({ media,arrWords,count }) => { const [inputValue, setInputValue] = useState(70); useEffect(() => { @@ -22,12 +21,12 @@ const StepsField = ({ media }) => {
Steps:
- {arrSteps.map((el, i) => ( - - -
{i}
-
- ))} + + {arrWords.map((el, i) => + + )} + +
diff --git a/src/Components/StepsField/StepsField.scss b/src/Components/StepsField/StepsField.scss index 3090011..ba37b43 100644 --- a/src/Components/StepsField/StepsField.scss +++ b/src/Components/StepsField/StepsField.scss @@ -18,6 +18,8 @@ justify-content: space-between; flex-direction: row; flex-wrap: wrap; justify-content: space-around; + overflow: scroll; + padding: 5px; } .steps__field-context-item{ width: 70px; @@ -33,4 +35,7 @@ justify-content: space-between; height: 20%; padding: 10px 10px; border-top: 1px solid #2A9C50; +} +.steps__field-context-icon{ + font-size: 50px; } \ No newline at end of file diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index f7f0473..f28c72d 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -12,6 +12,7 @@ const WelcomForm = ({ language }) => { const startGame = (values) => { if (Object.values(values.user).every((e) => e !== undefined)) + console.log(values) setUser(values.user); }; diff --git a/src/utils/getWordsApi2.js b/src/utils/getWordsApi2.js new file mode 100644 index 0000000..cf71ddc --- /dev/null +++ b/src/utils/getWordsApi2.js @@ -0,0 +1,31 @@ +const getWordsSpeakit2 = async (group) => { + try { + let requests = new Array(30) + .fill("") + .map((page,i) => + fetch( + `https://afternoon-falls-25894.herokuapp.com/words?group=${group}&page=${i}` + ) + ); + console.log(requests); + let promise = await Promise.all(requests) + .then((responses) => { + for (let response of responses) { + if (!response.ok) { + throw new Error(`${response.url} : status = ${response.status}`); + } + } + return responses; + }) + .then((responses) => Promise.all(responses.map((data) => data.json()))) + .then((words) => words); + + let result = await promise; + + return result; + } catch (error) { + throw new Error(`Error in API - ${error.message}`); + } +}; + +export default getWordsSpeakit2; From e9afd059f852d775619948f76ab56a8ae8081e15 Mon Sep 17 00:00:00 2001 From: kli2m Date: Mon, 1 Mar 2021 20:05:39 +0300 Subject: [PATCH 11/16] feat: added field User --- src/Components/ModalNext/ModalNextLevel.js | 32 +++ src/Components/ModalNext/confirmAnswer.js | 22 ++ src/Components/ModalNext/modalNext.js | 45 ++-- src/Components/PlayingField/PlayingField.js | 112 +++++----- src/Components/StepsField/StepsField.js | 19 +- src/Components/StepsField/StepsField.scss | 6 +- src/Components/UserSetting/UserSetting.js | 25 +++ src/Components/UserSetting/UserSetting.scss | 15 ++ src/Components/WelcomeForm/WelcomForm.js | 224 ++++++++++---------- src/config/config.json | 12 ++ src/config/user.js | 28 +++ src/config/userStatistics.js | 16 ++ src/store/store.js | 5 + src/utils/createArr.js | 12 ++ src/utils/playAudio.js | 5 + 15 files changed, 379 insertions(+), 199 deletions(-) create mode 100644 src/Components/ModalNext/ModalNextLevel.js create mode 100644 src/Components/ModalNext/confirmAnswer.js create mode 100644 src/Components/UserSetting/UserSetting.js create mode 100644 src/Components/UserSetting/UserSetting.scss create mode 100644 src/config/config.json create mode 100644 src/config/user.js create mode 100644 src/config/userStatistics.js create mode 100644 src/store/store.js create mode 100644 src/utils/createArr.js create mode 100644 src/utils/playAudio.js diff --git a/src/Components/ModalNext/ModalNextLevel.js b/src/Components/ModalNext/ModalNextLevel.js new file mode 100644 index 0000000..a6d5d1e --- /dev/null +++ b/src/Components/ModalNext/ModalNextLevel.js @@ -0,0 +1,32 @@ +import React from 'react'; +import { Modal, Space } from 'antd'; +import { ExclamationCircleOutlined } from '@ant-design/icons'; + +const { confirm } = Modal; + +const ModalNextLevel = (level, setLevel, setStepCount) => { + + return ( + + {Modal.confirm( + { + title: `${level} completed !!!`, + content: ( +
'Ваш score равен ?? из возможного ??'
+ ), + okText: ` ${level < 2 ? "Перейти на следующий Уровень Сложности слов" : "Выйти в главное меню"} `, + cancelText: "Попробовать еще", + + onOk() { + level < 2 ? setLevel(Number(level) + 1) : setUser(null); + }, + onCancel() { + setStepCount(0) + }, + width: "70%", + } + )} +
+ ) +} +export default ModalNextLevel; \ No newline at end of file diff --git a/src/Components/ModalNext/confirmAnswer.js b/src/Components/ModalNext/confirmAnswer.js new file mode 100644 index 0000000..6692f2f --- /dev/null +++ b/src/Components/ModalNext/confirmAnswer.js @@ -0,0 +1,22 @@ +import React from 'react'; +import { Modal, Space } from 'antd'; +import { ExclamationCircleOutlined } from '@ant-design/icons'; + +const { confirm } = Modal; + +const confirmMessage=(setUser)=>{ + confirm({ + title: 'Вы действительно хотите выйти!', + icon: , + content: 'Some descriptions', + onOk() { + setUser(null) + }, + onCancel() { + + }, + }); + +} + +export default confirmMessage; \ No newline at end of file diff --git a/src/Components/ModalNext/modalNext.js b/src/Components/ModalNext/modalNext.js index 6bc0d0a..d2d3554 100644 --- a/src/Components/ModalNext/modalNext.js +++ b/src/Components/ModalNext/modalNext.js @@ -1,24 +1,31 @@ -import React from "react"; -import { Modal } from 'antd'; +import React from 'react'; +import { Modal, Space } from 'antd'; import { ExclamationCircleOutlined } from '@ant-design/icons'; -import WelcomeForm from '../WelcomeForm/WelcomForm' const { confirm } = Modal; -function modalNext(setStepCount,stepCount) { - confirm({ - title: 'Do you Want to delete these items?', - icon: , - content: 'Some descriptions', - okText:"Следующий Уровень", - cancelText:"Выйти в главное меню", - onOk() { - setStepCount(stepCount+1) - }, - onCancel() { - setCount(6) - }, - }); - } +const ModalNext = (setStepCount,stepCount,setCount) => { - export default modalNext \ No newline at end of file + return ( + + {Modal.confirm ( + { + title: `${stepCount} completed !!!`, + content: ( +
'Some descriptions'
+ ), + okText:"Следующий Шаг", + cancelText:"Попробовать еще", + onOk() { + setStepCount(stepCount+1) + }, + onCancel() { + setCount(0) + }, + width: "70%", + } + )} +
+ ) +} +export default ModalNext; \ No newline at end of file diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index c1fb3d9..2418731 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,25 +1,22 @@ import React, { useState, useEffect, useRef, useCallback } from "react"; import { - Tooltip, - Switch, - Button, + Typography, - Form, + Image, - Progress, - Spin, - Modal, + } from "antd"; import "./PlayingField.scss"; -import getWordsApi from "../../utils/getWordsApi"; import getWordsApi2 from "../../utils/getWordsApi2"; import shuffle from "../../utils/shuffle"; import Word from "../Word/Word"; import ProgressBox from "../ProgressBox/ProgressBox"; import AnswerBox from "../AnswerBox/AnswerBox"; import StepsField from "../StepsField/StepsField"; -import modalNext from "../ModalNext/modalNext"; +import ModalNext from "../ModalNext/ModalNext"; +import ModalNextLevel from "../ModalNext/ModalNextLevel"; +import UserSetting from "../UserSetting/UserSetting"; const RS_LANG_DATA = "https://raw.githubusercontent.com/kli2m/rslang-data/master/"; @@ -28,22 +25,22 @@ import soundWrong from "../../assets/audio//wrong-answer.mp3"; import soundSeconds from "../../assets/audio/seconds.mp3"; import imgLoading from "../../assets/img/loading.gif"; -const PlayingField = ({ isSound, user }) => { - const getLocalSt = localStorage.getItem("statistics") - ? localStorage.setItem("statistics") - : null; +const PlayingField = ({ isSound, user, setUser }) => { + + const [level, setLevel] = useState(user.wordsLevel); + const [arrWords, setArrWords] = useState(null); + const [stepCount, setStepCount] = useState(null); const [isLoading, setIsLoading] = useState(true); const [isCheck, setIsCheck] = useState(false); const [isAnswer, setIsAnswer] = useState(null); - const [arrWords, setArrWords] = useState(null); + const [words, setWords] = useState(null); const [currentWord, setCurrentWord] = useState(null); const [count, setCount] = useState(0); - const [stepCount, setStepCount] = useState(0); const [percent, setPercent] = useState(100); - const [statistics, setStatistics] = useState(getLocalSt); + //const [statistics, setStatistics] = useState(getLocalSt); const [media, setMedia] = useState([ new Audio(soundRight), new Audio(soundWrong), @@ -56,6 +53,8 @@ const PlayingField = ({ isSound, user }) => { const { Text, Title } = Typography; async function loadWords(currentLevel) { + setIsLoading(true) + const res = await getWordsApi2(currentLevel); const stepWordShuffle = res.map((step) => shuffle(step)); @@ -67,51 +66,23 @@ const PlayingField = ({ isSound, user }) => { return word; }); }); - - console.log(shuffleLetters); + console.log('await loaded') setArrWords(shuffleLetters); } useEffect(() => { + setIsLoading(true) if (arrWords !== null) setWords(arrWords[stepCount]); }, [arrWords]); useEffect(() => { - loadWords(level); + setIsLoading(true); + setCurrentWord(null) + setCount(0); + setStepCount(0); + loadWords(level); }, [level]); - // async function loadWords(currentLevel, page) { - // const res = await getWordsApi(currentLevel, page); - // let upgradeRes = await res.map((word) => { - // word.letter = shuffle(word.word.split("")); - // word.image = RS_LANG_DATA + word.image; - // return word; - // }); - - // if (words === null) setWords(shuffle(upgradeRes)); - // else { - // setWords(words.concat(upgradeRes)); - // setCount(count + 1); - // setIsLoading(false); - // } - // } - - // const addStatisticsUser = (user) => { - // let userStat; - // for (const key in statistics) { - // if (key[name] === user.name) userStat = Object.create(key[name]); - // } - - // if (!userStat) userStat = { name: user, statistics: {} }; - // }; - - // useEffect(() => { - // if(isAnswer) { - - // setStatistics(statistics) - // } - // }, [isAnswer]); - const onCheck = useCallback( (letters) => { if (letters.join("") === currentWord.word) { @@ -131,19 +102,24 @@ const PlayingField = ({ isSound, user }) => { ); useEffect(() => { - if (currentWord !== null) setIsLoading(false); + console.log(`currentWord`); + console.log(currentWord); + if (currentWord !== null) setIsLoading(false) }, [currentWord]); useEffect(() => { console.log(`words`); console.log(words); - if (words !== null) setCurrentWord(words[count]); + if (words !== null) { + setCurrentWord(words[count]); + } }, [words]); + useEffect(() => { console.log(`stepCount`); console.log(stepCount); - if (stepCount !== 0) { + if (stepCount !== null && arrWords !== null) { setWords(arrWords[stepCount]); setCount(0); } @@ -152,24 +128,30 @@ const PlayingField = ({ isSound, user }) => { useEffect(() => { console.log(`count`); console.log(count); + if (words === null) return; setPercent(100); setIsCheck(false); - if (words !== null) setCurrentWord(words[count]); + setCurrentWord(words[count]); setIsAnswer(false); imageRef.current ? imageRef.current.classList.remove("noActive") : null; wordRef.current ? wordRef.current.classList.remove("noActive") : null; imageRef.current ? imageRef.current.classList.remove("allRight") : null; - wordRef.current ? wordRef.current.classList.remove("allRight") : null; + wordRef.current ? wordRef.current.classList.remove("allRight") : null; }, [count]); const onHandleClickBtnNext = () => { - if (count < words.length - 1) setCount(count + 1); + // if (count < words.length - 1) setCount(count + 1); + if (count < 2) setCount(count + 1); else { setIsLoading(true); - - if (stepCount < arrWords.length) { - modalNext(setStepCount, stepCount); - } else modalNext(setCount); + // if (stepCount < arrWords.length) { + if (stepCount < 2) { + setIsLoading(true); + ModalNext(setStepCount, stepCount, setCount); + } else { + setIsLoading(true); + ModalNextLevel(level, setLevel, setStepCount); + } } }; @@ -177,7 +159,8 @@ const PlayingField = ({ isSound, user }) => { <> {!isLoading ? ( <> -
+ +
{ alt="Loading" fallback={`Error loading file ${currentWord.image}`} width="300px" + height="200px" src={currentWord.image} >
@@ -212,8 +196,8 @@ const PlayingField = ({ isSound, user }) => {
) : ( - - )} + + )} ); }; diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js index 98a514d..a3cd01b 100644 --- a/src/Components/StepsField/StepsField.js +++ b/src/Components/StepsField/StepsField.js @@ -1,12 +1,12 @@ import React, { useState, useEffect } from "react"; -import { Steps, Slider } from "antd"; +import { Steps, Slider,Typography } from "antd"; import { FireOutlined } from "@ant-design/icons"; const { Step } = Steps; import "./StepsField.scss"; const StepsField = ({ media,arrWords,count }) => { const [inputValue, setInputValue] = useState(70); - + const { Text, Title } = Typography; useEffect(() => { media.forEach((audio) => { audio.volume = inputValue / 100; @@ -19,16 +19,25 @@ const StepsField = ({ media,arrWords,count }) => { return (
-
Steps:
+
+ + <Text strong>Steps:</Text> + + +
{arrWords.map((el, i) => - + )} - +
+ + <Text strong>Volume control</Text> + +
diff --git a/src/Components/StepsField/StepsField.scss b/src/Components/StepsField/StepsField.scss index ba37b43..ed3ddef 100644 --- a/src/Components/StepsField/StepsField.scss +++ b/src/Components/StepsField/StepsField.scss @@ -8,6 +8,7 @@ display: flex; flex-direction: column; justify-content: space-between; +text-align: center; } .steps__field-title{ height: 10%; @@ -19,7 +20,7 @@ justify-content: space-between; flex-wrap: wrap; justify-content: space-around; overflow: scroll; - padding: 5px; + padding: 10%; } .steps__field-context-item{ width: 70px; @@ -32,6 +33,9 @@ justify-content: space-between; } .steps__field-sounds_settings{ + display: flex; +justify-content: center; +flex-direction: column; height: 20%; padding: 10px 10px; border-top: 1px solid #2A9C50; diff --git a/src/Components/UserSetting/UserSetting.js b/src/Components/UserSetting/UserSetting.js new file mode 100644 index 0000000..bc05c18 --- /dev/null +++ b/src/Components/UserSetting/UserSetting.js @@ -0,0 +1,25 @@ +import React, { useState, useEffect } from "react"; +import { Button, Slider,Typography } from "antd"; + +import confirmAnswer from "../ModalNext/confirmAnswer"; +import "./UserSetting.scss"; + +const UserSetting = ({user,setUser }) => { + const { Text, Title } = Typography; + + return ( +
+ + <Text strong>{user.name}</Text> + +
Score:
+ + +
+ + + + ); +}; + +export default UserSetting; diff --git a/src/Components/UserSetting/UserSetting.scss b/src/Components/UserSetting/UserSetting.scss new file mode 100644 index 0000000..3ce5aaa --- /dev/null +++ b/src/Components/UserSetting/UserSetting.scss @@ -0,0 +1,15 @@ +.user_setting{ + background-color: #7FE09F; + width: 20%; + position: absolute; + height: 20%; + left: 0; + bottom: 10%; + border-top: 1px solid #2A9C50; + border-right: 1px solid #2A9C50; + border-bottom: 1px solid #2A9C50; + display: flex; + flex-direction: column; + justify-content: space-around; + text-align: center; +} \ No newline at end of file diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index f28c72d..f48b34e 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -1,5 +1,5 @@ -import React, { useState } from "react"; -import { Tooltip, Switch, Button, Typography, Form, Select, Input } from "antd"; +import React, { useState, useRef } from "react"; +import { Tooltip, Switch, Button, Typography, Form, Select, Input, message } from "antd"; import "./WelcomForm.scss"; import PlayingField from "../PlayingField/PlayingField"; @@ -11,9 +11,22 @@ const WelcomForm = ({ language }) => { const { Text, Title } = Typography; const startGame = (values) => { - if (Object.values(values.user).every((e) => e !== undefined)) - console.log(values) - setUser(values.user); + + const { user } = values + + if (Object.values(user).every((e) => e !== undefined)) { + + if (user.name.length > 2 && user.name.length < 15) { + + const getLocalSt = localStorage.getItem("statistics") + ? localStorage.setItem("statistics") + : null; + + setUser(values.user) + } else { + message.error('Количество символов в поле Ник должно быть от 3 до 15') + } + } }; const onChangeIsSound = () => { @@ -24,117 +37,108 @@ const WelcomForm = ({ language }) => { <> <> {user ? ( - + ) : ( -
- - <Text strong>{language.welcom_page_title}</Text> - -
- - - - - - - - + + {language.welcom_page_placeholder_difficult_level_easy} + + + {language.welcom_page_placeholder_difficult_level_normal} + + + {language.welcom_page_placeholder_difficult_level_hard} + + + + + - - - -
- - - -
-
+ + { + language.welcom_page_placeholder_word_difficult_level_first + } + + + { + language.welcom_page_placeholder_word_difficult_level_second + } + + + { + language.welcom_page_placeholder_word_difficult_level_third + } + + + { + language.welcom_page_placeholder_word_difficult_level_fourth + } + + + { + language.welcom_page_placeholder_word_difficult_level_fifth + } + + + { + language.welcom_page_placeholder_word_difficult_level_sixth + } + + + + + +
+ + + +
+
- -
-
- )} + + +
+ )}
diff --git a/src/config/config.json b/src/config/config.json new file mode 100644 index 0000000..63db0d3 --- /dev/null +++ b/src/config/config.json @@ -0,0 +1,12 @@ +{ + "field":{ + "width":"500px", + "higth":"500px" + + }, + + "field1":3, + "field1":4, + "field1":5 + +} \ No newline at end of file diff --git a/src/config/user.js b/src/config/user.js new file mode 100644 index 0000000..118fc65 --- /dev/null +++ b/src/config/user.js @@ -0,0 +1,28 @@ +import userStatistics from './userStatistics' + + +export class user { +constructor(name,levelDifficulty,levelWord){ +this.name=name; +this.datesGames=[]; +this[new Date().toTimeString()]=new userStatistics(levelDifficulty,levelWord) +} + +addDateGames(){ + this.datesGames.push({[new Date().toTimeString()]:new userStatistics(levelDifficulty,levelWord)}) +} + +addWordChecked(){ + console.log( this.datesGames[this.datesGames.length-1]) +} + +getJson(){ + console.log(JSON.stringify(this)) +} + +// setDate(){ +// let nowDate=new Date().toTimeString() +// this[new Date().toTimeString()]=new userStatistics() +// } + +} \ No newline at end of file diff --git a/src/config/userStatistics.js b/src/config/userStatistics.js new file mode 100644 index 0000000..af8d3de --- /dev/null +++ b/src/config/userStatistics.js @@ -0,0 +1,16 @@ +export class userStatistics { + constructor(levelDifficulty,levelWord,word) { + this.levelDifficulty = levelDifficulty; + this.levelWord = levelWord; + this.statWords=[]; + } + + addedWord(){ + this.statWords.push(word) + } + + getStatWords(){ + return this.statWords + } + +} \ No newline at end of file diff --git a/src/store/store.js b/src/store/store.js new file mode 100644 index 0000000..4a14b68 --- /dev/null +++ b/src/store/store.js @@ -0,0 +1,5 @@ +import { createStore } from 'redux'; + +const store = createStore(reducer); + +export default store; \ No newline at end of file diff --git a/src/utils/createArr.js b/src/utils/createArr.js new file mode 100644 index 0000000..4f9662d --- /dev/null +++ b/src/utils/createArr.js @@ -0,0 +1,12 @@ +const createArr= (num)=> { + + const tempArr = []; + + for (let i = 1; i <= num*num ; i++) { + tempArr.push({ id: `el${i}`, name: `cell${i}`,index:i }); + } + + return tempArr; + } + + export default createArr; \ No newline at end of file diff --git a/src/utils/playAudio.js b/src/utils/playAudio.js new file mode 100644 index 0000000..2cfbb65 --- /dev/null +++ b/src/utils/playAudio.js @@ -0,0 +1,5 @@ +const playAnswer = (music) => { + const audio = new Audio(music); + audio.play(); +}; +export default playAnswer; From 156759a57ca875e8dd673709545202a76a6ec680 Mon Sep 17 00:00:00 2001 From: kli2m Date: Wed, 3 Mar 2021 18:48:35 +0300 Subject: [PATCH 12/16] feat: added user score --- src/App.js | 3 + src/App.scss | 7 +- src/Components/ModalNext/ModalNextLevel.js | 57 ++--- src/Components/ModalNext/modalNext.js | 9 +- src/Components/PlayingField/PlayingField.js | 211 +++++++++++------- src/Components/PlayingField/PlayingField.scss | 59 +++-- src/Components/ProgressBox/ProgressBox.js | 5 +- src/Components/Statistics/Statistics.js | 44 ++++ src/Components/Statistics/Statistics.scss | 3 + src/Components/StepsField/StepsField.js | 36 +-- src/Components/UserSetting/UserSetting.js | 10 +- src/Components/WelcomeForm/WelcomForm.js | 56 ++++- src/Components/WelcomeForm/WelcomForm.scss | 2 +- 13 files changed, 346 insertions(+), 156 deletions(-) create mode 100644 src/Components/Statistics/Statistics.js create mode 100644 src/Components/Statistics/Statistics.scss diff --git a/src/App.js b/src/App.js index 1eebe5c..d35e060 100644 --- a/src/App.js +++ b/src/App.js @@ -7,6 +7,9 @@ import En from './language/En.json'; const App = () => { + + localStorage.getItem("statistics")? {} : localStorage.setItem("statistics", JSON.stringify({})) + const [isStart, setIsStart] = useState(false); const [language,setLanguage] = useState(Ru); diff --git a/src/App.scss b/src/App.scss index e46de22..3d5c095 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,5 +1,7 @@ + + .letterSolver__wrapper{ - height: 100vh; + height: 100vh; width: 100%; display: flex; flex-direction: column; @@ -44,4 +46,5 @@ display: flex; flex-direction: row; justify-content: space-evenly; -} \ No newline at end of file +} + diff --git a/src/Components/ModalNext/ModalNextLevel.js b/src/Components/ModalNext/ModalNextLevel.js index a6d5d1e..78edb9a 100644 --- a/src/Components/ModalNext/ModalNextLevel.js +++ b/src/Components/ModalNext/ModalNextLevel.js @@ -1,32 +1,33 @@ -import React from 'react'; -import { Modal, Space } from 'antd'; -import { ExclamationCircleOutlined } from '@ant-design/icons'; +import React from "react"; +import { Modal, Space } from "antd"; +import { ExclamationCircleOutlined } from "@ant-design/icons"; const { confirm } = Modal; -const ModalNextLevel = (level, setLevel, setStepCount) => { +const ModalNextLevel = (level, setLevel, setStepCount, setUser, wordsLevelLocal) => { + return ( + + {Modal.confirm({ + title: `${level + 1} completed !!!`, + content:
'Ваш score равен ?? из возможного ??'
, + okText: ` ${ + level < 2 + ? "Перейти на следующий Уровень cложности слов" + : "Выйти в главное меню" + } `, + cancelText: ` ${ + level < 2 ? "Попробовать еще" : "Начать уровень заново" + } `, - return ( - - {Modal.confirm( - { - title: `${level} completed !!!`, - content: ( -
'Ваш score равен ?? из возможного ??'
- ), - okText: ` ${level < 2 ? "Перейти на следующий Уровень Сложности слов" : "Выйти в главное меню"} `, - cancelText: "Попробовать еще", - - onOk() { - level < 2 ? setLevel(Number(level) + 1) : setUser(null); - }, - onCancel() { - setStepCount(0) - }, - width: "70%", - } - )} -
- ) -} -export default ModalNextLevel; \ No newline at end of file + onOk() { + level < 2 ? setLevel(Number(level) + 1) : setUser(null); + }, + onCancel() { + setStepCount(0); + }, + width: "70%", + })} +
+ ); +}; +export default ModalNextLevel; diff --git a/src/Components/ModalNext/modalNext.js b/src/Components/ModalNext/modalNext.js index d2d3554..9be37bd 100644 --- a/src/Components/ModalNext/modalNext.js +++ b/src/Components/ModalNext/modalNext.js @@ -1,18 +1,19 @@ import React from 'react'; import { Modal, Space } from 'antd'; -import { ExclamationCircleOutlined } from '@ant-design/icons'; const { confirm } = Modal; -const ModalNext = (setStepCount,stepCount,setCount) => { +const ModalNext = (setStepCount,stepCount,setCount,wordsLevelLocal) => { return ( {Modal.confirm ( { - title: `${stepCount} completed !!!`, + title: `Step ${stepCount+1} completed !!!`, content: ( -
'Some descriptions'
+
+
Right : {wordsLevelLocal[stepCount].filter(e=>e.answer===true).length} Wrong: {wordsLevelLocal[stepCount].filter(e=>e.answer===false).length}
+
), okText:"Следующий Шаг", cancelText:"Попробовать еще", diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index 2418731..3473372 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -1,11 +1,5 @@ import React, { useState, useEffect, useRef, useCallback } from "react"; -import { - - Typography, - - Image, - -} from "antd"; +import { Typography, Image } from "antd"; import "./PlayingField.scss"; import getWordsApi2 from "../../utils/getWordsApi2"; @@ -14,7 +8,7 @@ import Word from "../Word/Word"; import ProgressBox from "../ProgressBox/ProgressBox"; import AnswerBox from "../AnswerBox/AnswerBox"; import StepsField from "../StepsField/StepsField"; -import ModalNext from "../ModalNext/ModalNext"; +import ModalNext from "../ModalNext/modalNext"; import ModalNextLevel from "../ModalNext/ModalNextLevel"; import UserSetting from "../UserSetting/UserSetting"; @@ -25,22 +19,32 @@ import soundWrong from "../../assets/audio//wrong-answer.mp3"; import soundSeconds from "../../assets/audio/seconds.mp3"; import imgLoading from "../../assets/img/loading.gif"; -const PlayingField = ({ isSound, user, setUser }) => { +const PlayingField = ({ isSound, user, setUser, statistics }) => { + + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + + const userLocal = getStatisticsLocal[user.name] + + const userScore = userLocal[score] - const [level, setLevel] = useState(user.wordsLevel); + const diffLevelLocal = userLocal[user.difficultLevel] + + const wordsLevelLocal = diffLevelLocal[user.wordsLevel] + + + const [level, setLevel] = useState(Number(user.wordsLevel)); const [arrWords, setArrWords] = useState(null); - const [stepCount, setStepCount] = useState(null); + const [stepCount, setStepCount] = useState(wordsLevelLocal.length); const [isLoading, setIsLoading] = useState(true); const [isCheck, setIsCheck] = useState(false); const [isAnswer, setIsAnswer] = useState(null); - + const [score, setScore] = useState(userScore); const [words, setWords] = useState(null); const [currentWord, setCurrentWord] = useState(null); - const [count, setCount] = useState(0); + const [count, setCount] = useState(null); const [percent, setPercent] = useState(100); - //const [statistics, setStatistics] = useState(getLocalSt); const [media, setMedia] = useState([ new Audio(soundRight), new Audio(soundWrong), @@ -50,11 +54,7 @@ const PlayingField = ({ isSound, user, setUser }) => { const imageRef = useRef(null); const wordRef = useRef(null); - const { Text, Title } = Typography; - async function loadWords(currentLevel) { - setIsLoading(true) - const res = await getWordsApi2(currentLevel); const stepWordShuffle = res.map((step) => shuffle(step)); @@ -66,21 +66,85 @@ const PlayingField = ({ isSound, user, setUser }) => { return word; }); }); - console.log('await loaded') setArrWords(shuffleLetters); } useEffect(() => { - setIsLoading(true) - if (arrWords !== null) setWords(arrWords[stepCount]); + if (arrWords !== null) { + setWords(arrWords[stepCount]); + setStepCount(0); + } }, [arrWords]); + + + useEffect(() => { + + if (isAnswer !== null) { + + let answerAndWord = { "word": currentWord, "answer": isAnswer } + + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + + const userLocal = getStatisticsLocal[user.name] + + const diffLevelLocal = userLocal[user.difficultLevel] + + const wordsLevelLocal = diffLevelLocal[user.wordsLevel] + + if (!wordsLevelLocal[stepCount]) wordsLevelLocal[stepCount] = [] + + const stepConstLocal = wordsLevelLocal[stepCount] + + stepConstLocal.push(answerAndWord) + + let scoreTemp = 0 + + for (const key in userLocal) { + + if (key === "60") { + for (const key2 in userLocal[key]) { + console.log(`60`) + userLocal[key][key2].forEach(el => { + console.log(el.filter(el => el.answer).length) + scoreTemp += el.filter(el => el.answer).length + }) + } + } + if (key === "40") { + for (const key2 in userLocal[key]) { + console.log(`40`) + userLocal[key][key2].forEach(el => { + console.log(el.filter(el => el.answer).length * 2) + scoreTemp += el.filter(el => el.answer).length * 2 + }) + } + } + if (key === "20") { + for (const key2 in userLocal[key]) { + console.log(`20`) + userLocal[key][key2].forEach(el => { + console.log(el.filter(el => el.answer).length * 3) + scoreTemp += el.filter(el => el.answer).length * 3 + }) + } + } + } + + userLocal["score"] = scoreTemp + + localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)) + + + + } + setIsAnswer(null) + + }, [isAnswer]); + useEffect(() => { setIsLoading(true); - setCurrentWord(null) - setCount(0); - setStepCount(0); - loadWords(level); + loadWords(level); }, [level]); const onCheck = useCallback( @@ -96,29 +160,23 @@ const PlayingField = ({ isSound, user, setUser }) => { imageRef.current.classList.add("noActive"); wordRef.current.classList.add("noActive"); } + setIsCheck(true); }, [currentWord] ); useEffect(() => { - console.log(`currentWord`); - console.log(currentWord); - if (currentWord !== null) setIsLoading(false) + if (currentWord !== null) setIsLoading(false); }, [currentWord]); useEffect(() => { - console.log(`words`); - console.log(words); - if (words !== null) { - setCurrentWord(words[count]); + if (words !== null) { + setCount(0); } }, [words]); - useEffect(() => { - console.log(`stepCount`); - console.log(stepCount); if (stepCount !== null && arrWords !== null) { setWords(arrWords[stepCount]); setCount(0); @@ -126,17 +184,15 @@ const PlayingField = ({ isSound, user, setUser }) => { }, [stepCount]); useEffect(() => { - console.log(`count`); - console.log(count); + if (count === null) return; if (words === null) return; setPercent(100); setIsCheck(false); setCurrentWord(words[count]); - setIsAnswer(false); imageRef.current ? imageRef.current.classList.remove("noActive") : null; wordRef.current ? wordRef.current.classList.remove("noActive") : null; imageRef.current ? imageRef.current.classList.remove("allRight") : null; - wordRef.current ? wordRef.current.classList.remove("allRight") : null; + wordRef.current ? wordRef.current.classList.remove("allRight") : null; }, [count]); const onHandleClickBtnNext = () => { @@ -145,59 +201,62 @@ const PlayingField = ({ isSound, user, setUser }) => { else { setIsLoading(true); // if (stepCount < arrWords.length) { - if (stepCount < 2) { + if (Number(stepCount) < 2) { setIsLoading(true); - ModalNext(setStepCount, stepCount, setCount); + ModalNext(setStepCount, stepCount, setCount, wordsLevelLocal); } else { setIsLoading(true); - ModalNextLevel(level, setLevel, setStepCount); + ModalNextLevel(level, setLevel, setStepCount, setUser, wordsLevelLocal); } } }; return ( <> + + {!isLoading ? ( - <> - - -
- + +
+
+ Loading +
+ + -
-
- Loading -
- - -
- -
- +
) : ( )} + + {arrWords ? + + : + <> + } +
); }; diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index 6115efb..8994320 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -1,3 +1,43 @@ +@media screen and (max-width: 768px){ +.context-progress_bar { + width: 50px; + height: 50px; + margin: 10px 0; +} +.context{ + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + width: 100%; + flex-wrap: wrap; + align-items: center; +} +.context-playing_field{ + width: 100%; +} +} + +@media screen and (min-width: 768px){ + .context-progress_bar{ + width: 100px; + height: 100px; + margin-top: 100px; + margin-bottom: 20px; + } + .context{ + display: flex; + flex-direction: row; + justify-content:center; + text-align: center; + width: 100%; + flex-wrap: wrap; + } + .context-playing_field{ + width: 550px; + } + } + .playingField { border: 3px solid #99b097; display: flex; @@ -15,25 +55,12 @@ justify-content: center; align-items: center; } -.context{ - display: flex; -flex-direction: row; -justify-content:center; -text-align: center; -width: 100%; -flex-wrap: wrap; -} + .context_image{ border-radius: 10px; } -.context-progress_bar{ - width: 100px; - height: 100px; - margin-top: 100px; - margin-bottom: 20px; - -} + .context-playing_field{ display: flex; flex-direction: column; @@ -41,7 +68,7 @@ justify-content: space-between; align-items: center; margin: 10px; padding: 10px; -width: 550px; + height: 500px; } diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js index c3dc31c..dc82866 100644 --- a/src/Components/ProgressBox/ProgressBox.js +++ b/src/Components/ProgressBox/ProgressBox.js @@ -1,5 +1,5 @@ -import React, { useState, useEffect } from "react"; -import { Progress, Tooltip } from "antd"; +import React, { useEffect } from "react"; +import { Progress } from "antd"; import "./ProgressBox.scss"; const ProgressBox = ({ @@ -10,6 +10,7 @@ const ProgressBox = ({ isCheck, onCheck, }) => { + useEffect(() => { if (!isCheck) { if (percent > 1) { diff --git a/src/Components/Statistics/Statistics.js b/src/Components/Statistics/Statistics.js new file mode 100644 index 0000000..884a93c --- /dev/null +++ b/src/Components/Statistics/Statistics.js @@ -0,0 +1,44 @@ +import React from 'react'; +import { Modal, Space, Typography } from 'antd'; + +import './Statistics.scss' + +const { info } = Modal; +const { Text, Title } = Typography; + +const Statistics = () => { + + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + + console.log(Object.keys(getStatisticsLocal)) + return ( + + {Modal.info( + { + + title: `Statistics`, + content: ( +
+
    + + {Object.keys(getStatisticsLocal).map((e, i) => { + + return
  • {e} - {getStatisticsLocal[e].score}
  • + + })} + +
+
+ + ), + okText: "Ok", + onOk() { + + }, + width: "70%", + } + )} +
+ ) +} +export default Statistics; \ No newline at end of file diff --git a/src/Components/Statistics/Statistics.scss b/src/Components/Statistics/Statistics.scss new file mode 100644 index 0000000..d6c8e4b --- /dev/null +++ b/src/Components/Statistics/Statistics.scss @@ -0,0 +1,3 @@ +.statistics_item{ + width:80%; +} \ No newline at end of file diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js index a3cd01b..3e4c230 100644 --- a/src/Components/StepsField/StepsField.js +++ b/src/Components/StepsField/StepsField.js @@ -1,10 +1,11 @@ import React, { useState, useEffect } from "react"; -import { Steps, Slider,Typography } from "antd"; +import { Steps, Slider, Typography } from "antd"; import { FireOutlined } from "@ant-design/icons"; const { Step } = Steps; import "./StepsField.scss"; -const StepsField = ({ media,arrWords,count }) => { +const StepsField = ({ media, arrWords, count, statistics, stepCount }) => { + const [inputValue, setInputValue] = useState(70); const { Text, Title } = Typography; useEffect(() => { @@ -17,27 +18,30 @@ const StepsField = ({ media,arrWords,count }) => { setInputValue(value); }; + return (
- - <Text strong>Steps:</Text> - - -
+ + <Text strong>Steps:</Text> + + +
- - {arrWords.map((el, i) => - - )} + + {arrWords.map((el, i, arr) => { + if (i < stepCount) return e.answer===true).length} Wrong: ${statistics[i].filter(e=>e.answer===false).length}`} /> + else if (i === stepCount) return + else return + })} - +
- - <Text strong>Volume control</Text> - - + + <Text strong>Volume control 🤩</Text> + +
diff --git a/src/Components/UserSetting/UserSetting.js b/src/Components/UserSetting/UserSetting.js index bc05c18..30bd2a3 100644 --- a/src/Components/UserSetting/UserSetting.js +++ b/src/Components/UserSetting/UserSetting.js @@ -2,18 +2,24 @@ import React, { useState, useEffect } from "react"; import { Button, Slider,Typography } from "antd"; import confirmAnswer from "../ModalNext/confirmAnswer"; +import Statistics from '../Statistics/Statistics' + import "./UserSetting.scss"; const UserSetting = ({user,setUser }) => { const { Text, Title } = Typography; + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + + const userLocal = getStatisticsLocal[user.name] + return (
<Text strong>{user.name}</Text> -
Score:
- +
Score: {userLocal["score"]?userLocal["score"]:"0"}
+
diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index f48b34e..50fe79a 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -4,8 +4,15 @@ import "./WelcomForm.scss"; import PlayingField from "../PlayingField/PlayingField"; + const WelcomForm = ({ language }) => { + + const valueLocalStorage = useRef(localStorage.getItem("statistics")); + + if (!valueLocalStorage.current) localStorage.setItem("statistics", JSON.stringify({})) + const [user, setUser] = useState(null); + const [statistics, setStatistics] = useState(localStorage.getItem("statistics")) const [isSound, setIsSound] = useState(true); const { Text, Title } = Typography; @@ -16,16 +23,47 @@ const WelcomForm = ({ language }) => { if (Object.values(user).every((e) => e !== undefined)) { - if (user.name.length > 2 && user.name.length < 15) { + const findUserLocal = JSON.parse(valueLocalStorage.current) + + if (!findUserLocal[user.name]) { + + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + + getStatisticsLocal[user.name] = { + score: 0, + [user.difficultLevel]: { + [user.wordsLevel]: [] + } + } + + localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)) + + setStatistics(localStorage.getItem("statistics")) + + } else { + + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + + const userLocal = getStatisticsLocal[user.name] + + if (!userLocal[user.difficultLevel]) userLocal[user.difficultLevel] = { [user.wordsLevel]: [] } + + else { + + const diffLevel = userLocal[user.difficultLevel] + + if (!diffLevel[user.wordsLevel]) diffLevel[user.wordsLevel] = [] + + } + + localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)) + + setStatistics(Object.assign(getStatisticsLocal)) - const getLocalSt = localStorage.getItem("statistics") - ? localStorage.setItem("statistics") - : null; + } setUser(values.user) - } else { - message.error('Количество символов в поле Ник должно быть от 3 до 15') - } + } }; @@ -36,8 +74,8 @@ const WelcomForm = ({ language }) => { return ( <> <> - {user ? ( - + {user && statistics ? ( + ) : (
diff --git a/src/Components/WelcomeForm/WelcomForm.scss b/src/Components/WelcomeForm/WelcomForm.scss index ebb0c70..748d57d 100644 --- a/src/Components/WelcomeForm/WelcomForm.scss +++ b/src/Components/WelcomeForm/WelcomForm.scss @@ -4,6 +4,6 @@ .letterSolver__settings{ background-color: #57D481; padding: 40px; -width:500px; +width:400px; border-radius: 6px; } \ No newline at end of file From b4daaaf41833133d110acc9b4ad3ad31515dece7 Mon Sep 17 00:00:00 2001 From: kli2m <ivanklimm87@gmail.com> Date: Wed, 3 Mar 2021 22:58:20 +0300 Subject: [PATCH 13/16] feat: added full scren --- src/App.js | 140 ++++++++++++++------ src/App.scss | 22 +++ src/Components/ModalNext/modalNext.js | 10 +- src/Components/PlayingField/PlayingField.js | 120 ++++++++--------- src/Components/ProgressBox/ProgressBox.js | 5 +- src/Components/StepsField/StepsField.js | 12 +- src/Components/UserSetting/UserSetting.js | 8 +- src/Components/WelcomeForm/WelcomForm.js | 4 +- src/Components/Word/Word.js | 5 +- src/assets/img/github.png | Bin 0 -> 1714 bytes src/index.html | 2 +- src/language/En.json | 34 ++++- src/language/Ru.json | 26 +++- webpack.config.js | 52 ++++---- 14 files changed, 288 insertions(+), 152 deletions(-) create mode 100644 src/assets/img/github.png diff --git a/src/App.js b/src/App.js index d35e060..e3ed85b 100644 --- a/src/App.js +++ b/src/App.js @@ -1,17 +1,26 @@ import React, { useState } from "react"; -import { Tooltip, Switch, Button, Typography, Form, Progress, Collapse } from "antd"; +import { + Tooltip, + Switch, + Button, + Typography, + Form, + Progress, + Collapse, +} from "antd"; import "./App.scss"; -import WelcomForm from './Components/WelcomeForm/WelcomForm'; -import Ru from './language/Ru.json'; -import En from './language/En.json'; - +import WelcomForm from "./Components/WelcomeForm/WelcomForm"; +import Ru from "./language/Ru.json"; +import En from "./language/En.json"; +import imgGit from "./assets/img/github.png"; const App = () => { - - localStorage.getItem("statistics")? {} : localStorage.setItem("statistics", JSON.stringify({})) + localStorage.getItem("statistics") + ? {} + : localStorage.setItem("statistics", JSON.stringify({})); const [isStart, setIsStart] = useState(false); - const [language,setLanguage] = useState(Ru); + const [language, setLanguage] = useState(Ru); const { Text, Title } = Typography; const { Panel } = Collapse; @@ -19,65 +28,110 @@ const App = () => { setIsStart(true); }; + const fullScrenn = () => { + const elem = elem || document.documentElement; + if ( + !document.fullscreenElement && + !document.mozFullScreenElement && + !document.webkitFullscreenElement && + !document.msFullscreenElement + ) { + if (elem.requestFullscreen) { + elem.requestFullscreen(); + } else if (elem.msRequestFullscreen) { + elem.msRequestFullscreen(); + } else if (elem.mozRequestFullScreen) { + elem.mozRequestFullScreen(); + } else if (elem.webkitRequestFullscreen) { + elem.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); + } + } else { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } + } + }; return ( <div className="letterSolver__wrapper"> <div className="letterSolver__wrapper-header"> - <Tooltip placement="bottom" title={language.main_page_tooltip_title} color="magenta" > - <Switch - onChange={(isVal)=>isVal?setLanguage(En):setLanguage(Ru)} + <Switch + onChange={(isVal) => (isVal ? setLanguage(En) : setLanguage(Ru))} checkedChildren="En" - unCheckedChildren="Ru" + unCheckedChildren="Ru" /> </Tooltip> - + <div + className="letterSolver__wrapper-header-btn_full_screen" + onClick={fullScrenn} + > + F11 + </div> </div> {isStart ? ( <WelcomForm language={language} /> ) : ( - <div className="letterSolver__wrapper-start_game"> - <Title level={1} className="letterSolver__start_game-title"> - <Text strong>{language.main_page_title}</Text> - - - <Text strong> - {language.main_page_phrase} - </Text> - - - -

{language.main_page_collapse_panel_text}

-
-
- -
- )} +
+ + <Text strong>{language.main_page_title}</Text> + + + <Text strong>{language.main_page_phrase}</Text> + + + +

{language.main_page_collapse_panel_text}

+
{language.main_page_collapse_panel_text_context}
+
+
+ +
+ )}
- ); - }; export default App; diff --git a/src/App.scss b/src/App.scss index 3d5c095..23cb352 100644 --- a/src/App.scss +++ b/src/App.scss @@ -46,5 +46,27 @@ display: flex; flex-direction: row; justify-content: space-evenly; + padding-bottom: 10px; + } +.letterSolver__wrapper-header-btn_full_screen{ + position: absolute; + text-align: center; + left: 50%; + border: 1px solid darkgreen; + border-radius: 5px; + cursor: pointer; + user-select: none; + width: 45px; + height: 25px; + background-color: rgba(77, 255, 60, 0.75); + &:hover{ + background-color: springgreen; + } +} + +.footer_item{ + width: 100px; + height: 50px; +} \ No newline at end of file diff --git a/src/Components/ModalNext/modalNext.js b/src/Components/ModalNext/modalNext.js index 9be37bd..2887066 100644 --- a/src/Components/ModalNext/modalNext.js +++ b/src/Components/ModalNext/modalNext.js @@ -3,20 +3,20 @@ import { Modal, Space } from 'antd'; const { confirm } = Modal; -const ModalNext = (setStepCount,stepCount,setCount,wordsLevelLocal) => { +const ModalNext = (setStepCount,stepCount,setCount,wordsLevelLocal,language) => { return ( {Modal.confirm ( { - title: `Step ${stepCount+1} completed !!!`, + title: `${language.modal_next_page_title_step} ${stepCount+1} ${language.modal_next_page_title_completed} !!!`, content: (
-
Right : {wordsLevelLocal[stepCount].filter(e=>e.answer===true).length} Wrong: {wordsLevelLocal[stepCount].filter(e=>e.answer===false).length}
+
{language.modal_next_page_content_right} : {wordsLevelLocal[stepCount].filter(e=>e.answer===true).length} {language.modal_next_page_content_wrong} {wordsLevelLocal[stepCount].filter(e=>e.answer===false).length}
), - okText:"Следующий Шаг", - cancelText:"Попробовать еще", + okText:`${language.modal_next_page_btn_next}`, + cancelText:`${language.modal_next_page_btn_repeat}`, onOk() { setStepCount(stepCount+1) }, diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index 3473372..f5f06bb 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -19,20 +19,16 @@ import soundWrong from "../../assets/audio//wrong-answer.mp3"; import soundSeconds from "../../assets/audio/seconds.mp3"; import imgLoading from "../../assets/img/loading.gif"; +const PlayingField = ({ isSound, user, setUser, statistics, language }) => { + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")); + const userLocal = getStatisticsLocal[user.name]; -const PlayingField = ({ isSound, user, setUser, statistics }) => { + const userScore = userLocal[score]; - const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) - - const userLocal = getStatisticsLocal[user.name] - - const userScore = userLocal[score] - - const diffLevelLocal = userLocal[user.difficultLevel] - - const wordsLevelLocal = diffLevelLocal[user.wordsLevel] + const diffLevelLocal = userLocal[user.difficultLevel]; + const wordsLevelLocal = diffLevelLocal[user.wordsLevel]; const [level, setLevel] = useState(Number(user.wordsLevel)); const [arrWords, setArrWords] = useState(null); @@ -76,70 +72,61 @@ const PlayingField = ({ isSound, user, setUser, statistics }) => { } }, [arrWords]); - - useEffect(() => { - if (isAnswer !== null) { + let answerAndWord = { word: currentWord, answer: isAnswer }; - let answerAndWord = { "word": currentWord, "answer": isAnswer } - - const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")); - const userLocal = getStatisticsLocal[user.name] + const userLocal = getStatisticsLocal[user.name]; - const diffLevelLocal = userLocal[user.difficultLevel] + const diffLevelLocal = userLocal[user.difficultLevel]; - const wordsLevelLocal = diffLevelLocal[user.wordsLevel] + const wordsLevelLocal = diffLevelLocal[user.wordsLevel]; - if (!wordsLevelLocal[stepCount]) wordsLevelLocal[stepCount] = [] + if (!wordsLevelLocal[stepCount]) wordsLevelLocal[stepCount] = []; - const stepConstLocal = wordsLevelLocal[stepCount] + const stepConstLocal = wordsLevelLocal[stepCount]; - stepConstLocal.push(answerAndWord) + stepConstLocal.push(answerAndWord); - let scoreTemp = 0 + let scoreTemp = 0; for (const key in userLocal) { - if (key === "60") { for (const key2 in userLocal[key]) { - console.log(`60`) - userLocal[key][key2].forEach(el => { - console.log(el.filter(el => el.answer).length) - scoreTemp += el.filter(el => el.answer).length - }) + console.log(`60`); + userLocal[key][key2].forEach((el) => { + console.log(el.filter((el) => el.answer).length); + scoreTemp += el.filter((el) => el.answer).length; + }); } } if (key === "40") { for (const key2 in userLocal[key]) { - console.log(`40`) - userLocal[key][key2].forEach(el => { - console.log(el.filter(el => el.answer).length * 2) - scoreTemp += el.filter(el => el.answer).length * 2 - }) + console.log(`40`); + userLocal[key][key2].forEach((el) => { + console.log(el.filter((el) => el.answer).length * 2); + scoreTemp += el.filter((el) => el.answer).length * 2; + }); } } if (key === "20") { for (const key2 in userLocal[key]) { - console.log(`20`) - userLocal[key][key2].forEach(el => { - console.log(el.filter(el => el.answer).length * 3) - scoreTemp += el.filter(el => el.answer).length * 3 - }) + console.log(`20`); + userLocal[key][key2].forEach((el) => { + console.log(el.filter((el) => el.answer).length * 3); + scoreTemp += el.filter((el) => el.answer).length * 3; + }); } } } - userLocal["score"] = scoreTemp - - localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)) - - + userLocal["score"] = scoreTemp; + localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)); } - setIsAnswer(null) - + setIsAnswer(null); }, [isAnswer]); useEffect(() => { @@ -196,28 +183,33 @@ const PlayingField = ({ isSound, user, setUser, statistics }) => { }, [count]); const onHandleClickBtnNext = () => { - // if (count < words.length - 1) setCount(count + 1); - if (count < 2) setCount(count + 1); + if (count < words.length - 1) setCount(count + 1); + else { setIsLoading(true); - // if (stepCount < arrWords.length) { - if (Number(stepCount) < 2) { + if (Number(stepCount) < arrWords.length) { setIsLoading(true); - ModalNext(setStepCount, stepCount, setCount, wordsLevelLocal); + ModalNext(setStepCount, stepCount, setCount, wordsLevelLocal, language); } else { setIsLoading(true); - ModalNextLevel(level, setLevel, setStepCount, setUser, wordsLevelLocal); + ModalNextLevel(level, setLevel, setStepCount, setUser, wordsLevelLocal,language); } } }; return ( <> - + {!isLoading ? (
{ isCheck={isCheck} onHandleClickBtnNext={onHandleClickBtnNext} wordRef={wordRef} + language={language} />
) : ( - - )} - - {arrWords ? - - : + + )} + + {arrWords ? ( + + ) : ( <> - } + )}
); diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js index dc82866..753478f 100644 --- a/src/Components/ProgressBox/ProgressBox.js +++ b/src/Components/ProgressBox/ProgressBox.js @@ -9,6 +9,7 @@ const ProgressBox = ({ difficultLevel, isCheck, onCheck, + language }) => { useEffect(() => { @@ -34,8 +35,8 @@ const ProgressBox = ({ percent={percent} format={(percent) => percent > 1 - ? `${Math.ceil((percent / 100) * difficultLevel)} seconds` - : `you lose!` + ? `${Math.ceil((percent / 100) * difficultLevel)} ${language.progress_page_seconds_text}` + : `${language.progress_page_seconds_lose}` } strokeColor="#2A9C50" trailColor="red" diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js index 3e4c230..3fe0331 100644 --- a/src/Components/StepsField/StepsField.js +++ b/src/Components/StepsField/StepsField.js @@ -4,7 +4,7 @@ import { FireOutlined } from "@ant-design/icons"; const { Step } = Steps; import "./StepsField.scss"; -const StepsField = ({ media, arrWords, count, statistics, stepCount }) => { +const StepsField = ({language, media, arrWords, count, statistics, stepCount }) => { const [inputValue, setInputValue] = useState(70); const { Text, Title } = Typography; @@ -23,23 +23,23 @@ const StepsField = ({ media, arrWords, count, statistics, stepCount }) => {
- <Text strong>Steps:</Text> + <Text strong>{language.steps_page_title}</Text>
{arrWords.map((el, i, arr) => { - if (i < stepCount) return e.answer===true).length} Wrong: ${statistics[i].filter(e=>e.answer===false).length}`} /> - else if (i === stepCount) return - else return + if (i < stepCount) return e.answer===true).length} ${language.steps_page_item_wrong} ${statistics[i].filter(e=>e.answer===false).length}`} /> + else if (i === stepCount) return + else return })}
- <Text strong>Volume control 🤩</Text> + <Text strong>{language.steps_page_volume_title}</Text> diff --git a/src/Components/UserSetting/UserSetting.js b/src/Components/UserSetting/UserSetting.js index 30bd2a3..3746d32 100644 --- a/src/Components/UserSetting/UserSetting.js +++ b/src/Components/UserSetting/UserSetting.js @@ -6,7 +6,7 @@ import Statistics from '../Statistics/Statistics' import "./UserSetting.scss"; -const UserSetting = ({user,setUser }) => { +const UserSetting = ({user,setUser,language }) => { const { Text, Title } = Typography; const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) @@ -18,9 +18,9 @@ const UserSetting = ({user,setUser }) => { <Text strong>{user.name}</Text> -
Score: {userLocal["score"]?userLocal["score"]:"0"}
- - +
{language.user_settings_page_score} {userLocal["score"]?userLocal["score"]:"0"}
+ +
diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index 50fe79a..0debd94 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -150,7 +150,7 @@ const WelcomForm = ({ language }) => { - + {/*
{ />
-
+
*/}
{isCheck ? ( ) : ( )} diff --git a/src/assets/img/github.png b/src/assets/img/github.png new file mode 100644 index 0000000000000000000000000000000000000000..8b25551a97921681334176ee143b41510a117d86 GIT binary patch literal 1714 zcmaJ?X;2eq7*4oFu!ne{XxAht2qc?8LXr|_LPCfTpaBK7K$c{I0Ld=NLIOeuC;@2) zZ$K%a)k+m-s0>xHmKxL%0V&0TRzzznhgyqrIC$F)0{WwLXLrBvd*^wc_uSc%h%m9E z{W5z3f#4_!7RvAyFh6!S_*<8qJ%KOIm?#E|L=rJQq=gB5C6WLG5;c?r%V0>EmEH#X z5eSwPRa6WXBMs#$5H%GtW2go-in9p>zW@UYDNNWc^XOXZQ? z1QjEV00I#$3^1wQUJ8&-2UsjB-G|9y(LDhMNN3PM{APL4eYi{(m*ERcUnJa{R+-3^ z34^A6;U^v`8N*O6ji%S@sd{fJqD`XFIUJ5zgTe5^5nj414F(y!G&=H(f)Lgzv?>%+ zAsWD}2qhpH7>|TU`X&W6IxDNuO_vET7|j5oG&&VDr!)hUO8+0KR?nh!m<)a!?|%yG zqOwq!CWCcIhE{<$E|F|@g>nP6FoYr6C<8>D?ID9%&5J(4oSbR1I^byW*g@__U z4QsF&uJSEcFeleM3~ChjEQGbHOjsGDMbyAl(p=Ttv9RaVo8~I#js@@Y9C^_2U})yn zzSHU%6FxuY?d;&65MyR({^lU*3$z$ZllDb(o&<7d;A_`h2U+3~BJ2Hv`{W}KEU801#cv_B|9Cm!ynR{S`AMsSn z;7E=B;mb!wx$L;S>yGXG^6=&WlQn9$s?&L%Y1D8TI^MlKB1DqsEng$>f4=xYWBoPI z_S1p!sJ#d2?YI4kPA{k}Eby?F=f-J9zIc`YDl^pzjVm~9ebE?Hn?t0Nx+la|D0MB; z9)2xv1G>a1|A9kQ>~DV<=X3-4yC&n!m8-3K#P z{X@0zRuQsy$+N ziSCoLJU{Z$nQy4A4Y5UJ07$5FA~qL2%Q+cLaqDU?Lz3?=BC5;Nk6BbTmmceEaM>-Z zi>O&-dSE=%ex;vcvCOk{*JQ5^_4M z4lW7%l9IqY(z7pV(?I@@8=KPFO82)O{VDI18-*d-k$YmI^XiuPs_LuFw<^ZcD}yP5 c*NrbeloN*74g`U%%F6r~k%+>C^#XapzmV0H-2eap literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index c8712f8..40f7c40 100644 --- a/src/index.html +++ b/src/index.html @@ -3,7 +3,7 @@ - Document + Solved Letters
diff --git a/src/language/En.json b/src/language/En.json index 0872bc7..09cb9c6 100644 --- a/src/language/En.json +++ b/src/language/En.json @@ -4,6 +4,7 @@ "main_page_phrase": "Training improves your listening comprehension in English.", "main_page_collapse_panel_header": "Click to read instruction...", "main_page_collapse_panel_text": "Instruction...", + "main_page_collapse_panel_text_context":"The rules of the game are very simple. You need to collect as quickly as possible a word from the available letters of the English alphabet, changing the order of the letters. An approximate word clue lies in the provided image above the letter combination. As soon as you collect the word, you must quickly click on the Check button, depending on the correct or incorrect composition of the letters, the account will (will not) be replenished with game points. The difficulty level is determined before the start of the game: Easy - 60 seconds are given for an answer, each guessed word brings 1 point; Normal - 40 seconds are given to answer, each guessed word is worth 2 points; Hard - 20 seconds are given to answer, each guessed word is worth 3 points; The text bank of the 'Letter Generator' game is not perfect, but nevertheless, this game will still enrich the vocabulary of English words and will delight you with new discoveries. Enjoy your passage at any time!", "main_page_btn_start": "Click to start", "welcom_page_title": "Set initial values", "welcom_page_label_name": "Nick:", @@ -26,5 +27,36 @@ "welcom_page_label_sound_on": "ON", "welcom_page_label_sound_off": "OFF", "welcom_page_tooltip_label_sound": "Click to on/off for play sound", - "welcom_page_btn_next": "Next" + "welcom_page_btn_next": "Next", + + "progress_page_seconds_text": "seconds", + "progress_page_seconds_lose": "You lose!", + + "word_page_btn_next": "Next", + "word_page_btn_check": "Check", + + "steps_page_title": "Steps: ", + "steps_page_item_title": "Step ", + "steps_page_item_right": "Right: ", + "steps_page_item_wrong": "Wrong: ", + "steps_page_volume_title": "Volume control", + + "user_settings_page_score": "Score: ", + "user_settings_page_show_statistics": "Show statistics", + "user_settings_page_exit": "Exit to the main menu", + + "modal_next_page_title_step": "Step ", + "modal_next_page_title_completed": "completed ", + "modal_next_page_content_right": "Right: ", + "modal_next_page_content_wrong": "Wrong: ", + "modal_next_page_btn_next": "Next step", + "modal_next_page_btn_repeat": "Try again" + + + + + + + + } \ No newline at end of file diff --git a/src/language/Ru.json b/src/language/Ru.json index 862e1c8..ed27d4b 100644 --- a/src/language/Ru.json +++ b/src/language/Ru.json @@ -4,6 +4,7 @@ "main_page_phrase": "Тренировка улучшает восприятие английской речи на слух.", "main_page_collapse_panel_header": "Нажми для прочтения инструкции ... ", "main_page_collapse_panel_text": "Инструкция...", + "main_page_collapse_panel_text_context":"Правила игры очень просты. Нужно собрать как можно быстрее слово из доступных букв английского алфавита, меняя порядок букв. Примерная подсказка слова кроется в предоставленном изображении над комбинацией букв. Как только соберете слово, необходимо скорее нажать на кнопку Проверить, в зависимости от верного или не верного составления букв будет (не будет) пополняться счёт игровыми баллами. Уровень сложности определяется перед началом игры: Легкий - дается 60 секунд на ответ, каждое угаданное слово приносит 1 балл; Нормальный - дается 40 секунд на ответ, каждое угаданное слово приносит 2 балла; Тяжелый - дается 20 секунд на ответ, каждое угаданное слово приносит 3 балла; Текстовый банк игры «Генератор букв» не идеален, но тем не менее данная игра всё же обогатит словарный запас английских слов и порадует новыми открытиями. Приятного прохождения в любое время!", "main_page_btn_start": "Нажми чтобы начать", "welcom_page_title": "Установите начальные значения", "welcom_page_label_name": "Ник:", @@ -26,5 +27,28 @@ "welcom_page_label_sound_on": "Вкл", "welcom_page_label_sound_off": "Выкл", "welcom_page_tooltip_label_sound": "Нажми ВКЛ/ВЫКЛ для проигрывания музыки", - "welcom_page_btn_next": "Далее" + "welcom_page_btn_next": "Далее", + + "progress_page_seconds_text": "секунд", + "progress_page_seconds_lose": "Вы проиграли!", + + "word_page_btn_next": "Далее", + "word_page_btn_check": "Проверить", + + "steps_page_title": "Шаги: ", + "steps_page_item_title": "Шаг ", + "steps_page_item_right": "Верно: ", + "steps_page_item_wrong": "Ошибок: ", + "steps_page_volume_title": "Контоль звука", + + "user_settings_page_score": "Баллы: ", + "user_settings_page_show_statistics": "Показать статистику", + "user_settings_page_exit": "Выйти в главное меню", + + "modal_next_page_title_step": "Шаг ", + "modal_next_page_title_completed": "завершен ", + "modal_next_page_content_right": "Верно: ", + "modal_next_page_content_wrong": "Неправильно: ", + "modal_next_page_btn_next": "Следующий шаг", + "modal_next_page_btn_repeat": "Повторить" } \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 0429229..2513bd2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -18,12 +18,12 @@ module.exports = (env, options) => { }, devServer: { contentBase: path.join(__dirname, "/dist"), - compress: true, + // compress: true, port: 9000, - watchContentBase: true, - progress: true, - overlay: true, - open: true, + // watchContentBase: true, + // progress: true, + // overlay: true, + // open: true, }, module: { rules: [ @@ -36,6 +36,7 @@ module.exports = (env, options) => { // fix: true, // }, // }, + { test: /\.m?js$/, exclude: /(node_modules|bower_components)/, @@ -43,19 +44,20 @@ module.exports = (env, options) => { loader: "babel-loader", }, }, + { test: /\.(sa|sc|c)ss$/, use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"], }, { - test: /\.(png|jpe?g|gif|svg)$/i, + test: /\.(png|jpe?g|gif|svg|mp3)$/i, exclude: [/node_modules/], loader: "file-loader", - options: { - name: "assets/[contenthash].[ext]", - outputPath: "assets/", - publicPath: "assets/", - }, + // options: { + // name: "assets/[contenthash].[ext]", + // outputPath: "assets/", + // publicPath: "assets/", + // }, }, { test: /\.html$/i, @@ -68,24 +70,24 @@ module.exports = (env, options) => { new HtmlWebpackPlugin({ template: "./src/index.html", inject: true, - minify: { - removeComments: true, - collapseWhitespace: true, - removeAttributeQuotes: true, - }, + // minify: { + // removeComments: true, + // collapseWhitespace: true, + // removeAttributeQuotes: true, + // }, }), new MiniCssExtractPlugin({ filename: "style.css", }), - new CopyPlugin({ - patterns: [ - { from: "./src/assets/img", to: "assets/img" }, - { from: "./src/assets/audio", to: "assets/audio" }, - ], - options: { - concurrency: 100, - }, - }), + // new CopyPlugin({ + // patterns: [ + // { from: "./src/assets/img", to: "assets/img" }, + // { from: "./src/assets/audio", to: "assets/audio" }, + // ], + // options: { + // concurrency: 100, + // }, + // }), ], }; return config; From a911c36b7de804292a7ab8b1a02a94da23d3d0fb Mon Sep 17 00:00:00 2001 From: kli2m Date: Wed, 3 Mar 2021 23:22:45 +0300 Subject: [PATCH 14/16] refactor: fix code --- src/App.scss | 33 +-- src/Components/AnswerBox/AnswerBox.js | 51 ++-- src/Components/AnswerBox/AnswerBox.scss | 4 +- src/Components/Cell/Cell.js | 19 +- src/Components/Cell/Cell.scss | 4 +- src/Components/ModalNext/ModalNextLevel.js | 10 +- src/Components/ModalNext/confirmAnswer.js | 33 +-- src/Components/ModalNext/modalNext.js | 74 +++-- src/Components/PlayingField/PlayingField.js | 20 +- src/Components/PlayingField/PlayingField.scss | 106 ++++---- src/Components/ProgressBox/ProgressBox.js | 11 +- src/Components/ProgressBox/ProgressBox.scss | 4 +- src/Components/Statistics/Statistics.js | 71 +++-- src/Components/Statistics/Statistics.scss | 6 +- src/Components/StepsField/StepsField.js | 54 +++- src/Components/UserSetting/UserSetting.js | 48 ++-- src/Components/UserSetting/UserSetting.scss | 12 +- src/Components/WelcomeForm/WelcomForm.js | 256 +++++++++--------- src/Components/WelcomeForm/WelcomForm.scss | 14 +- src/Components/Word/Word.js | 4 +- src/config/config.json | 12 - src/config/user.js | 28 -- src/config/userStatistics.js | 16 -- src/index.js | 12 +- src/language/En.json | 8 +- src/language/Ru.json | 3 +- src/store/store.js | 5 - src/utils/createArr.js | 12 - src/utils/getDate.js | 5 - src/utils/getWordsApi2.js | 3 +- webpack.config.js | 56 ++-- 31 files changed, 486 insertions(+), 508 deletions(-) delete mode 100644 src/config/config.json delete mode 100644 src/config/user.js delete mode 100644 src/config/userStatistics.js delete mode 100644 src/store/store.js delete mode 100644 src/utils/createArr.js delete mode 100644 src/utils/getDate.js diff --git a/src/App.scss b/src/App.scss index 23cb352..5565e7c 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,17 +1,14 @@ - - -.letterSolver__wrapper{ - height: 100vh; +.letterSolver__wrapper { + height: 100vh; width: 100%; display: flex; flex-direction: column; - justify-content: space-between ; + justify-content: space-between; align-items: center; - background-color:#A7EABD; + background-color: #a7eabd; } - -.letterSolver__wrapper-header{ +.letterSolver__wrapper-header { width: 100%; display: flex; flex-direction: row; @@ -20,37 +17,35 @@ padding: 30px 50px 10px 100px; } -.letterSolver__main{ - +.letterSolver__main { width: inherit; display: flex; flex-direction: column; - justify-content: space-around ; + justify-content: space-around; align-items: center; } -.letterSolver__start_game{ +.letterSolver__start_game { border: 4px solid blueviolet; border-radius: 5px; padding: 20px; } -.letterSolver__wrapper-start_game{ +.letterSolver__wrapper-start_game { display: flex; flex-direction: column; justify-content: space-between; align-items: center; height: 300px; } -.letterSolver__wrapper-footer{ +.letterSolver__wrapper-footer { width: 100%; display: flex; flex-direction: row; justify-content: space-evenly; padding-bottom: 10px; - } -.letterSolver__wrapper-header-btn_full_screen{ +.letterSolver__wrapper-header-btn_full_screen { position: absolute; text-align: center; left: 50%; @@ -61,12 +56,12 @@ width: 45px; height: 25px; background-color: rgba(77, 255, 60, 0.75); - &:hover{ + &:hover { background-color: springgreen; } } -.footer_item{ +.footer_item { width: 100px; height: 50px; -} \ No newline at end of file +} diff --git a/src/Components/AnswerBox/AnswerBox.js b/src/Components/AnswerBox/AnswerBox.js index a7ca5d8..8196fe9 100644 --- a/src/Components/AnswerBox/AnswerBox.js +++ b/src/Components/AnswerBox/AnswerBox.js @@ -1,22 +1,39 @@ import React, { useState, useEffect, useRef } from "react"; -import { Tooltip, Switch, Button, Typography, Form, Image, Progress } from "antd"; -import './AnswerBox.scss' +import { + Tooltip, + Switch, + Button, + Typography, + Form, + Image, + Progress, +} from "antd"; +import "./AnswerBox.scss"; - -const AnswerBox=({currentWord,isCheck})=>{ - const { Text, Title } = Typography; - return ( -
- {isCheck? - - <Text type="secondary" > <div className="context_answer-translate">{currentWord.wordTranslate}</div> </Text> - <Text type="warning"> <div className="context_answer-transcription">{currentWord.transcription}</div> </Text> +const AnswerBox = ({ currentWord, isCheck }) => { + const { Text, Title } = Typography; + return ( + <div className="context_answer"> + {isCheck ? ( + <Title level={4} className="text_loading"> + <Text type="secondary"> + {" "} + <div className="context_answer-translate"> + {currentWord.wordTranslate} + </div>{" "} + </Text> + <Text type="warning"> + {" "} + <div className="context_answer-transcription"> + {currentWord.transcription} + </div>{" "} + </Text> - : + ) : ( <> - } -
- ) -} + )} + + ); +}; -export default AnswerBox \ No newline at end of file +export default AnswerBox; diff --git a/src/Components/AnswerBox/AnswerBox.scss b/src/Components/AnswerBox/AnswerBox.scss index 1e4c393..a256c03 100644 --- a/src/Components/AnswerBox/AnswerBox.scss +++ b/src/Components/AnswerBox/AnswerBox.scss @@ -1,4 +1,4 @@ -.context_answer{ +.context_answer { height: 50px; user-select: none; -} \ No newline at end of file +} diff --git a/src/Components/Cell/Cell.js b/src/Components/Cell/Cell.js index 6bd1a69..33af174 100644 --- a/src/Components/Cell/Cell.js +++ b/src/Components/Cell/Cell.js @@ -1,17 +1,16 @@ -import React from 'react'; +import React from "react"; -import './Cell.scss' - -const Cell = ({valueCell,provided}) => { +import "./Cell.scss"; +const Cell = ({ valueCell, provided }) => { return ( -
- {valueCell} + {valueCell}
); }; diff --git a/src/Components/Cell/Cell.scss b/src/Components/Cell/Cell.scss index bb429ec..5d72d82 100644 --- a/src/Components/Cell/Cell.scss +++ b/src/Components/Cell/Cell.scss @@ -15,6 +15,6 @@ display: flex; user-select: none; font-size: xx-large; -font-weight: bold; -color: darkgreen; + font-weight: bold; + color: darkgreen; } diff --git a/src/Components/ModalNext/ModalNextLevel.js b/src/Components/ModalNext/ModalNextLevel.js index 78edb9a..41bf8d1 100644 --- a/src/Components/ModalNext/ModalNextLevel.js +++ b/src/Components/ModalNext/ModalNextLevel.js @@ -4,12 +4,18 @@ import { ExclamationCircleOutlined } from "@ant-design/icons"; const { confirm } = Modal; -const ModalNextLevel = (level, setLevel, setStepCount, setUser, wordsLevelLocal) => { +const ModalNextLevel = ( + level, + setLevel, + setStepCount, + setUser, + wordsLevelLocal +) => { return ( {Modal.confirm({ title: `${level + 1} completed !!!`, - content:
'Ваш score равен ?? из возможного ??'
, + content:
Finish
, okText: ` ${ level < 2 ? "Перейти на следующий Уровень cложности слов" diff --git a/src/Components/ModalNext/confirmAnswer.js b/src/Components/ModalNext/confirmAnswer.js index 6692f2f..104590f 100644 --- a/src/Components/ModalNext/confirmAnswer.js +++ b/src/Components/ModalNext/confirmAnswer.js @@ -1,22 +1,19 @@ -import React from 'react'; -import { Modal, Space } from 'antd'; -import { ExclamationCircleOutlined } from '@ant-design/icons'; +import React from "react"; +import { Modal, Space } from "antd"; +import { ExclamationCircleOutlined } from "@ant-design/icons"; const { confirm } = Modal; -const confirmMessage=(setUser)=>{ - confirm({ - title: 'Вы действительно хотите выйти!', - icon: , - content: 'Some descriptions', - onOk() { - setUser(null) - }, - onCancel() { - - }, - }); - -} +const confirmMessage = (setUser, language) => { + confirm({ + title: `${language.modal_exit_page_text}`, + icon: , + content: "", + onOk() { + setUser(null); + }, + onCancel() {}, + }); +}; -export default confirmMessage; \ No newline at end of file +export default confirmMessage; diff --git a/src/Components/ModalNext/modalNext.js b/src/Components/ModalNext/modalNext.js index 2887066..299e571 100644 --- a/src/Components/ModalNext/modalNext.js +++ b/src/Components/ModalNext/modalNext.js @@ -1,32 +1,48 @@ -import React from 'react'; -import { Modal, Space } from 'antd'; +import React from "react"; +import { Modal, Space } from "antd"; const { confirm } = Modal; -const ModalNext = (setStepCount,stepCount,setCount,wordsLevelLocal,language) => { - - return ( - - {Modal.confirm ( - { - title: `${language.modal_next_page_title_step} ${stepCount+1} ${language.modal_next_page_title_completed} !!!`, - content: ( -
-
{language.modal_next_page_content_right} : {wordsLevelLocal[stepCount].filter(e=>e.answer===true).length} {language.modal_next_page_content_wrong} {wordsLevelLocal[stepCount].filter(e=>e.answer===false).length}
-
- ), - okText:`${language.modal_next_page_btn_next}`, - cancelText:`${language.modal_next_page_btn_repeat}`, - onOk() { - setStepCount(stepCount+1) - }, - onCancel() { - setCount(0) - }, - width: "70%", - } - )} -
- ) -} -export default ModalNext; \ No newline at end of file +const ModalNext = ( + setStepCount, + stepCount, + setCount, + wordsLevelLocal, + language +) => { + return ( + + {Modal.confirm({ + title: `${language.modal_next_page_title_step} ${stepCount + 1} ${ + language.modal_next_page_title_completed + } !!!`, + content: ( +
+
+ {language.modal_next_page_content_right} :{" "} + { + wordsLevelLocal[stepCount].filter((e) => e.answer === true) + .length + }{" "} + {language.modal_next_page_content_wrong}{" "} + { + wordsLevelLocal[stepCount].filter((e) => e.answer === false) + .length + } +
+
+ ), + okText: `${language.modal_next_page_btn_next}`, + cancelText: `${language.modal_next_page_btn_repeat}`, + onOk() { + setStepCount(stepCount + 1); + }, + onCancel() { + setCount(0); + }, + width: "70%", + })} +
+ ); +}; +export default ModalNext; diff --git a/src/Components/PlayingField/PlayingField.js b/src/Components/PlayingField/PlayingField.js index f5f06bb..8864fd3 100644 --- a/src/Components/PlayingField/PlayingField.js +++ b/src/Components/PlayingField/PlayingField.js @@ -95,27 +95,21 @@ const PlayingField = ({ isSound, user, setUser, statistics, language }) => { for (const key in userLocal) { if (key === "60") { for (const key2 in userLocal[key]) { - console.log(`60`); userLocal[key][key2].forEach((el) => { - console.log(el.filter((el) => el.answer).length); scoreTemp += el.filter((el) => el.answer).length; }); } } if (key === "40") { for (const key2 in userLocal[key]) { - console.log(`40`); userLocal[key][key2].forEach((el) => { - console.log(el.filter((el) => el.answer).length * 2); scoreTemp += el.filter((el) => el.answer).length * 2; }); } } if (key === "20") { for (const key2 in userLocal[key]) { - console.log(`20`); userLocal[key][key2].forEach((el) => { - console.log(el.filter((el) => el.answer).length * 3); scoreTemp += el.filter((el) => el.answer).length * 3; }); } @@ -183,16 +177,22 @@ const PlayingField = ({ isSound, user, setUser, statistics, language }) => { }, [count]); const onHandleClickBtnNext = () => { - if (count < words.length - 1) setCount(count + 1); - + if (count < words.length - 1) setCount(count + 1); else { setIsLoading(true); - if (Number(stepCount) < arrWords.length) { + if (Number(stepCount) < arrWords.length) { setIsLoading(true); ModalNext(setStepCount, stepCount, setCount, wordsLevelLocal, language); } else { setIsLoading(true); - ModalNextLevel(level, setLevel, setStepCount, setUser, wordsLevelLocal,language); + ModalNextLevel( + level, + setLevel, + setStepCount, + setUser, + wordsLevelLocal, + language + ); } } }; diff --git a/src/Components/PlayingField/PlayingField.scss b/src/Components/PlayingField/PlayingField.scss index 8994320..8302c16 100644 --- a/src/Components/PlayingField/PlayingField.scss +++ b/src/Components/PlayingField/PlayingField.scss @@ -1,42 +1,42 @@ -@media screen and (max-width: 768px){ -.context-progress_bar { - width: 50px; - height: 50px; - margin: 10px 0; -} -.context{ - display: flex; - flex-direction: column; - justify-content: center; - text-align: center; - width: 100%; - flex-wrap: wrap; - align-items: center; -} -.context-playing_field{ - width: 100%; -} +@media screen and (max-width: 768px) { + .context-progress_bar { + width: 50px; + height: 50px; + margin: 10px 0; + } + .context { + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + width: 100%; + flex-wrap: wrap; + align-items: center; + } + .context-playing_field { + width: 100%; + } } -@media screen and (min-width: 768px){ - .context-progress_bar{ +@media screen and (min-width: 768px) { + .context-progress_bar { width: 100px; height: 100px; margin-top: 100px; - margin-bottom: 20px; + margin-bottom: 20px; } - .context{ + .context { display: flex; - flex-direction: row; - justify-content:center; - text-align: center; - width: 100%; - flex-wrap: wrap; + flex-direction: row; + justify-content: center; + text-align: center; + width: 100%; + flex-wrap: wrap; } - .context-playing_field{ + .context-playing_field { width: 550px; } - } +} .playingField { border: 3px solid #99b097; @@ -49,58 +49,60 @@ border-radius: 5px; } -.cells{ +.cells { display: flex; flex-direction: row; justify-content: center; align-items: center; } -.context_image{ +.context_image { border-radius: 10px; - } -.context-playing_field{ +.context-playing_field { display: flex; -flex-direction: column; -justify-content: space-between; -align-items: center; -margin: 10px; -padding: 10px; + flex-direction: column; + justify-content: space-between; + align-items: center; + margin: 10px; + padding: 10px; -height: 500px; + height: 500px; } .context_btn_next .context_btn_check { margin: 20px 0; } -.noActive{ +.noActive { pointer-events: none; - box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75) ; - -webkit-box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75) ; - -moz-box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75) ; + box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75); + -webkit-box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75); + -moz-box-shadow: 0px 0px 9px 5px rgba(231, 70, 70, 0.75); border: 2px solid red; - animation: 0.01s tremor ease-out ; + animation: 0.01s tremor ease-out; } -.allRight{ +.allRight { pointer-events: none; - box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75) ; - -webkit-box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75) ; - -moz-box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75) ; + box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75); + -webkit-box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75); + -moz-box-shadow: 0px 0px 9px 5px rgba(77, 255, 60, 0.75); border: 2px solid rgba(77, 255, 60, 0.75); } @keyframes tremor { - 0% , 25% { + 0%, + 25% { left: -0.5px; transform: translateX(-4%); } - 50%, 100% { left: 0.5px; - transform: translateX(4%); + 50%, + 100% { + left: 0.5px; + transform: translateX(4%); + } } -} diff --git a/src/Components/ProgressBox/ProgressBox.js b/src/Components/ProgressBox/ProgressBox.js index 753478f..660cb69 100644 --- a/src/Components/ProgressBox/ProgressBox.js +++ b/src/Components/ProgressBox/ProgressBox.js @@ -1,5 +1,5 @@ -import React, { useEffect } from "react"; -import { Progress } from "antd"; +import React, { useEffect } from "react"; +import { Progress } from "antd"; import "./ProgressBox.scss"; const ProgressBox = ({ @@ -9,9 +9,8 @@ const ProgressBox = ({ difficultLevel, isCheck, onCheck, - language + language, }) => { - useEffect(() => { if (!isCheck) { if (percent > 1) { @@ -35,7 +34,9 @@ const ProgressBox = ({ percent={percent} format={(percent) => percent > 1 - ? `${Math.ceil((percent / 100) * difficultLevel)} ${language.progress_page_seconds_text}` + ? `${Math.ceil((percent / 100) * difficultLevel)} ${ + language.progress_page_seconds_text + }` : `${language.progress_page_seconds_lose}` } strokeColor="#2A9C50" diff --git a/src/Components/ProgressBox/ProgressBox.scss b/src/Components/ProgressBox/ProgressBox.scss index 4b9520e..bb1e223 100644 --- a/src/Components/ProgressBox/ProgressBox.scss +++ b/src/Components/ProgressBox/ProgressBox.scss @@ -1,6 +1,6 @@ -.context-progress_bar-cirle{ +.context-progress_bar-cirle { cursor: not-allowed; width: 150px; height: 150px; user-select: none; -} \ No newline at end of file +} diff --git a/src/Components/Statistics/Statistics.js b/src/Components/Statistics/Statistics.js index 884a93c..0a07c15 100644 --- a/src/Components/Statistics/Statistics.js +++ b/src/Components/Statistics/Statistics.js @@ -1,44 +1,39 @@ -import React from 'react'; -import { Modal, Space, Typography } from 'antd'; +import React from "react"; +import { Modal, Space, Typography } from "antd"; -import './Statistics.scss' +import "./Statistics.scss"; const { info } = Modal; const { Text, Title } = Typography; const Statistics = () => { - - const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) - - console.log(Object.keys(getStatisticsLocal)) - return ( - - {Modal.info( - { - - title: `Statistics`, - content: ( -
-
    - - {Object.keys(getStatisticsLocal).map((e, i) => { - - return
  • {e} - {getStatisticsLocal[e].score}
  • - - })} - -
-
- - ), - okText: "Ok", - onOk() { - - }, - width: "70%", - } - )} -
- ) -} -export default Statistics; \ No newline at end of file + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")); + + console.log(Object.keys(getStatisticsLocal)); + return ( + + {Modal.info({ + title: `Statistics`, + content: ( +
+
    + {Object.keys(getStatisticsLocal).map((e, i) => { + return ( +
  • + {" "} + {e} -{" "} + {getStatisticsLocal[e].score}{" "} +
  • + ); + })} +
+
+ ), + okText: "Ok", + onOk() {}, + width: "70%", + })} +
+ ); +}; +export default Statistics; diff --git a/src/Components/Statistics/Statistics.scss b/src/Components/Statistics/Statistics.scss index d6c8e4b..bfdc395 100644 --- a/src/Components/Statistics/Statistics.scss +++ b/src/Components/Statistics/Statistics.scss @@ -1,3 +1,3 @@ -.statistics_item{ - width:80%; -} \ No newline at end of file +.statistics_item { + width: 80%; +} diff --git a/src/Components/StepsField/StepsField.js b/src/Components/StepsField/StepsField.js index 3fe0331..b7c719b 100644 --- a/src/Components/StepsField/StepsField.js +++ b/src/Components/StepsField/StepsField.js @@ -4,8 +4,14 @@ import { FireOutlined } from "@ant-design/icons"; const { Step } = Steps; import "./StepsField.scss"; -const StepsField = ({language, media, arrWords, count, statistics, stepCount }) => { - +const StepsField = ({ + language, + media, + arrWords, + count, + statistics, + stepCount, +}) => { const [inputValue, setInputValue] = useState(70); const { Text, Title } = Typography; useEffect(() => { @@ -18,28 +24,50 @@ const StepsField = ({language, media, arrWords, count, statistics, stepCount }) setInputValue(value); }; - return (
- - <Text strong>{language.steps_page_title}</Text> + <Title level={4}> + <Text strong>{language.steps_page_title}</Text> -
- + {arrWords.map((el, i, arr) => { - if (i < stepCount) return e.answer===true).length} ${language.steps_page_item_wrong} ${statistics[i].filter(e=>e.answer===false).length}`} /> - else if (i === stepCount) return - else return + if (i < stepCount) + return ( + e.answer === true).length + } ${language.steps_page_item_wrong} ${ + statistics[i].filter((e) => e.answer === false).length + }`} + /> + ); + else if (i === stepCount) + return ( + + ); + else + return ( + + ); })} -
- - <Text strong>{language.steps_page_volume_title}</Text> + <Title level={5}> + <Text strong>{language.steps_page_volume_title}</Text> diff --git a/src/Components/UserSetting/UserSetting.js b/src/Components/UserSetting/UserSetting.js index 3746d32..c94b3bf 100644 --- a/src/Components/UserSetting/UserSetting.js +++ b/src/Components/UserSetting/UserSetting.js @@ -1,31 +1,35 @@ import React, { useState, useEffect } from "react"; -import { Button, Slider,Typography } from "antd"; +import { Button, Slider, Typography } from "antd"; import confirmAnswer from "../ModalNext/confirmAnswer"; -import Statistics from '../Statistics/Statistics' +import Statistics from "../Statistics/Statistics"; import "./UserSetting.scss"; -const UserSetting = ({user,setUser,language }) => { - const { Text, Title } = Typography; - - const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) - - const userLocal = getStatisticsLocal[user.name] - - return ( -
- - <Text strong>{user.name}</Text> - -
{language.user_settings_page_score} {userLocal["score"]?userLocal["score"]:"0"}
- - -
- - - - ); +const UserSetting = ({ user, setUser, language }) => { + const { Text, Title } = Typography; + + const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")); + + const userLocal = getStatisticsLocal[user.name]; + + return ( +
+ + <Text strong>{user.name}</Text> + +
+ {language.user_settings_page_score}{" "} + {userLocal["score"] ? userLocal["score"] : "0"} +
+ + +
+ ); }; export default UserSetting; diff --git a/src/Components/UserSetting/UserSetting.scss b/src/Components/UserSetting/UserSetting.scss index 3ce5aaa..0bf5229 100644 --- a/src/Components/UserSetting/UserSetting.scss +++ b/src/Components/UserSetting/UserSetting.scss @@ -1,15 +1,15 @@ -.user_setting{ - background-color: #7FE09F; +.user_setting { + background-color: #7fe09f; width: 20%; position: absolute; height: 20%; left: 0; bottom: 10%; - border-top: 1px solid #2A9C50; - border-right: 1px solid #2A9C50; - border-bottom: 1px solid #2A9C50; + border-top: 1px solid #2a9c50; + border-right: 1px solid #2a9c50; + border-bottom: 1px solid #2a9c50; display: flex; flex-direction: column; justify-content: space-around; text-align: center; -} \ No newline at end of file +} diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index 0debd94..112a844 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -1,69 +1,74 @@ import React, { useState, useRef } from "react"; -import { Tooltip, Switch, Button, Typography, Form, Select, Input, message } from "antd"; +import { + Tooltip, + Switch, + Button, + Typography, + Form, + Select, + Input, + message, +} from "antd"; import "./WelcomForm.scss"; import PlayingField from "../PlayingField/PlayingField"; - const WelcomForm = ({ language }) => { - const valueLocalStorage = useRef(localStorage.getItem("statistics")); - if (!valueLocalStorage.current) localStorage.setItem("statistics", JSON.stringify({})) + if (!valueLocalStorage.current) + localStorage.setItem("statistics", JSON.stringify({})); const [user, setUser] = useState(null); - const [statistics, setStatistics] = useState(localStorage.getItem("statistics")) + const [statistics, setStatistics] = useState( + localStorage.getItem("statistics") + ); const [isSound, setIsSound] = useState(true); const { Text, Title } = Typography; const startGame = (values) => { - - const { user } = values + const { user } = values; if (Object.values(user).every((e) => e !== undefined)) { + const findUserLocal = JSON.parse(valueLocalStorage.current); - const findUserLocal = JSON.parse(valueLocalStorage.current) - - if (!findUserLocal[user.name]) { - - const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) - - getStatisticsLocal[user.name] = { - score: 0, - [user.difficultLevel]: { - [user.wordsLevel]: [] - } - } - - localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)) - - setStatistics(localStorage.getItem("statistics")) - - } else { - - const getStatisticsLocal = JSON.parse(localStorage.getItem("statistics")) + if (!findUserLocal[user.name]) { + const getStatisticsLocal = JSON.parse( + localStorage.getItem("statistics") + ); - const userLocal = getStatisticsLocal[user.name] + getStatisticsLocal[user.name] = { + score: 0, + [user.difficultLevel]: { + [user.wordsLevel]: [], + }, + }; - if (!userLocal[user.difficultLevel]) userLocal[user.difficultLevel] = { [user.wordsLevel]: [] } + localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)); - else { + setStatistics(localStorage.getItem("statistics")); + } else { + const getStatisticsLocal = JSON.parse( + localStorage.getItem("statistics") + ); - const diffLevel = userLocal[user.difficultLevel] + const userLocal = getStatisticsLocal[user.name]; - if (!diffLevel[user.wordsLevel]) diffLevel[user.wordsLevel] = [] + if (!userLocal[user.difficultLevel]) + userLocal[user.difficultLevel] = { [user.wordsLevel]: [] }; + else { + const diffLevel = userLocal[user.difficultLevel]; - } - - localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)) + if (!diffLevel[user.wordsLevel]) diffLevel[user.wordsLevel] = []; + } - setStatistics(Object.assign(getStatisticsLocal)) + localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)); - } + setStatistics(Object.assign(getStatisticsLocal)); + } - setUser(values.user) - + setUser(values.user); } }; @@ -75,82 +80,91 @@ const WelcomForm = ({ language }) => { <> <> {user && statistics ? ( - + ) : ( -
- - <Text strong>{language.welcom_page_title}</Text> - -
- + + <Text strong>{language.welcom_page_title}</Text> + + + + + + + - - + {language.welcom_page_placeholder_difficult_level_easy} + + + {language.welcom_page_placeholder_difficult_level_normal} + + + {language.welcom_page_placeholder_difficult_level_hard} + + + + + - - {language.welcom_page_placeholder_difficult_level_easy} - - - {language.welcom_page_placeholder_difficult_level_normal} - - - {language.welcom_page_placeholder_difficult_level_hard} - - - - - - - - {/* + + + { + language.welcom_page_placeholder_word_difficult_level_fourth + } + + + { + language.welcom_page_placeholder_word_difficult_level_fifth + } + + + { + language.welcom_page_placeholder_word_difficult_level_sixth + } + + + + + {/*
{
*/} - - -
- )} + + +
+ )}
diff --git a/src/Components/WelcomeForm/WelcomForm.scss b/src/Components/WelcomeForm/WelcomForm.scss index 748d57d..9c02ca3 100644 --- a/src/Components/WelcomeForm/WelcomForm.scss +++ b/src/Components/WelcomeForm/WelcomForm.scss @@ -1,9 +1,9 @@ -.letterSolver__autoplay_box{ +.letterSolver__autoplay_box { text-align: right; } -.letterSolver__settings{ - background-color: #57D481; -padding: 40px; -width:400px; -border-radius: 6px; -} \ No newline at end of file +.letterSolver__settings { + background-color: #57d481; + padding: 40px; + width: 400px; + border-radius: 6px; +} diff --git a/src/Components/Word/Word.js b/src/Components/Word/Word.js index 471d068..ddc1df1 100644 --- a/src/Components/Word/Word.js +++ b/src/Components/Word/Word.js @@ -9,7 +9,7 @@ const Word = ({ isCheck, onHandleClickBtnNext, wordRef, - language + language, }) => { const [letters, setLetters] = useState(wordSplit); @@ -59,7 +59,7 @@ const Word = ({
{isCheck ? ( ) : ( + + {/* +

{language.main_page_collapse_panel_text}

{language.main_page_collapse_panel_text_context}
- -
+ + */} + - + ); }; diff --git a/src/Components/UserSetting/UserSetting.scss b/src/Components/UserSetting/UserSetting.scss index 0bf5229..d87a78c 100644 --- a/src/Components/UserSetting/UserSetting.scss +++ b/src/Components/UserSetting/UserSetting.scss @@ -1,15 +1,47 @@ -.user_setting { - background-color: #7fe09f; - width: 20%; - position: absolute; - height: 20%; - left: 0; - bottom: 10%; - border-top: 1px solid #2a9c50; - border-right: 1px solid #2a9c50; - border-bottom: 1px solid #2a9c50; +.user_setting-block_btn{ display: flex; - flex-direction: column; + flex-direction: row; justify-content: space-around; text-align: center; } +.user_setting-btn_statistics,.user_setting-btn_exit{ + width: 100px; + } + +@media screen and (max-width: 768px) { + .user_setting { + background-color: #7fe09f; + position: absolute; + height: 15%; + right: 0; + top: 0; + border-left: 1px solid #2a9c50; + border-bottom: 1px solid #2a9c50; + display: flex; + flex-direction: column; + justify-content: space-around; + text-align: center; + } + + +} + +@media screen and (min-width: 768px) { + .user_setting { + background-color: #7fe09f; + width: 20%; + position: absolute; + height: 20%; + left: 0; + bottom: 10%; + border-top: 1px solid #2a9c50; + border-right: 1px solid #2a9c50; + border-bottom: 1px solid #2a9c50; + display: flex; + flex-direction: column; + justify-content: space-around; + text-align: center; + } +} + + diff --git a/src/Components/WelcomeForm/WelcomForm.js b/src/Components/WelcomeForm/WelcomForm.js index 112a844..49b6cb2 100644 --- a/src/Components/WelcomeForm/WelcomForm.js +++ b/src/Components/WelcomeForm/WelcomForm.js @@ -14,15 +14,13 @@ import "./WelcomForm.scss"; import PlayingField from "../PlayingField/PlayingField"; const WelcomForm = ({ language }) => { + const valueLocalStorage = useRef(localStorage.getItem("statistics")); if (!valueLocalStorage.current) localStorage.setItem("statistics", JSON.stringify({})); - const [user, setUser] = useState(null); - const [statistics, setStatistics] = useState( - localStorage.getItem("statistics") - ); + const [user, setUser] = useState(null); const [isSound, setIsSound] = useState(true); const { Text, Title } = Typography; @@ -47,7 +45,7 @@ const WelcomForm = ({ language }) => { localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)); - setStatistics(localStorage.getItem("statistics")); + } else { const getStatisticsLocal = JSON.parse( localStorage.getItem("statistics") @@ -65,7 +63,7 @@ const WelcomForm = ({ language }) => { localStorage.setItem("statistics", JSON.stringify(getStatisticsLocal)); - setStatistics(Object.assign(getStatisticsLocal)); + } setUser(values.user); @@ -79,13 +77,12 @@ const WelcomForm = ({ language }) => { return ( <> <> - {user && statistics ? ( + {user ? ( ) : (
diff --git a/src/Components/WelcomeForm/WelcomForm.scss b/src/Components/WelcomeForm/WelcomForm.scss index 9c02ca3..cf3d343 100644 --- a/src/Components/WelcomeForm/WelcomForm.scss +++ b/src/Components/WelcomeForm/WelcomForm.scss @@ -1,9 +1,24 @@ -.letterSolver__autoplay_box { - text-align: right; +@media screen and (max-width: 768px) { + .letterSolver__settings { + background-color: #57d481; + padding: 10px; + border-radius: 5px; + width: 400px; + } + } -.letterSolver__settings { - background-color: #57d481; + +@media screen and (min-width: 768px) { + .letterSolver__settings { + background-color: #57d481; padding: 40px; - width: 400px; + width: 480px; border-radius: 6px; + } +} + + +.letterSolver__autoplay_box { + text-align: right; } + diff --git a/src/Components/Word/Word.js b/src/Components/Word/Word.js index ddc1df1..6788a9f 100644 --- a/src/Components/Word/Word.js +++ b/src/Components/Word/Word.js @@ -3,6 +3,8 @@ import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import { Tooltip, Switch, Button, Typography, Form, Image } from "antd"; import Cell from "../Cell/Cell"; +import './Word.scss' + const Word = ({ wordSplit, onCheck, diff --git a/src/Components/Word/Word.scss b/src/Components/Word/Word.scss index e69de29..9025f44 100644 --- a/src/Components/Word/Word.scss +++ b/src/Components/Word/Word.scss @@ -0,0 +1,9 @@ +.context_btn_next,.context_btn_check{ + margin: 50px 0; +} + +@media screen and (max-width: 768px) { + .context_btn_next,.context_btn_check{ + margin: 10px 0; + } +} \ No newline at end of file diff --git a/src/config/config.json b/src/config/config.json new file mode 100644 index 0000000..63db0d3 --- /dev/null +++ b/src/config/config.json @@ -0,0 +1,12 @@ +{ + "field":{ + "width":"500px", + "higth":"500px" + + }, + + "field1":3, + "field1":4, + "field1":5 + +} \ No newline at end of file diff --git a/src/config/user.js b/src/config/user.js new file mode 100644 index 0000000..118fc65 --- /dev/null +++ b/src/config/user.js @@ -0,0 +1,28 @@ +import userStatistics from './userStatistics' + + +export class user { +constructor(name,levelDifficulty,levelWord){ +this.name=name; +this.datesGames=[]; +this[new Date().toTimeString()]=new userStatistics(levelDifficulty,levelWord) +} + +addDateGames(){ + this.datesGames.push({[new Date().toTimeString()]:new userStatistics(levelDifficulty,levelWord)}) +} + +addWordChecked(){ + console.log( this.datesGames[this.datesGames.length-1]) +} + +getJson(){ + console.log(JSON.stringify(this)) +} + +// setDate(){ +// let nowDate=new Date().toTimeString() +// this[new Date().toTimeString()]=new userStatistics() +// } + +} \ No newline at end of file diff --git a/src/config/userStatistics.js b/src/config/userStatistics.js new file mode 100644 index 0000000..af8d3de --- /dev/null +++ b/src/config/userStatistics.js @@ -0,0 +1,16 @@ +export class userStatistics { + constructor(levelDifficulty,levelWord,word) { + this.levelDifficulty = levelDifficulty; + this.levelWord = levelWord; + this.statWords=[]; + } + + addedWord(){ + this.statWords.push(word) + } + + getStatWords(){ + return this.statWords + } + +} \ No newline at end of file diff --git a/src/language/En.json b/src/language/En.json index 93ab9bf..e469842 100644 --- a/src/language/En.json +++ b/src/language/En.json @@ -41,9 +41,10 @@ "steps_page_item_wrong": "Wrong: ", "steps_page_volume_title": "Volume control", + "user_settings_page_player":"Player: ", "user_settings_page_score": "Score: ", - "user_settings_page_show_statistics": "Show statistics", - "user_settings_page_exit": "Exit to the main menu", + "user_settings_page_show_statistics": "Statistics", + "user_settings_page_exit": "Exit", "modal_next_page_title_step": "Step ", "modal_next_page_title_completed": "completed ", diff --git a/src/language/Ru.json b/src/language/Ru.json index 89da211..ab44d3b 100644 --- a/src/language/Ru.json +++ b/src/language/Ru.json @@ -41,9 +41,10 @@ "steps_page_item_wrong": "Ошибок: ", "steps_page_volume_title": "Контоль звука", + "user_settings_page_player":"Игрок: ", "user_settings_page_score": "Баллы: ", - "user_settings_page_show_statistics": "Показать статистику", - "user_settings_page_exit": "Выйти в главное меню", + "user_settings_page_show_statistics": "Cтатистика", + "user_settings_page_exit": "Выйти", "modal_next_page_title_step": "Шаг ", "modal_next_page_title_completed": "завершен ", diff --git a/src/store/store.js b/src/store/store.js new file mode 100644 index 0000000..4a14b68 --- /dev/null +++ b/src/store/store.js @@ -0,0 +1,5 @@ +import { createStore } from 'redux'; + +const store = createStore(reducer); + +export default store; \ No newline at end of file diff --git a/src/utils/createArr.js b/src/utils/createArr.js new file mode 100644 index 0000000..4f9662d --- /dev/null +++ b/src/utils/createArr.js @@ -0,0 +1,12 @@ +const createArr= (num)=> { + + const tempArr = []; + + for (let i = 1; i <= num*num ; i++) { + tempArr.push({ id: `el${i}`, name: `cell${i}`,index:i }); + } + + return tempArr; + } + + export default createArr; \ No newline at end of file diff --git a/src/utils/getDate.js b/src/utils/getDate.js new file mode 100644 index 0000000..eab05b8 --- /dev/null +++ b/src/utils/getDate.js @@ -0,0 +1,5 @@ +export function getDate() { + const d = new Date(); + return [d.getDate(), d.getMonth() + 1, d.getFullYear()] + .map((n) => (n < 10 ? `0${n}` : `${n}`)).join('-'); +} diff --git a/webpack.config.js b/webpack.config.js index fa800e9..4dffcb1 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -17,10 +17,10 @@ module.exports = (env, options) => { filename: "index.js", }, devServer: { + inline: false, contentBase: path.join(__dirname, "/dist"), - - port: 9000, - + compress: true, + port: 9000, }, module: { rules: [ @@ -71,10 +71,7 @@ module.exports = (env, options) => { patterns: [ { from: "./src/assets/img", to: "assets/img" }, { from: "./src/assets/audio", to: "assets/audio" }, - ], - options: { - concurrency: 100, - }, + ], }), ], };