From f4a5c39d626e096ff7f9d75bc78199aa6db1159d Mon Sep 17 00:00:00 2001 From: zkldi Date: Thu, 15 Jul 2021 22:22:33 +0100 Subject: [PATCH] Score Table Tests --- client/config/webpack.config.js | 34 +- client/package.json | 16 +- client/pnpm-lock.yaml | 1529 ++++++++++++----- client/src/.eslintrc | 1 + client/src/app/App.tsx | 4 +- client/src/app/DashboardRoutes.tsx | 37 - .../app/pages/dashboard/misc/CreditsPage.tsx | 8 +- .../app/pages/dashboard/users/UserPage.tsx | 28 +- .../users/games/game/playtype/PBsPage.tsx | 54 +- client/src/app/{ => routes}/AppRoutes.tsx | 6 +- client/src/app/routes/DashboardRoutes.tsx | 26 + client/src/app/routes/UserRoutes.tsx | 78 + .../components/layout/{ => footer}/Footer.tsx | 0 .../src/components/layout/header/Header.tsx | 36 + .../components/layout/header/HeaderMenu.tsx | 80 + .../components/layout/header/MenuDropdown.tsx | 20 + .../src/components/layout/header/MenuLink.tsx | 12 + .../src/components/layout/header/Topbar.tsx | 63 + .../{ => header}/UserProfileDropdown.tsx | 2 +- .../layout/{ => misc}/BackgroundImage.tsx | 0 .../layout/{ => screens}/LoadingScreen.tsx | 2 +- .../layout/{ => screens}/SplashScreen.tsx | 2 +- client/src/components/tables/IIDXPBTable.tsx | 228 +-- .../src/components/tables/cells/DeltaCell.tsx | 5 + .../tables/cells/DifficultyCell.tsx | 24 + .../src/components/tables/cells/IndexCell.tsx | 25 + .../src/components/tables/cells/ScoreCell.tsx | 31 + .../src/components/tables/cells/TitleCell.tsx | 2 +- .../tables/components/NoDataWrapper.tsx | 15 + .../tables/components/PageSelector.tsx | 32 +- .../tables/components/SortableTH.tsx | 8 +- .../tables/components/TachiTable.tsx | 160 ++ client/src/components/util/SmallText.tsx | 10 + .../src/components/util/table/useZTable.tsx | 7 +- client/src/lib/config.ts | 21 + client/src/types/react.ts | 6 + client/src/types/tables.ts | 3 +- client/src/util/asserts.ts | 15 + .../src/util/constants/search-directives.ts | 8 + client/src/util/grade-deltas.ts | 83 + client/src/util/subheader.ts | 5 +- client/src/util/ztable/search.ts | 146 ++ 42 files changed, 2208 insertions(+), 664 deletions(-) delete mode 100644 client/src/app/DashboardRoutes.tsx rename client/src/app/{ => routes}/AppRoutes.tsx (81%) create mode 100644 client/src/app/routes/DashboardRoutes.tsx create mode 100644 client/src/app/routes/UserRoutes.tsx rename client/src/components/layout/{ => footer}/Footer.tsx (100%) create mode 100644 client/src/components/layout/header/Header.tsx create mode 100644 client/src/components/layout/header/HeaderMenu.tsx create mode 100644 client/src/components/layout/header/MenuDropdown.tsx create mode 100644 client/src/components/layout/header/MenuLink.tsx create mode 100644 client/src/components/layout/header/Topbar.tsx rename client/src/components/layout/{ => header}/UserProfileDropdown.tsx (94%) rename client/src/components/layout/{ => misc}/BackgroundImage.tsx (100%) rename client/src/components/layout/{ => screens}/LoadingScreen.tsx (92%) rename client/src/components/layout/{ => screens}/SplashScreen.tsx (85%) create mode 100644 client/src/components/tables/cells/DeltaCell.tsx create mode 100644 client/src/components/tables/cells/DifficultyCell.tsx create mode 100644 client/src/components/tables/cells/IndexCell.tsx create mode 100644 client/src/components/tables/cells/ScoreCell.tsx create mode 100644 client/src/components/tables/components/NoDataWrapper.tsx create mode 100644 client/src/components/tables/components/TachiTable.tsx create mode 100644 client/src/components/util/SmallText.tsx create mode 100644 client/src/lib/config.ts create mode 100644 client/src/util/asserts.ts create mode 100644 client/src/util/constants/search-directives.ts create mode 100644 client/src/util/grade-deltas.ts create mode 100644 client/src/util/ztable/search.ts diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 2a5bba3ac..67145e134 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -337,23 +337,23 @@ module.exports = function(webpackEnv) { // First, run the linter. // It's important to do this before Babel processes the JS. - { - // WARN: disabled js here - should be re-enabled at some point. - test: /\.(jsx|ts|tsx)$/, - enforce: "pre", - use: [ - { - options: { - cache: true, - formatter: require.resolve("react-dev-utils/eslintFormatter"), - eslintPath: require.resolve("eslint"), - resolvePluginsRelativeTo: __dirname, - }, - loader: require.resolve("eslint-loader"), - }, - ], - include: paths.appSrc, - }, + // { + // // WARN: disabled js here - should be re-enabled at some point. + // test: /\.(jsx|ts|tsx)$/, + // enforce: "pre", + // use: [ + // { + // options: { + // cache: true, + // formatter: require.resolve("react-dev-utils/eslintFormatter"), + // eslintPath: require.resolve("eslint"), + // resolvePluginsRelativeTo: __dirname, + // }, + // loader: require.resolve("eslint-loader"), + // }, + // ], + // include: paths.appSrc, + // }, { // "oneOf" will traverse all following loaders until one will // match the requirements. When no loader matches it will fall diff --git a/client/package.json b/client/package.json index 54ba522a4..4a21cc1fa 100644 --- a/client/package.json +++ b/client/package.json @@ -42,16 +42,16 @@ "@types/react-dom": "17.0.8", "@types/react-router": "5.1.15", "@types/react-router-dom": "5.1.7", - "@typescript-eslint/eslint-plugin": "^2.2.0", - "@typescript-eslint/parser": "^2.2.0", + "@typescript-eslint/eslint-plugin": "4.28.3", + "@typescript-eslint/parser": "4.28.3", "apexcharts": "3.19.2", "babel-eslint": "10.0.3", "babel-jest": "^24.9.0", "babel-loader": "8.0.6", - "babel-plugin-named-asset-import": "^0.3.4", - "babel-preset-react-app": "^9.0.2", + "babel-plugin-named-asset-import": "^0.3.7", + "babel-preset-react-app": "^9.1.2", "bootstrap": "4.6.0", - "camelcase": "^5.2.0", + "camelcase": "^5.3.1", "case-sensitive-paths-webpack-plugin": "2.2.0", "clipboard-copy": "3.1.0", "clsx": "1.1.0", @@ -62,7 +62,7 @@ "dotenv-expand": "5.1.0", "downshift": "3.4.2", "eslint": "^7.30.0", - "eslint-config-react-app": "^5.0.2", + "eslint-config-react-app": "^5.2.1", "eslint-loader": "3.0.2", "eslint-plugin-flowtype": "3.13.0", "eslint-plugin-import": "2.18.2", @@ -72,7 +72,7 @@ "file-loader": "3.0.1", "formik": "2.2.9", "fs-extra": "7.0.1", - "html-webpack-plugin": "4.0.0-beta.5", + "html-webpack-plugin": "^4.5.2", "identity-obj-proxy": "3.0.0", "is-wsl": "^1.1.0", "jest": "24.9.0", @@ -92,7 +92,7 @@ "postcss-preset-env": "6.7.0", "postcss-safe-parser": "4.0.1", "react": "16.12.0", - "react-app-polyfill": "^1.0.4", + "react-app-polyfill": "^1.0.6", "react-bootstrap": "1.0.1", "react-bootstrap-table-next": "4.0.2", "react-bootstrap-table2-paginator": "2.1.2", diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml index 47464c46b..6192e5e3e 100644 --- a/client/pnpm-lock.yaml +++ b/client/pnpm-lock.yaml @@ -20,16 +20,16 @@ specifiers: '@types/react-router': 5.1.15 '@types/react-router-dom': 5.1.7 '@types/react-table': 7.7.2 - '@typescript-eslint/eslint-plugin': ^2.2.0 - '@typescript-eslint/parser': ^2.2.0 + '@typescript-eslint/eslint-plugin': 4.28.3 + '@typescript-eslint/parser': 4.28.3 apexcharts: 3.19.2 babel-eslint: 10.0.3 babel-jest: ^24.9.0 babel-loader: 8.0.6 - babel-plugin-named-asset-import: ^0.3.4 - babel-preset-react-app: ^9.0.2 + babel-plugin-named-asset-import: ^0.3.7 + babel-preset-react-app: ^9.1.2 bootstrap: 4.6.0 - camelcase: ^5.2.0 + camelcase: ^5.3.1 case-sensitive-paths-webpack-plugin: 2.2.0 clipboard-copy: 3.1.0 clsx: 1.1.0 @@ -42,7 +42,7 @@ specifiers: downshift: 3.4.2 eslint: ^7.30.0 eslint-config-prettier: 8.3.0 - eslint-config-react-app: ^5.0.2 + eslint-config-react-app: ^5.2.1 eslint-loader: 3.0.2 eslint-plugin-flowtype: 3.13.0 eslint-plugin-import: 2.18.2 @@ -54,7 +54,7 @@ specifiers: file-loader: 3.0.1 formik: 2.2.9 fs-extra: 7.0.1 - html-webpack-plugin: 4.0.0-beta.5 + html-webpack-plugin: ^4.5.2 identity-obj-proxy: 3.0.0 is-wsl: ^1.1.0 jest: 24.9.0 @@ -75,7 +75,7 @@ specifiers: postcss-safe-parser: 4.0.1 prettier: 1.19.1 react: 16.12.0 - react-app-polyfill: ^1.0.4 + react-app-polyfill: ^1.0.6 react-bootstrap: 1.0.1 react-bootstrap-table-next: 4.0.2 react-bootstrap-table2-paginator: 2.1.2 @@ -137,8 +137,8 @@ dependencies: '@types/react-dom': 17.0.8 '@types/react-router': 5.1.15 '@types/react-router-dom': 5.1.7 - '@typescript-eslint/eslint-plugin': 2.34.0_c3dfba3448a0529c07b579a52638224d - '@typescript-eslint/parser': 2.34.0_eslint@7.30.0+typescript@4.3.5 + '@typescript-eslint/eslint-plugin': 4.28.3_8da3816a7c3fb8ebc9f4c4b3e4b2e38f + '@typescript-eslint/parser': 4.28.3_eslint@7.30.0+typescript@4.3.5 apexcharts: 3.19.2 babel-eslint: 10.0.3_eslint@7.30.0 babel-jest: 24.9.0_@babel+core@7.6.0 @@ -157,7 +157,7 @@ dependencies: dotenv-expand: 5.1.0 downshift: 3.4.2_react@16.12.0 eslint: 7.30.0 - eslint-config-react-app: 5.2.1_93572f5f98e8dc33ec8a5d2f8e08816d + eslint-config-react-app: 5.2.1_87e16b3edcb06153624592b5e5a089e3 eslint-loader: 3.0.2_eslint@7.30.0+webpack@4.41.0 eslint-plugin-flowtype: 3.13.0_eslint@7.30.0 eslint-plugin-import: 2.18.2_eslint@7.30.0 @@ -167,7 +167,7 @@ dependencies: file-loader: 3.0.1_webpack@4.41.0 formik: 2.2.9_react@16.12.0 fs-extra: 7.0.1 - html-webpack-plugin: 4.0.0-beta.5_webpack@4.41.0 + html-webpack-plugin: 4.5.2_webpack@4.41.0 identity-obj-proxy: 3.0.0 is-wsl: 1.1.0 jest: 24.9.0 @@ -216,7 +216,7 @@ dependencies: semver: 6.3.0 socicon: 3.0.5 style-loader: 1.0.0_webpack@4.41.0 - tachi-common: github.com/zkldi/tachi-common/efa9b2ea9b6fba96fb93197a3318102ff00acc2f_typescript@4.3.5 + tachi-common: github.com/zkldi/tachi-common/7f0ff9c3905018070c291ae07f3f937d142f925d_typescript@4.3.5 terser-webpack-plugin: 1.4.1_webpack@4.41.0 ts-pnp: 1.1.4_typescript@4.3.5 typescript: 4.3.5 @@ -278,10 +278,10 @@ packages: '@babel/traverse': 7.14.7 '@babel/types': 7.14.5 convert-source-map: 1.8.0 - debug: 4.3.1 + debug: 4.3.2 json5: 2.2.0 - lodash: 4.17.21 - resolve: 1.20.0 + lodash: 4.17.15 + resolve: 1.12.0 semver: 5.7.1 source-map: 0.5.7 transitivePeerDependencies: @@ -301,7 +301,7 @@ packages: '@babel/traverse': 7.14.7 '@babel/types': 7.14.5 convert-source-map: 1.8.0 - debug: 4.3.1 + debug: 4.3.2 gensync: 1.0.0-beta.2 json5: 2.2.0 lodash: 4.17.21 @@ -336,6 +336,19 @@ packages: '@babel/types': 7.14.5 dev: false + /@babel/helper-compilation-targets/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.14.7 + '@babel/core': 7.6.0 + '@babel/helper-validator-option': 7.14.5 + browserslist: 4.16.6 + semver: 6.3.0 + dev: false + /@babel/helper-compilation-targets/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==} engines: {node: '>=6.9.0'} @@ -349,6 +362,23 @@ packages: semver: 6.3.0 dev: false + /@babel/helper-create-class-features-plugin/7.14.6_@babel+core@7.6.0: + resolution: {integrity: sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-annotate-as-pure': 7.14.5 + '@babel/helper-function-name': 7.14.5 + '@babel/helper-member-expression-to-functions': 7.14.7 + '@babel/helper-optimise-call-expression': 7.14.5 + '@babel/helper-replace-supers': 7.14.5 + '@babel/helper-split-export-declaration': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-create-class-features-plugin/7.14.6_@babel+core@7.9.0: resolution: {integrity: sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==} engines: {node: '>=6.9.0'} @@ -366,6 +396,17 @@ packages: - supports-color dev: false + /@babel/helper-create-regexp-features-plugin/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-annotate-as-pure': 7.14.5 + regexpu-core: 4.7.1 + dev: false + /@babel/helper-create-regexp-features-plugin/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==} engines: {node: '>=6.9.0'} @@ -377,17 +418,17 @@ packages: regexpu-core: 4.7.1 dev: false - /@babel/helper-define-polyfill-provider/0.2.3_@babel+core@7.9.0: + /@babel/helper-define-polyfill-provider/0.2.3_@babel+core@7.6.0: resolution: {integrity: sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.9.0 - '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.6.0 '@babel/helper-module-imports': 7.14.5 '@babel/helper-plugin-utils': 7.14.5 '@babel/traverse': 7.14.7 - debug: 4.3.1 + debug: 4.3.2 lodash.debounce: 4.0.8 resolve: 1.20.0 semver: 6.3.0 @@ -559,16 +600,30 @@ packages: hasBin: true dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.14.5_@babel+core@7.9.0: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 - '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.9.0 + '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.6.0 + dev: false + + /@babel/plugin-proposal-async-generator-functions/7.14.7_@babel+core@7.6.0: + resolution: {integrity: sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.14.5 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.6.0 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-proposal-async-generator-functions/7.14.7_@babel+core@7.9.0: @@ -585,14 +640,14 @@ packages: - supports-color dev: false - /@babel/plugin-proposal-class-properties/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-class-properties/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 - '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.6.0 '@babel/helper-plugin-utils': 7.14.5 transitivePeerDependencies: - supports-color @@ -610,16 +665,16 @@ packages: - supports-color dev: false - /@babel/plugin-proposal-class-static-block/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-class-static-block/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.9.0 - '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.6.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.9.0 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.6.0 transitivePeerDependencies: - supports-color dev: false @@ -637,6 +692,17 @@ packages: - supports-color dev: false + /@babel/plugin-proposal-dynamic-import/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.6.0 + dev: false + /@babel/plugin-proposal-dynamic-import/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==} engines: {node: '>=6.9.0'} @@ -648,15 +714,26 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.9.0 dev: false - /@babel/plugin-proposal-export-namespace-from/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-export-namespace-from/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.9.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.6.0 + dev: false + + /@babel/plugin-proposal-json-strings/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.6.0 dev: false /@babel/plugin-proposal-json-strings/7.14.5_@babel+core@7.9.0: @@ -670,26 +747,26 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.9.0 dev: false - /@babel/plugin-proposal-logical-assignment-operators/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-logical-assignment-operators/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.9.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.6.0 dev: false - /@babel/plugin-proposal-nullish-coalescing-operator/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-nullish-coalescing-operator/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.9.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.6.0 dev: false /@babel/plugin-proposal-nullish-coalescing-operator/7.8.3_@babel+core@7.9.0: @@ -702,15 +779,15 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.9.0 dev: false - /@babel/plugin-proposal-numeric-separator/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-numeric-separator/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.9.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.6.0 dev: false /@babel/plugin-proposal-numeric-separator/7.8.3_@babel+core@7.9.0: @@ -723,6 +800,20 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.9.0 dev: false + /@babel/plugin-proposal-object-rest-spread/7.14.7_@babel+core@7.6.0: + resolution: {integrity: sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.14.7 + '@babel/core': 7.6.0 + '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.6.0 + dev: false + /@babel/plugin-proposal-object-rest-spread/7.14.7_@babel+core@7.9.0: resolution: {integrity: sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==} engines: {node: '>=6.9.0'} @@ -737,6 +828,17 @@ packages: '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.9.0 dev: false + /@babel/plugin-proposal-optional-catch-binding/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.6.0 + dev: false + /@babel/plugin-proposal-optional-catch-binding/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==} engines: {node: '>=6.9.0'} @@ -748,16 +850,16 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.9.0 dev: false - /@babel/plugin-proposal-optional-chaining/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-optional-chaining/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.9.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.6.0 dev: false /@babel/plugin-proposal-optional-chaining/7.9.0_@babel+core@7.9.0: @@ -770,34 +872,45 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.9.0 dev: false - /@babel/plugin-proposal-private-methods/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-private-methods/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 - '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.6.0 '@babel/helper-plugin-utils': 7.14.5 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-proposal-private-property-in-object/7.14.5_@babel+core@7.9.0: + /@babel/plugin-proposal-private-property-in-object/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.9.0 + '@babel/helper-create-class-features-plugin': 7.14.6_@babel+core@7.6.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.9.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.6.0 transitivePeerDependencies: - supports-color dev: false + /@babel/plugin-proposal-unicode-property-regex/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-proposal-unicode-property-regex/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==} engines: {node: '>=4'} @@ -809,6 +922,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.6.0: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.9.0: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -818,22 +940,22 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.9.0: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.6.0: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.9.0: + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false @@ -847,6 +969,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.6.0: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.9.0: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -856,12 +987,12 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.9.0: + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.6.0: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false @@ -875,6 +1006,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.6.0: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.9.0: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -884,6 +1024,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-syntax-jsx/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-syntax-jsx/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==} engines: {node: '>=6.9.0'} @@ -894,12 +1044,21 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.9.0: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.6.0: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.6.0: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false @@ -912,6 +1071,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.6.0: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.9.0: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -939,6 +1107,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.6.0: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.9.0: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -948,6 +1125,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.6.0: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.9.0: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -957,13 +1143,23 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.9.0: + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false @@ -987,6 +1183,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-arrow-functions/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-arrow-functions/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==} engines: {node: '>=6.9.0'} @@ -997,6 +1203,20 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-async-to-generator/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-module-imports': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-async-to-generator/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==} engines: {node: '>=6.9.0'} @@ -1011,6 +1231,16 @@ packages: - supports-color dev: false + /@babel/plugin-transform-block-scoped-functions/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-block-scoped-functions/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==} engines: {node: '>=6.9.0'} @@ -1021,6 +1251,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-block-scoping/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-block-scoping/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==} engines: {node: '>=6.9.0'} @@ -1031,6 +1271,24 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-classes/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-annotate-as-pure': 7.14.5 + '@babel/helper-function-name': 7.14.5 + '@babel/helper-optimise-call-expression': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.14.5 + '@babel/helper-split-export-declaration': 7.14.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-classes/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==} engines: {node: '>=6.9.0'} @@ -1049,6 +1307,16 @@ packages: - supports-color dev: false + /@babel/plugin-transform-computed-properties/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-computed-properties/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==} engines: {node: '>=6.9.0'} @@ -1059,6 +1327,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-destructuring/7.14.7_@babel+core@7.6.0: + resolution: {integrity: sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-destructuring/7.14.7_@babel+core@7.9.0: resolution: {integrity: sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==} engines: {node: '>=6.9.0'} @@ -1069,6 +1347,17 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-dotall-regex/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-dotall-regex/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==} engines: {node: '>=6.9.0'} @@ -1080,6 +1369,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-duplicate-keys/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-duplicate-keys/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==} engines: {node: '>=6.9.0'} @@ -1090,6 +1389,17 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-exponentiation-operator/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-exponentiation-operator/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==} engines: {node: '>=6.9.0'} @@ -1111,6 +1421,16 @@ packages: '@babel/plugin-syntax-flow': 7.14.5_@babel+core@7.9.0 dev: false + /@babel/plugin-transform-for-of/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-for-of/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==} engines: {node: '>=6.9.0'} @@ -1121,6 +1441,17 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-function-name/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-function-name': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-function-name/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==} engines: {node: '>=6.9.0'} @@ -1132,6 +1463,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-literals/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-literals/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==} engines: {node: '>=6.9.0'} @@ -1142,6 +1483,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-member-expression-literals/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-member-expression-literals/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==} engines: {node: '>=6.9.0'} @@ -1152,6 +1503,20 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-modules-amd/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-module-transforms': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-modules-amd/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==} engines: {node: '>=6.9.0'} @@ -1166,6 +1531,21 @@ packages: - supports-color dev: false + /@babel/plugin-transform-modules-commonjs/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-module-transforms': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-simple-access': 7.14.5 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-modules-commonjs/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==} engines: {node: '>=6.9.0'} @@ -1181,6 +1561,22 @@ packages: - supports-color dev: false + /@babel/plugin-transform-modules-systemjs/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-hoist-variables': 7.14.5 + '@babel/helper-module-transforms': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-identifier': 7.14.5 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-modules-systemjs/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==} engines: {node: '>=6.9.0'} @@ -1197,6 +1593,19 @@ packages: - supports-color dev: false + /@babel/plugin-transform-modules-umd/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-module-transforms': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-modules-umd/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==} engines: {node: '>=6.9.0'} @@ -1210,6 +1619,16 @@ packages: - supports-color dev: false + /@babel/plugin-transform-named-capturing-groups-regex/7.14.7_@babel+core@7.6.0: + resolution: {integrity: sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.6.0 + dev: false + /@babel/plugin-transform-named-capturing-groups-regex/7.14.7_@babel+core@7.9.0: resolution: {integrity: sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==} engines: {node: '>=6.9.0'} @@ -1220,6 +1639,16 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.9.0 dev: false + /@babel/plugin-transform-new-target/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-new-target/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==} engines: {node: '>=6.9.0'} @@ -1230,6 +1659,19 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-object-super/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-object-super/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==} engines: {node: '>=6.9.0'} @@ -1243,6 +1685,16 @@ packages: - supports-color dev: false + /@babel/plugin-transform-parameters/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-parameters/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} engines: {node: '>=6.9.0'} @@ -1253,6 +1705,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-property-literals/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-property-literals/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==} engines: {node: '>=6.9.0'} @@ -1263,23 +1725,23 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/plugin-transform-react-constant-elements/7.14.5_@babel+core@7.9.0: + /@babel/plugin-transform-react-constant-elements/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/plugin-transform-react-display-name/7.14.5_@babel+core@7.9.0: + /@babel/plugin-transform-react-display-name/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false @@ -1292,6 +1754,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-react-jsx-development/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/plugin-transform-react-jsx': 7.14.5_@babel+core@7.6.0 + dev: false + /@babel/plugin-transform-react-jsx-development/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==} engines: {node: '>=6.9.0'} @@ -1322,6 +1794,20 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-react-jsx/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-annotate-as-pure': 7.14.5 + '@babel/helper-module-imports': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-jsx': 7.14.5_@babel+core@7.6.0 + '@babel/types': 7.14.5 + dev: false + /@babel/plugin-transform-react-jsx/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==} engines: {node: '>=6.9.0'} @@ -1336,17 +1822,27 @@ packages: '@babel/types': 7.14.5 dev: false - /@babel/plugin-transform-react-pure-annotations/7.14.5_@babel+core@7.9.0: + /@babel/plugin-transform-react-pure-annotations/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-annotate-as-pure': 7.14.5 '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-regenerator/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + regenerator-transform: 0.14.5 + dev: false + /@babel/plugin-transform-regenerator/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==} engines: {node: '>=6.9.0'} @@ -1357,6 +1853,16 @@ packages: regenerator-transform: 0.14.5 dev: false + /@babel/plugin-transform-reserved-words/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-reserved-words/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==} engines: {node: '>=6.9.0'} @@ -1379,6 +1885,16 @@ packages: semver: 5.7.1 dev: false + /@babel/plugin-transform-shorthand-properties/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-shorthand-properties/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} engines: {node: '>=6.9.0'} @@ -1389,6 +1905,17 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-spread/7.14.6_@babel+core@7.6.0: + resolution: {integrity: sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 + dev: false + /@babel/plugin-transform-spread/7.14.6_@babel+core@7.9.0: resolution: {integrity: sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==} engines: {node: '>=6.9.0'} @@ -1400,6 +1927,16 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 dev: false + /@babel/plugin-transform-sticky-regex/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-sticky-regex/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==} engines: {node: '>=6.9.0'} @@ -1410,6 +1947,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-template-literals/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-template-literals/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==} engines: {node: '>=6.9.0'} @@ -1420,6 +1967,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false + /@babel/plugin-transform-typeof-symbol/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + /@babel/plugin-transform-typeof-symbol/7.14.5_@babel+core@7.9.0: resolution: {integrity: sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==} engines: {node: '>=6.9.0'} @@ -1444,13 +2001,24 @@ packages: - supports-color dev: false - /@babel/plugin-transform-unicode-escapes/7.14.5_@babel+core@7.9.0: + /@babel/plugin-transform-unicode-escapes/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: false + + /@babel/plugin-transform-unicode-regex/7.14.5_@babel+core@7.6.0: + resolution: {integrity: sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.6.0 '@babel/helper-plugin-utils': 7.14.5 dev: false @@ -1465,84 +2033,84 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: false - /@babel/preset-env/7.14.7_@babel+core@7.9.0: + /@babel/preset-env/7.14.7_@babel+core@7.6.0: resolution: {integrity: sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.14.7 - '@babel/core': 7.9.0 - '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.6.0 '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-async-generator-functions': 7.14.7_@babel+core@7.9.0 - '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-class-static-block': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-dynamic-import': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-export-namespace-from': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-json-strings': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-logical-assignment-operators': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-numeric-separator': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.9.0 - '@babel/plugin-proposal-optional-catch-binding': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-private-methods': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-private-property-in-object': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-unicode-property-regex': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.9.0 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.9.0 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.9.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.9.0 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.9.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.9.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.9.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.9.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.9.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.9.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.9.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-arrow-functions': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-async-to-generator': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-block-scoped-functions': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-block-scoping': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-classes': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-computed-properties': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-destructuring': 7.14.7_@babel+core@7.9.0 - '@babel/plugin-transform-dotall-regex': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-duplicate-keys': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-exponentiation-operator': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-for-of': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-function-name': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-literals': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-member-expression-literals': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-modules-amd': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-modules-commonjs': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-modules-systemjs': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-modules-umd': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-named-capturing-groups-regex': 7.14.7_@babel+core@7.9.0 - '@babel/plugin-transform-new-target': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-object-super': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-property-literals': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-regenerator': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-reserved-words': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-shorthand-properties': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-spread': 7.14.6_@babel+core@7.9.0 - '@babel/plugin-transform-sticky-regex': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-typeof-symbol': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-unicode-escapes': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-unicode-regex': 7.14.5_@babel+core@7.9.0 - '@babel/preset-modules': 0.1.4_@babel+core@7.9.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-async-generator-functions': 7.14.7_@babel+core@7.6.0 + '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-class-static-block': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-dynamic-import': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-export-namespace-from': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-json-strings': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-logical-assignment-operators': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-numeric-separator': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.6.0 + '@babel/plugin-proposal-optional-catch-binding': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-private-methods': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-private-property-in-object': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-proposal-unicode-property-regex': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.6.0 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.6.0 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.6.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.6.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.6.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-arrow-functions': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-async-to-generator': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-block-scoped-functions': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-block-scoping': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-classes': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-computed-properties': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-destructuring': 7.14.7_@babel+core@7.6.0 + '@babel/plugin-transform-dotall-regex': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-duplicate-keys': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-exponentiation-operator': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-for-of': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-function-name': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-literals': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-member-expression-literals': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-modules-amd': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-modules-commonjs': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-modules-systemjs': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-modules-umd': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-named-capturing-groups-regex': 7.14.7_@babel+core@7.6.0 + '@babel/plugin-transform-new-target': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-object-super': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-property-literals': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-regenerator': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-reserved-words': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-shorthand-properties': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-spread': 7.14.6_@babel+core@7.6.0 + '@babel/plugin-transform-sticky-regex': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-typeof-symbol': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-unicode-escapes': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-unicode-regex': 7.14.5_@babel+core@7.6.0 + '@babel/preset-modules': 0.1.4_@babel+core@7.6.0 '@babel/types': 7.14.5 - babel-plugin-polyfill-corejs2: 0.2.2_@babel+core@7.9.0 - babel-plugin-polyfill-corejs3: 0.2.3_@babel+core@7.9.0 - babel-plugin-polyfill-regenerator: 0.2.2_@babel+core@7.9.0 + babel-plugin-polyfill-corejs2: 0.2.2_@babel+core@7.6.0 + babel-plugin-polyfill-corejs3: 0.2.3_@babel+core@7.6.0 + babel-plugin-polyfill-regenerator: 0.2.2_@babel+core@7.6.0 core-js-compat: 3.15.2 semver: 6.3.0 transitivePeerDependencies: @@ -1562,11 +2130,11 @@ packages: '@babel/plugin-proposal-async-generator-functions': 7.14.7_@babel+core@7.9.0 '@babel/plugin-proposal-dynamic-import': 7.14.5_@babel+core@7.9.0 '@babel/plugin-proposal-json-strings': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-numeric-separator': 7.14.5_@babel+core@7.9.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.8.3_@babel+core@7.9.0 + '@babel/plugin-proposal-numeric-separator': 7.8.3_@babel+core@7.9.0 '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.9.0 '@babel/plugin-proposal-optional-catch-binding': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.9.0 + '@babel/plugin-proposal-optional-chaining': 7.9.0_@babel+core@7.9.0 '@babel/plugin-proposal-unicode-property-regex': 7.14.5_@babel+core@7.9.0 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.9.0 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.9.0 @@ -1619,6 +2187,19 @@ packages: - supports-color dev: false + /@babel/preset-modules/0.1.4_@babel+core@7.6.0: + resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.6.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-proposal-unicode-property-regex': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-dotall-regex': 7.14.5_@babel+core@7.6.0 + '@babel/types': 7.14.5 + esutils: 2.0.3 + dev: false + /@babel/preset-modules/0.1.4_@babel+core@7.9.0: resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} peerDependencies: @@ -1632,19 +2213,19 @@ packages: esutils: 2.0.3 dev: false - /@babel/preset-react/7.14.5_@babel+core@7.9.0: + /@babel/preset-react/7.14.5_@babel+core@7.6.0: resolution: {integrity: sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 + '@babel/core': 7.6.0 '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-transform-react-display-name': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-react-jsx': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-react-jsx-development': 7.14.5_@babel+core@7.9.0 - '@babel/plugin-transform-react-pure-annotations': 7.14.5_@babel+core@7.9.0 + '@babel/plugin-transform-react-display-name': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-react-jsx': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-react-jsx-development': 7.14.5_@babel+core@7.6.0 + '@babel/plugin-transform-react-pure-annotations': 7.14.5_@babel+core@7.6.0 dev: false /@babel/preset-react/7.9.1_@babel+core@7.9.0: @@ -1654,7 +2235,7 @@ packages: dependencies: '@babel/core': 7.9.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-transform-react-display-name': 7.14.5_@babel+core@7.9.0 + '@babel/plugin-transform-react-display-name': 7.8.3_@babel+core@7.9.0 '@babel/plugin-transform-react-jsx': 7.14.5_@babel+core@7.9.0 '@babel/plugin-transform-react-jsx-development': 7.14.5_@babel+core@7.9.0 '@babel/plugin-transform-react-jsx-self': 7.14.5_@babel+core@7.9.0 @@ -1712,7 +2293,7 @@ packages: '@babel/helper-split-export-declaration': 7.14.5 '@babel/parser': 7.14.7 '@babel/types': 7.14.5 - debug: 4.3.1 + debug: 4.3.2 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -1748,8 +2329,8 @@ packages: resolution: {integrity: sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA==} dev: false - /@date-io/core/2.10.11: - resolution: {integrity: sha512-keXQnwH0LM8wyvu+j5Z2KGK56D+eItjy7DnwuWl/oV+DM2UEYl0z5WhdPMpfswSyt/kjuPOzcVF/7u/skMLaoA==} + /@date-io/core/2.11.0: + resolution: {integrity: sha512-DvPBnNoeuLaoSJZaxgpu54qzRhRKjSYVyQjhznTFrllKuDpm0sDFjHo6lvNLCM/cfMx2gb2PM2zY2kc9C8nmuw==} dev: false /@date-io/date-fns/2.6.1_date-fns@2.8.1: @@ -1757,7 +2338,7 @@ packages: peerDependencies: date-fns: ^2.0.0 dependencies: - '@date-io/core': 2.10.11 + '@date-io/core': 2.11.0 date-fns: 2.8.1 dev: false @@ -2153,11 +2734,11 @@ packages: dependencies: '@babel/runtime': 7.14.6 '@material-ui/styles': 4.9.14_accf0f6110e576cb7fc304ff97d0cb11 - '@material-ui/system': 4.11.3_accf0f6110e576cb7fc304ff97d0cb11 + '@material-ui/system': 4.12.1_accf0f6110e576cb7fc304ff97d0cb11 '@material-ui/types': 5.1.0_@types+react@17.0.13 '@material-ui/utils': 4.11.2_react-dom@16.12.0+react@16.12.0 '@types/react': 17.0.13 - '@types/react-transition-group': 4.4.1 + '@types/react-transition-group': 4.4.2 clsx: 1.1.0 hoist-non-react-statics: 3.3.2 popper.js: 1.16.1 @@ -2261,8 +2842,8 @@ packages: react-dom: 16.12.0_react@16.12.0 dev: false - /@material-ui/system/4.11.3_accf0f6110e576cb7fc304ff97d0cb11: - resolution: {integrity: sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw==} + /@material-ui/system/4.12.1_accf0f6110e576cb7fc304ff97d0cb11: + resolution: {integrity: sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==} engines: {node: '>=8.0.0'} peerDependencies: '@types/react': ^16.8.6 || ^17.0.0 @@ -2314,11 +2895,32 @@ packages: glob-to-regexp: 0.3.0 dev: false + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: false + /@nodelib/fs.stat/1.1.3: resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} engines: {node: '>= 6'} dev: false + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: false + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.11.1 + dev: false + /@popperjs/core/2.9.2: resolution: {integrity: sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==} dev: false @@ -2444,10 +3046,10 @@ packages: resolution: {integrity: sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.9.0 - '@babel/plugin-transform-react-constant-elements': 7.14.5_@babel+core@7.9.0 - '@babel/preset-env': 7.14.7_@babel+core@7.9.0 - '@babel/preset-react': 7.14.5_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/plugin-transform-react-constant-elements': 7.14.5_@babel+core@7.6.0 + '@babel/preset-env': 7.14.7_@babel+core@7.6.0 + '@babel/preset-react': 7.14.5_@babel+core@7.6.0 '@svgr/core': 4.3.3 '@svgr/plugin-jsx': 4.3.3 '@svgr/plugin-svgo': 4.3.1 @@ -2462,31 +3064,31 @@ packages: '@babel/runtime': 7.14.6 dev: false - /@types/babel__core/7.1.14: - resolution: {integrity: sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==} + /@types/babel__core/7.1.15: + resolution: {integrity: sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==} dependencies: '@babel/parser': 7.14.7 '@babel/types': 7.14.5 - '@types/babel__generator': 7.6.2 - '@types/babel__template': 7.4.0 - '@types/babel__traverse': 7.14.0 + '@types/babel__generator': 7.6.3 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.14.2 dev: false - /@types/babel__generator/7.6.2: - resolution: {integrity: sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==} + /@types/babel__generator/7.6.3: + resolution: {integrity: sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==} dependencies: '@babel/types': 7.14.5 dev: false - /@types/babel__template/7.4.0: - resolution: {integrity: sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==} + /@types/babel__template/7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.14.7 '@babel/types': 7.14.5 dev: false - /@types/babel__traverse/7.14.0: - resolution: {integrity: sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==} + /@types/babel__traverse/7.14.2: + resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} dependencies: '@babel/types': 7.14.5 dev: false @@ -2497,12 +3099,8 @@ packages: '@types/node': 16.0.0 dev: false - /@types/eslint-visitor-keys/1.0.0: - resolution: {integrity: sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==} - dev: false - - /@types/history/4.7.8: - resolution: {integrity: sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==} + /@types/history/4.7.9: + resolution: {integrity: sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==} dev: false /@types/hoist-non-react-statics/3.3.1: @@ -2512,6 +3110,10 @@ packages: hoist-non-react-statics: 3.3.2 dev: false + /@types/html-minifier-terser/5.1.2: + resolution: {integrity: sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==} + dev: false + /@types/invariant/2.2.34: resolution: {integrity: sha512-lYUtmJ9BqUN688fGY1U1HZoWT1/Jrmgigx2loq4ZcJpICECm/Om3V314BxdzypO0u5PORKGMM6x0OXaljV1YFg==} dev: false @@ -2546,8 +3148,8 @@ packages: pretty-format: 26.6.2 dev: false - /@types/json-schema/7.0.7: - resolution: {integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==} + /@types/json-schema/7.0.8: + resolution: {integrity: sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==} dev: false /@types/luxon/1.27.1: @@ -2569,11 +3171,11 @@ packages: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: false - /@types/prop-types/15.7.3: - resolution: {integrity: sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==} + /@types/prop-types/15.7.4: + resolution: {integrity: sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==} - /@types/q/1.5.4: - resolution: {integrity: sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==} + /@types/q/1.5.5: + resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==} /@types/react-dom/17.0.8: resolution: {integrity: sha512-0ohAiJAx1DAUEcY9UopnfwCE9sSMDGnY/oXjWMax6g3RpzmTt2GMyMVAXcbn0mo8XAff0SbQJl2/SBU+hjSZ1A==} @@ -2584,7 +3186,7 @@ packages: /@types/react-router-dom/5.1.7: resolution: {integrity: sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==} dependencies: - '@types/history': 4.7.8 + '@types/history': 4.7.9 '@types/react': 17.0.13 '@types/react-router': 5.1.15 dev: false @@ -2592,7 +3194,7 @@ packages: /@types/react-router/5.1.15: resolution: {integrity: sha512-z3UlMG/x91SFEVmmvykk9FLTliDvfdIUky4k2rCfXWQ0NKbrP8o9BTCaCTPuYsB8gDkUnUmkcA2vYlm2DR+HAA==} dependencies: - '@types/history': 4.7.8 + '@types/history': 4.7.9 '@types/react': 17.0.13 dev: false @@ -2602,29 +3204,33 @@ packages: '@types/react': 17.0.13 dev: true - /@types/react-transition-group/4.4.1: - resolution: {integrity: sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ==} + /@types/react-transition-group/4.4.2: + resolution: {integrity: sha512-KibDWL6nshuOJ0fu8ll7QnV/LVTo3PzQ9aCPnRUYPfX7eZohHwLIdNHj7pftanREzHNP4/nJa8oeM73uSiavMQ==} dependencies: '@types/react': 17.0.13 dev: false - /@types/react/16.14.10: - resolution: {integrity: sha512-QadBsMyF6ldjEAXEhsmEW/L0uBDJT8yw7Qoe5sRnEKVrzMkiYoJwqoL5TKJOlArsn/wvIJM/XdVzkdL6+AS64Q==} + /@types/react/16.14.11: + resolution: {integrity: sha512-Don0MtsZZ3fjwTJ2BsoqkyOy7e176KplEAKOpr/4XDdzinlyJBn9yfsKn5mcSgn4kh1B22+3tBnzBC1z63ybtQ==} dependencies: - '@types/prop-types': 15.7.3 - '@types/scheduler': 0.16.1 + '@types/prop-types': 15.7.4 + '@types/scheduler': 0.16.2 csstype: 3.0.8 dev: false /@types/react/17.0.13: resolution: {integrity: sha512-D/G3PiuqTfE3IMNjLn/DCp6umjVCSvtZTPdtAFy5+Ved6CsdRvivfKeCzw79W4AatShtU4nGqgvOv5Gro534vQ==} dependencies: - '@types/prop-types': 15.7.3 - '@types/scheduler': 0.16.1 + '@types/prop-types': 15.7.4 + '@types/scheduler': 0.16.2 csstype: 3.0.8 - /@types/scheduler/0.16.1: - resolution: {integrity: sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==} + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + + /@types/source-list-map/0.1.2: + resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==} + dev: false /@types/stack-utils/1.0.1: resolution: {integrity: sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==} @@ -2636,10 +3242,39 @@ packages: '@types/react': 17.0.13 dev: false + /@types/tapable/1.0.8: + resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==} + dev: false + + /@types/uglify-js/3.13.1: + resolution: {integrity: sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==} + dependencies: + source-map: 0.6.1 + dev: false + /@types/warning/3.0.0: resolution: {integrity: sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=} dev: false + /@types/webpack-sources/2.1.1: + resolution: {integrity: sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ==} + dependencies: + '@types/node': 16.0.0 + '@types/source-list-map': 0.1.2 + source-map: 0.7.3 + dev: false + + /@types/webpack/4.41.30: + resolution: {integrity: sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA==} + dependencies: + '@types/node': 16.0.0 + '@types/tapable': 1.0.8 + '@types/uglify-js': 3.13.1 + '@types/webpack-sources': 2.1.1 + anymatch: 3.1.2 + source-map: 0.6.1 + dev: false + /@types/yargs-parser/20.2.1: resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} dev: false @@ -2656,78 +3291,24 @@ packages: '@types/yargs-parser': 20.2.1 dev: false - /@typescript-eslint/eslint-plugin/2.34.0_c3dfba3448a0529c07b579a52638224d: - resolution: {integrity: sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + /@typescript-eslint/eslint-plugin/4.28.3_8da3816a7c3fb8ebc9f4c4b3e4b2e38f: + resolution: {integrity: sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: - '@typescript-eslint/parser': ^2.0.0 - eslint: ^5.0.0 || ^6.0.0 + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 2.34.0_eslint@7.30.0+typescript@4.3.5 - '@typescript-eslint/parser': 2.34.0_eslint@7.30.0+typescript@4.3.5 + '@typescript-eslint/experimental-utils': 4.28.3_eslint@7.30.0+typescript@4.3.5 + '@typescript-eslint/parser': 4.28.3_eslint@7.30.0+typescript@4.3.5 + '@typescript-eslint/scope-manager': 4.28.3 + debug: 4.3.2 eslint: 7.30.0 functional-red-black-tree: 1.0.1 regexpp: 3.2.0 - tsutils: 3.21.0_typescript@4.3.5 - typescript: 4.3.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/experimental-utils/2.34.0_eslint@7.30.0+typescript@4.3.5: - resolution: {integrity: sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - peerDependencies: - eslint: '*' - dependencies: - '@types/json-schema': 7.0.7 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@4.3.5 - eslint: 7.30.0 - eslint-scope: 5.1.1 - eslint-utils: 2.1.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/parser/2.34.0_eslint@7.30.0+typescript@4.3.5: - resolution: {integrity: sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 2.34.0_eslint@7.30.0+typescript@4.3.5 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@4.3.5 - eslint: 7.30.0 - eslint-visitor-keys: 1.3.0 - typescript: 4.3.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/typescript-estree/2.34.0_typescript@4.3.5: - resolution: {integrity: sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - debug: 4.3.1 - eslint-visitor-keys: 1.3.0 - glob: 7.1.7 - is-glob: 4.0.1 - lodash: 4.17.21 semver: 7.3.5 tsutils: 3.21.0_typescript@4.3.5 typescript: 4.3.5 @@ -2735,6 +3316,86 @@ packages: - supports-color dev: false + /@typescript-eslint/experimental-utils/4.28.3_eslint@7.30.0+typescript@4.3.5: + resolution: {integrity: sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' + dependencies: + '@types/json-schema': 7.0.8 + '@typescript-eslint/scope-manager': 4.28.3 + '@typescript-eslint/types': 4.28.3 + '@typescript-eslint/typescript-estree': 4.28.3_typescript@4.3.5 + eslint: 7.30.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@7.30.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/parser/4.28.3_eslint@7.30.0+typescript@4.3.5: + resolution: {integrity: sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 4.28.3 + '@typescript-eslint/types': 4.28.3 + '@typescript-eslint/typescript-estree': 4.28.3_typescript@4.3.5 + debug: 4.3.2 + eslint: 7.30.0 + typescript: 4.3.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/scope-manager/4.28.3: + resolution: {integrity: sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': 4.28.3 + '@typescript-eslint/visitor-keys': 4.28.3 + dev: false + + /@typescript-eslint/types/4.28.3: + resolution: {integrity: sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dev: false + + /@typescript-eslint/typescript-estree/4.28.3_typescript@4.3.5: + resolution: {integrity: sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 4.28.3 + '@typescript-eslint/visitor-keys': 4.28.3 + debug: 4.3.2 + globby: 11.0.4 + is-glob: 4.0.1 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.3.5 + typescript: 4.3.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/visitor-keys/4.28.3: + resolution: {integrity: sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': 4.28.3 + eslint-visitor-keys: 2.1.0 + dev: false + /@webassemblyjs/ast/1.8.5: resolution: {integrity: sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==} dependencies: @@ -2893,8 +3554,8 @@ packages: acorn-walk: 6.2.0 dev: false - /acorn-jsx/5.3.1_acorn@7.4.1: - resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} + /acorn-jsx/5.3.2_acorn@7.4.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -3167,6 +3828,11 @@ packages: array-uniq: 1.0.3 dev: false + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: false + /array-uniq/1.0.3: resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=} engines: {node: '>=0.10.0'} @@ -3268,7 +3934,7 @@ packages: hasBin: true dependencies: browserslist: 4.16.6 - caniuse-lite: 1.0.30001241 + caniuse-lite: 1.0.30001245 colorette: 1.2.2 normalize-range: 0.1.2 num2fraction: 1.2.2 @@ -3309,7 +3975,7 @@ packages: '@babel/types': 7.14.5 eslint: 7.30.0 eslint-visitor-keys: 1.3.0 - resolve: 1.20.0 + resolve: 1.12.0 transitivePeerDependencies: - supports-color dev: false @@ -3330,7 +3996,7 @@ packages: '@babel/core': 7.6.0 '@jest/transform': 24.9.0 '@jest/types': 24.9.0 - '@types/babel__core': 7.1.14 + '@types/babel__core': 7.1.15 babel-plugin-istanbul: 5.2.0 babel-preset-jest: 24.9.0_@babel+core@7.6.0 chalk: 2.4.2 @@ -3348,7 +4014,7 @@ packages: '@babel/core': 7.9.0 '@jest/transform': 24.9.0 '@jest/types': 24.9.0 - '@types/babel__core': 7.1.14 + '@types/babel__core': 7.1.15 babel-plugin-istanbul: 5.2.0 babel-preset-jest: 24.9.0_@babel+core@7.9.0 chalk: 2.4.2 @@ -3409,13 +4075,13 @@ packages: resolution: {integrity: sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==} engines: {node: '>= 6'} dependencies: - '@types/babel__traverse': 7.14.0 + '@types/babel__traverse': 7.14.2 dev: false /babel-plugin-macros/2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} dependencies: - '@babel/runtime': 7.14.6 + '@babel/runtime': 7.9.0 cosmiconfig: 6.0.0 resolve: 1.20.0 dev: false @@ -3428,38 +4094,38 @@ packages: '@babel/core': 7.6.0 dev: false - /babel-plugin-polyfill-corejs2/0.2.2_@babel+core@7.9.0: + /babel-plugin-polyfill-corejs2/0.2.2_@babel+core@7.6.0: resolution: {integrity: sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.14.7 - '@babel/core': 7.9.0 - '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.6.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3/0.2.3_@babel+core@7.9.0: + /babel-plugin-polyfill-corejs3/0.2.3_@babel+core@7.6.0: resolution: {integrity: sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 - '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.6.0 core-js-compat: 3.15.2 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator/0.2.2_@babel+core@7.9.0: + /babel-plugin-polyfill-regenerator/0.2.2_@babel+core@7.6.0: resolution: {integrity: sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.9.0 - '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.9.0 + '@babel/core': 7.6.0 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.6.0 transitivePeerDependencies: - supports-color dev: false @@ -3780,9 +4446,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001241 + caniuse-lite: 1.0.30001245 colorette: 1.2.2 - electron-to-chromium: 1.3.766 + electron-to-chromium: 1.3.776 escalade: 3.1.1 node-releases: 1.1.73 @@ -3790,8 +4456,8 @@ packages: resolution: {integrity: sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==} hasBin: true dependencies: - caniuse-lite: 1.0.30001241 - electron-to-chromium: 1.3.766 + caniuse-lite: 1.0.30001245 + electron-to-chromium: 1.3.776 node-releases: 1.1.73 dev: false @@ -3914,11 +4580,11 @@ packages: engines: {node: '>=6'} dev: false - /camel-case/3.0.0: - resolution: {integrity: sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=} + /camel-case/4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 + pascal-case: 3.1.2 + tslib: 2.3.0 dev: false /camelcase/4.1.0: @@ -3938,12 +4604,12 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.16.6 - caniuse-lite: 1.0.30001241 + caniuse-lite: 1.0.30001245 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - /caniuse-lite/1.0.30001241: - resolution: {integrity: sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==} + /caniuse-lite/1.0.30001245: + resolution: {integrity: sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==} /capture-exit/2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -4184,7 +4850,7 @@ packages: resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} engines: {node: '>= 4.0'} dependencies: - '@types/q': 1.5.4 + '@types/q': 1.5.5 chalk: 2.4.2 q: 1.5.1 @@ -4259,18 +4925,15 @@ packages: engines: {node: '>= 0.6.x'} dev: true - /commander/2.17.1: - resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==} - dev: false - - /commander/2.19.0: - resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==} - dev: false - /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false + /commander/4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: false + /common-tags/1.8.0: resolution: {integrity: sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==} engines: {node: '>=4.0.0'} @@ -4829,31 +5492,6 @@ packages: ms: 2.1.3 dev: false - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /debug/4.3.1_supports-color@6.1.0: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 6.1.0 - dev: false - /debug/4.3.2: resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} engines: {node: '>=6.0'} @@ -4866,6 +5504,19 @@ packages: ms: 2.1.2 dev: false + /debug/4.3.2_supports-color@6.1.0: + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 6.1.0 + dev: false + /decamelize/1.2.0: resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} engines: {node: '>=0.10.0'} @@ -5053,6 +5704,13 @@ packages: path-type: 3.0.0 dev: false + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: false + /dns-equal/1.0.0: resolution: {integrity: sha1-s55/HabrCnW6nBcySzR1PEfgZU0=} dev: false @@ -5157,6 +5815,13 @@ packages: domhandler: 4.2.0 dev: false + /dot-case/3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.0 + dev: false + /dot-prop/5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -5208,8 +5873,8 @@ packages: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} dev: false - /electron-to-chromium/1.3.766: - resolution: {integrity: sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==} + /electron-to-chromium/1.3.776: + resolution: {integrity: sha512-V0w7eFSBoFPpdw4xexjVPZ770UDZIevSwkkj4W97XbE3IsCsTRFpa7/yXGZ88EOQAUEA09JMMsWK0xsw0kRAYw==} /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -5302,7 +5967,7 @@ packages: is-negative-zero: 2.0.1 is-regex: 1.1.3 is-string: 1.0.6 - object-inspect: 1.10.3 + object-inspect: 1.11.0 object-keys: 1.1.1 object.assign: 4.1.2 string.prototype.trimend: 1.0.4 @@ -5388,7 +6053,7 @@ packages: eslint: 7.30.0 dev: true - /eslint-config-react-app/5.2.1_93572f5f98e8dc33ec8a5d2f8e08816d: + /eslint-config-react-app/5.2.1_87e16b3edcb06153624592b5e5a089e3: resolution: {integrity: sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==} peerDependencies: '@typescript-eslint/eslint-plugin': 2.x @@ -5401,8 +6066,8 @@ packages: eslint-plugin-react: 7.x eslint-plugin-react-hooks: 1.x || 2.x dependencies: - '@typescript-eslint/eslint-plugin': 2.34.0_c3dfba3448a0529c07b579a52638224d - '@typescript-eslint/parser': 2.34.0_eslint@7.30.0+typescript@4.3.5 + '@typescript-eslint/eslint-plugin': 4.28.3_8da3816a7c3fb8ebc9f4c4b3e4b2e38f + '@typescript-eslint/parser': 4.28.3_eslint@7.30.0+typescript@4.3.5 babel-eslint: 10.0.3_eslint@7.30.0 confusing-browser-globals: 1.0.10 eslint: 7.30.0 @@ -5452,7 +6117,7 @@ packages: eslint: '>=5.0.0' dependencies: eslint: 7.30.0 - lodash: 4.17.21 + lodash: 4.17.15 dev: false /eslint-plugin-import/2.18.2_eslint@7.30.0: @@ -5472,7 +6137,7 @@ packages: minimatch: 3.0.4 object.values: 1.1.4 read-pkg-up: 2.0.0 - resolve: 1.20.0 + resolve: 1.12.0 dev: false /eslint-plugin-jsx-a11y/6.2.3_eslint@7.30.0: @@ -5534,7 +6199,7 @@ packages: object.fromentries: 2.0.4 object.values: 1.1.4 prop-types: 15.7.2 - resolve: 1.20.0 + resolve: 1.12.0 dev: false /eslint-scope/4.0.3: @@ -5560,6 +6225,16 @@ packages: eslint-visitor-keys: 1.3.0 dev: false + /eslint-utils/3.0.0_eslint@7.30.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 7.30.0 + eslint-visitor-keys: 2.1.0 + dev: false + /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} @@ -5624,7 +6299,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.1_acorn@7.4.1 + acorn-jsx: 5.3.2_acorn@7.4.1 eslint-visitor-keys: 1.3.0 dev: false @@ -5886,6 +6561,17 @@ packages: micromatch: 3.1.10 dev: false + /fast-glob/3.2.7: + resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} + engines: {node: '>=8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.4 + dev: false + /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -5899,6 +6585,12 @@ packages: punycode: 1.4.1 dev: true + /fastq/1.11.1: + resolution: {integrity: sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==} + dependencies: + reusify: 1.0.4 + dev: false + /fault/1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} dependencies: @@ -6083,12 +6775,12 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.0 + flatted: 3.2.1 rimraf: 3.0.2 dev: false - /flatted/3.2.0: - resolution: {integrity: sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==} + /flatted/3.2.1: + resolution: {integrity: sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==} dev: false /flatten/1.0.3: @@ -6102,7 +6794,7 @@ packages: readable-stream: 2.3.7 dev: false - /follow-redirects/1.14.1_debug@4.3.1: + /follow-redirects/1.14.1_debug@4.3.2: resolution: {integrity: sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==} engines: {node: '>=4.0'} peerDependencies: @@ -6111,7 +6803,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.1_supports-color@6.1.0 + debug: 4.3.2_supports-color@6.1.0 dev: false /for-each/0.3.3: @@ -6412,6 +7104,18 @@ packages: type-fest: 0.20.2 dev: false + /globby/11.0.4: + resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.7 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: false + /globby/6.1.0: resolution: {integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=} engines: {node: '>=0.10.0'} @@ -6436,8 +7140,8 @@ packages: slash: 1.0.0 dev: false - /goober/2.0.38: - resolution: {integrity: sha512-oGrP8xMB3k6EEcEAuKstd05r0JRFs8L9ouPCTKxupu85PdDJ443LTCXvxRVMeYN6pVhV6htVb7FaKTk5JlFzCQ==} + /goober/2.0.39: + resolution: {integrity: sha512-ryw0VaZaehKmnjL4ZEJaiUVQc+XFa5dXIAbf2QC3F+WVKRbzaSuJyq7w28bdlwqYctiZ0Ok5QL/Pap5M2pCHQg==} peerDependencies: csstype: ^2.6.2 dev: false @@ -6665,28 +7369,30 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: false - /html-minifier/3.5.21: - resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==} - engines: {node: '>=4'} + /html-minifier-terser/5.1.1: + resolution: {integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==} + engines: {node: '>=6'} hasBin: true dependencies: - camel-case: 3.0.0 + camel-case: 4.1.2 clean-css: 4.2.3 - commander: 2.17.1 + commander: 4.1.1 he: 1.2.0 - param-case: 2.1.1 + param-case: 3.0.4 relateurl: 0.2.7 - uglify-js: 3.4.10 + terser: 4.8.0 dev: false - /html-webpack-plugin/4.0.0-beta.5_webpack@4.41.0: - resolution: {integrity: sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ==} + /html-webpack-plugin/4.5.2_webpack@4.41.0: + resolution: {integrity: sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==} engines: {node: '>=6.9'} - deprecated: please switch to a stable version peerDependencies: - webpack: ^4.0.0 + webpack: ^4.0.0 || ^5.0.0 dependencies: - html-minifier: 3.5.21 + '@types/html-minifier-terser': 5.1.2 + '@types/tapable': 1.0.8 + '@types/webpack': 4.41.30 + html-minifier-terser: 5.1.1 loader-utils: 1.4.0 lodash: 4.17.21 pretty-error: 2.1.2 @@ -6744,11 +7450,11 @@ packages: resolution: {integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==} dev: false - /http-proxy-middleware/0.19.2_debug@4.3.1: + /http-proxy-middleware/0.19.2_debug@4.3.2: resolution: {integrity: sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==} engines: {node: '>=4.0.0'} dependencies: - http-proxy: 1.18.1_debug@4.3.1 + http-proxy: 1.18.1_debug@4.3.2 is-glob: 4.0.1 lodash: 4.17.21 micromatch: 3.1.10 @@ -6756,12 +7462,12 @@ packages: - debug dev: false - /http-proxy/1.18.1_debug@4.3.1: + /http-proxy/1.18.1_debug@4.3.2: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.14.1_debug@4.3.1 + follow-redirects: 1.14.1_debug@4.3.2 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -6826,6 +7532,11 @@ packages: engines: {node: '>= 4'} dev: false + /ignore/5.1.8: + resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} + engines: {node: '>= 4'} + dev: false + /immer/1.10.0: resolution: {integrity: sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==} dev: false @@ -7086,8 +7797,8 @@ packages: rgb-regex: 1.0.1 rgba-regex: 1.0.0 - /is-core-module/2.4.0: - resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} + /is-core-module/2.5.0: + resolution: {integrity: sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==} dependencies: has: 1.0.3 dev: false @@ -7399,7 +8110,7 @@ packages: resolution: {integrity: sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==} engines: {node: '>=6'} dependencies: - debug: 4.3.1 + debug: 4.3.2 istanbul-lib-coverage: 2.0.5 make-dir: 2.1.0 rimraf: 2.7.1 @@ -8365,8 +9076,10 @@ packages: js-tokens: 4.0.0 dev: false - /lower-case/1.1.4: - resolution: {integrity: sha1-miyr0bno4K6ZOkv31YdcOcQujqw=} + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.3.0 dev: false /lowlight/1.12.1: @@ -8557,6 +9270,14 @@ packages: snapdragon: 0.8.2 to-regex: 3.0.2 + /micromatch/4.0.4: + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.0 + dev: false + /microseconds/0.2.0: resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} dev: false @@ -8883,10 +9604,11 @@ packages: /nice-try/1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - /no-case/2.3.2: - resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: - lower-case: 1.1.4 + lower-case: 2.0.2 + tslib: 2.3.0 dev: false /node-forge/0.10.0: @@ -9085,8 +9807,8 @@ packages: engines: {node: '>= 0.10.0'} dev: false - /object-inspect/1.10.3: - resolution: {integrity: sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==} + /object-inspect/1.11.0: + resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==} /object-is/1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} @@ -9383,10 +10105,11 @@ packages: readable-stream: 2.3.7 dev: false - /param-case/2.1.1: - resolution: {integrity: sha1-35T9jPZTHs915r75oIWPvHK+Ikc=} + /param-case/3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: - no-case: 2.3.2 + dot-case: 3.0.4 + tslib: 2.3.0 dev: false /parent-module/1.0.1: @@ -9459,6 +10182,13 @@ packages: engines: {node: '>= 0.8'} dev: false + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.0 + dev: false + /pascalcase/0.1.1: resolution: {integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=} engines: {node: '>=0.10.0'} @@ -10115,7 +10845,7 @@ packages: dependencies: autoprefixer: 9.8.6 browserslist: 4.16.6 - caniuse-lite: 1.0.30001241 + caniuse-lite: 1.0.30001245 css-blank-pseudo: 0.1.4 css-has-pseudo: 0.10.0 css-prefers-color-scheme: 3.1.1 @@ -10527,6 +11257,10 @@ packages: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: false + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: false + /raf/3.4.1: resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} dependencies: @@ -10622,7 +11356,7 @@ packages: '@babel/runtime': 7.14.6 '@restart/context': 2.1.4_react@16.12.0 '@restart/hooks': 0.3.27_react@16.12.0 - '@types/react': 16.14.10 + '@types/react': 16.14.11 classnames: 2.3.1 dom-helpers: 5.2.1 invariant: 2.2.4 @@ -10735,7 +11469,7 @@ packages: react: '>=16' react-dom: '>=16' dependencies: - goober: 2.0.38 + goober: 2.0.39 react: 16.12.0 react-dom: 16.12.0_react@16.12.0 transitivePeerDependencies: @@ -11424,7 +12158,7 @@ packages: /resolve/1.20.0: resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: - is-core-module: 2.4.0 + is-core-module: 2.5.0 path-parse: 1.0.7 dev: false @@ -11440,6 +12174,11 @@ packages: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: false + /rework-visit/1.0.0: resolution: {integrity: sha1-mUWygD8hni96ygCtuLyfZA+ELJo=} dev: false @@ -11508,6 +12247,12 @@ packages: engines: {node: '>=0.12.0'} dev: false + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: false + /run-queue/1.0.3: resolution: {integrity: sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=} dependencies: @@ -11613,7 +12358,7 @@ packages: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: - '@types/json-schema': 7.0.7 + '@types/json-schema': 7.0.8 ajv: 6.12.6 ajv-keywords: 3.5.2_ajv@6.12.6 dev: false @@ -11945,6 +12690,11 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + /source-map/0.7.3: + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} + dev: false + /space-separated-tokens/1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} dev: false @@ -11993,7 +12743,7 @@ packages: /spdy-transport/3.0.0_supports-color@6.1.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.1_supports-color@6.1.0 + debug: 4.3.2_supports-color@6.1.0 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -12007,7 +12757,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.1_supports-color@6.1.0 + debug: 4.3.2_supports-color@6.1.0 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -12677,6 +13427,10 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: false + /tslib/2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + dev: false + /tsutils/3.21.0_typescript@4.3.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -12766,15 +13520,6 @@ packages: hasBin: true dev: false - /uglify-js/3.4.10: - resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==} - engines: {node: '>=0.8.0'} - hasBin: true - dependencies: - commander: 2.19.0 - source-map: 0.6.1 - dev: false - /unbox-primitive/1.0.1: resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} dependencies: @@ -12789,7 +13534,7 @@ packages: react: '>=15.0.0' dependencies: '@babel/runtime': 7.14.6 - '@types/react': 16.14.10 + '@types/react': 17.0.13 invariant: 2.2.4 react: 16.12.0 react-lifecycles-compat: 3.0.4 @@ -12895,10 +13640,6 @@ packages: registry-url: 3.1.0 dev: true - /upper-case/1.1.3: - resolution: {integrity: sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=} - dev: false - /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -13132,11 +13873,11 @@ packages: chokidar: 2.1.8 compression: 1.7.4 connect-history-api-fallback: 1.6.0 - debug: 4.3.1_supports-color@6.1.0 + debug: 4.3.2_supports-color@6.1.0 del: 3.0.0 express: 4.17.1 html-entities: 1.4.0 - http-proxy-middleware: 0.19.2_debug@4.3.1 + http-proxy-middleware: 0.19.2_debug@4.3.2 import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.5 @@ -13650,9 +14391,9 @@ packages: yargs-parser: 18.1.3 dev: false - github.com/zkldi/tachi-common/efa9b2ea9b6fba96fb93197a3318102ff00acc2f_typescript@4.3.5: - resolution: {tarball: https://codeload.github.com/zkldi/tachi-common/tar.gz/efa9b2ea9b6fba96fb93197a3318102ff00acc2f} - id: github.com/zkldi/tachi-common/efa9b2ea9b6fba96fb93197a3318102ff00acc2f + github.com/zkldi/tachi-common/7f0ff9c3905018070c291ae07f3f937d142f925d_typescript@4.3.5: + resolution: {tarball: https://codeload.github.com/zkldi/tachi-common/tar.gz/7f0ff9c3905018070c291ae07f3f937d142f925d} + id: github.com/zkldi/tachi-common/7f0ff9c3905018070c291ae07f3f937d142f925d name: tachi-common version: 0.1.0 dependencies: diff --git a/client/src/.eslintrc b/client/src/.eslintrc index a8b1b58da..b3d346cd6 100644 --- a/client/src/.eslintrc +++ b/client/src/.eslintrc @@ -49,6 +49,7 @@ } ], "@typescript-eslint/explicit-function-return-type": "off", + "react/display-name": "off", "import/no-unresolved": "off", "react/prop-types": "warn", "require-await": "warn", diff --git a/client/src/app/App.tsx b/client/src/app/App.tsx index 71dc1f88d..1064bf6c0 100644 --- a/client/src/app/App.tsx +++ b/client/src/app/App.tsx @@ -1,11 +1,11 @@ import React from "react"; import { BrowserRouter } from "react-router-dom"; -import { Routes } from "./AppRoutes"; +import { Routes } from "./routes/AppRoutes"; import { MaterialThemeProvider } from "../_metronic/layout"; import { UserContextProvider } from "context/UserContext"; import { Toaster } from "react-hot-toast"; import { SubheaderContextProvider } from "context/SubheaderContext"; -import { LoadingScreen } from "components/layout/LoadingScreen"; +import { LoadingScreen } from "components/layout/screens/LoadingScreen"; import { QueryClientProvider, QueryClient } from "react-query"; const queryClient = new QueryClient(); diff --git a/client/src/app/DashboardRoutes.tsx b/client/src/app/DashboardRoutes.tsx deleted file mode 100644 index 93d3c52df..000000000 --- a/client/src/app/DashboardRoutes.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import { Route, Switch } from "react-router-dom"; -import { Layout } from "../_metronic/layout"; -import { DashboardPage } from "./pages/dashboard/DashboardPage"; -import RequireAuthAsUserParam from "components/auth/RequireAuthAsUserParam"; -import UserPage from "./pages/dashboard/users/UserPage"; -import CreditsPage from "./pages/dashboard/misc/CreditsPage"; -import IIDXScoreTable from "components/tables/IIDXPBTable"; -import PBsPage from "./pages/dashboard/users/games/game/playtype/PBsPage"; - -export default function DashboardRoutes() { - return ( - - - - - - - - - - - - - - - - Settings Page - - - - - - - - ); -} diff --git a/client/src/app/pages/dashboard/misc/CreditsPage.tsx b/client/src/app/pages/dashboard/misc/CreditsPage.tsx index 236d575b8..6827f91fe 100644 --- a/client/src/app/pages/dashboard/misc/CreditsPage.tsx +++ b/client/src/app/pages/dashboard/misc/CreditsPage.tsx @@ -7,12 +7,10 @@ import { SubheaderContext } from "context/SubheaderContext"; export default function CreditsPage() { const { setTitle, setBreadcrumbs } = useContext(SubheaderContext); + + UpdateSubheader(["Credits"], setTitle, setBreadcrumbs); + const [alt, setAlt] = useState(false); - - useEffect(() => { - UpdateSubheader(["Credits"], setTitle, setBreadcrumbs); - }, []); - function a(normal: JSX.Element | string, ...altStr: (JSX.Element | string)[]) { return alt ? RFA(altStr) : normal; } diff --git a/client/src/app/pages/dashboard/users/UserPage.tsx b/client/src/app/pages/dashboard/users/UserPage.tsx index 79f800316..3c11e4df0 100644 --- a/client/src/app/pages/dashboard/users/UserPage.tsx +++ b/client/src/app/pages/dashboard/users/UserPage.tsx @@ -1,40 +1,20 @@ import Loading from "components/util/Loading"; import { BackgroundContext } from "context/BackgroundContext"; -import React, { useContext, useEffect, useState } from "react"; -import { useHistory, useParams } from "react-router-dom"; +import React, { useContext, useEffect } from "react"; import { PublicUserDocument } from "tachi-common"; -import { APIFetchV1, ToAPIURL } from "util/api"; +import { ToAPIURL } from "util/api"; import { UpdateSubheader } from "util/subheader"; import { SubheaderContext } from "context/SubheaderContext"; import Divider from "components/util/Divider"; -export default function UserPage() { +export default function UserPage({ reqUser }: { reqUser: PublicUserDocument }) { const { setBreadcrumbs, setTitle } = useContext(SubheaderContext); const { setBackground } = useContext(BackgroundContext); - const { userID } = useParams<{ userID: string }>(); - const history = useHistory(); - const [reqUser, setReqUser] = useState(); - useEffect(() => { - APIFetchV1(`/users/${userID}`).then(rj => { - if (!rj.success) { - history.push("/error"); - return; // hack - } - - setReqUser(rj.body); - }); - }, []); - - useEffect(() => { - if (!reqUser) { - return; - } - UpdateSubheader(["Users", `${reqUser.username}'s Profile`], setTitle, setBreadcrumbs); - setBackground(ToAPIURL(`/users/${userID}/banner`)); + setBackground(ToAPIURL(`/users/${reqUser.id}/banner`)); return () => { setBackground(null); diff --git a/client/src/app/pages/dashboard/users/games/game/playtype/PBsPage.tsx b/client/src/app/pages/dashboard/users/games/game/playtype/PBsPage.tsx index e723d0a9d..a1f088fb1 100644 --- a/client/src/app/pages/dashboard/users/games/game/playtype/PBsPage.tsx +++ b/client/src/app/pages/dashboard/users/games/game/playtype/PBsPage.tsx @@ -1,22 +1,57 @@ import IIDXPBTable from "components/tables/IIDXPBTable"; import Loading from "components/util/Loading"; -import React, { useState } from "react"; +import { BackgroundContext } from "context/BackgroundContext"; +import { SubheaderContext } from "context/SubheaderContext"; +import React, { useContext, useEffect, useState } from "react"; import { useQuery } from "react-query"; -import { useParams } from "react-router-dom"; -import { PBScoreDocument, ChartDocument, SongDocument } from "tachi-common"; +import { + PBScoreDocument, + ChartDocument, + SongDocument, + PublicUserDocument, + Playtypes, + Game, + GetGameConfig, +} from "tachi-common"; +import { GamePT } from "types/react"; import { PBDataset } from "types/tables"; -import { APIFetchV1 } from "util/api"; +import { APIFetchV1, ToAPIURL } from "util/api"; +import { UpdateSubheader } from "util/subheader"; -export default function PBsPage() { +export default function PBsPage({ + reqUser, + game, + playtype, +}: { + reqUser: PublicUserDocument; +} & GamePT) { const [dataset, setDataset] = useState>([]); - const { userID } = useParams<{ userID: string }>(); + const { setTitle, setBreadcrumbs } = useContext(SubheaderContext); + const { setBackground } = useContext(BackgroundContext); - const { isLoading, error } = useQuery("TEMP_PBS", async () => { + const gameConfig = GetGameConfig(game); + + useEffect(() => { + UpdateSubheader( + ["Users", reqUser.username, gameConfig.name, playtype], + setTitle, + setBreadcrumbs, + `${reqUser.username}'s ${gameConfig.name} ${playtype} Profile` + ); + + setBackground(ToAPIURL(`/users/${reqUser.username}/banner`)); + + return () => { + setBackground(null); + }; + }, [reqUser]); + + const { isLoading, error } = useQuery(`${reqUser.id}_pbs`, async () => { const res = await APIFetchV1<{ scores: PBScoreDocument<"iidx:SP">[]; charts: ChartDocument<"iidx:SP">[]; songs: SongDocument<"iidx">[]; - }>(`/users/${userID}/games/iidx/SP/pbs/best`); + }>(`/users/${reqUser.username}/games/iidx/SP/pbs/best`); if (!res.success) { throw res; @@ -33,11 +68,12 @@ export default function PBsPage() { chartMap.set(chart.chartID, chart); } - const data = res.body.scores.map(e => ({ + const data = res.body.scores.map((e, i) => ({ ...e, __related: { song: songMap.get(e.songID), chart: chartMap.get(e.chartID), + index: i, }, })); diff --git a/client/src/app/AppRoutes.tsx b/client/src/app/routes/AppRoutes.tsx similarity index 81% rename from client/src/app/AppRoutes.tsx rename to client/src/app/routes/AppRoutes.tsx index e5cdf3943..6c81d3503 100644 --- a/client/src/app/AppRoutes.tsx +++ b/client/src/app/routes/AppRoutes.tsx @@ -2,9 +2,9 @@ import { UserContext } from "context/UserContext"; import React, { useContext } from "react"; import { Redirect, Route, Switch } from "react-router-dom"; import DashboardRoutes from "./DashboardRoutes"; -import { ErrorPage } from "./pages/ErrorPage"; -import LoginPage from "./pages/LoginPage"; -import RegisterPage from "./pages/RegisterPage"; +import { ErrorPage } from "app/pages/ErrorPage"; +import LoginPage from "app/pages/LoginPage"; +import RegisterPage from "app/pages/RegisterPage"; /** * Core Routes for Tachi-Client. diff --git a/client/src/app/routes/DashboardRoutes.tsx b/client/src/app/routes/DashboardRoutes.tsx new file mode 100644 index 000000000..bc769834d --- /dev/null +++ b/client/src/app/routes/DashboardRoutes.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import { Route, Switch } from "react-router-dom"; +import { Layout } from "_metronic/layout"; +import { DashboardPage } from "../pages/dashboard/DashboardPage"; +import CreditsPage from "../pages/dashboard/misc/CreditsPage"; +import UserRoutes from "./UserRoutes"; + +export default function DashboardRoutes() { + return ( + + + + + + + + + + + + + + + + ); +} diff --git a/client/src/app/routes/UserRoutes.tsx b/client/src/app/routes/UserRoutes.tsx new file mode 100644 index 000000000..41ccd9252 --- /dev/null +++ b/client/src/app/routes/UserRoutes.tsx @@ -0,0 +1,78 @@ +import { ErrorPage } from "app/pages/ErrorPage"; +import RequireAuthAsUserParam from "components/auth/RequireAuthAsUserParam"; +import React, { useEffect, useState } from "react"; +import { Route, Switch, useParams } from "react-router-dom"; +import { Game, PublicUserDocument } from "tachi-common"; +import { APIFetchV1 } from "util/api"; +import { IsSupportedGame, IsSupportedPlaytype } from "util/asserts"; +import PBsPage from "../pages/dashboard/users/games/game/playtype/PBsPage"; +import UserPage from "../pages/dashboard/users/UserPage"; + +export default function UserRoutes() { + const [reqUser, setReqUser] = useState(null); + const params = useParams<{ userID: string }>(); + + useEffect(() => { + (async () => { + const res = await APIFetchV1(`/users/${params.userID}`); + + if (!res.success) { + console.error(res); + } else { + setReqUser(res.body); + } + })(); + }, [params.userID]); + + if (!reqUser) { + return null; + } + + return ( + + + + + + + Settings Page + + + + + + + ); +} + +function UserGameRoutes({ reqUser }: { reqUser: PublicUserDocument }) { + const { game } = useParams<{ game: string }>(); + + if (!IsSupportedGame(game)) { + return ; + } + + return ( + + + + + + ); +} + +function UserGamePlaytypeRoutes({ reqUser, game }: { reqUser: PublicUserDocument; game: Game }) { + const { playtype } = useParams<{ playtype: string }>(); + + if (!IsSupportedPlaytype(game, playtype)) { + return ; + } + + return ( + + + + + + ); +} diff --git a/client/src/components/layout/Footer.tsx b/client/src/components/layout/footer/Footer.tsx similarity index 100% rename from client/src/components/layout/Footer.tsx rename to client/src/components/layout/footer/Footer.tsx diff --git a/client/src/components/layout/header/Header.tsx b/client/src/components/layout/header/Header.tsx new file mode 100644 index 000000000..5e5be52c8 --- /dev/null +++ b/client/src/components/layout/header/Header.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { toAbsoluteUrl } from "../../../_metronic/_helpers"; +import { Topbar } from "./Topbar"; +import { HeaderMenu } from "./HeaderMenu"; + +export function Header() { + return ( + <> +
+
+
+
+ + Logo + Logo + +
+ + +
+ + +
+
+ + ); +} diff --git a/client/src/components/layout/header/HeaderMenu.tsx b/client/src/components/layout/header/HeaderMenu.tsx new file mode 100644 index 000000000..86b3ea936 --- /dev/null +++ b/client/src/components/layout/header/HeaderMenu.tsx @@ -0,0 +1,80 @@ +import React, { useContext, useEffect } from "react"; +import { toAbsoluteUrl } from "../../../_metronic/_helpers"; +import Divider from "components/util/Divider"; +import { UserContext } from "context/UserContext"; +import { useQuery } from "react-query"; +import { APIFetchV1 } from "util/api"; +import { UserGameStats, FormatGame } from "tachi-common"; +import MenuLink from "./MenuLink"; +import MenuDropdown from "./MenuDropdown"; +import Loading from "components/util/Loading"; +import KTLayoutHeader from "_metronic/_assets/js/layout/base/header"; +import KTLayoutHeaderMenu from "_metronic/_assets/js/layout/base/header-menu"; + +export function HeaderMenu() { + const { user } = useContext(UserContext); + + const { isLoading, error, data } = useQuery("USER_GAME_STATS", async () => { + if (!user) { + return null; + } + + const res = await APIFetchV1("/users/me/game-stats"); + + if (!res.success) { + throw res; + } + + return res.body; + }); + + if (error) { + console.error(error); + } + + useEffect(() => { + if (data) { + KTLayoutHeader.init("kt_header", "kt_header_mobile"); + KTLayoutHeaderMenu.init("kt_header_menu", "kt_header_menu_wrapper"); + } + }, [data]); + + if (isLoading) { + return ; + } + + return ( +
+
+
+ +
+ +
+
+
    + + + {user && data && data.length !== 0 && ( + + {data.map(e => ( + + ))} + + )} +
+
+
+ ); +} diff --git a/client/src/components/layout/header/MenuDropdown.tsx b/client/src/components/layout/header/MenuDropdown.tsx new file mode 100644 index 000000000..4dba7acef --- /dev/null +++ b/client/src/components/layout/header/MenuDropdown.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { JustChildren } from "types/react"; + +export default function MenuDropdown({ name, children }: { name: string } & JustChildren) { + return ( +
  • +
    + {name} + +
    +
    +
      {children}
    +
    +
  • + ); +} diff --git a/client/src/components/layout/header/MenuLink.tsx b/client/src/components/layout/header/MenuLink.tsx new file mode 100644 index 000000000..e78d26759 --- /dev/null +++ b/client/src/components/layout/header/MenuLink.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import { NavLink } from "react-router-dom"; + +export default function MenuLink({ name, to }: { name: string; to: string }) { + return ( +
  • + + {name} + +
  • + ); +} diff --git a/client/src/components/layout/header/Topbar.tsx b/client/src/components/layout/header/Topbar.tsx new file mode 100644 index 000000000..ee87e93d7 --- /dev/null +++ b/client/src/components/layout/header/Topbar.tsx @@ -0,0 +1,63 @@ +import React, { useContext } from "react"; +import SVG from "react-inlinesvg"; +import { OverlayTrigger, Tooltip } from "react-bootstrap"; +import { toAbsoluteUrl } from "../../../_metronic/_helpers"; +import { SearchDropdown } from "../../../_metronic/layout/components/extras/dropdowns/search/SearchDropdown"; +import { UserNotificationsDropdown } from "../../../_metronic/layout/components/extras/dropdowns/UserNotificationsDropdown"; +import { UserProfileDropdown } from "components/layout/header/UserProfileDropdown"; +import { UserContext } from "context/UserContext"; +import LinkButton from "components/util/LinkButton"; + +export function Topbar() { + const { user } = useContext(UserContext); + + return ( +
    + + + {user ? ( + <> + + + Quick panel} + > +
    +
    + + + +
    +
    +
    + + + + ) : ( + <> +
    + + Log In + +
    +
    + Create Account +
    + + )} +
    + ); +} diff --git a/client/src/components/layout/UserProfileDropdown.tsx b/client/src/components/layout/header/UserProfileDropdown.tsx similarity index 94% rename from client/src/components/layout/UserProfileDropdown.tsx rename to client/src/components/layout/header/UserProfileDropdown.tsx index 0b90865e6..e1784d279 100644 --- a/client/src/components/layout/UserProfileDropdown.tsx +++ b/client/src/components/layout/header/UserProfileDropdown.tsx @@ -1,7 +1,7 @@ import React, { useContext } from "react"; import { Link } from "react-router-dom"; import Dropdown from "react-bootstrap/Dropdown"; -import { DropdownTopbarItemToggler } from "../../_metronic/_partials/dropdowns"; +import { DropdownTopbarItemToggler } from "../../../_metronic/_partials/dropdowns"; import Divider from "components/util/Divider"; import { PublicUserDocument } from "tachi-common"; import { Button } from "react-bootstrap"; diff --git a/client/src/components/layout/BackgroundImage.tsx b/client/src/components/layout/misc/BackgroundImage.tsx similarity index 100% rename from client/src/components/layout/BackgroundImage.tsx rename to client/src/components/layout/misc/BackgroundImage.tsx diff --git a/client/src/components/layout/LoadingScreen.tsx b/client/src/components/layout/screens/LoadingScreen.tsx similarity index 92% rename from client/src/components/layout/LoadingScreen.tsx rename to client/src/components/layout/screens/LoadingScreen.tsx index 6cd5c9cd9..34ed3a272 100644 --- a/client/src/components/layout/LoadingScreen.tsx +++ b/client/src/components/layout/screens/LoadingScreen.tsx @@ -3,7 +3,7 @@ import React, { useContext, useState, useEffect } from "react"; import { PublicUserDocument } from "tachi-common"; import { JustChildren } from "types/react"; import { APIFetchV1 } from "util/api"; -import { SplashScreen } from "_metronic/_partials/controls"; +import { SplashScreen } from "./SplashScreen"; export function LoadingScreen({ children }: JustChildren) { const [loading, setLoading] = useState(true); diff --git a/client/src/components/layout/SplashScreen.tsx b/client/src/components/layout/screens/SplashScreen.tsx similarity index 85% rename from client/src/components/layout/SplashScreen.tsx rename to client/src/components/layout/screens/SplashScreen.tsx index 1b7c12437..ee36c39cf 100644 --- a/client/src/components/layout/SplashScreen.tsx +++ b/client/src/components/layout/screens/SplashScreen.tsx @@ -1,6 +1,6 @@ import React from "react"; import { CircularProgress } from "@material-ui/core"; -import { toAbsoluteUrl } from "../../_metronic/_helpers"; +import { toAbsoluteUrl } from "_metronic/_helpers"; export function SplashScreen({ broke }: { broke: string }) { return ( diff --git a/client/src/components/tables/IIDXPBTable.tsx b/client/src/components/tables/IIDXPBTable.tsx index d855dd875..b41b98b4c 100644 --- a/client/src/components/tables/IIDXPBTable.tsx +++ b/client/src/components/tables/IIDXPBTable.tsx @@ -1,173 +1,101 @@ import React, { useState } from "react"; import { FormatDifficulty } from "tachi-common/js/utils/util"; -import { Button } from "react-bootstrap"; import { useZTable } from "components/util/table/useZTable"; import TitleCell from "./cells/TitleCell"; import RankingCell from "./cells/RankingCell"; import TimestampCell from "./cells/TimestampCell"; import BPICell from "./cells/BPICell"; import { ChangeOpacity } from "util/color-opacity"; -import PageSelector from "./components/PageSelector"; import { NumericSOV, StrSOV } from "util/sorts"; -import SortableTH from "./components/SortableTH"; import SelectableRating from "./components/SelectableRating"; import { PBDataset } from "types/tables"; import { GetGamePTConfig, ScoreCalculatedDataLookup } from "tachi-common"; +import TachiTable from "./components/TachiTable"; +import DifficultyCell from "./cells/DifficultyCell"; +import ScoreCell from "./cells/ScoreCell"; +import IndexCell from "./cells/IndexCell"; +import { ComposeSearchFunction } from "util/ztable/search"; export default function IIDXPBTable({ dataset }: { dataset: PBDataset<"iidx:SP"> }) { - const [search, setSearch] = useState(""); const gptConfig = GetGamePTConfig<"iidx:SP">("iidx", "SP"); const [rating, setRating] = useState( gptConfig.defaultScoreRatingAlg ); - const { - window, - setPage, - pageState, - incrementPage, - decrementPage, - page, - maxPage, - displayStr, - sortMode, - reverseSort, - changeSort, - } = useZTable(dataset ?? [], { - search, - searchFunction: (s, pb) => !!pb.__related.song.title.match(new RegExp(s, "ui")), - entryName: "PBs", - sortFunctions: { - Difficulty: NumericSOV(x => x.__related.chart.levelNum), - Song: StrSOV(x => x.__related.song.title), - Score: NumericSOV(x => x.scoreData.percent), - Deltas: NumericSOV(x => x.scoreData.percent), - Lamp: NumericSOV(x => x.scoreData.lampIndex), - Ranking: NumericSOV(x => x.rankingData.rank), - Timestamp: NumericSOV(x => x.timeAchieved ?? 0), - }, - }); - - const thProps = { - changeSort, - currentSortMode: sortMode, - reverseSort, - }; - return ( -
    -
    - setSearch(e.target.value)} type="text" value={search} /> -
    -
    - - - - - - - - - - game="iidx" - playtype="SP" - setRating={setRating} - /> - - - - - - {window.map(pb => ( - - - - - - - {rating === "BPI" ? ( - - ) : ( - - )} - - - - ))} - -
    - {FormatDifficulty(pb.__related.chart, "iidx")} - - {pb.scoreData.grade} -
    - {`${pb.scoreData.percent.toFixed(2)}%`} -
    - [{pb.scoreData.score}] -
    - AAA-100 -
    - AA+20 -
    - {pb.scoreData.lamp} -
    - [BP: {pb.scoreData.hitMeta.bp ?? "No Data"}] -
    - {pb.calculatedData[rating] - ? pb.calculatedData[rating]!.toFixed(2) - : "No Data."} -
    -
    -
    -
    -
    {displayStr}
    -
    -
    - - - -
    -
    -
    -
    -
    + x.__related.index)], + ["Chart", "Ch.", NumericSOV(x => x.__related.chart.levelNum)], + ["Song", "Song", StrSOV(x => x.__related.song.title)], + ["Score", "Score", NumericSOV(x => x.scoreData.percent)], + ["Deltas", "Deltas", NumericSOV(x => x.scoreData.percent)], + ["Lamp", "Lamp", NumericSOV(x => x.scoreData.lampIndex)], + [ + "Rating", + "Rating", + null, + () => ( + + game="iidx" + playtype="SP" + setRating={setRating} + /> + ), + ], + ["Ranking", "Rank", NumericSOV(x => x.rankingData.rank)], + ["Timestamp", "Timestamp", NumericSOV(x => x.timeAchieved ?? 0)], + ]} + entryName="PBs" + searchFunction={ComposeSearchFunction({ + artist: x => x.__related.song.artist, + title: x => x.__related.song.title, + difficulty: x => FormatDifficulty(x.__related.chart, "iidx"), + level: x => x.__related.chart.levelNum, + score: x => x.scoreData.score, + percent: x => x.scoreData.percent, + lamp: x => x.scoreData.lamp, + grade: x => x.scoreData.grade, + })} + defaultSortMode="Rating" + rowFunction={pb => ( + + + + + + + AAA-100 +
    + AA+20 + + + {pb.scoreData.lamp} +
    + [BP: {pb.scoreData.hitMeta.bp ?? "No Data"}] + + {rating === "BPI" ? ( + + ) : ( + + {pb.calculatedData[rating] + ? pb.calculatedData[rating]!.toFixed(2) + : "No Data."} + + )} + + + + )} + /> ); } diff --git a/client/src/components/tables/cells/DeltaCell.tsx b/client/src/components/tables/cells/DeltaCell.tsx new file mode 100644 index 000000000..087a4277a --- /dev/null +++ b/client/src/components/tables/cells/DeltaCell.tsx @@ -0,0 +1,5 @@ +import React from "react"; + +export default function DeltaCell() { + return
    ; +} diff --git a/client/src/components/tables/cells/DifficultyCell.tsx b/client/src/components/tables/cells/DifficultyCell.tsx new file mode 100644 index 000000000..f485f4f81 --- /dev/null +++ b/client/src/components/tables/cells/DifficultyCell.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { + AnyChartDocument, + FormatDifficulty, + FormatDifficultyShort, + Game, + GetGamePTConfig, +} from "tachi-common"; +import { ChangeOpacity } from "util/color-opacity"; + +export default function DifficultyCell({ game, chart }: { game: Game; chart: AnyChartDocument }) { + const gptConfig = GetGamePTConfig(game, chart.playtype); + + return ( + + {FormatDifficulty(chart, game)} + {FormatDifficultyShort(chart, game)} + + ); +} diff --git a/client/src/components/tables/cells/IndexCell.tsx b/client/src/components/tables/cells/IndexCell.tsx new file mode 100644 index 000000000..3a03008d1 --- /dev/null +++ b/client/src/components/tables/cells/IndexCell.tsx @@ -0,0 +1,25 @@ +import React from "react"; +import { integer } from "tachi-common"; + +const COLORS = ["rgba(212,175,55,0.2)", "rgba(192,192,192,0.2)", "rgba(139,69,19,0.2)"]; + +export default function IndexCell({ index }: { index: integer }) { + return ( + + + # + + + {index + 1} + + + ); +} diff --git a/client/src/components/tables/cells/ScoreCell.tsx b/client/src/components/tables/cells/ScoreCell.tsx new file mode 100644 index 000000000..0657e5b8e --- /dev/null +++ b/client/src/components/tables/cells/ScoreCell.tsx @@ -0,0 +1,31 @@ +import React from "react"; +import { GetGamePTConfig, PBScoreDocument } from "tachi-common"; +import { GamePT } from "types/react"; +import { ChangeOpacity } from "util/color-opacity"; + +export default function ScoreCell({ + game, + playtype, + pb, + showScore = true, +}: GamePT & { pb: PBScoreDocument; showScore?: boolean }) { + const gptConfig = GetGamePTConfig(game, playtype); + + return ( + + {pb.scoreData.grade} +
    + {`${pb.scoreData.percent.toFixed(2)}%`} + {showScore && ( + <> +
    + [{pb.scoreData.score}] + + )} + + ); +} diff --git a/client/src/components/tables/cells/TitleCell.tsx b/client/src/components/tables/cells/TitleCell.tsx index dbf6360ce..7faa0112e 100644 --- a/client/src/components/tables/cells/TitleCell.tsx +++ b/client/src/components/tables/cells/TitleCell.tsx @@ -2,7 +2,7 @@ import React from "react"; export default function TitleCell({ title, artist }: { title: string; artist: string }) { return ( - + {title}
    {artist} diff --git a/client/src/components/tables/components/NoDataWrapper.tsx b/client/src/components/tables/components/NoDataWrapper.tsx new file mode 100644 index 000000000..771530e96 --- /dev/null +++ b/client/src/components/tables/components/NoDataWrapper.tsx @@ -0,0 +1,15 @@ +import React from "react"; + +export default function NoDataWrapper({ children }: { children: JSX.Element[] }) { + if (children.length === 0) { + return ( + + {/* Slight hack - span atleast 100 columns, which is probably what we want. */} + + No Data. + + + ); + } + return <>{children}; +} diff --git a/client/src/components/tables/components/PageSelector.tsx b/client/src/components/tables/components/PageSelector.tsx index 558cc8f57..14c73d12d 100644 --- a/client/src/components/tables/components/PageSelector.tsx +++ b/client/src/components/tables/components/PageSelector.tsx @@ -7,13 +7,15 @@ export default function PageSelector({ setPage, currentPage, maxPage, + isSmall = false, }: { setPage: SetState; currentPage: integer; maxPage: integer; + isSmall?: boolean; }) { - const elipseStart = currentPage > 4; - const elipseEnd = maxPage - currentPage > 3; + const elipseStart = currentPage > (isSmall ? 2 : 4); + const elipseEnd = maxPage - currentPage > (isSmall ? 1 : 3); function PageButton({ page }: { page: integer }) { return ( @@ -50,6 +52,32 @@ export default function PageSelector({ ); } + if (isSmall) { + return ( + <> + + {elipseStart ? ( + + ) : ( + + )} + {middleNums.map(e => ( + + ))} + {elipseEnd ? ( + + ) : ( + + )} + + + ); + } + return ( <> diff --git a/client/src/components/tables/components/SortableTH.tsx b/client/src/components/tables/components/SortableTH.tsx index 9b93b3713..f6f484e74 100644 --- a/client/src/components/tables/components/SortableTH.tsx +++ b/client/src/components/tables/components/SortableTH.tsx @@ -1,8 +1,8 @@ import React, { HTMLAttributes } from "react"; -import { SetState } from "types/react"; export default function SortableTH({ name, + shortName, sortingName = name, changeSort, currentSortMode, @@ -10,6 +10,7 @@ export default function SortableTH({ style = {}, }: { name: string; + shortName: string; sortingName?: string; currentSortMode: string | null; reverseSort: boolean; @@ -17,8 +18,9 @@ export default function SortableTH({ style?: HTMLAttributes["style"]; }) { return ( - changeSort(sortingName)} style={style}> - {name} + changeSort(sortingName)} style={style}> + {name} + {shortName} void; + currentSortMode: string | null; + reverseSort: boolean; +} + +type NameHeader = [string, string]; +type NameSortHeader = [string, string, ZTableSortFn | null]; +type ComponentYielderHeader = [ + string, + string, + ZTableSortFn | null, + (thProps: ZTableTHProps) => JSX.Element +]; + +// 0: name +// 1: sortFn +// 2: componentYielder -- yeah, i realise this format sucks. +export type Header = NameHeader | NameSortHeader | ComponentYielderHeader; + +function GetSortFunctions(headers: Header[]) { + const sortFunctions: Record> = {}; + + for (const header of headers) { + const [name, _shortName, sortFn] = header; + + if (sortFn) { + sortFunctions[name] = sortFn; + } + } + + return sortFunctions; +} + +function ParseHeaders(headers: Header[], thProps: ZTableTHProps) { + const headerElements: JSX.Element[] = []; + + for (const header of headers) { + const [name, shortName, sortFn, componentYielder] = header; + + if (componentYielder) { + headerElements.push(componentYielder(thProps)); + } else if (sortFn) { + headerElements.push(); + } else { + headerElements.push( + + {name} + {shortName} + + ); + } + } + + return {headerElements}; +} + +export default function TachiTable({ + dataset, + rowFunction, + headers, + entryName, + pageLen = 10, + defaultSortMode, + defaultReverseSort, + searchFunction, +}: { + dataset: D[]; + rowFunction: (data: D) => JSX.Element; + headers: Header[]; + entryName?: string; + pageLen?: integer; + defaultSortMode?: string; + defaultReverseSort?: boolean; + searchFunction?: ZTableSearchFn; +}) { + const [search, setSearch] = useState(""); + + const sortFunctions = GetSortFunctions(headers); + + const { + window, + setPage, + pageState, + incrementPage, + decrementPage, + page, + maxPage, + displayStr, + sortMode, + reverseSort, + changeSort, + } = useZTable(dataset ?? [], { + search, + searchFunction, + sortFunctions, + entryName, + pageLen, + defaultSortMode, + defaultReverseSort, + }); + + const headersRow = ParseHeaders(headers, { + changeSort, + currentSortMode: sortMode, + reverseSort, + }); + + return ( +
    + {searchFunction && ( +
    + setSearch(e.target.value)} type="text" value={search} /> +
    + )} + +
    + + {headersRow} + + {window.map(rowFunction)} + +
    +
    +
    +
    +
    {displayStr}
    +
    +
    + + + +
    +
    +
    +
    +
    + ); +} diff --git a/client/src/components/util/SmallText.tsx b/client/src/components/util/SmallText.tsx new file mode 100644 index 000000000..960ff40a2 --- /dev/null +++ b/client/src/components/util/SmallText.tsx @@ -0,0 +1,10 @@ +import React from "react"; + +export default function SmallText({ small, large }: { small: string; large: string }) { + return ( + <> + {large} + {small} + + ); +} diff --git a/client/src/components/util/table/useZTable.tsx b/client/src/components/util/table/useZTable.tsx index d99a671aa..99d396566 100644 --- a/client/src/components/util/table/useZTable.tsx +++ b/client/src/components/util/table/useZTable.tsx @@ -2,16 +2,17 @@ import { useMemo, useState } from "react"; import { integer } from "tachi-common"; import deepmerge from "deepmerge"; -type SortFN = (a: T, b: T) => integer; +export type ZTableSortFn = (a: D, b: D) => integer; +export type ZTableSearchFn = (search: string, data: D) => boolean; interface ZTableOptions { pageLen: integer; search: string; - searchFunction: (search: string, data: D) => boolean; + searchFunction: ZTableSearchFn; entryName: string; defaultSortMode: string | null; defaultReverseSort: boolean; - sortFunctions: Record>; + sortFunctions: Record>; } // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/client/src/lib/config.ts b/client/src/lib/config.ts new file mode 100644 index 000000000..27de2aae8 --- /dev/null +++ b/client/src/lib/config.ts @@ -0,0 +1,21 @@ +import { StaticConfig } from "tachi-common"; + +export const mode = process.env.REACT_APP_TCHIC_MODE; + +if (!mode) { + throw new Error("No TCHIC_MODE set. Cannot boot."); +} + +let conf; + +if (mode === "ktchi") { + conf = StaticConfig.KTCHI_CONFIG; +} else if (mode === "btchi") { + conf = StaticConfig.BTCHI_CONFIG; +} else if (mode === "omni") { + conf = StaticConfig.OMNI_CONFIG; +} else { + throw new Error(`Invalid TCHIC_MODE of ${mode}. Cannot boot.`); +} + +export const TachiConfig = conf; diff --git a/client/src/types/react.ts b/client/src/types/react.ts index 51f3f817d..a057ebbbb 100644 --- a/client/src/types/react.ts +++ b/client/src/types/react.ts @@ -9,6 +9,7 @@ import { useFormik, } from "formik"; import { Dispatch, SetStateAction } from "react"; +import { Game, Playtypes } from "tachi-common"; export interface JustChildren { children: JSX.Element[] | JSX.Element | string; @@ -83,3 +84,8 @@ export type UseFormik = { status?: any; submitCount: number; }; + +export interface GamePT { + game: Game; + playtype: Playtypes[Game]; +} diff --git a/client/src/types/tables.ts b/client/src/types/tables.ts index 2fbefcd5d..b18644b62 100644 --- a/client/src/types/tables.ts +++ b/client/src/types/tables.ts @@ -4,8 +4,9 @@ import { ChartDocument, SongDocument, IDStringToGame, + integer, } from "tachi-common"; export type PBDataset = (PBScoreDocument & { - __related: { chart: ChartDocument; song: SongDocument }; + __related: { chart: ChartDocument; song: SongDocument; index: integer }; })[]; diff --git a/client/src/util/asserts.ts b/client/src/util/asserts.ts new file mode 100644 index 000000000..589a0d6a0 --- /dev/null +++ b/client/src/util/asserts.ts @@ -0,0 +1,15 @@ +import { TachiConfig } from "lib/config"; +import { Game, GetGameConfig, Playtypes } from "tachi-common"; + +export function IsSupportedGame(str: string): str is Game { + return TachiConfig.supportedGames.includes((str as unknown) as Game); +} + +export function IsSupportedPlaytype( + game: G, + str: string +): str is Playtypes[G] { + const gameConfig = GetGameConfig(game); + + return gameConfig.validPlaytypes.includes((str as unknown) as Playtypes[G]); +} diff --git a/client/src/util/constants/search-directives.ts b/client/src/util/constants/search-directives.ts new file mode 100644 index 000000000..b7ec90636 --- /dev/null +++ b/client/src/util/constants/search-directives.ts @@ -0,0 +1,8 @@ +export const SEARCH_DIRECTIVES = { + REGEX: "~", + EXACT: "!", + LESS_THAN: "<", + LESS_THAN_EQ: "<=", + GREATER_THAN: ">", + GREATER_THAN_EQ: ">=", +}; diff --git a/client/src/util/grade-deltas.ts b/client/src/util/grade-deltas.ts new file mode 100644 index 000000000..91639d235 --- /dev/null +++ b/client/src/util/grade-deltas.ts @@ -0,0 +1,83 @@ +import { Game, GetGamePTConfig, Grades, IDStrings, integer, Playtypes } from "tachi-common"; + +export function AbsoluteGradeDelta( + game: Game, + playtype: Playtypes[Game], + score: number, + percent: number, + gradeOrIndex: Grades[I] | integer +) { + const gptConfig = GetGamePTConfig(game, playtype); + + const maxScore = Math.floor(score * (percent / 100)); + + const gradeIndex = + typeof gradeOrIndex === "number" ? gradeOrIndex : gptConfig.grades.indexOf(gradeOrIndex); + + const gradeScore = Math.floor(gptConfig.gradeBoundaries[gradeIndex] * maxScore); + + return score - gradeScore; +} + +export function RelativeGradeDelta( + game: Game, + playtype: Playtypes[Game], + score: number, + percent: number, + grade: Grades[I], + relativeIndex: integer +) { + const gptConfig = GetGamePTConfig(game, playtype); + + const nextGradeIndex = gptConfig.grades.indexOf(grade) + relativeIndex; + + if (nextGradeIndex < 0 || nextGradeIndex >= gptConfig.grades.length) { + return null; + } + + return { + grade: gptConfig.grades[nextGradeIndex], + delta: AbsoluteGradeDelta(game, playtype, score, percent, nextGradeIndex), + }; +} + +function WrapGrade(grade: string) { + if (grade.endsWith("-") || grade.endsWith("+")) { + return `(${grade})`; + } + + return grade; +} + +export function GenericFormatGradeDelta( + game: Game, + playtype: Playtypes[Game], + score: number, + percent: number, + grade: Grades[I], + formatNumFn: (n: number) => number = s => s +): { + lower: string; + upper?: string; + closer: "lower" | "upper"; +} { + const upper = RelativeGradeDelta(game, playtype, score, percent, grade, 1); + const lower = AbsoluteGradeDelta(game, playtype, score, percent, grade); + + const formatLower = `${WrapGrade(grade)}+${formatNumFn(lower)}`; + + if (!upper) { + return { + lower: formatLower, + closer: "lower", + }; + } + + const formatUpper = `${WrapGrade(upper.grade)}-${formatNumFn(upper.delta)}`; + + return { + lower: formatLower, + upper: formatUpper, + closer: upper.delta - lower > 0 ? "lower" : "upper", + }; +} diff --git a/client/src/util/subheader.ts b/client/src/util/subheader.ts index 77cbc0328..0545d71b3 100644 --- a/client/src/util/subheader.ts +++ b/client/src/util/subheader.ts @@ -3,9 +3,10 @@ import { SetState } from "types/react"; export function UpdateSubheader( breadcrumbs: string[], setTitle: SetState, - setBreadcrumbs: SetState + setBreadcrumbs: SetState, + customTitle?: string ) { - const title = breadcrumbs[breadcrumbs.length - 1]; + const title = customTitle ?? breadcrumbs[breadcrumbs.length - 1]; document.title = `${title} | Kamaitachi`; setTitle(title); diff --git a/client/src/util/ztable/search.ts b/client/src/util/ztable/search.ts new file mode 100644 index 000000000..a4c0e93e2 --- /dev/null +++ b/client/src/util/ztable/search.ts @@ -0,0 +1,146 @@ +import { ZTableSearchFn } from "components/util/table/useZTable"; +import { SEARCH_DIRECTIVES } from "util/constants/search-directives"; + +export interface SearchDirective { + key: string; + option: string | null; + value: string; +} + +type DirectiveModes = "!" | ">" | ">=" | "<" | "<=" | "~"; + +export interface Directive { + key: string; + // :! - EXACT + // :> - GREATER THAN + // :>= - GREATER THAN OR EQ + // :< - LESS THAN + // :<= - LESS THAN OR EQ + // :~ - REGEXP + mode: DirectiveModes | null; + value: string; +} + +// Regex is an irritatingly write-only language, so i've split this one +// up. + +// KEY = /([^ ]+):/ - Parses the key name +// MODE = /(>=|<=|!|>|<)?/ - parses the optional directive +// VALUE = /("(?:\\"|[^"])+"|[^ ]+)/ - Parses the value. + +export function ParseDirectives(search: string): Directive[] { + const parsedSearch = search.matchAll(/([^ ]+):(>=|<=|!|>|<|~)?("(?:\\"|[^"])+"|[^ ]+)/gu); + + const searchDirectives = []; + for (const ps of parsedSearch) { + if (ps.length !== 4) { + continue; + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_wholeMatch, key, mode, value] = ps; + + let v = value; + + // strip surrounding quotes + if (value.startsWith('"') && value.endsWith('"')) { + v = value.substring(1, value.length - 1); + } + + searchDirectives.push({ + key: key.toLowerCase(), + mode: (mode || null) as Directive["mode"], + value: v, + }); + } + + return searchDirectives; +} + +type MatchFn = (searchValue: string, dataValue: string | number) => boolean; + +const Matchers: Record = { + "!": (sv, dv) => sv === dv.toString(), + "<": (sv, dv) => { + if (typeof dv === "number") { + return dv < Number(sv); + } + + return dv.localeCompare(sv) < 0; + }, + "<=": (sv, dv) => { + if (typeof dv === "number") { + return dv <= Number(sv); + } + + return dv.localeCompare(sv) <= 0 || dv.toLowerCase().startsWith(sv.toLowerCase()); + }, + ">": (sv, dv) => { + if (typeof dv === "number") { + return dv > Number(sv); + } + + return dv.localeCompare(sv) > 0; + }, + ">=": (sv, dv) => { + if (typeof dv === "number") { + return dv >= Number(sv); + } + + return dv.localeCompare(sv) > 0 || dv.toLowerCase().startsWith(sv.toLowerCase()); + }, + "~": (sv, dv) => !!dv.toString().match(new RegExp(sv, "u"))?.length, +}; + +const NeutralMatch: MatchFn = (sv, dv) => + dv + .toString() + .toLowerCase() + .includes(sv.toLowerCase()); + +function DirectiveMatch(directive: Directive, dataValue: string | number) { + if (!directive.mode) { + return NeutralMatch(directive.value, dataValue); + } + + if (directive.mode === SEARCH_DIRECTIVES.REGEX) { + try { + return Matchers[SEARCH_DIRECTIVES.REGEX](directive.value, dataValue); + } catch { + // handle nonsense regex + return false; + } + } + + return Matchers[directive.mode](directive.value, dataValue); +} + +export function ComposeSearchFunction( + valueGetters: Record string | number> +): ZTableSearchFn { + const allGetters = Object.values(valueGetters); + + return (search, data) => { + const directives = ParseDirectives(search); + + if (directives.length === 0) { + return allGetters.some(valueGetter => NeutralMatch(search, valueGetter(data))); + } + + for (const directive of directives) { + const valueGetter = valueGetters[directive.key]; + + if (!valueGetter) { + continue; + } + + const dataValue = valueGetter(data); + + if (!DirectiveMatch(directive, dataValue)) { + return false; + } + } + + return true; + }; +}