From 9530c8631b91431cb6703f4e8e1f650fd5269df4 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Wed, 18 Nov 2020 19:31:45 +0300 Subject: [PATCH 01/29] TEST: Add jest for testing --- .eslintrc.json | 3 +- .github/workflows/pull_request.yml | 11 +- babel.config.js | 11 +- jest.config.js | 8 + package.json | 11 +- src/helpers/getClassName.test.ts | 6 + yarn.lock | 1976 +++++++++++++++++++++++++++- 7 files changed, 1966 insertions(+), 60 deletions(-) create mode 100644 jest.config.js create mode 100644 src/helpers/getClassName.test.ts diff --git a/.eslintrc.json b/.eslintrc.json index e3842bb7d6..07fb3c5122 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,8 @@ "env": { "es6": true, // Enable global es6 variables, like Set, Map, etc "browser": true, - "node": true + "node": true, + "jest": true }, "rules": { "@typescript-eslint/explicit-member-accessibility": "off", diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 81d082521d..03d8c29ca6 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -3,6 +3,15 @@ name: 'Pull Request' on: ['pull_request'] jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 12 + - run: yarn install --frozen-lockfile + - run: yarn test:static test: runs-on: ubuntu-latest steps: @@ -11,7 +20,7 @@ jobs: with: node-version: 12 - run: yarn install --frozen-lockfile - - run: yarn test + - run: yarn test:unit styleguide: runs-on: ubuntu-latest steps: diff --git a/babel.config.js b/babel.config.js index f06a5c3d1e..2afee70906 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,5 +1,14 @@ +const { NODE_ENV } = process.env; +const isProduction = NODE_ENV === 'production'; +const isDevelopment = NODE_ENV === 'development'; +const useModules = isProduction || isDevelopment; + module.exports = { - presets: [['@babel/preset-env', { modules: false }], '@babel/preset-react', '@babel/preset-typescript'], + presets: [ + ['@babel/preset-env', { modules: useModules ? false : 'commonjs' }], + '@babel/preset-react', + '@babel/preset-typescript' + ], plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-transform-runtime'], ignore: ['./src/vkui.js'], }; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000000..6078d7db1e --- /dev/null +++ b/jest.config.js @@ -0,0 +1,8 @@ +module.exports = { + collectCoverage: true, + collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], + coveragePathIgnorePatterns: [ + '\\.d\\.ts$', + 'src/types', + ], +} diff --git a/package.json b/package.json index 0a333dc228..3276d4da1f 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@babel/preset-react": "^7.10.4", "@babel/preset-typescript": "^7.10.4", "@babel/runtime": "^7.11.2", + "@types/jest": "^26.0.15", "@types/node": "^12.7.2", "@types/react": "^16.9.2", "@types/react-dom": "^16.8.5", @@ -36,6 +37,7 @@ "@vkontakte/vk-bridge": "^2.1.3", "@vkontakte/vkjs": "0.16.0", "autoprefixer": "^9.8.0", + "babel-jest": "^26.6.3", "babel-loader": "^8.1.0", "classnames": "^2.2.6", "clean-webpack-plugin": "^3.0.0", @@ -46,6 +48,7 @@ "eslint-plugin-react": "^7.16.0", "eslint-plugin-react-hooks": "^2.0.1", "file-loader": "^6.2.0", + "jest": "^26.6.3", "mini-css-extract-plugin": "^1.2.1", "postcss": "8.1.4", "postcss-cli": "8.1.0", @@ -64,7 +67,7 @@ "stylelint": "^10.1.0", "stylelint-config-standard": "^18.3.0", "ts-loader": "^8.0.9", - "typescript": "3.7.5", + "typescript": "3.8", "webpack": "^4.41.2", "webpack-cli": "^3.3.10", "webpack-merge": "^4.2.2", @@ -97,10 +100,12 @@ "babel": "cross-env NODE_ENV=production babel src/ --out-dir dist/ --source-maps --extensions .tsx,.jsx,.ts,.js", "tsc": "cross-env NODE_ENV=production tsc --emitDeclarationOnly --declaration", "clear": "shx rm -rf dist/*", - "test": "tsc --noEmit && eslint --ext .jsx,.js,.ts,.tsx src/ && stylelint \"./src/**/*.css\"", + "test:unit": "jest", + "test:static": "concurrently 'tsc --noEmit' 'eslint --ext .jsx,.js,.ts,.tsx src/' 'stylelint \"./src/**/*.css\"'", + "test": "concurrently 'yarn test:unit' 'yarn test:static'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" }, "pre-commit": [ - "test" + "test:static" ] } diff --git a/src/helpers/getClassName.test.ts b/src/helpers/getClassName.test.ts new file mode 100644 index 0000000000..a1d89ba226 --- /dev/null +++ b/src/helpers/getClassName.test.ts @@ -0,0 +1,6 @@ +import { Platform } from '../lib/platform'; +import { getClassName } from './getClassName'; + +describe(getClassName, () => { + it('embeds platform name', () => expect(getClassName('base', Platform.IOS)).toBe('base base--ios')); +}); diff --git a/yarn.lock b/yarn.lock index 23b55fa5f7..c52b7d5e07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -67,6 +67,28 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.0": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.11.1": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" @@ -129,6 +151,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== + dependencies: + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" @@ -276,6 +307,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" + integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== + dependencies: + "@babel/types" "^7.12.1" + "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -289,6 +327,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-module-imports@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" @@ -308,6 +353,21 @@ "@babel/types" "^7.11.0" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -375,6 +435,16 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + "@babel/helper-replace-supers@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" @@ -392,6 +462,13 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" @@ -447,6 +524,15 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helpers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + "@babel/helpers@^7.9.0": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" @@ -472,6 +558,11 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" + integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== + "@babel/parser@^7.10.4", "@babel/parser@^7.11.1", "@babel/parser@^7.11.3", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" @@ -595,12 +686,19 @@ "@babel/helper-create-regexp-features-plugin" "^7.8.8" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-async-generators@^7.8.0": +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-class-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" @@ -608,6 +706,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -621,7 +726,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-json-strings@^7.8.0": +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" dependencies: @@ -634,39 +746,39 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.0": +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.0": +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" dependencies: @@ -679,6 +791,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25" @@ -1138,7 +1257,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4": +"@babel/template@^7.10.4", "@babel/template@^7.3.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== @@ -1155,6 +1274,21 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" + integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.5" + "@babel/types" "^7.12.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" @@ -1184,6 +1318,15 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.12.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" + integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" @@ -1201,6 +1344,206 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1233,10 +1576,57 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" + integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== + dependencies: + "@babel/types" "^7.3.0" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -1257,6 +1647,40 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/graceful-fs@^4.1.2": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^26.0.15": + version "26.0.15" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.15.tgz#12e02c0372ad0548e07b9f4e19132b834cb1effe" + integrity sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + "@types/json-schema@^7.0.3": version "7.0.4" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" @@ -1278,11 +1702,21 @@ version "12.12.34" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.34.tgz#0a5d6ae5d22612f0cf5f10320e1fc5d2a745dcb8" +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/prettier@^2.0.0": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" + integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== + "@types/prop-types@*": version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" @@ -1304,6 +1738,11 @@ version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + "@types/tapable@*": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" @@ -1351,6 +1790,18 @@ "@types/webpack-sources" "*" source-map "^0.6.0" +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.0": + version "15.0.10" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.10.tgz#0fe3c8173a0d5c3e780b389050140c3f5ea6ea74" + integrity sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^2.28.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" @@ -1586,6 +2037,11 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1597,10 +2053,23 @@ acorn-dynamic-import@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-jsx@^5.0.1, acorn-jsx@^5.1.0, acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn@^6.1.1, acorn@^6.2.1, acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" @@ -1642,7 +2111,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1710,7 +2179,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -1792,6 +2261,18 @@ asn1.js@^4.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -1829,6 +2310,11 @@ async@^2.5.0, async@^2.6.2: dependencies: lodash "^4.17.14" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -1863,6 +2349,16 @@ autoprefixer@^9.8.0: postcss "^7.0.32" postcss-value-parser "^4.1.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -1882,6 +2378,20 @@ babel-eslint@^10.0.3: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + babel-loader@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" @@ -1899,6 +2409,53 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" + integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + bail@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" @@ -1927,6 +2484,13 @@ batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -2012,6 +2576,11 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -2092,6 +2661,13 @@ browserslist@^4.12.0: escalade "^3.0.1" node-releases "^1.1.58" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + buble@0.19.8: version "0.19.8" resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d" @@ -2230,7 +2806,7 @@ camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2248,6 +2824,18 @@ caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001097: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001105.tgz#d2cb0b31e5cf2f3ce845033b61c5c01566549abf" integrity sha512-JupOe6+dGMr7E20siZHIZQwYqrllxotAhiaej96y6x00b/48rPt42o+SzOSCPbrpsDWvRja40Hwrj0g0q6LZJg== +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + ccount@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" @@ -2285,6 +2873,11 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + character-entities-html4@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" @@ -2348,6 +2941,11 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -2355,6 +2953,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2463,6 +3066,11 @@ clsx@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -2471,6 +3079,11 @@ collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -2507,6 +3120,13 @@ colors@~0.6.0-1: version "0.6.2" resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2609,7 +3229,7 @@ content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -convert-source-map@^1.1.0, convert-source-map@^1.7.0: +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" dependencies: @@ -2671,7 +3291,7 @@ core-js@^3.6.4: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== -core-util-is@~1.0.0: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2748,7 +3368,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.1: +cross-spawn@^7.0.0, cross-spawn@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2814,6 +3434,23 @@ csso@^4.0.2: dependencies: css-tree "^1.0.0" +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + csstype@^2.2.0, csstype@^2.6.5: version "2.6.10" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" @@ -2828,6 +3465,22 @@ cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + date-fns@^1.30.1: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" @@ -2861,6 +3514,11 @@ decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decimal.js@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -2884,6 +3542,11 @@ deepmerge@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050" +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -2934,6 +3597,11 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" @@ -2964,6 +3632,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" @@ -2975,6 +3648,11 @@ detect-port-alt@1.1.6: address "^1.0.1" debug "^2.6.0" +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3051,6 +3729,13 @@ domelementtype@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -3083,6 +3768,14 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -3108,6 +3801,11 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + "emoji-regex@>=6.0.0 <=6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" @@ -3224,6 +3922,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" @@ -3235,6 +3938,18 @@ escodegen@^1.12.0: optionalDependencies: source-map "~0.6.1" +escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-config-google@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.9.1.tgz#83353c3dba05f72bb123169a4094f4ff120391eb" @@ -3401,6 +4116,11 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3413,12 +4133,32 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + execall@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" dependencies: clone-regexp "^2.1.0" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -3437,6 +4177,18 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -3485,7 +4237,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -3510,6 +4262,16 @@ extglob@^2.0.2, extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + fast-deep-equal@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" @@ -3564,6 +4326,13 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -3709,6 +4478,11 @@ for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + fork-ts-checker-webpack-plugin@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" @@ -3722,6 +4496,15 @@ fork-ts-checker-webpack-plugin@1.5.0: tapable "^1.0.0" worker-rpc "^0.1.0" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -3783,6 +4566,11 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" +fsevents@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" + integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== + fsevents@~2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" @@ -3817,6 +4605,11 @@ get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" @@ -3832,10 +4625,24 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + github-slugger@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" @@ -3859,7 +4666,7 @@ glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" dependencies: @@ -3996,11 +4803,16 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" -graceful-fs@^4.2.0: +graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + gzip-size@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" @@ -4012,6 +4824,19 @@ handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -4121,10 +4946,22 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + html-entities@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-tags@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" @@ -4194,10 +5031,24 @@ http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + hyphenate-style-name@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" @@ -4287,6 +5138,14 @@ import-local@2.0.0, import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4476,6 +5335,20 @@ is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" + integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -4516,6 +5389,11 @@ is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4544,6 +5422,11 @@ is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4616,6 +5499,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -4642,6 +5530,11 @@ is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" @@ -4652,6 +5545,11 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + is-url-superb@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" @@ -4661,39 +5559,447 @@ is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0, isobject@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +javascript-stringify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" -isobject@^2.0.0, isobject@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== dependencies: - isarray "1.0.0" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" -javascript-stringify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" jest-worker@^25.1.0: version "25.2.1" @@ -4702,6 +6008,24 @@ jest-worker@^25.1.0: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== + dependencies: + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + js-base64@^2.1.9: version "2.5.2" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" @@ -4721,6 +6045,43 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -4742,10 +6103,20 @@ json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + json3@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" @@ -4771,6 +6142,16 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + jss-plugin-camel-case@^10.0.0: version "10.1.1" resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.1.1.tgz#8e73ecc4f1d0f8dfe4dd31f6f9f2782588970e78" @@ -5073,12 +6454,26 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-dir@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" dependencies: semver "^6.0.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -5267,6 +6662,18 @@ mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + mime-types@~2.1.17, mime-types@~2.1.24: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" @@ -5330,7 +6737,7 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -5488,6 +6895,11 @@ node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -5516,6 +6928,23 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" + integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + node-releases@^1.1.29, node-releases@^1.1.53: version "1.1.53" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" @@ -5526,7 +6955,7 @@ node-releases@^1.1.58: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" dependencies: @@ -5560,6 +6989,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -5568,6 +7004,16 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -5744,6 +7190,11 @@ p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" +p-each-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -5867,6 +7318,11 @@ parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" +parse5@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -5903,7 +7359,7 @@ path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -5937,6 +7393,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -5963,13 +7424,20 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" dependencies: find-up "^3.0.0" -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" dependencies: @@ -6286,6 +7754,16 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -6316,6 +7794,14 @@ promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" +prompts@^2.0.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -6339,6 +7825,11 @@ pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -6380,7 +7871,7 @@ punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -6396,6 +7887,11 @@ qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + qss@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/qss/-/qss-2.0.3.tgz#630b38b120931b52d04704f3abfb0f861604a9ec" @@ -6538,6 +8034,11 @@ react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + react-simple-code-editor@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz#73e7ac550a928069715482aeb33ccba36efe2373" @@ -6630,6 +8131,15 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -6646,6 +8156,16 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -6884,6 +8404,48 @@ replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6906,6 +8468,13 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -6942,6 +8511,14 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.15.1, resolve@^1.3. dependencies: path-parse "^1.0.6" +resolve@^1.18.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6981,6 +8558,13 @@ rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: dependencies: glob "^7.1.3" +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -6988,6 +8572,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + run-async@^2.2.0, run-async@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" @@ -7025,11 +8614,33 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" @@ -7211,6 +8822,11 @@ shelljs@^0.8.1: interpret "^1.0.0" rechoir "^0.6.2" +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + shx@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.2.tgz#40501ce14eb5e0cbcac7ddbd4b325563aad8c123" @@ -7231,6 +8847,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -7317,6 +8938,14 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.5.6: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -7336,6 +8965,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -7412,6 +9046,21 @@ sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" @@ -7425,6 +9074,13 @@ ssri@^7.0.0: figgy-pudding "^3.5.1" minipass "^3.1.1" +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -7440,6 +9096,11 @@ static-extend@^0.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -7472,6 +9133,14 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -7611,10 +9280,20 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-html-comments@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-html-comments/-/strip-html-comments-1.0.0.tgz#0ae7dff0300a6075a4c293fb6111b4cb1d0cb7b7" @@ -7742,6 +9421,14 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + svg-baker-runtime@1.4.6: version "1.4.6" resolved "https://registry.yarnpkg.com/svg-baker-runtime/-/svg-baker-runtime-1.4.6.tgz#73499736c636610121a9e17ae6ceb2ea1023ec6b" @@ -7774,6 +9461,11 @@ svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -7788,6 +9480,14 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -7824,10 +9524,24 @@ terser@^4.1.2, terser@^4.4.3: source-map "~0.6.1" source-map-support "~0.5.12" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -7863,6 +9577,11 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -7910,6 +9629,30 @@ toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + traverse@^0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" @@ -7959,13 +9702,25 @@ tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: prelude-ls "~1.1.2" -type-detect@^4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -7973,6 +9728,11 @@ type-fest@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -7984,13 +9744,21 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typescript@3.7.5: - version "3.7.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" +typescript@3.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== unherit@^1.0.4: version "1.1.3" @@ -8199,6 +9967,11 @@ uuid@^3.0.1, uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" +uuid@^8.3.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + v8-compile-cache@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" @@ -8207,6 +9980,15 @@ v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" +v8-to-istanbul@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" + integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -8218,6 +10000,15 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vfile-location@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" @@ -8258,6 +10049,27 @@ vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + watchpack@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" @@ -8278,6 +10090,16 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + webpack-cli@^3.3.10: version "3.3.11" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" @@ -8403,6 +10225,27 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -8419,7 +10262,7 @@ which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -8479,6 +10322,16 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" @@ -8491,10 +10344,25 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^7.2.3: + version "7.4.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" + integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== + x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xregexp@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" From dee9735a596d661420ca2ff59a4f8a60d506e469 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Wed, 18 Nov 2020 20:02:14 +0300 Subject: [PATCH 02/29] TEST: Add danger --- .github/workflows/pull_request.yml | 16 +- dangerfile.ts | 4 + package.json | 2 + yarn.lock | 639 ++++++++++++++++++++++++++++- 4 files changed, 645 insertions(+), 16 deletions(-) create mode 100644 dangerfile.ts diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 03d8c29ca6..03ab67d4e3 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -3,15 +3,6 @@ name: 'Pull Request' on: ['pull_request'] jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 12 - - run: yarn install --frozen-lockfile - - run: yarn test:static test: runs-on: ubuntu-latest steps: @@ -20,7 +11,12 @@ jobs: with: node-version: 12 - run: yarn install --frozen-lockfile - - run: yarn test:unit + - run: yarn test:unit:ci + - run: yarn test:static + - name: Create test report + run: yarn danger ci + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} styleguide: runs-on: ubuntu-latest steps: diff --git a/dangerfile.ts b/dangerfile.ts new file mode 100644 index 0000000000..6f615af3ed --- /dev/null +++ b/dangerfile.ts @@ -0,0 +1,4 @@ +import { message, danger } from "danger" + +const modifiedMD = danger.git.modified_files.join("- ") +message("Changed Files in this PR: \n - " + modifiedMD) diff --git a/package.json b/package.json index 3276d4da1f..3766afb3ae 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "concurrently": "^4.1.2", "cross-env": "^7.0.2", "css-loader": "^4.3.0", + "danger": "^10.5.1", "eslint": "~6.8.0", "eslint-plugin-react": "^7.16.0", "eslint-plugin-react-hooks": "^2.0.1", @@ -101,6 +102,7 @@ "tsc": "cross-env NODE_ENV=production tsc --emitDeclarationOnly --declaration", "clear": "shx rm -rf dist/*", "test:unit": "jest", + "test:unit:ci": "jest --ci --silent", "test:static": "concurrently 'tsc --noEmit' 'eslint --ext .jsx,.js,.ts,.tsx src/' 'stylelint \"./src/**/*.css\"'", "test": "concurrently 'yarn test:unit' 'yarn test:static'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" diff --git a/yarn.lock b/yarn.lock index c52b7d5e07..9b957b0019 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1132,6 +1132,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/polyfill@^7.2.5": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" + integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.4" + "@babel/preset-env@^7.11.0": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" @@ -1576,6 +1584,110 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@octokit/auth-token@^2.4.0": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.3.tgz#b868b5f2366533a7e62933eaa1181a8924228cc4" + integrity sha512-fdGoOQ3kQJh+hrilc0Plg50xSfaCKOeYN9t6dpJKXN9BxhhfquL0OzoQXg3spLYymL5rm29uPeI3KEXRaZQ9zg== + dependencies: + "@octokit/types" "^5.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.9.tgz#c6a772e024202b1bd19ab69f90e0536a2598b13e" + integrity sha512-3VPLbcCuqji4IFTclNUtGdp9v7g+nspWdiCUbK3+iPMjJCZ6LEhn1ts626bWLOn0GiDb6j+uqGvPpqLnY7pBgw== + dependencies: + "@octokit/types" "^5.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" + integrity sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg== + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.3.tgz#b51b200052bf483f6fa56c9e7e3aa51ead36ecd8" + integrity sha512-GgD5z8Btm301i2zfvJLk/mkhvGCdjQ7wT8xF9ov5noQY8WbKZDH9cOBqXzoeKd1mLr1xH2FwbtGso135zGBgTA== + dependencies: + "@octokit/types" "^5.0.1" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.4.10" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.10.tgz#402d2c53768bde12b99348329ba4129746aebb9c" + integrity sha512-egA49HkqEORVGDZGav1mh+VD+7uLgOxtn5oODj6guJk0HCy+YBSYapFkSLFgeYj3Fr18ZULKGURkjyhkAChylw== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^5.0.0" + deprecation "^2.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + once "^1.4.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.43.1": + version "16.43.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" + integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.16.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" + integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== + dependencies: + "@types/node" ">= 8" + +"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" + integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== + dependencies: + "@types/node" ">= 8" + "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -1698,6 +1810,11 @@ version "13.9.8" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.8.tgz#09976420fc80a7a00bf40680c63815ed8c7616f4" +"@types/node@>= 8": + version "14.14.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.8.tgz#2127bd81949a95c8b7d3240f3254352d72563aec" + integrity sha512-z/5Yd59dCKI5kbxauAJgw6dLPzW+TNOItNE00PkpzNwUIEwdj/Lsqwq94H5DdYBX7C13aRA0CY32BK76+neEUA== + "@types/node@^12.7.2": version "12.12.34" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.34.tgz#0a5d6ae5d22612f0cf5f10320e1fc5d2a745dcb8" @@ -2042,6 +2159,13 @@ abab@^2.0.3: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2082,6 +2206,13 @@ address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" @@ -2304,6 +2435,13 @@ async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" +async-retry@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" + integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q== + dependencies: + retry "0.12.0" + async@^2.5.0, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2320,6 +2458,11 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2491,6 +2634,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -2668,6 +2816,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + buble@0.19.8: version "0.19.8" resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d" @@ -2681,6 +2834,11 @@ buble@0.19.8: os-homedir "^2.0.0" regexpu-core "^4.5.4" +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -3116,6 +3274,11 @@ colorette@^1.2.0, colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + colors@~0.6.0-1: version "0.6.2" resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" @@ -3127,7 +3290,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.19.0, commander@^2.20.0: +commander@^2.18.0, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3286,6 +3449,11 @@ core-js-pure@^3.0.0: version "3.6.4" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" +core-js@^2.6.5: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + core-js@^3.6.4: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" @@ -3465,6 +3633,48 @@ cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" +danger@^10.5.1: + version "10.5.1" + resolved "https://registry.yarnpkg.com/danger/-/danger-10.5.1.tgz#54f6acee8953a2facad1359f5c94694556f9e6e9" + integrity sha512-M+SnvfD4VKSXwXMRGYR0KPtdl8jYmWqHIlqw1vwB/oTikjCi0nwXFJ7Nw/H3lCPY5NgXDFfJ7UHf8cR7kLNBlQ== + dependencies: + "@babel/polyfill" "^7.2.5" + "@octokit/rest" "^16.43.1" + async-retry "1.2.3" + chalk "^2.3.0" + commander "^2.18.0" + debug "^4.1.1" + fast-json-patch "^3.0.0-1" + get-stdin "^6.0.0" + gitlab "^10.0.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + hyperlinker "^1.0.0" + json5 "^2.1.0" + jsonpointer "^4.0.1" + jsonwebtoken "^8.4.0" + lodash.find "^4.6.0" + lodash.includes "^4.3.0" + lodash.isobject "^3.0.2" + lodash.keys "^4.0.8" + lodash.mapvalues "^4.6.0" + lodash.memoize "^4.1.2" + memfs-or-file-map-to-github-branch "^1.1.0" + micromatch "^3.1.10" + node-cleanup "^2.1.2" + node-fetch "2.6.1" + override-require "^1.1.1" + p-limit "^2.1.0" + parse-diff "^0.7.0" + parse-git-config "^2.0.3" + parse-github-url "^1.0.2" + parse-link-header "^1.0.1" + pinpoint "^1.1.0" + prettyjson "^1.2.1" + readline-sync "^1.4.9" + require-from-string "^2.0.2" + supports-hyperlinks "^1.0.1" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -3491,7 +3701,14 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" dependencies: @@ -3616,6 +3833,11 @@ dependency-graph@^0.9.0: resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -3776,6 +3998,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -3900,10 +4129,17 @@ es6-object-assign@1.1.0, es6-object-assign@^1.0.3, es6-object-assign@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" -es6-promise@^4.2.8: +es6-promise@^4.0.3, es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + escalade@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" @@ -4095,6 +4331,11 @@ etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -4299,6 +4540,11 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" +fast-json-patch@^3.0.0-1: + version "3.0.0-1" + resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.0.0-1.tgz#4c68f2e7acfbab6d29d1719c44be51899c93dabb" + integrity sha512-6pdFb07cknxvPzCeLsFHStEy+MysPJPgZQ9LbQ/2O67unQF93SNqfdSqnPPl71YMHX+AD8gbl7iuoGFzHEdDuw== + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4496,6 +4742,15 @@ fork-ts-checker-webpack-plugin@1.5.0: tapable "^1.0.0" worker-rpc "^0.1.0" +form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -4526,6 +4781,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= + fs-extra@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -4610,6 +4870,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" @@ -4643,12 +4908,34 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-config-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664" + integrity sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ= + dependencies: + extend-shallow "^2.0.1" + fs-exists-sync "^0.1.0" + homedir-polyfill "^1.0.0" + github-slugger@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" dependencies: emoji-regex ">=6.0.0 <=6.1.1" +gitlab@^10.0.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/gitlab/-/gitlab-10.2.1.tgz#1f5fb2c2bad08f95b7c7d91dd41805ab5eea3960" + integrity sha512-z+DxRF1C9uayVbocs9aJkJz+kGy14TSm1noB/rAIEBbXOkOYbjKxyuqJzt+0zeFpXFdgA0yq6DVVbvM7HIfGwg== + dependencies: + form-data "^2.5.0" + humps "^2.0.1" + ky "^0.12.0" + ky-universal "^0.3.0" + li "^1.3.0" + query-string "^6.8.2" + universal-url "^2.0.0" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -4915,6 +5202,11 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasurl@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hasurl/-/hasurl-1.0.0.tgz#e4c619097ae1e8fc906bee904ce47e94f5e1ea37" + integrity sha512-43ypUd3DbwyCT01UYpA99AEZxZ4aKtRxWGBHEIbjcOsUghd9YUON0C+JF6isNjaiwC/UF5neaUudy6JS9jZPZQ== + he@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -4927,7 +5219,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -homedir-polyfill@^1.0.1: +homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" dependencies: @@ -5014,6 +5306,14 @@ http-errors@~1.7.2: version "0.4.10" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -5044,11 +5344,29 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +humps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" + integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao= + +hyperlinker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== + hyphenate-style-name@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" @@ -5499,6 +5817,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-potential-custom-element-name@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" @@ -6127,6 +6450,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + json5@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" @@ -6142,6 +6472,27 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonpointer@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc" + integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg== + +jsonwebtoken@^8.4.0: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -6214,6 +6565,23 @@ jsx-ast-utils@^2.2.3: array-includes "^3.0.3" object.assign "^4.1.0" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -6251,6 +6619,19 @@ known-css-properties@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.14.0.tgz#d7032b4334a32dc22e6e46b081ec789daf18756c" +ky-universal@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e" + integrity sha512-CM4Bgb2zZZpsprcjI6DNYTaH3oGHXL2u7BU4DK+lfCuC4snkt9/WRpMYeKbBbXscvKkeqBwzzjFX2WwmKY5K/A== + dependencies: + abort-controller "^3.0.0" + node-fetch "^2.6.0" + +ky@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.12.0.tgz#c05be95e6745ba422a6d2cc8ae964164962279f9" + integrity sha512-t9b7v3V2fGwAcQnnDDQwKQGF55eWrf4pwi1RN08Fy8b/9GEwV7Ea0xQiaSW6ZbeghBHIwl8kgnla4vVo9seepQ== + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -6274,6 +6655,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +li@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b" + integrity sha1-IsWbyu+qmo7zWc91l4TkvxBq6hs= + line-column@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" @@ -6354,6 +6740,11 @@ lodash.difference@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= +lodash.find@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= + lodash.forown@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.forown/-/lodash.forown-4.4.0.tgz#85115cf04f73ef966eced52511d3893cc46683af" @@ -6369,11 +6760,76 @@ lodash.groupby@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.keys@^4.0.8: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" + integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" @@ -6441,6 +6897,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +macos-release@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" + integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + magic-string@^0.25.3: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -6549,6 +7010,13 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" +memfs-or-file-map-to-github-branch@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/memfs-or-file-map-to-github-branch/-/memfs-or-file-map-to-github-branch-1.2.0.tgz#a56cd13443144a8c7fbe2a4b90b5f570fb39c845" + integrity sha512-PloI9AkRXrLQuBU1s7eYQpl+4hkL0U0h23lddMaJ3ZGUufn8pdNRxd1kCfBqL5gISCFQs78ttXS15e4/f5vcTA== + dependencies: + "@octokit/rest" "^16.43.1" + memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -6885,12 +7353,22 @@ nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" +node-cleanup@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" + integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= + node-dir@^0.1.10: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" dependencies: minimatch "^3.0.2" +node-fetch@2.6.1, node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" @@ -7090,6 +7568,11 @@ obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -7177,6 +7660,14 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + os-shim@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" @@ -7186,6 +7677,11 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +override-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/override-require/-/override-require-1.1.1.tgz#6ae22fadeb1f850ffb0cf4c20ff7b87e5eb650df" + integrity sha1-auIvresfhQ/7DPTCD/e4fl62UN8= + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -7215,6 +7711,13 @@ p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.2.2: dependencies: p-try "^2.0.0" +p-limit@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -7286,6 +7789,11 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-diff@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4" + integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg== + parse-entities@^1.0.2, parse-entities@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" @@ -7297,6 +7805,20 @@ parse-entities@^1.0.2, parse-entities@^1.1.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-git-config@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-2.0.3.tgz#6fb840d4a956e28b971c97b33a5deb73a6d5b6bb" + integrity sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A== + dependencies: + expand-tilde "^2.0.2" + git-config-path "^1.0.1" + ini "^1.3.5" + +parse-github-url@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" + integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw== + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -7314,6 +7836,13 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-link-header@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" + integrity sha1-vt/g0hGK64S+deewJUGeyKYRQKc= + dependencies: + xtend "~4.0.1" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -7424,6 +7953,11 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pinpoint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pinpoint/-/pinpoint-1.1.0.tgz#0cf7757a6977f1bf7f6a32207b709e377388e874" + integrity sha1-DPd1eml38b9/ajIge3CeN3OI6HQ= + pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" @@ -7768,6 +8302,14 @@ pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" +prettyjson@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.1.tgz#fcffab41d19cab4dfae5e575e64246619b12d289" + integrity sha1-/P+rQdGcq0365eV15kJGYZsS0ok= + dependencies: + colors "^1.1.2" + minimist "^1.2.0" + prismjs@^1.17.1: version "1.19.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.19.0.tgz#713afbd45c3baca4b321569f2df39e17e729d4dc" @@ -7903,6 +8445,15 @@ query-string@^4.3.2: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^6.8.2: + version "6.13.7" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.7.tgz#af53802ff6ed56f3345f92d40a056f93681026ee" + integrity sha512-CsGs8ZYb39zu0WLkeOhe0NMePqgYdAuCqxOYKDR5LVCytDZYMGx3Bb+xypvQvPHVPijRXB0HZNFllCzHRe4gEA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -8201,6 +8752,11 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +readline-sync@^1.4.9: + version "1.4.10" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" + integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== + recast@~0.18.5: version "0.18.8" resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.8.tgz#e745d8b7d6da549a03099ff648c957288f4649a4" @@ -8450,6 +9006,11 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -8537,7 +9098,7 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -retry@^0.12.0: +retry@0.12.0, retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -9036,6 +9597,11 @@ specificity@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -9133,6 +9699,11 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-length@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" @@ -9409,7 +9980,7 @@ supports-color@^4.5.0: dependencies: has-flag "^2.0.0" -supports-color@^5.3.0: +supports-color@^5.0.0, supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: @@ -9421,6 +9992,14 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" + integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== + dependencies: + has-flag "^2.0.0" + supports-color "^5.0.0" + supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -9646,6 +10225,13 @@ tough-cookie@^3.0.1: psl "^1.1.28" punycode "^2.1.1" +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + tr46@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" @@ -9891,6 +10477,26 @@ unist-util-visit@^2.0.0: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" +universal-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universal-url/-/universal-url-2.0.0.tgz#35e7fc2c3374804905cee67ea289ed3a47669809" + integrity sha512-3DLtXdm/G1LQMCnPj+Aw7uDoleQttNHp2g5FnNQKR6cP6taNWS1b/Ehjjx4PVyvejKi3TJyu8iBraKM4q3JQPg== + dependencies: + hasurl "^1.0.0" + whatwg-url "^7.0.0" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" @@ -10090,6 +10696,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -10237,6 +10848,15 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-url@^8.0.0: version "8.4.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" @@ -10269,6 +10889,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +windows-release@^3.1.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" + integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== + dependencies: + execa "^1.0.0" + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" From 84aed82da9acf42be85510724e5dcc2ec1bdc17b Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Thu, 19 Nov 2020 12:35:12 +0300 Subject: [PATCH 03/29] TEST: Add danger-jest --- .github/workflows/pull_request.yml | 2 ++ dangerfile.js | 4 ++++ dangerfile.ts | 4 ---- package.json | 3 ++- yarn.lock | 7 +++++++ 5 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 dangerfile.js delete mode 100644 dangerfile.ts diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 03ab67d4e3..a9ea88796b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,7 +13,9 @@ jobs: - run: yarn install --frozen-lockfile - run: yarn test:unit:ci - run: yarn test:static + if: always() - name: Create test report + if: always() run: yarn danger ci env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/dangerfile.js b/dangerfile.js new file mode 100644 index 0000000000..2cf4428061 --- /dev/null +++ b/dangerfile.js @@ -0,0 +1,4 @@ +// import { message, danger } from "danger" +const dangerJest = require('danger-plugin-jest').default; + +dangerJest(); diff --git a/dangerfile.ts b/dangerfile.ts deleted file mode 100644 index 6f615af3ed..0000000000 --- a/dangerfile.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { message, danger } from "danger" - -const modifiedMD = danger.git.modified_files.join("- ") -message("Changed Files in this PR: \n - " + modifiedMD) diff --git a/package.json b/package.json index 3766afb3ae..df2046f378 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "cross-env": "^7.0.2", "css-loader": "^4.3.0", "danger": "^10.5.1", + "danger-plugin-jest": "^1.3.0", "eslint": "~6.8.0", "eslint-plugin-react": "^7.16.0", "eslint-plugin-react-hooks": "^2.0.1", @@ -102,7 +103,7 @@ "tsc": "cross-env NODE_ENV=production tsc --emitDeclarationOnly --declaration", "clear": "shx rm -rf dist/*", "test:unit": "jest", - "test:unit:ci": "jest --ci --silent", + "test:unit:ci": "jest --ci --silent --outputFile test-results.json --json", "test:static": "concurrently 'tsc --noEmit' 'eslint --ext .jsx,.js,.ts,.tsx src/' 'stylelint \"./src/**/*.css\"'", "test": "concurrently 'yarn test:unit' 'yarn test:static'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" diff --git a/yarn.lock b/yarn.lock index 9b957b0019..f74b95c84c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3633,6 +3633,13 @@ cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" +danger-plugin-jest@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/danger-plugin-jest/-/danger-plugin-jest-1.3.0.tgz#7340e3c45f9f1707a57d031d8e5581e23f68199d" + integrity sha512-DzLsLQA8l8/b7UB8+pZldqn2Fya4+ttE1VoF4q6B2FBxH1F6vF9/qnumDp6EU9fjoJtfGeGXceHV0v16oPKbFQ== + dependencies: + strip-ansi "^4.0.0" + danger@^10.5.1: version "10.5.1" resolved "https://registry.yarnpkg.com/danger/-/danger-10.5.1.tgz#54f6acee8953a2facad1359f5c94694556f9e6e9" From 001fa266a90c6c485c5f32fbe83c070464f7c357 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Thu, 19 Nov 2020 13:57:38 +0300 Subject: [PATCH 04/29] TEST: Add yarn install cache --- .github/workflows/pull_request.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a9ea88796b..a8d13bde7c 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/setup-node@v1 with: node-version: 12 - - run: yarn install --frozen-lockfile + - uses: bahmutov/npm-install@v1 - run: yarn test:unit:ci - run: yarn test:static if: always() @@ -26,7 +26,7 @@ jobs: - uses: actions/setup-node@v1 with: node-version: 12 - - run: yarn install --frozen-lockfile + - uses: bahmutov/npm-install@v1 - run: yarn styleguide:build - name: Uploading styleguide artifact uses: actions/upload-artifact@v2 From 9cd5929b86f752afce08ac96e62f6073c036da3e Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Thu, 19 Nov 2020 14:19:36 +0300 Subject: [PATCH 05/29] TEST: Add danger eslint --- .github/workflows/pull_request.yml | 4 +--- dangerfile.js | 29 +++++++++++++++++++++++++++-- package.json | 6 +++++- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a8d13bde7c..d4c6bdd586 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,9 +11,7 @@ jobs: with: node-version: 12 - uses: bahmutov/npm-install@v1 - - run: yarn test:unit:ci - - run: yarn test:static - if: always() + - run: yarn test:ci - name: Create test report if: always() run: yarn danger ci diff --git a/dangerfile.js b/dangerfile.js index 2cf4428061..69fc2d116a 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -1,4 +1,29 @@ -// import { message, danger } from "danger" +import { fail, warn } from "danger" const dangerJest = require('danger-plugin-jest').default; +const fs = require('fs') +const path = require('path') -dangerJest(); +const lintPath = path.join(__dirname, 'lint-results.json') + +function lint() { + return new Promise((ok, fail) => { + return fs.readFile(lintPath, (err, file) => err ? fail(err) : ok(JSON.parse(file))); + }).then(lintReport => { + for (const { messages, filePath } of lintReport) { + const relPath = path.relative(__dirname, filePath) + for (const message of messages) { + const text = `${message.message} \`${message.ruleId}\`` + if (message.severity === 2) { + fail(text, relPath, message.line); + } else if (message.severity === 1) { + warn(text, relPath, message.line); + } + } + } + }); +} + +Promise.all([ + dangerJest(), + lint(), +]); diff --git a/package.json b/package.json index df2046f378..3ea23b0ccf 100644 --- a/package.json +++ b/package.json @@ -104,8 +104,12 @@ "clear": "shx rm -rf dist/*", "test:unit": "jest", "test:unit:ci": "jest --ci --silent --outputFile test-results.json --json", - "test:static": "concurrently 'tsc --noEmit' 'eslint --ext .jsx,.js,.ts,.tsx src/' 'stylelint \"./src/**/*.css\"'", + "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", + "lint:ci": "yarn lint -o lint-results.json -f json", + "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", + "test:static:ci": "concurrently 'tsc --noEmit' 'yarn lint:ci' 'stylelint \"./src/**/*.css\"'", "test": "concurrently 'yarn test:unit' 'yarn test:static'", + "test:ci": "concurrently 'yarn test:unit:ci' 'yarn test:static:ci'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" }, "pre-commit": [ From 1625126430f99e9621047350c39b6250742672be Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Thu, 19 Nov 2020 18:02:47 +0300 Subject: [PATCH 06/29] TEST: Prevent bundling tests into dist --- .eslintrc.json | 2 +- babel.config.js | 3 ++- jest.config.js | 1 + tsconfig.eslint.json | 4 ++++ tsconfig.json | 2 +- 5 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 tsconfig.eslint.json diff --git a/.eslintrc.json b/.eslintrc.json index 07fb3c5122..258066147c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,7 @@ { "extends": ["@vkontakte/eslint-config/typescript/react"], "parserOptions": { - "project": "./tsconfig.json", + "project": "./tsconfig.eslint.json", "ecmaVersion": 2018, // Allows for the parsing of modern ECMAScript features "sourceType": "module", // Allows for the use of imports "ecmaFeatures": { diff --git a/babel.config.js b/babel.config.js index 2afee70906..532e86378f 100644 --- a/babel.config.js +++ b/babel.config.js @@ -10,5 +10,6 @@ module.exports = { '@babel/preset-typescript' ], plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-transform-runtime'], - ignore: ['./src/vkui.js'], + ignore: ['./src/vkui.js'].concat( + isProduction ? ['./src/**/*.test.ts', './src/**/*.test.tsx', './src/**/*.spec.ts', './src/**/*.spec.tsx'] : []), }; diff --git a/jest.config.js b/jest.config.js index 6078d7db1e..5a40cb3065 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,4 +1,5 @@ module.exports = { + roots: ['src'], collectCoverage: true, collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], coveragePathIgnorePatterns: [ diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000000..02883efa9f --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ +"extends": "./tsconfig.json", +"exclude": [] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 38e27f75a1..a18bb332b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,5 +16,5 @@ "noImplicitAny": true }, "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "src/**/*.test.ts", "src/**/*.test.tsx", "src/**/*.spec.ts", "src/**/*.spec.tsx"] } From 05f2fbe3c51de960b7ed7242a786cc4ea77433bb Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Thu, 19 Nov 2020 21:44:49 +0300 Subject: [PATCH 07/29] TEST: Add danger coverage report --- .gitignore | 2 ++ dangerfile.js | 25 +++++++++++++++------ package.json | 3 ++- yarn.lock | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 83 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 52c33fe865..e11cb24d61 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ PUBLISHING.md .idea/markdown-navigator.xml docs/ .vscode/ +test-results.json +lint-results.json diff --git a/dangerfile.js b/dangerfile.js index 69fc2d116a..eb516eacfc 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -1,14 +1,14 @@ -import { fail, warn } from "danger" +import { fail, message, warn } from "danger" const dangerJest = require('danger-plugin-jest').default; -const fs = require('fs') -const path = require('path') +const fs = require('fs'); +const path = require('path'); -const lintPath = path.join(__dirname, 'lint-results.json') +const readFileP = path => new Promise((ok, fail) => fs.readFile(path, (err, file) => err ? fail(err) : ok(file))) +const lintPath = path.join(__dirname, 'lint-results.json'); function lint() { - return new Promise((ok, fail) => { - return fs.readFile(lintPath, (err, file) => err ? fail(err) : ok(JSON.parse(file))); - }).then(lintReport => { + return readFileP(lintPath).then(file => { + const lintReport = JSON.parse(file) for (const { messages, filePath } of lintReport) { const relPath = path.relative(__dirname, filePath) for (const message of messages) { @@ -23,7 +23,18 @@ function lint() { }); } +function coverage() { + return readFileP(path.join(__dirname, 'coverage', 'coverage-summary.json')).then(file => { + const { total } = JSON.parse(file) + const formatCoverage = (kind, { covered, total, pct }) => `${covered} / ${total} ${kind} (${pct}%)` + message(`Code coverage: ${ + Object.entries(total).map(([kind, cov]) => formatCoverage(kind, cov)).join(', ') + }`) + }) +} + Promise.all([ dangerJest(), lint(), + coverage() ]); diff --git a/package.json b/package.json index 3ea23b0ccf..a64df3b763 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@babel/preset-react": "^7.10.4", "@babel/preset-typescript": "^7.10.4", "@babel/runtime": "^7.11.2", + "@testing-library/react": "^11.2.1", "@types/jest": "^26.0.15", "@types/node": "^12.7.2", "@types/react": "^16.9.2", @@ -103,7 +104,7 @@ "tsc": "cross-env NODE_ENV=production tsc --emitDeclarationOnly --declaration", "clear": "shx rm -rf dist/*", "test:unit": "jest", - "test:unit:ci": "jest --ci --silent --outputFile test-results.json --json", + "test:unit:ci": "jest --ci --silent --outputFile test-results.json --json --coverageReporters='json-summary'", "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", "lint:ci": "yarn lint -o lint-results.json -f json", "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", diff --git a/yarn.lock b/yarn.lock index f74b95c84c..f2ef87b282 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1245,6 +1245,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typescript" "^7.10.4" +"@babel/runtime-corejs3@^7.10.2": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.5.tgz#ffee91da0eb4c6dae080774e94ba606368e414f4" + integrity sha512-roGr54CsTmNPPzZoCP1AmDXuBoNao7tnSA83TXTwt+UK5QVyh1DIJnrgYRPWKCF2flqZQXwa7Yr8v7VmLzF0YQ== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + "@babel/runtime-corejs3@^7.8.3": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz#26fe4aa77e9f1ecef9b776559bbb8e84d34284b7" @@ -1252,6 +1260,13 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.11.2", "@babel/runtime@^7.7.6": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" @@ -1702,10 +1717,37 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@testing-library/dom@^7.27.1": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.28.0.tgz#4d68a39675dbf0fa2f3c53bc2b9ab9e1dd1d55b2" + integrity sha512-jY9wE3eF/fjrxUCC1VTCnMWE/g+aCP582Df4H6H9wQYY0yLglyevTO7TET9pgg0w9Yzm8n7ck0Hxzi18pN5+4w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.4" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/react@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.1.tgz#01b3d2dd5768ac27402b5d7e41c87e605be3c326" + integrity sha512-/rKucr9p/mhMongaeTXwgIRfDnsAUu6LbfN+moNUn2oU0Kw5a7inN5vGvPWv7Ef0YndpERAfODjeseUIlhzRHw== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.27.1" + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" +"@types/aria-query@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" + integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.12" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" @@ -2329,6 +2371,14 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -3023,7 +3073,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -3939,6 +3989,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" + integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== + dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -6904,6 +6959,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + macos-release@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" From cde4a7ac65147d440d70b0ffb53aeff7e871e7ec Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Thu, 19 Nov 2020 23:26:21 +0300 Subject: [PATCH 08/29] TEST: Setup react testing library --- package.json | 2 + src/components/Checkbox/Checkbox.test.tsx | 14 +++++ yarn.lock | 64 +++++++++++++++++++++-- 3 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 src/components/Checkbox/Checkbox.test.tsx diff --git a/package.json b/package.json index a64df3b763..a4c5059102 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "@babel/preset-react": "^7.10.4", "@babel/preset-typescript": "^7.10.4", "@babel/runtime": "^7.11.2", + "@testing-library/jest-dom": "^5.11.6", "@testing-library/react": "^11.2.1", + "@testing-library/user-event": "^12.2.2", "@types/jest": "^26.0.15", "@types/node": "^12.7.2", "@types/react": "^16.9.2", diff --git a/src/components/Checkbox/Checkbox.test.tsx b/src/components/Checkbox/Checkbox.test.tsx new file mode 100644 index 0000000000..bd50a1a93d --- /dev/null +++ b/src/components/Checkbox/Checkbox.test.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import '@testing-library/jest-dom/extend-expect'; +import { Checkbox } from './Checkbox'; + +describe('Checkbox', () => { + it('handles change', () => { + const onChange = jest.fn(); + render( onChange(e.target.checked)}>check); + userEvent.click(screen.getByText('check')); + expect(onChange).toHaveBeenLastCalledWith(false); + }); +}); diff --git a/yarn.lock b/yarn.lock index f2ef87b282..4002c52e08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1260,7 +1260,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.9.2": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== @@ -1731,6 +1731,20 @@ lz-string "^1.4.4" pretty-format "^26.6.2" +"@testing-library/jest-dom@^5.11.6": + version "5.11.6" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.6.tgz#782940e82e5cd17bc0a36f15156ba16f3570ac81" + integrity sha512-cVZyUNRWwUKI0++yepYpYX7uhrP398I+tGz4zOlLVlUYnZS+Svuxv4fwLeCIy7TnBYKXUaOlQr3vopxL8ZfEnA== + dependencies: + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^4.2.2" + chalk "^3.0.0" + css "^3.0.0" + css.escape "^1.5.1" + lodash "^4.17.15" + redent "^3.0.0" + "@testing-library/react@^11.2.1": version "11.2.1" resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.1.tgz#01b3d2dd5768ac27402b5d7e41c87e605be3c326" @@ -1739,6 +1753,13 @@ "@babel/runtime" "^7.12.5" "@testing-library/dom" "^7.27.1" +"@testing-library/user-event@^12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.2.2.tgz#22d0047da745289335240f523dfe74c889ec96cb" + integrity sha512-mTYL9LrwiSeyorStUOMuRGQDn1ca40tIhuv//o/K3lY8wBEp+9Im90MFVx5i3u7zCPmavn3uWZs/10chsbI8Tg== + dependencies: + "@babel/runtime" "^7.10.2" + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -1827,7 +1848,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.15": +"@types/jest@*", "@types/jest@^26.0.15": version "26.0.15" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.15.tgz#12e02c0372ad0548e07b9f4e19132b834cb1effe" integrity sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog== @@ -1906,6 +1927,13 @@ version "1.0.5" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" +"@types/testing-library__jest-dom@^5.9.1": + version "5.9.5" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz#5bf25c91ad2d7b38f264b12275e5c92a66d849b0" + integrity sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ== + dependencies: + "@types/jest" "*" + "@types/uglify-js@*": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082" @@ -3641,6 +3669,20 @@ css-tree@^1.0.0: mdn-data "2.0.12" source-map "^0.6.1" +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -5553,7 +5595,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -8853,6 +8895,14 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -9566,6 +9616,14 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + source-map-support@^0.5.6: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" From 0e1aeec59e26878934feed8827d9cb69763f00da Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Fri, 20 Nov 2020 19:40:56 +0300 Subject: [PATCH 09/29] WIP: TEST: Add playwright screen test --- .eslintrc.json | 13 +- .github/workflows/pull_request.yml | 1 + .gitignore | 3 +- .nyc_output/coverage.json | 1 + e2e/browser-env.js | 8 + e2e/dist/default_scheme.css | 234 ++++ e2e/dist/index.html | 9 + e2e/dist/unstable.css | 1 + e2e/dist/vkui.css | 1 + e2e/index.ts | 12 + e2e/matchers.ts | 3 + e2e/react-playwright.js | 57 + jest.e2e.config.js | 19 + package.json | 7 +- src/components/Checkbox/Checkbox.e2e.tsx | 10 + ...-2-e-tsx-checkbox-should-render-1-snap.png | Bin 0 -> 6634 bytes src/jest.d.ts | 5 + tsconfig.json | 7 +- yarn.lock | 1192 +++++++++++++++-- 19 files changed, 1442 insertions(+), 141 deletions(-) create mode 100644 .nyc_output/coverage.json create mode 100644 e2e/browser-env.js create mode 100644 e2e/dist/default_scheme.css create mode 100644 e2e/dist/index.html create mode 100644 e2e/dist/unstable.css create mode 100644 e2e/dist/vkui.css create mode 100644 e2e/index.ts create mode 100644 e2e/matchers.ts create mode 100644 e2e/react-playwright.js create mode 100644 jest.e2e.config.js create mode 100644 src/components/Checkbox/Checkbox.e2e.tsx create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png create mode 100644 src/jest.d.ts diff --git a/.eslintrc.json b/.eslintrc.json index 258066147c..8bfc6495b4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,11 +1,14 @@ { - "extends": ["@vkontakte/eslint-config/typescript/react"], + "extends": [ + "@vkontakte/eslint-config/typescript/react", + "plugin:jest-playwright/recommended" + ], "parserOptions": { "project": "./tsconfig.eslint.json", - "ecmaVersion": 2018, // Allows for the parsing of modern ECMAScript features - "sourceType": "module", // Allows for the use of imports + "ecmaVersion": 2018, + "sourceType": "module", "ecmaFeatures": { - "jsx": true, // Allows for the parsing of JSX + "jsx": true, "restParams": true, "spread": true } @@ -14,7 +17,7 @@ "Element": true }, "env": { - "es6": true, // Enable global es6 variables, like Set, Map, etc + "es6": true, "browser": true, "node": true, "jest": true diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index d4c6bdd586..34d2ed211b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -12,6 +12,7 @@ jobs: node-version: 12 - uses: bahmutov/npm-install@v1 - run: yarn test:ci + - run: yarn test:e2e - name: Create test report if: always() run: yarn danger ci diff --git a/.gitignore b/.gitignore index e11cb24d61..b0f917d7f1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,8 @@ coverage .env npm-debug.log stats.json -dist/ +dist/* +!e2e/dist/index.html src/styles/generated/ PUBLISHING.md .idea/workspace.xml diff --git a/.nyc_output/coverage.json b/.nyc_output/coverage.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/.nyc_output/coverage.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/e2e/browser-env.js b/e2e/browser-env.js new file mode 100644 index 0000000000..e088846571 --- /dev/null +++ b/e2e/browser-env.js @@ -0,0 +1,8 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import * as vkui from '../src'; + +console.log('init', React, ReactDOM, vkui) +window['React'] = React; +window['ReactDOM'] = ReactDOM; +window['vkui'] = vkui; diff --git a/e2e/dist/default_scheme.css b/e2e/dist/default_scheme.css new file mode 100644 index 0000000000..fe28e4da11 --- /dev/null +++ b/e2e/dist/default_scheme.css @@ -0,0 +1,234 @@ +/* stylelint-disable */ +/* +* Этот файл сгенерирован автоматически. Не надо править его руками. +*/ +:root { + --accent: #3f8ae0; + --action_sheet_action_foreground: #3f8ae0; + --action_sheet_separator: rgba(0, 0, 0, 0.12); + --activity_indicator_tint: #aeb7c2; + --attach_picker_tab_active_background: #4986cc; + --attach_picker_tab_active_icon: #ffffff; + --attach_picker_tab_active_text: #4986cc; + --attach_picker_tab_inactive_background: #f2f3f5; + --attach_picker_tab_inactive_icon: #818c99; + --attach_picker_tab_inactive_text: #818c99; + --background_content: #ffffff; + --background_highlighted: rgba(0, 0, 0, 0.08); + --background_hover: rgba(0, 0, 0, 0.04); + --background_keyboard: #e1e3e6; + --background_light: #f9f9f9; + --background_page: #ebedf0; + --background_suggestions: #ffffff; + --background_text_highlighted: rgba(63, 138, 224, 0.20); + --button_bot_shadow: #c4c8cc; + --button_commerce_background: #4bb34b; + --button_commerce_foreground: #ffffff; + --button_muted_background: #f2f3f5; + --button_muted_foreground: #3f8ae0; + --button_outline_border: #3f8ae0; + --button_outline_foreground: #3f8ae0; + --button_primary_background: #4986cc; + --button_primary_foreground: #ffffff; + --button_secondary_background: rgba(0, 28, 61, 0.05); + --button_secondary_background_highlighted: rgba(0, 28, 61, 0.03); + --button_secondary_destructive_background: rgba(0, 28, 61, 0.05); + --button_secondary_destructive_background_highlighted: rgba(0, 28, 61, 0.03); + --button_secondary_destructive_foreground: #e64646; + --button_secondary_destructive_foreground_highlighted: rgba(230, 70, 70, 0.60); + --button_secondary_foreground: #3f8ae0; + --button_secondary_foreground_highlighted: rgba(63, 138, 224, 0.60); + --button_tertiary_background: rgba(0, 0, 0, 0.00); + --button_tertiary_foreground: #4986cc; + --cell_button_foreground: #3f8ae0; + --content_placeholder_icon: #99a2ad; + --content_placeholder_text: #818c99; + --content_tint_background: #f5f5f5; + --content_tint_foreground: #7f8285; + --content_warning_background: #fff2d6; + --control_background: #ebedf0; + --control_foreground: #5181b8; + --control_tint: #ffffff; + --control_tint_muted: #76787a; + --counter_primary_background: #3f8ae0; + --counter_primary_text: #ffffff; + --counter_prominent_background: #ff3347; + --counter_prominent_text: #ffffff; + --counter_secondary_background: #aeb7c2; + --counter_secondary_text: #ffffff; + --destructive: #e64646; + --dynamic_blue: #3f8ae0; + --dynamic_gray: #a3adb8; + --dynamic_green: #4bb34b; + --dynamic_orange: #ffa000; + --dynamic_purple: #735ce6; + --dynamic_red: #ff3347; + --dynamic_violet: #792ec0; + --feed_recommended_friend_promo_background: #528bcc; + --field_background: #f2f3f5; + --field_border: rgba(0, 0, 0, 0.12); + --field_error_background: #faebeb; + --field_error_border: #e64646; + --field_text_placeholder: #818c99; + --field_valid_border: #4bb34b; + --float_button_background: #f5f5f5; + --float_button_background_highlighted: #ebedf0; + --float_button_border: rgba(0, 0, 0, 0.05); + --float_button_foreground: #99a2ad; + --header_alternate_background: #ffffff; + --header_alternate_tab_active_indicator: #3f8ae0; + --header_alternate_tab_active_text: #000000; + --header_alternate_tab_inactive_text: #99a2ad; + --header_background: #ffffff; + --header_background_before_blur: #ffffff; + --header_background_before_blur_alternate: #ffffff; + --header_search_field_background: #ebedf0; + --header_search_field_tint: #818c99; + --header_tab_active_background: rgba(0, 0, 0, 0.00); + --header_tab_active_indicator: #3f8ae0; + --header_tab_active_text: #000000; + --header_tab_inactive_text: #99a2ad; + --header_text: #000000; + --header_text_alternate: #000000; + --header_text_secondary: #818c99; + --header_tint: #3f8ae0; + --header_tint_alternate: #3f8ae0; + --icon_alpha_placeholder: #ffffff; + --icon_medium: #818c99; + --icon_medium_alpha: rgba(0, 0, 0, 0.48); + --icon_name: #74a2d6; + --icon_outline_medium: #818c99; + --icon_outline_secondary: #99a2ad; + --icon_secondary: #99a2ad; + --icon_secondary_alpha: rgba(0, 0, 0, 0.36); + --icon_tertiary: #b8c1cc; + --icon_tertiary_alpha: rgba(0, 0, 0, 0.24); + --im_attach_tint: #4986cc; + --im_bubble_border_alternate: #e1e3e6; + --im_bubble_border_alternate_highlighted: #d7d8d9; + --im_bubble_button_background: #f9f9f9; + --im_bubble_button_background_highlighted: #d7d8d9; + --im_bubble_button_foreground: #000000; + --im_bubble_button_outgoing_background: rgba(255, 255, 255, 0.60); + --im_bubble_gift_background: #f4e7c3; + --im_bubble_gift_background_highlighted: #e3d3ac; + --im_bubble_gift_text: #857250; + --im_bubble_gift_text_secondary: #ab9871; + --im_bubble_incoming: #ebedf0; + --im_bubble_incoming_alternate: #ffffff; + --im_bubble_incoming_alternate_highlighted: #f9f9f9; + --im_bubble_incoming_expiring: #e6e9ff; + --im_bubble_incoming_expiring_highlighted: #ccd3ff; + --im_bubble_incoming_highlighted: #d7d8d9; + --im_bubble_outgoing: #cce4ff; + --im_bubble_outgoing_alternate: #ffffff; + --im_bubble_outgoing_alternate_highlighted: #f9f9f9; + --im_bubble_outgoing_expiring: #ccd3ff; + --im_bubble_outgoing_expiring_highlighted: #adb8ff; + --im_bubble_outgoing_highlighted: #add3ff; + --im_bubble_wallpaper_button_background: #f2f3f5; + --im_bubble_wallpaper_button_background_highlighted: #e1e3e6; + --im_bubble_wallpaper_button_foreground: #000000; + --im_bubble_wallpaper_incoming: #ffffff; + --im_bubble_wallpaper_incoming_highlighted: #ebedf0; + --im_bubble_wallpaper_outgoing: #cce4ff; + --im_bubble_wallpaper_outgoing_highlighted: #add3ff; + --im_forward_line_tint: #45678f; + --im_reply_separator: #4986cc; + --im_service_message_text: #818c99; + --im_text_name: #4986cc; + --im_toolbar_separator: #001c3d; + --im_toolbar_voice_msg_background: #99a2ad; + --image_border: rgba(0, 0, 0, 0.08); + --input_background: #f2f3f5; + --input_border: #e1e3e6; + --landing_background: #ffffff; + --landing_field_background: #f2f3f5; + --landing_field_border: rgba(0, 0, 0, 0.00); + --landing_field_placeholder: #818c99; + --landing_login_button_background: #4986cc; + --landing_login_button_foreground: #ffffff; + --landing_primary_button_background: #4986cc; + --landing_primary_button_foreground: #ffffff; + --landing_secondary_button_background: rgba(0, 57, 115, 0.10); + --landing_secondary_button_foreground: #3f8ae0; + --landing_snippet_border: rgba(0, 0, 0, 0.15); + --landing_tertiary_button_background: rgba(0, 0, 0, 0.00); + --landing_tertiary_button_foreground: #4986cc; + --landing_text_primary: #000000; + --landing_text_secondary: #818c99; + --landing_text_title: #4986cc; + --like_text_tint: #ff3347; + --link_alternate: #4986cc; + --loader_background: #ebedf0; + --loader_tint: #76787a; + --loader_track_fill: #e1e3e6; + --loader_track_value_fill: #528bcc; + --media_overlay_button_background: #ffffff; + --media_overlay_button_foreground: #2c2d2e; + --modal_card_background: #ffffff; + --modal_card_border: rgba(0, 0, 0, 0.00); + --modal_card_header_close: #000000; + --music_playback_icon: #000000; + --overlay_status_background: #ebedf0; + --overlay_status_foreground: #6d7885; + --overlay_status_icon: #818c99; + --panel_tab_active_background: #ebedf0; + --panel_tab_active_text: #5d5f61; + --panel_tab_inactive_text: #76787a; + --placeholder_icon_background: rgba(0, 28, 61, 0.08); + --placeholder_icon_background_opaque: #ebedf0; + --placeholder_icon_foreground_primary: #99a2ad; + --placeholder_icon_foreground_secondary: #aeb7c2; + --placeholder_icon_tint: #001c3d; + --poll_option_background: #45678f; + --search_bar_background: #ffffff; + --search_bar_field_background: #ebedf0; + --search_bar_field_tint: #818c99; + --search_bar_segmented_control_tint: #818c99; + --segmented_control_bar_background: rgba(0, 0, 0, 0.00); + --segmented_control_tint: #99a2ad; + --selection_off_icon: #b8c1cc; + --separator_alpha: rgba(0, 0, 0, 0.12); + --separator_alternate: #e1e3e6; + --separator_common: #d7d8d9; + --skeleton_shimmer_from: #ffffff; + --skeleton_shimmer_to: #ffffff; + --snippet_background: #ffffff; + --snippet_border: rgba(0, 0, 0, 0.15); + --snippet_icon_tertiary: #c4c8cc; + --splashscreen_icon: #e1e3e6; + --statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.20); + --stories_create_button_background_from: #f2f3f5; + --stories_create_button_background_to: #e1e3e6; + --stories_create_button_foreground: #6d7885; + --stories_create_button_icon_background: #ffffff; + --stories_skeleton_loader_background: #c4c8cc; + --switch_ios_off_border: #e1e3e6; + --tabbar_active_icon: #2975cc; + --tabbar_background: #f9f9f9; + --tabbar_inactive_icon: #99a2ad; + --tabbar_tablet_active_icon: #2975cc; + --tabbar_tablet_background: #f9f9f9; + --tabbar_tablet_inactive_icon: #99a2ad; + --tabbar_tablet_text_primary: #000000; + --tabbar_tablet_text_secondary: #909499; + --text_action_counter: #818c99; + --text_link: #4986cc; + --text_link_highlighted_background: #000000; + --text_muted: #2c2d2e; + --text_name: #4986cc; + --text_placeholder: #818c99; + --text_primary: #000000; + --text_secondary: #818c99; + --text_subhead: #6d7885; + --text_tertiary: #99a2ad; + --toolbar_attach_background_from: #b8c1cc; + --toolbar_attach_background_to: #a3adb8; + --vk_connect_button_primary_background: #19191a; + --vk_connect_button_primary_foreground: #ffffff; + --vk_connect_button_secondary_background: #f2f3f5; + --vk_connect_button_secondary_foreground: #19191a; + --writebar_icon: #3f8ae0; +} +/* stylelint-enable */ diff --git a/e2e/dist/index.html b/e2e/dist/index.html new file mode 100644 index 0000000000..44cae89322 --- /dev/null +++ b/e2e/dist/index.html @@ -0,0 +1,9 @@ + + + + + +
+ + + \ No newline at end of file diff --git a/e2e/dist/unstable.css b/e2e/dist/unstable.css new file mode 100644 index 0000000000..dc300c2c6f --- /dev/null +++ b/e2e/dist/unstable.css @@ -0,0 +1 @@ +.ChipsSelect{position:relative}.ChipsSelect .ChipsInput__container{padding-right:25px}.ChipsSelect__fetching,.ChipsSelect__empty{padding:12px 0}.ChipsSelect__empty{font-size:13px;text-align:center;color:var(--text_secondary)}.ChipsSelect__toggle{position:absolute;right:10px;top:12px;z-index:1;color:var(--icon_secondary)}.ChipsSelect--sizeY-compact .ChipsSelect__toggle{right:8px;top:10px}.ChipsSelect__options{width:100%;overflow:hidden;position:absolute;background-color:var(--modal_card_background);box-sizing:border-box;border:solid 1px var(--field_border);border-top:0;box-shadow:0 2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03);border-radius:0 0 8px 8px;max-height:160px;z-index:3}.ChipsSelect__options .CustomScrollView__box{max-height:160px}.ChipsSelect__options--popupDirectionTop{bottom:100%;border-radius:8px 8px 0 0;border-top:unset;border-bottom:0;box-shadow:0 -2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03)}.ChipsSelect--sizeY-compact .CustomSelectOption{height:36px;padding:10px 9px;font-size:15px} \ No newline at end of file diff --git a/e2e/dist/vkui.css b/e2e/dist/vkui.css new file mode 100644 index 0000000000..23ddd29efb --- /dev/null +++ b/e2e/dist/vkui.css @@ -0,0 +1 @@ +:root{--accent: #3f8ae0;--action_sheet_action_foreground: #3f8ae0;--action_sheet_separator: rgba(0, 0, 0, 0.12);--activity_indicator_tint: #aeb7c2;--attach_picker_tab_active_background: #4986cc;--attach_picker_tab_active_icon: #ffffff;--attach_picker_tab_active_text: #4986cc;--attach_picker_tab_inactive_background: #f2f3f5;--attach_picker_tab_inactive_icon: #818c99;--attach_picker_tab_inactive_text: #818c99;--background_content: #ffffff;--background_highlighted: rgba(0, 0, 0, 0.08);--background_hover: rgba(0, 0, 0, 0.04);--background_keyboard: #e1e3e6;--background_light: #f9f9f9;--background_page: #ebedf0;--background_suggestions: #ffffff;--background_text_highlighted: rgba(63, 138, 224, 0.20);--button_bot_shadow: #c4c8cc;--button_commerce_background: #4bb34b;--button_commerce_foreground: #ffffff;--button_muted_background: #f2f3f5;--button_muted_foreground: #3f8ae0;--button_outline_border: #3f8ae0;--button_outline_foreground: #3f8ae0;--button_primary_background: #4986cc;--button_primary_foreground: #ffffff;--button_secondary_background: rgba(0, 28, 61, 0.05);--button_secondary_background_highlighted: rgba(0, 28, 61, 0.03);--button_secondary_destructive_background: rgba(0, 28, 61, 0.05);--button_secondary_destructive_background_highlighted: rgba(0, 28, 61, 0.03);--button_secondary_destructive_foreground: #e64646;--button_secondary_destructive_foreground_highlighted: rgba(230, 70, 70, 0.60);--button_secondary_foreground: #3f8ae0;--button_secondary_foreground_highlighted: rgba(63, 138, 224, 0.60);--button_tertiary_background: rgba(0, 0, 0, 0.00);--button_tertiary_foreground: #4986cc;--cell_button_foreground: #3f8ae0;--content_placeholder_icon: #99a2ad;--content_placeholder_text: #818c99;--content_tint_background: #f5f5f5;--content_tint_foreground: #7f8285;--content_warning_background: #fff2d6;--control_background: #ebedf0;--control_foreground: #5181b8;--control_tint: #ffffff;--control_tint_muted: #76787a;--counter_primary_background: #3f8ae0;--counter_primary_text: #ffffff;--counter_prominent_background: #ff3347;--counter_prominent_text: #ffffff;--counter_secondary_background: #aeb7c2;--counter_secondary_text: #ffffff;--destructive: #e64646;--dynamic_blue: #3f8ae0;--dynamic_gray: #a3adb8;--dynamic_green: #4bb34b;--dynamic_orange: #ffa000;--dynamic_purple: #735ce6;--dynamic_red: #ff3347;--dynamic_violet: #792ec0;--feed_recommended_friend_promo_background: #528bcc;--field_background: #f2f3f5;--field_border: rgba(0, 0, 0, 0.12);--field_error_background: #faebeb;--field_error_border: #e64646;--field_text_placeholder: #818c99;--field_valid_border: #4bb34b;--float_button_background: #f5f5f5;--float_button_background_highlighted: #ebedf0;--float_button_border: rgba(0, 0, 0, 0.05);--float_button_foreground: #99a2ad;--header_alternate_background: #ffffff;--header_alternate_tab_active_indicator: #3f8ae0;--header_alternate_tab_active_text: #000000;--header_alternate_tab_inactive_text: #99a2ad;--header_background: #ffffff;--header_background_before_blur: #ffffff;--header_background_before_blur_alternate: #ffffff;--header_search_field_background: #ebedf0;--header_search_field_tint: #818c99;--header_tab_active_background: rgba(0, 0, 0, 0.00);--header_tab_active_indicator: #3f8ae0;--header_tab_active_text: #000000;--header_tab_inactive_text: #99a2ad;--header_text: #000000;--header_text_alternate: #000000;--header_text_secondary: #818c99;--header_tint: #3f8ae0;--header_tint_alternate: #3f8ae0;--icon_alpha_placeholder: #ffffff;--icon_medium: #818c99;--icon_medium_alpha: rgba(0, 0, 0, 0.48);--icon_name: #74a2d6;--icon_outline_medium: #818c99;--icon_outline_secondary: #99a2ad;--icon_secondary: #99a2ad;--icon_secondary_alpha: rgba(0, 0, 0, 0.36);--icon_tertiary: #b8c1cc;--icon_tertiary_alpha: rgba(0, 0, 0, 0.24);--im_attach_tint: #4986cc;--im_bubble_border_alternate: #e1e3e6;--im_bubble_border_alternate_highlighted: #d7d8d9;--im_bubble_button_background: #f9f9f9;--im_bubble_button_background_highlighted: #d7d8d9;--im_bubble_button_foreground: #000000;--im_bubble_button_outgoing_background: rgba(255, 255, 255, 0.60);--im_bubble_gift_background: #f4e7c3;--im_bubble_gift_background_highlighted: #e3d3ac;--im_bubble_gift_text: #857250;--im_bubble_gift_text_secondary: #ab9871;--im_bubble_incoming: #ebedf0;--im_bubble_incoming_alternate: #ffffff;--im_bubble_incoming_alternate_highlighted: #f9f9f9;--im_bubble_incoming_expiring: #e6e9ff;--im_bubble_incoming_expiring_highlighted: #ccd3ff;--im_bubble_incoming_highlighted: #d7d8d9;--im_bubble_outgoing: #cce4ff;--im_bubble_outgoing_alternate: #ffffff;--im_bubble_outgoing_alternate_highlighted: #f9f9f9;--im_bubble_outgoing_expiring: #ccd3ff;--im_bubble_outgoing_expiring_highlighted: #adb8ff;--im_bubble_outgoing_highlighted: #add3ff;--im_bubble_wallpaper_button_background: #f2f3f5;--im_bubble_wallpaper_button_background_highlighted: #e1e3e6;--im_bubble_wallpaper_button_foreground: #000000;--im_bubble_wallpaper_incoming: #ffffff;--im_bubble_wallpaper_incoming_highlighted: #ebedf0;--im_bubble_wallpaper_outgoing: #cce4ff;--im_bubble_wallpaper_outgoing_highlighted: #add3ff;--im_forward_line_tint: #45678f;--im_reply_separator: #4986cc;--im_service_message_text: #818c99;--im_text_name: #4986cc;--im_toolbar_separator: #001c3d;--im_toolbar_voice_msg_background: #99a2ad;--image_border: rgba(0, 0, 0, 0.08);--input_background: #f2f3f5;--input_border: #e1e3e6;--landing_background: #ffffff;--landing_field_background: #f2f3f5;--landing_field_border: rgba(0, 0, 0, 0.00);--landing_field_placeholder: #818c99;--landing_login_button_background: #4986cc;--landing_login_button_foreground: #ffffff;--landing_primary_button_background: #4986cc;--landing_primary_button_foreground: #ffffff;--landing_secondary_button_background: rgba(0, 57, 115, 0.10);--landing_secondary_button_foreground: #3f8ae0;--landing_snippet_border: rgba(0, 0, 0, 0.15);--landing_tertiary_button_background: rgba(0, 0, 0, 0.00);--landing_tertiary_button_foreground: #4986cc;--landing_text_primary: #000000;--landing_text_secondary: #818c99;--landing_text_title: #4986cc;--like_text_tint: #ff3347;--link_alternate: #4986cc;--loader_background: #ebedf0;--loader_tint: #76787a;--loader_track_fill: #e1e3e6;--loader_track_value_fill: #528bcc;--media_overlay_button_background: #ffffff;--media_overlay_button_foreground: #2c2d2e;--modal_card_background: #ffffff;--modal_card_border: rgba(0, 0, 0, 0.00);--modal_card_header_close: #000000;--music_playback_icon: #000000;--overlay_status_background: #ebedf0;--overlay_status_foreground: #6d7885;--overlay_status_icon: #818c99;--panel_tab_active_background: #ebedf0;--panel_tab_active_text: #5d5f61;--panel_tab_inactive_text: #76787a;--placeholder_icon_background: rgba(0, 28, 61, 0.08);--placeholder_icon_background_opaque: #ebedf0;--placeholder_icon_foreground_primary: #99a2ad;--placeholder_icon_foreground_secondary: #aeb7c2;--placeholder_icon_tint: #001c3d;--poll_option_background: #45678f;--search_bar_background: #ffffff;--search_bar_field_background: #ebedf0;--search_bar_field_tint: #818c99;--search_bar_segmented_control_tint: #818c99;--segmented_control_bar_background: rgba(0, 0, 0, 0.00);--segmented_control_tint: #99a2ad;--selection_off_icon: #b8c1cc;--separator_alpha: rgba(0, 0, 0, 0.12);--separator_alternate: #e1e3e6;--separator_common: #d7d8d9;--skeleton_shimmer_from: #ffffff;--skeleton_shimmer_to: #ffffff;--snippet_background: #ffffff;--snippet_border: rgba(0, 0, 0, 0.15);--snippet_icon_tertiary: #c4c8cc;--splashscreen_icon: #e1e3e6;--statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.20);--stories_create_button_background_from: #f2f3f5;--stories_create_button_background_to: #e1e3e6;--stories_create_button_foreground: #6d7885;--stories_create_button_icon_background: #ffffff;--stories_skeleton_loader_background: #c4c8cc;--switch_ios_off_border: #e1e3e6;--tabbar_active_icon: #2975cc;--tabbar_background: #f9f9f9;--tabbar_inactive_icon: #99a2ad;--tabbar_tablet_active_icon: #2975cc;--tabbar_tablet_background: #f9f9f9;--tabbar_tablet_inactive_icon: #99a2ad;--tabbar_tablet_text_primary: #000000;--tabbar_tablet_text_secondary: #909499;--text_action_counter: #818c99;--text_link: #4986cc;--text_link_highlighted_background: #000000;--text_muted: #2c2d2e;--text_name: #4986cc;--text_placeholder: #818c99;--text_primary: #000000;--text_secondary: #818c99;--text_subhead: #6d7885;--text_tertiary: #99a2ad;--toolbar_attach_background_from: #b8c1cc;--toolbar_attach_background_to: #a3adb8;--vk_connect_button_primary_background: #19191a;--vk_connect_button_primary_foreground: #ffffff;--vk_connect_button_secondary_background: #f2f3f5;--vk_connect_button_secondary_foreground: #19191a;--writebar_icon: #3f8ae0}body[scheme=space_gray]{--accent: #71aaeb;--action_sheet_action_foreground: #ffffff;--action_sheet_separator: rgba(255, 255, 255, 0.12);--activity_indicator_tint: #5d5f61;--attach_picker_tab_active_background: #e1e3e6;--attach_picker_tab_active_icon: #19191a;--attach_picker_tab_active_text: #e1e3e6;--attach_picker_tab_inactive_background: #2c2d2e;--attach_picker_tab_inactive_icon: #e1e3e6;--attach_picker_tab_inactive_text: #76787a;--background_content: #19191a;--background_highlighted: rgba(255, 255, 255, 0.08);--background_hover: rgba(255, 255, 255, 0.04);--background_keyboard: #2c2d2e;--background_light: #232324;--background_page: #0a0a0a;--background_suggestions: #2c2d2e;--background_text_highlighted: rgba(113, 170, 235, 0.24);--button_bot_shadow: #19191a;--button_commerce_background: #4bb34b;--button_commerce_foreground: #ffffff;--button_muted_background: #2c2d2e;--button_muted_foreground: #e1e3e6;--button_outline_border: #e1e3e6;--button_outline_foreground: #e1e3e6;--button_primary_background: #e1e3e6;--button_primary_foreground: #19191a;--button_secondary_background: #454647;--button_secondary_background_highlighted: rgba(69, 70, 71, 0.60);--button_secondary_destructive_background: #454647;--button_secondary_destructive_background_highlighted: rgba(69, 70, 71, 0.60);--button_secondary_destructive_foreground: #ff5c5c;--button_secondary_destructive_foreground_highlighted: rgba(255, 92, 92, 0.60);--button_secondary_foreground: #e1e3e6;--button_secondary_foreground_highlighted: rgba(225, 227, 230, 0.60);--button_tertiary_background: rgba(0, 0, 0, 0.00);--button_tertiary_foreground: #e1e3e6;--cell_button_foreground: #e1e3e6;--content_placeholder_icon: #aaaeb3;--content_placeholder_text: #aaaeb3;--content_tint_background: #232324;--content_tint_foreground: #909499;--content_warning_background: #857250;--control_background: #454647;--control_foreground: #e1e3e6;--control_tint: #19191a;--control_tint_muted: #909499;--counter_primary_background: #ffffff;--counter_primary_text: #19191a;--counter_prominent_background: #ff3347;--counter_prominent_text: #ffffff;--counter_secondary_background: #76787a;--counter_secondary_text: #19191a;--destructive: #ff5c5c;--dynamic_blue: #3f8ae0;--dynamic_gray: #a3adb8;--dynamic_green: #4bb34b;--dynamic_orange: #ffa000;--dynamic_purple: #937ff5;--dynamic_red: #ff3347;--dynamic_violet: #a393f5;--feed_recommended_friend_promo_background: #6d7885;--field_background: #232324;--field_border: rgba(255, 255, 255, 0.12);--field_error_background: #522e2e;--field_error_border: #ff5c5c;--field_text_placeholder: #76787a;--field_valid_border: #4bb34b;--float_button_background: #454647;--float_button_background_highlighted: #5d5f61;--float_button_border: rgba(0, 0, 0, 0.12);--float_button_foreground: #aaaeb3;--header_alternate_background: #2c2d2e;--header_alternate_tab_active_indicator: #e1e3e6;--header_alternate_tab_active_text: #e1e3e6;--header_alternate_tab_inactive_text: #76787a;--header_background: #19191a;--header_background_before_blur: #070708;--header_background_before_blur_alternate: #070708;--header_search_field_background: #363738;--header_search_field_tint: #aaaeb3;--header_tab_active_background: #5d5f61;--header_tab_active_indicator: #71aaeb;--header_tab_active_text: #e1e3e6;--header_tab_inactive_text: #76787a;--header_text: #e1e3e6;--header_text_alternate: #e1e3e6;--header_text_secondary: rgba(255, 255, 255, 0.60);--header_tint: #e1e3e6;--header_tint_alternate: #e1e3e6;--icon_alpha_placeholder: #e1e3e6;--icon_medium: #909499;--icon_medium_alpha: rgba(255, 255, 255, 0.48);--icon_name: #aaaeb3;--icon_outline_medium: #aaaeb3;--icon_outline_secondary: #909499;--icon_secondary: #76787a;--icon_secondary_alpha: rgba(255, 255, 255, 0.36);--icon_tertiary: #5d5f61;--icon_tertiary_alpha: rgba(255, 255, 255, 0.24);--im_attach_tint: #ffffff;--im_bubble_border_alternate: rgba(0, 0, 0, 0.00);--im_bubble_border_alternate_highlighted: rgba(0, 0, 0, 0.00);--im_bubble_button_background: rgba(255, 255, 255, 0.16);--im_bubble_button_background_highlighted: rgba(255, 255, 255, 0.24);--im_bubble_button_foreground: #e1e3e6;--im_bubble_button_outgoing_background: #5d5f61;--im_bubble_gift_background: #857250;--im_bubble_gift_background_highlighted: #ab9871;--im_bubble_gift_text: #ffffff;--im_bubble_gift_text_secondary: #e3d3ac;--im_bubble_incoming: #2c2d2e;--im_bubble_incoming_alternate: #2c2d2e;--im_bubble_incoming_alternate_highlighted: #5d5f61;--im_bubble_incoming_expiring: #262b4d;--im_bubble_incoming_expiring_highlighted: #404980;--im_bubble_incoming_highlighted: #5d5f61;--im_bubble_outgoing: #454647;--im_bubble_outgoing_alternate: #454647;--im_bubble_outgoing_alternate_highlighted: #76787a;--im_bubble_outgoing_expiring: #404980;--im_bubble_outgoing_expiring_highlighted: #5965b3;--im_bubble_outgoing_highlighted: #5d5f61;--im_bubble_wallpaper_button_background: #454647;--im_bubble_wallpaper_button_background_highlighted: #76787a;--im_bubble_wallpaper_button_foreground: #e1e3e6;--im_bubble_wallpaper_incoming: #2c2d2e;--im_bubble_wallpaper_incoming_highlighted: #5d5f61;--im_bubble_wallpaper_outgoing: #454647;--im_bubble_wallpaper_outgoing_highlighted: #5d5f61;--im_forward_line_tint: #ffffff;--im_reply_separator: #ffffff;--im_service_message_text: #76787a;--im_text_name: #71aaeb;--im_toolbar_separator: #aaaeb3;--im_toolbar_voice_msg_background: #454647;--image_border: rgba(255, 255, 255, 0.08);--input_background: #2c2d2e;--input_border: #2c2d2e;--landing_background: #19191a;--landing_field_background: #232324;--landing_field_border: rgba(0, 0, 0, 0.00);--landing_field_placeholder: #aaaeb3;--landing_login_button_background: #e1e3e6;--landing_login_button_foreground: #19191a;--landing_primary_button_background: #e1e3e6;--landing_primary_button_foreground: #19191a;--landing_secondary_button_background: rgba(255, 255, 255, 0.15);--landing_secondary_button_foreground: #ffffff;--landing_snippet_border: rgba(255, 255, 255, 0.15);--landing_tertiary_button_background: rgba(0, 0, 0, 0.00);--landing_tertiary_button_foreground: #ffffff;--landing_text_primary: #e1e3e6;--landing_text_secondary: #76787a;--landing_text_title: #ffffff;--like_text_tint: #ff5c5c;--link_alternate: #ffffff;--loader_background: #19191a;--loader_tint: #76787a;--loader_track_fill: #454647;--loader_track_value_fill: #ffffff;--media_overlay_button_background: #ffffff;--media_overlay_button_foreground: #2c2d2e;--modal_card_background: #2c2d2e;--modal_card_border: rgba(255, 255, 255, 0.12);--modal_card_header_close: #ffffff;--music_playback_icon: #ffffff;--overlay_status_background: #19191a;--overlay_status_foreground: #e1e3e6;--overlay_status_icon: #ebedf0;--panel_tab_active_background: #454647;--panel_tab_active_text: #e1e3e6;--panel_tab_inactive_text: #76787a;--placeholder_icon_background: rgba(255, 255, 255, 0.08);--placeholder_icon_background_opaque: #232324;--placeholder_icon_foreground_primary: #909499;--placeholder_icon_foreground_secondary: #5d5f61;--placeholder_icon_tint: #ffffff;--poll_option_background: #ffffff;--search_bar_background: #19191a;--search_bar_field_background: #363738;--search_bar_field_tint: #aaaeb3;--search_bar_segmented_control_tint: #909499;--segmented_control_bar_background: #19191a;--segmented_control_tint: #76787a;--selection_off_icon: #5d5f61;--separator_alpha: rgba(255, 255, 255, 0.12);--separator_alternate: #232324;--separator_common: #363738;--skeleton_shimmer_from: #19191a;--skeleton_shimmer_to: #19191a;--snippet_background: #232324;--snippet_border: rgba(255, 255, 255, 0.15);--snippet_icon_tertiary: #5d5f61;--splashscreen_icon: #2c2d2e;--statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.00);--stories_create_button_background_from: #363738;--stories_create_button_background_to: #363738;--stories_create_button_foreground: #c4c8cc;--stories_create_button_icon_background: #454647;--stories_skeleton_loader_background: #454647;--switch_ios_off_border: #2c2d2e;--tabbar_active_icon: #ffffff;--tabbar_background: #2c2d2e;--tabbar_inactive_icon: #76787a;--tabbar_tablet_active_icon: #71aaeb;--tabbar_tablet_background: #232324;--tabbar_tablet_inactive_icon: #76787a;--tabbar_tablet_text_primary: #e1e3e6;--tabbar_tablet_text_secondary: #76787a;--text_action_counter: #aaaeb3;--text_link: #71aaeb;--text_link_highlighted_background: #71aaeb;--text_muted: #c4c8cc;--text_name: #e1e3e6;--text_placeholder: #aaaeb3;--text_primary: #e1e3e6;--text_secondary: #76787a;--text_subhead: #909499;--text_tertiary: #5d5f61;--toolbar_attach_background_from: #76787a;--toolbar_attach_background_to: #5d5f61;--vk_connect_button_primary_background: #e1e3e6;--vk_connect_button_primary_foreground: #19191a;--vk_connect_button_secondary_background: #454647;--vk_connect_button_secondary_foreground: #e1e3e6;--writebar_icon: #e1e3e6}body[scheme=vkcom]{--accent: #5181b8;--action_sheet_action_foreground: #5181b8;--action_sheet_separator: rgba(0, 0, 0, 0.12);--activity_indicator_tint: #aeb7c2;--attach_picker_tab_active_background: #5181b8;--attach_picker_tab_active_icon: #ffffff;--attach_picker_tab_active_text: #5181b8;--attach_picker_tab_inactive_background: #f5f5f5;--attach_picker_tab_inactive_icon: #818c99;--attach_picker_tab_inactive_text: #818c99;--background_content: #ffffff;--background_highlighted: rgba(0, 0, 0, 0.08);--background_hover: rgba(0, 0, 0, 0.04);--background_keyboard: #dce1e6;--background_light: #f0f2f5;--background_page: #edeef0;--background_suggestions: #ffffff;--background_text_highlighted: rgba(81, 129, 184, 0.20);--button_bot_shadow: #cccccc;--button_commerce_background: #4bb34b;--button_commerce_foreground: #ffffff;--button_muted_background: #e5ebf1;--button_muted_foreground: #55677d;--button_outline_border: #2a5885;--button_outline_foreground: #2a5885;--button_primary_background: #5181b8;--button_primary_foreground: #ffffff;--button_secondary_background: #e5ebf1;--button_secondary_background_highlighted: rgba(229, 235, 241, 0.72);--button_secondary_destructive_background: rgba(230, 70, 70, 0.16);--button_secondary_destructive_background_highlighted: rgba(230, 70, 70, 0.12);--button_secondary_destructive_foreground: #e64646;--button_secondary_destructive_foreground_highlighted: rgba(230, 70, 70, 0.12);--button_secondary_foreground: #55677d;--button_secondary_foreground_highlighted: rgba(85, 103, 125, 0.64);--button_tertiary_background: rgba(0, 0, 0, 0.00);--button_tertiary_foreground: #2a5885;--cell_button_foreground: #2a5885;--content_placeholder_icon: #99a2ad;--content_placeholder_text: #818c99;--content_tint_background: #f7f8fa;--content_tint_foreground: #828282;--control_background: #edeef0;--control_foreground: #5181b8;--control_tint: #ffffff;--control_tint_muted: #828282;--counter_primary_background: #5181b8;--counter_primary_text: #ffffff;--counter_prominent_background: #ff3347;--counter_prominent_text: #ffffff;--counter_secondary_background: #aeb7c2;--counter_secondary_text: #ffffff;--destructive: #e64646;--dynamic_blue: #5181b8;--dynamic_gray: #aeb7c2;--dynamic_green: #4bb34b;--dynamic_orange: #ffa000;--dynamic_purple: #735ce6;--dynamic_red: #ff3347;--dynamic_violet: #792ec0;--feed_recommended_friend_promo_background: #5181b8;--field_background: #f7f8fa;--field_border: rgba(0, 0, 0, 0.12);--field_error_background: #ffd6cc;--field_error_border: #e64646;--field_text_placeholder: #818c99;--field_valid_border: #4bb34b;--float_button_background: #f7f8fa;--float_button_background_highlighted: #edeef0;--float_button_border: rgba(0, 0, 0, 0.08);--float_button_foreground: #99a2ad;--header_alternate_background: #ffffff;--header_alternate_tab_active_indicator: #5181b8;--header_alternate_tab_active_text: #000000;--header_alternate_tab_inactive_text: #99a2ad;--header_background: #ffffff;--header_background_before_blur: #ffffff;--header_background_before_blur_alternate: #ffffff;--header_search_field_background: #edeef0;--header_search_field_tint: #818c99;--header_tab_active_background: rgba(0, 0, 0, 0.00);--header_tab_active_indicator: #5181b8;--header_tab_active_text: #000000;--header_tab_inactive_text: #99a2ad;--header_text: #000000;--header_text_alternate: #000000;--header_text_secondary: #818c99;--header_tint: #aeb7c2;--header_tint_alternate: #aeb7c2;--icon_alpha_placeholder: #ffffff;--icon_medium: #818c99;--icon_medium_alpha: rgba(0, 0, 0, 0.48);--icon_name: #8fadc8;--icon_outline_medium: #818c99;--icon_outline_secondary: #99a2ad;--icon_secondary: #99a2ad;--icon_secondary_alpha: rgba(0, 0, 0, 0.36);--icon_tertiary: #aeb7c2;--icon_tertiary_alpha: rgba(0, 0, 0, 0.24);--im_attach_tint: #5181b8;--im_bubble_border_alternate: #dce1e6;--im_bubble_border_alternate_highlighted: #cccccc;--im_bubble_button_background: #f7f8fa;--im_bubble_button_background_highlighted: #cccccc;--im_bubble_button_foreground: #000000;--im_bubble_button_outgoing_background: rgba(255, 255, 255, 0.72);--im_bubble_gift_background: #f4e7c3;--im_bubble_gift_background_highlighted: #e3d3ac;--im_bubble_gift_text: #857250;--im_bubble_gift_text_secondary: #ab9871;--im_bubble_incoming: #edeef0;--im_bubble_incoming_alternate: #ffffff;--im_bubble_incoming_alternate_highlighted: #f7f8fa;--im_bubble_incoming_expiring: #e6e9ff;--im_bubble_incoming_expiring_highlighted: #ccd3ff;--im_bubble_incoming_highlighted: #aeb7c2;--im_bubble_outgoing: #cce4ff;--im_bubble_outgoing_alternate: #ffffff;--im_bubble_outgoing_alternate_highlighted: #f0f2f5;--im_bubble_outgoing_expiring: #ccd3ff;--im_bubble_outgoing_expiring_highlighted: #adb8ff;--im_bubble_outgoing_highlighted: #add3ff;--im_bubble_wallpaper_button_background: #f0f2f5;--im_bubble_wallpaper_button_background_highlighted: #e7e8ec;--im_bubble_wallpaper_button_foreground: #000000;--im_bubble_wallpaper_incoming: #ffffff;--im_bubble_wallpaper_incoming_highlighted: #edeef0;--im_bubble_wallpaper_outgoing: #cce4ff;--im_bubble_wallpaper_outgoing_highlighted: #add3ff;--im_forward_line_tint: #2a5885;--im_reply_separator: #2a5885;--im_service_message_text: #818c99;--im_text_name: #2a5885;--im_toolbar_separator: #001c3d;--im_toolbar_voice_msg_background: #99a2ad;--image_border: rgba(0, 0, 0, 0.08);--input_background: #f5f5f5;--input_border: #dce1e6;--landing_background: #ffffff;--landing_field_background: #f7f8fa;--landing_field_border: rgba(0, 0, 0, 0.00);--landing_field_placeholder: #818c99;--landing_login_button_background: #5181b8;--landing_login_button_foreground: #ffffff;--landing_primary_button_background: #5181b8;--landing_primary_button_foreground: #ffffff;--landing_secondary_button_background: rgba(0, 57, 115, 0.10);--landing_secondary_button_foreground: #5181b8;--landing_snippet_border: rgba(0, 0, 0, 0.12);--landing_tertiary_button_background: rgba(0, 0, 0, 0.00);--landing_tertiary_button_foreground: #5181b8;--landing_text_primary: #000000;--landing_text_secondary: #818c99;--landing_text_title: #5181b8;--like_text_tint: #ff3347;--link_alternate: #2a5885;--loader_background: #edeef0;--loader_tint: #99a2ad;--loader_track_fill: #e7e8ec;--loader_track_value_fill: #5181b8;--media_overlay_button_background: #ffffff;--media_overlay_button_foreground: #333333;--modal_card_background: #ffffff;--modal_card_border: rgba(0, 0, 0, 0.00);--modal_card_header_close: #000000;--music_playback_icon: #000000;--overlay_status_background: #edeef0;--overlay_status_foreground: #6f7985;--overlay_status_icon: #818c99;--panel_tab_active_background: #edeef0;--panel_tab_active_text: #4e5966;--panel_tab_inactive_text: #6f7985;--placeholder_icon_background: rgba(0, 28, 61, 0.08);--placeholder_icon_background_opaque: #edeef0;--placeholder_icon_foreground_primary: #99a2ad;--placeholder_icon_foreground_secondary: #aeb7c2;--placeholder_icon_tint: #1d3a5c;--poll_option_background: #5181b8;--search_bar_background: rgba(0, 0, 0, 0.00);--search_bar_field_background: #edeef0;--search_bar_field_tint: #818c99;--search_bar_segmented_control_tint: #818c99;--segmented_control_bar_background: rgba(0, 0, 0, 0.00);--segmented_control_tint: #99a2ad;--selection_off_icon: #c5d0db;--separator_alpha: rgba(0, 0, 0, 0.12);--separator_alternate: #e7e8ec;--separator_common: #dce1e6;--skeleton_shimmer_from: #ffffff;--skeleton_shimmer_to: rgba(255, 255, 255, 0.00);--snippet_background: #ffffff;--snippet_border: rgba(0, 0, 0, 0.12);--snippet_icon_tertiary: #aeb7c2;--splashscreen_icon: #dce1e6;--statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.24);--stories_create_button_background_from: #f0f2f5;--stories_create_button_background_to: #dce1e6;--stories_create_button_foreground: #6f7985;--stories_create_button_icon_background: #ffffff;--stories_skeleton_loader_background: #cccccc;--switch_ios_off_border: #dce1e6;--tabbar_active_icon: #5181b8;--tabbar_background: #f7f8fa;--tabbar_inactive_icon: #99a2ad;--tabbar_tablet_active_icon: #5181b8;--tabbar_tablet_background: #f7f8fa;--tabbar_tablet_inactive_icon: #99a2ad;--tabbar_tablet_text_primary: #000000;--tabbar_tablet_text_secondary: #818c99;--text_action_counter: #818c99;--text_link: #5181b8;--text_link_hightlighted_background: #000000;--text_muted: #333333;--text_name: #2a5885;--text_placeholder: #818c99;--text_primary: #000000;--text_secondary: #818c99;--text_subhead: #6f7985;--text_tertiary: #99a2ad;--toolbar_attach_background_from: #dce1e6;--toolbar_attach_background_to: #aeb7c2;--vk_connect_button_primary_background: #222222;--vk_connect_button_primary_foreground: #ffffff;--vk_connect_button_secondary_background: #f5f5f5;--vk_connect_button_secondary_foreground: #222222;--writebar_icon: #818c99}:root{--font-common: -apple-system, system-ui, Helvetica Neue, Roboto, sans-serif;--font-tt: "TT Commons", -apple-system, system-ui, Helvetica Neue, Roboto, sans-serif;--ios-easing: cubic-bezier(.36, .66, .04, 1);--android-easing: cubic-bezier(.4, 0, .2, 1);--tabbar_height: 48px;--panelheader_height_ios: 52px;--panelheader_height_android: 56px;--panelheader_height_vkcom: 48px;--modalheader_height_ios: 52px;--modalheader_height_android: 56px;--search_default_height: 36px;--thin-border: 1px;--white: #fff;--safe-area-inset-top: 20px;--safe-area-inset-right: 0px;--safe-area-inset-bottom: 0px;--safe-area-inset-left: 0px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){:root{--thin-border: .5px}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){:root{--thin-border: .33px}}@supports (padding-top:constant(safe-area-inset-top)){:root{--safe-area-inset-top: constant(safe-area-inset-top);--safe-area-inset-right: constant(safe-area-inset-right);--safe-area-inset-bottom: constant(safe-area-inset-bottom);--safe-area-inset-left: constant(safe-area-inset-left)}}@supports (padding-top:env(safe-area-inset-top)){:root{--safe-area-inset-top: env(safe-area-inset-top);--safe-area-inset-right: env(safe-area-inset-right);--safe-area-inset-bottom: env(safe-area-inset-bottom);--safe-area-inset-left: env(safe-area-inset-left)}}@-webkit-keyframes animation-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes animation-fadeIn{0%{opacity:0}to{opacity:1}}.Title{margin:0}.Title--l-1{font-size:24px;line-height:28px}.Title--l-2{font-size:20px;line-height:24px}.Title--l-3{font-size:17px;line-height:22px}.Title--w-regular{font-weight:400}.Title--w-medium{font-weight:500}.Title--w-semibold{font-weight:600}.Title--w-bold{font-weight:700}.Title--w-heavy{font-weight:800}.Headline{margin:0;font-size:16px;line-height:20px}.Headline--w-regular{font-weight:400}.Headline--w-medium{font-weight:500}.Headline--w-semibold{font-weight:600}.Subhead{margin:0;font-size:14px;line-height:18px}.Subhead--w-regular{font-weight:400}.Subhead--w-medium{font-weight:500}.Subhead--w-semibold{font-weight:600}.Subhead--w-bold{font-weight:600}.Caption--caps{text-transform:uppercase}.Caption--l-1{font-size:13px;line-height:16px}.Caption--l-2{font-size:12px;line-height:14px}.Caption--l-3{font-size:11px;line-height:14px}.Caption--l-4{font-size:9px;line-height:12px}.Caption--w-regular{font-weight:400}.Caption--w-medium{font-weight:500}.Caption--w-semibold{font-weight:600}.Caption--w-bold{font-weight:700}.Caption--w-heavy{font-weight:800}.Text{font-size:15px;line-height:20px}.Text--w-regular{font-weight:400}.Text--w-medium{font-weight:500}.Text--w-semibold{font-weight:600}.Tappable:not([disabled]){cursor:pointer}.Tappable--ios{position:relative;border-radius:10px;transition:background-color .15s ease-out}.Tappable--ios.Tappable--active:not([disabled]):not(.TabsItem):not(.PanelHeaderButton):not(.IconButton):not(.Button):not(.Link):not(.SliderSwitch__button):not(.PanelHeaderContent__in):not(.ActionSheetItem):not(.Banner__in):not(.ModalDismissButton){background:rgba(0,0,0,.08)!important;background:var(--background_highlighted)!important;transition:none}.Tappable--android{position:relative;transition:background-color .15s ease-out;border-radius:8px}.Tappable--android.Tappable--active:not([disabled]):not(.TabsItem):not(.PanelHeaderButton):not(.IconButton):not(.Button):not(.Link):not(.SliderSwitch__button):not(.PanelHeaderContent__in):not(.ModalDismissButton){background:rgba(0,0,0,.08)!important;background:var(--background_highlighted)!important}.Tappable--vkcom{position:relative;transition:background-color .15s ease-out;border-radius:8px}.Tappable--vkcom.Tappable--active:not([disabled]):not(.TabsItem):not(.PanelHeaderButton):not(.IconButton):not(.Button):not(.Link):not(.SliderSwitch__button):not(.PanelHeaderContent__in):not(.ModalDismissButton){background:rgba(0,0,0,.08)!important;background:var(--background_highlighted)!important}.Tappable--android .Tappable__waves{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;border-radius:inherit;will-change:transform}.Tappable--android .Tappable__wave{position:absolute;top:0;left:0;width:24px;height:24px;margin:-12px 0 0 -12px;opacity:0;content:'';border-radius:50%;background:rgba(127,127,127,.1);-webkit-animation:animation-wave .3s cubic-bezier(.4,0,.2,1);animation:animation-wave .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-wave .3s var(--android-easing);animation:animation-wave .3s var(--android-easing)}.Tappable__hoverShadow{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;border-radius:inherit}.Tappable:not(.SliderSwitch__button):not(.ModalDismissButton):not(.Link).Tappable--shadowHovered>.Tappable__hoverShadow{background:rgba(0,0,0,.04);background:var(--background_hover)}.Tappable--opacityHovered{opacity:.8}.Tappable--sizeX-compact{border-radius:0}.Tappable--mouse{transition:opacity .15s ease-out}.Tappable--mouse .Tappable__hoverShadow{transition:background-color .15s ease-out}@-webkit-keyframes animation-wave{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}30%{opacity:1}to{-webkit-transform:scale(8);transform:scale(8);opacity:0}}@keyframes animation-wave{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}30%{opacity:1}to{-webkit-transform:scale(8);transform:scale(8);opacity:0}}.FixedLayout{position:fixed;box-sizing:border-box;left:auto;z-index:3;padding-left:0;padding-left:var(--safe-area-inset-left);padding-right:0;padding-right:var(--safe-area-inset-right)}.FixedLayout--filled{background:#fff;background:var(--background_content)}.FixedLayout--top{width:100%;top:0}.FixedLayout--bottom{width:100%;bottom:0;padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.Epic .FixedLayout--bottom{padding-bottom:calc(48px + 0px);padding-bottom:calc(var(--tabbar_height) + var(--safe-area-inset-bottom))}.Button{display:inline-block;box-sizing:border-box;outline:0;text-decoration:none;border:1px solid transparent;margin:0;padding:0;-webkit-user-select:none;user-select:none}.Button__in{display:flex;align-items:center}.Button__before:not(:last-child){margin-left:-4px}.Button.Tappable--active{opacity:.6}.Button[disabled]{opacity:.4}.Button--aln-left .Button__in{justify-content:flex-start;text-align:left}.Button--aln-center .Button__in{justify-content:center;text-align:center}.Button--aln-right .Button__in{justify-content:flex-end;text-align:right}.Button--str{display:block;width:100%;flex-grow:1;flex-basis:0}.Button--str .Button__in{justify-content:center}.Button--lvl-primary{background-color:#4986cc;background-color:var(--button_primary_background);color:#fff;color:var(--button_primary_foreground)}.Button--lvl-secondary{background-color:rgba(0,28,61,.05);background-color:var(--button_secondary_background);color:#3f8ae0;color:var(--button_secondary_foreground)}.Button--lvl-tertiary{background-color:transparent;background-color:var(--button_tertiary_background);color:#4986cc;color:var(--button_tertiary_foreground)}.Button--lvl-commerce{background-color:#4bb34b;background-color:var(--button_commerce_background);color:#fff;color:var(--button_commerce_foreground)}.Button--lvl-outline{background-color:transparent;border:1px solid #3f8ae0;border:1px solid var(--button_outline_border);color:#3f8ae0;color:var(--button_outline_foreground)}.Button--lvl-destructive{background-color:#e64646;background-color:var(--destructive);color:#fff}.Button--lvl-overlay_primary{background-color:#fff;background-color:var(--media_overlay_button_background);color:#2c2d2e;color:var(--media_overlay_button_foreground)}.Button--lvl-overlay_secondary{background-color:rgba(255,255,255,.2);color:#fff}.Button--lvl-overlay_outline{background-color:transparent;border:1px solid #fff;color:#fff}.Button--sz-s{min-height:30px;padding:0 15px}.Button--sz-s .Button__before:not(:last-child){margin-right:6px}.Button--sz-s .Button__after:not(:first-child){margin-left:6px}.Button--sz-s .Button__content{padding:4px 0 6px}.Button--sz-s .Button__content--caps{padding:7px 0}.Button--sz-m{padding:0 15px;min-height:36px}.Button--sz-m .Button__before:not(:last-child){margin-right:6px}.Button--sz-m .Button__after:not(:first-child){margin-left:6px}.Button--sz-m .Button__content{padding:6px 0 8px}.Button--sz-l{padding:0 19px;min-height:44px}.Button--sz-l .Button__before:not(:last-child){margin-right:8px}.Button--sz-l .Button__after:not(:first-child){margin-left:8px}.Button--sz-l .Button__in{justify-content:center}.Button--ios{border-radius:10px}.Button--ios.Button--sz-l .Button__content{padding:9px 0 11px}.Button--android{border-radius:8px}.Button--android.Button--sz-l .Button__content{padding:10px 0 12px}.Button--vkcom{border-radius:4px}.Button--sizeY-compact.Button--sz-s{min-height:26px}.Button--sizeY-compact.Button--sz-s .Button__content{padding-top:3px;padding-bottom:5px}.Button--sizeY-compact.Button--sz-s .Button__content--caps{padding:5px 0}.Button--sizeY-compact.Button--sz-m{min-height:32px}.Button--sizeY-compact.Button--sz-m .Button__content{padding-top:4px;padding-bottom:6px}.Button--sizeY-compact.Button--sz-l{min-height:36px}.Button--sizeY-compact.Button--sz-l .Button__content{padding-top:6px;padding-bottom:8px}.Button--lvl-primary .Counter{background-color:#fff;background-color:var(--button_primary_foreground);color:#4986cc;color:var(--button_primary_background)}.Button--lvl-secondary .Counter{background-color:#3f8ae0;background-color:var(--button_secondary_foreground);color:#fff;color:var(--background_content)}.Button--lvl-tertiary .Counter{background-color:#4986cc;background-color:var(--button_tertiary_foreground);color:#fff;color:var(--background_content)}.Button--lvl-outline .Counter{background-color:#3f8ae0;background-color:var(--button_outline_foreground);color:#fff;color:var(--background_content)}.Button--lvl-commerce .Counter{background-color:#fff;background-color:var(--button_commerce_foreground);color:#4bb34b;color:var(--button_commerce_background)}.Button--vkcom.Button--lvl-secondary .Counter,.Button--vkcom.Button--lvl-tertiary .Counter,.Button--vkcom.Button--lvl-outline .Counter,.Button--vkcom.Button--lvl-secondary .Icon,.Button--vkcom.Button--lvl-tertiary .Icon,.Button--vkcom.Button--lvl-outline .Icon{opacity:.72}.Root{width:100%;height:100%;position:relative}.Root--transition{pointer-events:none}.Root__view{width:100%;height:100%;position:relative}.Root--transition .Root__view:not(.Root__view--hide-forward){position:absolute;left:0;top:0}.Root--transition .Root__view:not(.Root__view--hide-forward) .View__panel{overflow:hidden}.Root__view--show-back,.Root__view--hide-forward{z-index:1}.Root__view--show-forward,.Root__view--hide-back{z-index:2}.Root__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.Root__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.Root__modal:empty{display:none}.Root--ios .Root__view--show-back::after,.Root--ios .Root__view--hide-forward::after{position:absolute;width:100%;height:100%;left:0;top:0;display:block;content:'';background-color:#000;z-index:6}.Root--ios .Root__view--show-back::after{-webkit-animation:root-ios-animation-show-back .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-show-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-show-back .6s var(--ios-easing);animation:root-ios-animation-show-back .6s var(--ios-easing)}.Root--ios .Root__view--hide-forward::after{-webkit-animation:root-ios-animation-hide-forward .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-hide-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-hide-forward .6s var(--ios-easing);animation:root-ios-animation-hide-forward .6s var(--ios-easing)}.Root--ios .Root__view--show-forward{-webkit-animation:root-ios-animation-show-forward .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-show-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-show-forward .6s var(--ios-easing);animation:root-ios-animation-show-forward .6s var(--ios-easing)}.Root--ios .Root__view--hide-back{-webkit-animation:root-ios-animation-hide-back .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-hide-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-hide-back .6s var(--ios-easing);animation:root-ios-animation-hide-back .6s var(--ios-easing)}@-webkit-keyframes root-ios-animation-show-back{0%{opacity:.3}to{opacity:0}}@keyframes root-ios-animation-show-back{0%{opacity:.3}to{opacity:0}}@-webkit-keyframes root-ios-animation-hide-forward{0%{opacity:0}to{opacity:.3}}@keyframes root-ios-animation-hide-forward{0%{opacity:0}to{opacity:.3}}@-webkit-keyframes root-ios-animation-hide-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes root-ios-animation-hide-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@-webkit-keyframes root-ios-animation-show-forward{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes root-ios-animation-show-forward{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.Root--android .Root__view--show-forward,.Root--vkcom .Root__view--show-forward{-webkit-animation:root-android-animation-show-forward .3s cubic-bezier(.4,0,.2,1);animation:root-android-animation-show-forward .3s cubic-bezier(.4,0,.2,1);-webkit-animation:root-android-animation-show-forward .3s var(--android-easing);animation:root-android-animation-show-forward .3s var(--android-easing)}.Root--android .Root__view--hide-back,.Root--vkcom .Root__view--hide-back{-webkit-animation:root-android-animation-hide-back .3s cubic-bezier(.4,0,.2,1);animation:root-android-animation-hide-back .3s cubic-bezier(.4,0,.2,1);-webkit-animation:root-android-animation-hide-back .3s var(--android-easing);animation:root-android-animation-hide-back .3s var(--android-easing)}@-webkit-keyframes root-android-animation-hide-back{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}to{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}}@keyframes root-android-animation-hide-back{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}to{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}}@-webkit-keyframes root-android-animation-show-forward{0%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes root-android-animation-show-forward{0%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.Root--ios.Root--no-motion .Root__view,.Root--android.Root--no-motion .Root__view,.Root--vkcom.Root--no-motion .Root__view{-webkit-animation:none;animation:none}.View--ios .Panel__in{padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.View--ios .Panel__in{padding:0 0 0 0;padding:0 var(--safe-area-inset-right) var(--safe-area-inset-bottom) var(--safe-area-inset-left)}.View--ios .View__panel--swipe-back-prev{box-shadow:-2px 0 12px rgba(0,0,0,.3)}.View--ios .View__panel--swipe-back-prev.View__panel--swipe-back-success{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.View--ios .View__panel--swipe-back-next.View__panel--swipe-back-success{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.View--ios .View__panel--swipe-back-prev.View__panel--swipe-back-failed{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.View--ios .View__panel--swipe-back-next.View__panel--swipe-back-failed{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}.View--ios .View__panel--prev{-webkit-animation:animation-ios-prev-forward .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-prev-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-prev-forward .6s var(--ios-easing);animation:animation-ios-prev-forward .6s var(--ios-easing)}.View--ios .View__panel--next{-webkit-animation:animation-ios-next-back .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-next-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-next-back .6s var(--ios-easing);animation:animation-ios-next-back .6s var(--ios-easing)}.View--ios .View__panel--prev~.View__panel--next{-webkit-animation:animation-ios-next-forward .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-next-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-next-forward .6s var(--ios-easing);animation:animation-ios-next-forward .6s var(--ios-easing)}.View--ios .View__panel--next~.View__panel--prev{-webkit-animation:animation-ios-prev-back .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-prev-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-prev-back .6s var(--ios-easing);animation:animation-ios-prev-back .6s var(--ios-easing)}.View--ios .View__panel--prev .Panel__fade,.View--ios .View__panel--next .Panel__fade{position:absolute;width:100%;height:100%;left:0;top:0;z-index:10;background:#000;pointer-events:none}.View--ios .View__panel--prev .Panel__fade{-webkit-animation:animation-ios-fade-in .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-fade-in .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-fade-in .6s var(--ios-easing);animation:animation-ios-fade-in .6s var(--ios-easing)}.View--ios .View__panel--next .Panel__fade{-webkit-animation:animation-ios-fade-out .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-fade-out .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-fade-out .6s var(--ios-easing);animation:animation-ios-fade-out .6s var(--ios-easing)}.View--ios .View__panel--prev~.View__panel--next .Panel__fade,.View--ios .View__panel--next~.View__panel--prev .Panel__fade{display:none}.View--ios.View--no-motion .View__panel,.View--ios.View--no-motion .View__panel .Panel__in{-webkit-animation:none;animation:none}.View--ios .View__panel--active .Panel__fade{display:none}@-webkit-keyframes animation-ios-next-forward{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-ios-next-forward{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes animation-ios-next-back{0%{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-ios-next-back{0%{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes animation-ios-prev-forward{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}}@keyframes animation-ios-prev-forward{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}}@-webkit-keyframes animation-ios-prev-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes animation-ios-prev-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@-webkit-keyframes animation-ios-fade-in{0%{opacity:0}to{opacity:.3}}@keyframes animation-ios-fade-in{0%{opacity:0}to{opacity:.3}}@-webkit-keyframes animation-ios-fade-out{0%{opacity:.3}to{opacity:0}}@keyframes animation-ios-fade-out{0%{opacity:.3}to{opacity:0}}.View--android{font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.View--android .View__panel--next~.View__panel--prev{-webkit-animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-prev-back .3s var(--android-easing);animation:animation-android-prev-back .3s var(--android-easing)}.View--android .View__panel--prev~.View__panel--next{-webkit-animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-next-forward .3s var(--android-easing);animation:animation-android-next-forward .3s var(--android-easing)}.View--android.View--no-motion .View__panel{-webkit-animation:none;animation:none}.View--android .View__panel--active::before{content:none}@-webkit-keyframes animation-android-prev-back{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}}@keyframes animation-android-prev-back{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}}@-webkit-keyframes animation-android-next-forward{0%{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes animation-android-next-forward{0%{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.View--vkcom{font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.View--vkcom .View__panel--next~.View__panel--prev{-webkit-animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-prev-back .3s var(--android-easing);animation:animation-android-prev-back .3s var(--android-easing)}.View--vkcom .View__panel--prev~.View__panel--next{-webkit-animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-next-forward .3s var(--android-easing);animation:animation-android-next-forward .3s var(--android-easing)}.View--vkcom.View--no-motion .View__panel{-webkit-animation:none;animation:none}.View--vkcom .View__panel--active::before{content:none}@keyframes animation-android-prev-back{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}}@keyframes animation-android-next-forward{0%{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.View{position:relative;height:100%;width:100%;word-wrap:break-word}.View--animated,.View--swiping-back{overflow:hidden}.View__header{z-index:2;position:fixed;width:100%}.View--animated .View__panel,.View--animated .View__header,.View--swiping-back .View__panel,.View--swiping-back .View__header{pointer-events:none}.View__panels{height:100%;width:100%}.View__panel{position:relative;width:100%;height:100%;box-sizing:border-box;z-index:1}.View__panel-in{height:100%}.View--animated .View__panel,.View--swiping-back .View__panel{position:fixed;top:0;left:0;overflow:hidden}.View__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.View__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.View__modal:empty{display:none}.Panel{position:relative;width:100%;height:100%}.Panel::after{position:absolute;width:100%;height:100%;left:0;top:0;z-index:1;content:''}.Panel--centered .Panel__in{height:100%}.Panel--centered .PanelHeader{position:absolute;left:0;top:0;width:100%}.Panel__in{position:relative;box-sizing:border-box;width:100%;min-height:100%;z-index:2;display:flex;flex-direction:column}.Panel__centered{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box}.Panel__centered .PanelHeader--ios.PanelHeader--vis+*{margin-top:52px;margin-top:var(--panelheader_height_ios)}.Panel__centered .PanelHeader--android.PanelHeader--vis+*,.Panel__centered .PanelHeader--vkcom.PanelHeader--vis+*{margin-top:56px;margin-top:var(--panelheader_height_android)}.Panel--sizeX-compact .Panel__centered .PanelHeader--ios.PanelHeader--sep+*{margin-top:calc(52px + 5px);margin-top:calc(var(--panelheader_height_ios) + 5px)}.Panel--sizeX-compact .Panel__centered .PanelHeader--android.PanelHeader--sep+*{margin-top:calc(56px + 5px);margin-top:calc(var(--panelheader_height_android) + 5px)}.Panel--sizeX-compact .Panel__centered .PanelHeader--vkcom.PanelHeader--sep+*{margin-top:calc(48px + 5px);margin-top:calc(var(--panelheader_height_vkcom) + 5px)}.Panel--sizeX-regular .Panel__centered .PanelHeader--ios.PanelHeader--sep+*{margin-top:calc(52px + 16px);margin-top:calc(var(--panelheader_height_ios) + 16px)}.Panel--sizeX-regular .Panel__centered .PanelHeader--android.PanelHeader--sep+*{margin-top:calc(56px + 16px);margin-top:calc(var(--panelheader_height_android) + 16px)}.Panel--sizeX-regular .Panel__centered .PanelHeader--vkcom.PanelHeader--sep+*{margin-top:calc(48px + 16px);margin-top:calc(var(--panelheader_height_vkcom) + 16px)}.Epic .Panel__in{padding-bottom:48px;padding-bottom:var(--tabbar_height);padding-bottom:calc(0px + 48px);padding-bottom:calc(var(--safe-area-inset-bottom) + var(--tabbar_height))}.Panel__in-before{height:1px;margin-bottom:-1px}.Panel__separator{position:relative;z-index:3}.Panel__in-after{height:1px;margin-top:-1px}.Panel .Panel__in,.Panel::after{background-color:#fff;background-color:var(--background_content)}.Panel.Panel--regular .Panel__in,.Panel.Panel--regular::after{background-color:transparent}.PanelHeader{position:relative}.PanelHeader--vis.PanelHeader--fixed::before{display:block;content:''}.PanelHeader__fixed{z-index:10}.PanelHeader__in{display:flex;justify-content:space-between;align-items:center;white-space:nowrap;position:relative;background:#fff;background:var(--header_background)}.PanelHeader--trnsp .PanelHeader__in{background:0 0}.PanelHeader--shadow .PanelHeader__in{box-shadow:0 0 4px rgba(0,0,0,.08)}.PanelHeader__left{box-sizing:border-box;color:#3f8ae0;color:var(--header_tint);display:flex;flex-shrink:0}.PanelHeader__left .Avatar{margin-left:8px}.PanelHeader__content{overflow:hidden;color:#000;color:var(--header_text);font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt)}.PanelHeader__content>*{display:block;overflow:hidden;text-overflow:ellipsis}.PanelHeader__right{display:flex;justify-content:flex-end;box-sizing:border-box;color:#3f8ae0;color:var(--header_tint)}.PanelHeader__right .Avatar{margin-right:8px}.PanelHeader--vkapps .PanelHeader__right{min-width:90px}.PanelHeader--sizeX-compact .PanelHeader__separator{padding-top:4px}.PanelHeader--ios~.FixedLayout--top,.PanelHeader--ios~* .FixedLayout--top:not(.PanelHeader__fixed){top:calc(52px + 20px);top:calc(var(--panelheader_height_ios) + var(--safe-area-inset-top))}.PanelHeader--ios::before,.PanelHeader--ios .PanelHeader__in{height:52px;height:var(--panelheader_height_ios);padding-top:20px;padding-top:var(--safe-area-inset-top)}.PanelHeader--ios .PanelHeader__left{flex-basis:0;flex-shrink:0;flex-grow:1;opacity:1;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing);padding:4px 0 4px 4px}.PanelHeader--ios .PanelHeader__left .PanelHeaderButton--primitive{padding-left:12px}.PanelHeader--ios .PanelHeader__left .PanelHeaderButton+.PanelHeaderButton--primitive{margin-left:-6px;padding-left:0}.PanelHeader--ios .PanelHeader__content{font-size:21px;line-height:52px;line-height:var(--panelheader_height_ios);text-align:center;opacity:1;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing)}.PanelHeader--ios .PanelHeader__content>*{padding:0 4px}.PanelHeader--ios.PanelHeader--no-left .PanelHeader__content>*{padding-left:0}.PanelHeader--ios.PanelHeader--no-left .PanelHeader__content{padding-left:8px}.PanelHeader--ios.PanelHeader--no-right .PanelHeader__content>*{padding-right:0}.PanelHeader--ios.PanelHeader--no-right .PanelHeader__content{padding-right:8px}.PanelHeader--ios .PanelHeader__right{flex-basis:0;flex-shrink:0;flex-grow:1;opacity:1;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing);padding:4px 4px 4px 0}.PanelHeader--ios .PanelHeader__right .PanelHeaderButton--primitive{padding-right:12px}.View--ios .View__panel--prev .PanelHeader__left,.View--ios .View__panel--prev .PanelHeader__right,.View--ios .View__panel--prev .PanelHeader__content{opacity:0}@supports not (padding-top:env(safe-area-inset-top)){.PanelHeader--android,.PanelHeader--vkcom{--safe-area-inset-top: 0px}}.PanelHeader--android~.FixedLayout--top,.PanelHeader--android~* .FixedLayout--top:not(.PanelHeader__fixed){top:calc(56px + 20px);top:calc(var(--panelheader_height_android) + var(--safe-area-inset-top))}.PanelHeader--android::before,.PanelHeader--android .PanelHeader__in{height:56px;height:var(--panelheader_height_android);padding-top:20px;padding-top:var(--safe-area-inset-top)}.PanelHeader--android .PanelHeader__left:not(:empty){padding:4px 0 4px 4px}.PanelHeader--android .PanelHeader__content{font-size:23px;align-items:center;flex-grow:1;max-width:100%}.PanelHeader--android .PanelHeader__content>*{padding:0 12px}.PanelHeader--android .Search,.PanelHeader--vkcom .Search{padding:0 4px}.PanelHeader--android.PanelHeader--no-left .PanelHeader__content>*,.PanelHeader--vkcom.PanelHeader--no-left .PanelHeader__content>*{padding-left:0}.PanelHeader--android.PanelHeader--no-left .PanelHeader__content{padding-left:16px}.SplitCol--spaced .PanelHeader--android.PanelHeader--no-left .PanelHeader__content{padding-left:0}.PanelHeader--android.PanelHeader--no-right .PanelHeader__content>*,.PanelHeader--vkcom.PanelHeader--no-right .PanelHeader__content>*{padding-right:0}.PanelHeader--android.PanelHeader--no-right .PanelHeader__content{padding-right:16px}.SplitCol--spaced .PanelHeader--android.PanelHeader--no-right .PanelHeader__content{padding-right:0}.PanelHeader--android .PanelHeader__right:not(:empty),.PanelHeader--vkcom .PanelHeader__right:not(:empty){padding:4px 4px 4px 0}.PanelHeader--vkcom{position:relative;z-index:10}.PanelHeader--vkcom~.FixedLayout--top,.PanelHeader--vkcom~* .FixedLayout--top:not(.PanelHeader__fixed){top:calc(48px + 20px);top:calc(var(--panelheader_height_vkcom) + var(--safe-area-inset-top))}.PanelHeader--vkcom .PanelHeader__in{border-top-left-radius:8px;border-top-right-radius:8px;box-shadow:0 0 0 1px #e1e3e6 inset;box-shadow:0 0 0 var(--thin-border) var(--input_border) inset;border-bottom:none}.PanelHeader--vkcom .PanelHeader__content{text-align:center}.PanelHeader--vkcom::before,.PanelHeader--vkcom .PanelHeader__in{height:48px;height:var(--panelheader_height_vkcom);padding-top:20px;padding-top:var(--safe-area-inset-top)}.PanelHeader--vkcom .PanelHeader__left:not(:empty){padding:0 0 0 4px}.PanelHeader--vkcom .PanelHeader__content{font-family:inherit}.PanelHeader--vkcom .PanelHeader__left,.PanelHeader--vkcom .PanelHeader__right{flex-basis:0;flex-shrink:0;flex-grow:1}.PanelHeaderButton{-webkit-appearance:none;appearance:none;background:0 0;border:0;outline:0;box-shadow:none;display:block;color:currentColor;padding:0;margin:0;font-size:17px;position:relative}.PanelHeaderButton[disabled]{opacity:.6}.PanelHeaderButton .Counter{position:absolute;padding:0;top:8px;right:2px}.PanelHeaderButton--ios{position:relative;display:flex;align-items:center}.PanelHeaderButton--ios.PanelHeaderButton--primary{font-weight:600}.PanelHeaderButton--ios.PanelHeaderButton--primitive{height:44px;line-height:44px}.PanelHeaderButton--ios .Icon--24{padding:10px}.PanelHeaderButton--ios .Icon--28{padding:8px}.PanelHeaderButton--ios.Tappable--active{opacity:.7}.PanelHeaderButton--android{border-radius:50%;font-weight:500;font-size:15px}.PanelHeaderButton--android.PanelHeaderButton--primitive{height:48px;line-height:48px;padding:0 12px}.PanelHeaderButton--android .Icon--24{padding:12px}.PanelHeaderButton--android .Icon--28{padding:10px}.PanelHeaderButton--android.Tappable--active,.PanelHeaderButton--vkcom.Tappable--active{background-color:rgba(0,0,0,.08);background-color:var(--background_highlighted)}.PanelHeaderButton--vkcom{display:flex;align-items:center;padding:10px}.PanelHeaderButton--vkcom.PanelHeaderButton--primitive{height:48px;line-height:48px;padding:0 10px}.PanelHeaderButton--vkcom.PanelHeaderButton--notPrimitive{border-radius:50%}.PanelHeaderContent{line-height:initial;height:100%;max-width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:flex-start}.PanelHeaderContent__before{flex-shrink:0;margin-right:12px}.PanelHeaderContent__in{flex-grow:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%}.PanelHeaderContent__status,.PanelHeaderContent__children-in{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.PanelHeaderContent__status{order:1;font-weight:400;font-size:13px;line-height:16px;margin-top:1px;max-width:100%;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);color:#818c99;color:var(--header_text_secondary)}.PanelHeaderContent__status~.PanelHeaderContent__children .PanelHeaderContent__children-in{font-weight:500;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);font-size:16px;line-height:20px}.PanelHeaderContent__children{max-width:100%;display:flex;align-items:center}.PanelHeaderContent__children-in{flex-grow:0;min-width:0;font-size:21px;line-height:52px;line-height:var(--panelheader_height_ios);font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt)}.PanelHeaderContent__aside{display:flex;align-items:center;justify-content:flex-start;margin-left:2px;color:#3f8ae0;color:var(--header_tint)}.PanelHeaderContent__width{width:1000px}.PanelHeaderContent--ios .PanelHeaderContent__in.Tappable--active{opacity:.7}.PanelHeaderContent--ios .PanelHeaderContent__before~.PanelHeaderContent__in{align-items:flex-start}.PanelHeaderContent--ios .PanelHeaderContent__in{align-items:center}.PanelHeaderContent--android .PanelHeaderContent__in.Tappable--active,.PanelHeaderContent--vkcom .PanelHeaderContent__in.Tappable--active{background-color:rgba(255,255,255,.1)}.PanelHeaderContext--opened,.PanelHeaderContext--closing{width:100%;height:100%}.PanelHeaderContext__in{position:absolute;left:0;width:100%;z-index:2}.PanelHeaderContext__fade{position:absolute;width:100%;height:100%;left:0;top:0;z-index:1;background:rgba(0,0,0,.4)}.PanelHeaderContext--opened .PanelHeaderContext__fade{-webkit-animation:animation-panelheadercontext-fade-in .2s ease;animation:animation-panelheadercontext-fade-in .2s ease}.PanelHeaderContext--closing .PanelHeaderContext__fade{-webkit-animation:animation-panelheadercontext-fade-out .2s ease;animation:animation-panelheadercontext-fade-out .2s ease}.PanelHeaderContext--ios.PanelHeaderContext--opened .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-in .2s ease;animation:animation-panelheadercontext-translate-in .2s ease}.PanelHeaderContext--ios.PanelHeaderContext--closing .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-out .2s ease;animation:animation-panelheadercontext-translate-out .2s ease}.PanelHeaderContext--ios .List{background:#fff;background:var(--header_background)}.PanelHeaderContext--android .PanelHeaderContext__in,.PanelHeaderContext--vkcom .PanelHeaderContext__in{padding:8px;box-sizing:border-box}.PanelHeaderContext--android.PanelHeaderContext--opened .PanelHeaderContext__in,.PanelHeaderContext--vkcom.PanelHeaderContext--opened .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-in .2s ease;animation:animation-panelheadercontext-translate-in .2s ease}.PanelHeaderContext--android.PanelHeaderContext--closing .PanelHeaderContext__in,.PanelHeaderContext--vkcom.PanelHeaderContext--closing .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-out .2s ease;animation:animation-panelheadercontext-translate-out .2s ease}.PanelHeaderContext--android .List,.PanelHeaderContext--vkcom .List{overflow:hidden;border-radius:12px;padding:8px 0;background:#fff;background:var(--header_background)}@-webkit-keyframes animation-panelheadercontext-translate-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes animation-panelheadercontext-translate-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes animation-panelheadercontext-translate-out{0%{-webkit-transform:translateY(0);transform:translateY(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes animation-panelheadercontext-translate-out{0%{-webkit-transform:translateY(0);transform:translateY(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes animation-panelheadercontext-fade-in{0%{opacity:0}to{opacity:1}}@keyframes animation-panelheadercontext-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes animation-panelheadercontext-fade-out{0%{opacity:1}to{opacity:0}}@keyframes animation-panelheadercontext-fade-out{0%{opacity:1}to{opacity:0}}.PopoutRoot{width:100%;height:100%;position:relative}.PopoutRoot__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.PopoutRoot--absolute{position:absolute;left:0;top:0;z-index:100;width:100%;height:100%}.PopoutRoot__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.PopoutRoot__modal:empty{display:none}.SplitLayout{width:100%;height:100%;position:relative;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.SplitLayout__inner{width:100%;height:100%;display:flex}.SplitLayout__inner--header{position:relative;z-index:11}.SplitLayout--ios .SplitLayout__inner--header{margin-top:calc(-1*52px);margin-top:calc(-1*var(--panelheader_height_ios))}.SplitLayout--android .SplitLayout__inner--header,.SplitLayout--vkcom .SplitLayout__inner--header{margin-top:calc(-1*56px);margin-top:calc(-1*var(--panelheader_height_android))}.SplitLayout__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.SplitLayout__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.SplitLayout__modal:empty{display:none}.SplitCol{height:100%;width:1px;flex-grow:1;flex-shrink:1;position:relative}.SplitCol--spaced{margin:0 16px}.SplitCol--fixed{height:100%;width:1px;flex-grow:1;flex-shrink:1}.SplitCol__fixedInner{height:inherit;width:inherit;min-width:inherit;max-width:inherit;position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);overflow:hidden}.Epic{width:100%;height:100%}.Tabbar{position:fixed;z-index:2;bottom:0;left:0;width:100%;height:48px;height:var(--tabbar_height);display:flex;align-items:stretch;justify-content:center;box-sizing:content-box;background:#fff;background:var(--header_alternate_background);padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.Tabbar--ios.Tabbar--shadow::before{position:absolute;bottom:100%;left:0;width:100%;height:1px;background:#d7d8d9;background:var(--separator_common);-webkit-transform-origin:center bottom;transform-origin:center bottom;content:''}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.Tabbar--ios::before{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.Tabbar--ios::before{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.Tabbar--android.Tabbar--shadow,.Tabbar--vkcom.Tabbar--shadow{box-shadow:0 -2px 4px 0 rgba(0,0,0,.06),0 0 2px 0 rgba(0,0,0,.08)}.TabbarItem{flex-shrink:0;max-width:100%;flex-grow:1;flex-basis:0;display:flex;align-items:center;justify-content:center;color:#99a2ad;color:var(--tabbar_inactive_icon);text-decoration:none}.Tabbar--l-vertical .TabbarItem.TabbarItem--text{position:relative;top:2px}.TabbarItem--selected{color:#2975cc;color:var(--tabbar_active_icon)}.TabbarItem__in{align-self:center;display:flex}.Tabbar--l-vertical .TabbarItem__in{flex-direction:column;align-items:center;justify-content:center}.Tabbar--l-horizontal .TabbarItem__in{flex-direction:row;align-items:center}.TabbarItem__icon{position:relative}.TabbarItem__label{position:absolute;top:-2px;left:calc(100% - 9px)}.Tabbar--l-vertical .TabbarItem__text{font-size:10px;line-height:12px;font-weight:500;margin-top:2px}.Tabbar--l-horizontal .TabbarItem__text{font-size:13px;font-weight:500;margin-left:8px}.HorizontalScroll{position:relative;overflow:hidden}.HorizontalScroll__in{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:20px;margin-bottom:-20px}.HorizontalScroll__in::-webkit-scrollbar{display:none}.HorizontalScroll__arrow{position:absolute;cursor:pointer;-webkit-user-select:auto;user-select:auto;top:0;height:100%;opacity:0;z-index:3;display:flex;flex-direction:column;justify-content:center;transition:opacity .15s}.HorizontalScroll--ios .HorizontalScroll__arrow{transition-timing-function:cubic-bezier(.36,.66,.04,1);transition-timing-function:var(--ios-easing)}.HorizontalScroll--android .HorizontalScroll__arrow,.HorizontalScroll--vkcom .HorizontalScroll__arrow{transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:var(--android-easing)}.HorizontalScroll:hover .HorizontalScroll__arrow{opacity:.72}.HorizontalScroll:hover .HorizontalScroll__arrow:hover{opacity:1}.HorizontalScroll__arrow-icon{background-color:#fff;background-color:var(--modal_card_background);color:#99a2ad;color:var(--icon_secondary);width:40px;height:40px;border-radius:24px;box-shadow:0 0 2px rgba(0,0,0,.08),0 0 16px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center}.HorizontalScroll__arrow-left{margin-left:16px;left:0}.HorizontalScroll__arrow-left .HorizontalScroll__arrow-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.HorizontalScroll__arrow-right{margin-right:16px;right:0}.HorizontalScroll__in-wrapper{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.HorizontalScroll__arrow-left:hover~.HorizontalScroll__in .HorizontalScroll__in-wrapper{-webkit-transform:translateX(8px);transform:translateX(8px)}.HorizontalScroll__arrow-right:hover~.HorizontalScroll__in .HorizontalScroll__in-wrapper{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.PopoutWrapper{width:100%;height:100%;box-sizing:border-box;left:0;top:0;pointer-events:none}.PopoutWrapper--opened{pointer-events:initial}.PopoutWrapper--closing{pointer-events:none}.PopoutWrapper--fixed{position:fixed}.PopoutWrapper--closing .PopoutWrapper__mask{opacity:0}.PopoutWrapper__mask{opacity:1;width:100%;height:100%;position:absolute;left:0;top:0;background:rgba(0,0,0,.4)}.PopoutWrapper__container{width:100%;height:100%;position:relative;display:flex;box-sizing:border-box;z-index:2}.PopoutWrapper--v-center .PopoutWrapper__container{align-items:center}.PopoutWrapper--v-bottom .PopoutWrapper__container{align-items:flex-end}.PopoutWrapper--v-top .PopoutWrapper__container{align-items:flex-start}.PopoutWrapper--h-center .PopoutWrapper__container{justify-content:center}.PopoutWrapper--h-left .PopoutWrapper__container{justify-content:flex-start}.PopoutWrapper--h-right .PopoutWrapper__container{justify-content:flex-end}.PopoutWrapper--ios .PopoutWrapper__mask{-webkit-animation:animation-full-fade-in .3s ease;animation:animation-full-fade-in .3s ease}.PopoutWrapper--ios.PopoutWrapper--closing .PopoutWrapper__mask{transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing)}.PopoutWrapper--android .PopoutWrapper__mask,.PopoutWrapper--vkcom .PopoutWrapper__mask{-webkit-animation:animation-full-fade-in .2s ease;animation:animation-full-fade-in .2s ease}.PopoutWrapper--android.PopoutWrapper--closing .PopoutWrapper__mask,.PopoutWrapper--vkcom.PopoutWrapper--closing .PopoutWrapper__mask{transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s var(--android-easing)}@-webkit-keyframes animation-full-fade-in{0%{opacity:0}to{opacity:1}}@keyframes animation-full-fade-in{0%{opacity:0}to{opacity:1}}.ActionSheet{position:relative;overflow:hidden}.ActionSheet__header{color:#818c99;color:var(--text_secondary)}.ActionSheet--ios{width:100%;-webkit-animation:animation-actionsheet-intro .3s cubic-bezier(.36,.66,.04,1);animation:animation-actionsheet-intro .3s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-actionsheet-intro .3s var(--ios-easing);animation:animation-actionsheet-intro .3s var(--ios-easing);padding:10px;box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch}.ActionSheet--ios.ActionSheet--closing{-webkit-transform:translateY(100%);transform:translateY(100%);transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing)}.ActionSheet--ios .ActionSheet__header{padding:15px 10px;position:relative;overflow:hidden;border-radius:14px 14px 0 0;text-align:center}.ActionSheet--ios .ActionSheet__title{position:relative;z-index:2}.ActionSheet--ios .ActionSheet__title+.ActionSheet__text{margin-top:9px}.ActionSheet--ios .ActionSheet__text{position:relative;z-index:2}.ActionSheet--ios .ActionSheet__header::before{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;background-color:var(--modal_card_background);z-index:1;content:''}.ActionSheet--android,.ActionSheet--vkcom{width:calc(100% - 20px);margin:10px;-webkit-animation:animation-actionsheet-intro .2s cubic-bezier(.4,0,.2,1);animation:animation-actionsheet-intro .2s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-actionsheet-intro .2s var(--android-easing);animation:animation-actionsheet-intro .2s var(--android-easing);box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;border-radius:12px;box-shadow:0 8px 8px 0 rgba(0,0,0,.16),0 0 4px 0 rgba(0,0,0,.08);padding:8px 0;background:#fff;background:var(--modal_card_background)}.ActionSheet--android.ActionSheet--closing,.ActionSheet--vkcom.ActionSheet--closing{-webkit-transform:translateY(calc(100% + 20px));transform:translateY(calc(100% + 20px));transition:-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .2s var(--android-easing);transition:transform .2s var(--android-easing);transition:transform .2s var(--android-easing),-webkit-transform .2s var(--android-easing)}.ActionSheet--android .ActionSheet__header,.ActionSheet--vkcom .ActionSheet__header{padding:16px 20px}.ActionSheet--android .ActionSheet__title+.ActionSheet__text,.ActionSheet--vkcom .ActionSheet__title+.ActionSheet__text{margin-top:8px}.ActionSheet--desktop{width:auto;height:auto;background:#fff;background:var(--modal_card_background);-webkit-animation:none;animation:none;position:absolute;top:0;left:0;z-index:110;padding:0;margin:0}.ActionSheet--desktop.ActionSheet--ios{border-radius:14px;box-shadow:0 0 96px rgba(0,0,0,.16),0 0 2px rgba(0,0,0,.12)}.ActionSheet--desktop.ActionSheet--android{min-width:112px;border-radius:12px;padding:8px 0;box-shadow:0 8px 8px rgba(0,0,0,.16),0 0 4px rgba(0,0,0,.08)}.ActionSheet--desktop.ActionSheet--vkcom{border-radius:12px;box-shadow:0 0 2px rgba(0,0,0,.08),0 8px 24px rgba(0,0,0,.08)}.ActionSheet--desktop.ActionSheet--sizeY-compact{padding-top:8px;padding-bottom:8px}.ActionSheet--desktop.ActionSheet--vkcom .ActionSheet__header{padding:14px 20px}@-webkit-keyframes animation-actionsheet-intro{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes animation-actionsheet-intro{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.ActionSheetItem{position:relative;z-index:2;overflow:hidden;display:flex;align-items:center;text-decoration:none;color:#000;color:var(--text_primary)}.ActionSheetItem__container,.ActionSheetItem__before,.ActionSheetItem__after{position:relative;z-index:2}.ActionSheetItem__before,.ActionSheetItem__after{flex-shrink:0}.ActionSheetItem__container{max-width:100%;flex-grow:1;white-space:nowrap;overflow:hidden}.ActionSheetItem__content{display:flex;align-items:baseline;overflow:hidden}.ActionSheetItem__children{min-width:0;overflow:hidden;text-overflow:ellipsis}.ActionSheetItem__subtitle{color:#818c99;color:var(--text_secondary);overflow:hidden;text-overflow:ellipsis}.ActionSheetItem__meta{color:#818c99;color:var(--text_secondary);margin-left:6px;flex-shrink:0}.ActionSheetItem__before{color:#3f8ae0;color:var(--action_sheet_action_foreground)}.ActionSheetItem--destructive .ActionSheetItem__container:first-child{color:#e64646;color:var(--destructive)}.ActionSheetItem--destructive .ActionSheetItem__before{color:#e64646;color:var(--destructive)}.ActionSheetItem--compact .ActionSheetItem__container{color:#000;color:var(--text_primary)}.ActionSheetItem__radio{display:none}.ActionSheetItem__marker{display:none;width:24px;height:24px;border-radius:50%;align-items:center;justify-content:center;background-color:#3f8ae0;background-color:var(--accent);color:#fff;color:var(--white);margin-left:4px}.ActionSheetItem__radio:checked~.ActionSheetItem__marker{display:flex}.ActionSheetItem--ios{padding:0 20px;min-height:56px;border-radius:0;color:#3f8ae0;color:var(--action_sheet_action_foreground)}.ActionSheetItem--ios.ActionSheetItem--destructive{color:#e64646;color:var(--destructive)}.ActionSheetItem--ios:first-child{border-top-left-radius:14px;border-top-right-radius:14px}.ActionSheetItem--ios:nth-last-child(2){border-bottom-left-radius:14px;border-bottom-right-radius:14px}.ActionSheetItem--ios::before{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;background-color:var(--modal_card_background);z-index:1;content:'';transition:opacity .15s ease-out,background-color .15s ease-out}.ActionSheetItem--ios::after{position:absolute;right:0;left:0;z-index:1;height:1px;content:'';top:0;background:rgba(0,0,0,.12);background:var(--action_sheet_separator);-webkit-transform-origin:center bottom;transform-origin:center bottom}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.ActionSheetItem--ios::after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.ActionSheetItem--ios::after{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.ActionSheetItem--ios:first-child::after,.ActionSheetItem--cancel::after{content:none}.ActionSheet--ios .ActionSheetItem--last::after,.ActionSheet--ios .ActionSheet__header:empty{content:none}.ActionSheetItem--ios.Tappable--active::before{background:#d7d8d9;background:var(--separator_common);opacity:1;transition:none}.ActionSheetItem--ios .ActionSheetItem__container{padding:13px 0}.ActionSheetItem--ios .ActionSheetItem__content{justify-content:center}.ActionSheetItem--ios .ActionSheetItem__subtitle{margin-top:2px}.ActionSheetItem--ios.ActionSheetItem--compact .ActionSheetItem__content,.ActionSheetItem--ios .ActionSheetItem__before+.ActionSheetItem__container .ActionSheetItem__content{justify-content:flex-start}.ActionSheetItem--ios .ActionSheetItem__before{margin-right:18px;margin-left:-2px}.ActionSheetItem--cancel{margin-top:7px;margin-bottom:0;margin-bottom:var(--safe-area-inset-bottom);border-radius:14px;min-height:52px}.ActionSheetItem--android{padding:0 20px;min-height:48px;border-radius:0}.ActionSheetItem--android.Tappable--active{background-color:rgba(0,0,0,.12);background-color:var(--action_sheet_separator)}.ActionSheetItem--android .ActionSheetItem__before{margin-right:18px;margin-left:-2px}.ActionSheetItem--android .ActionSheetItem__container{padding:11px 0}.ActionSheetItem--android .ActionSheetItem__subtitle{margin-top:1px;margin-bottom:-1px}.ActionSheetItem--vkcom{padding:0 20px;min-height:48px;border-radius:0}.ActionSheetItem--vkcom.Tappable--active{background-color:rgba(0,0,0,.12);background-color:var(--action_sheet_separator)}.ActionSheetItem--vkcom .ActionSheetItem__before{margin-right:17px;margin-left:-1px}.ActionSheetItem--vkcom .ActionSheetItem__subtitle{margin-top:2px;margin-bottom:-2px}.ActionSheetItem--vkcom .ActionSheetItem__marker{margin-left:26px;color:#3f8ae0;color:var(--accent);background-color:transparent}.ActionSheetItem--desktop{width:auto;cursor:pointer}.ActionSheetItem--desktop.ActionSheetItem--ios:nth-last-child(2){border-bottom-left-radius:0;border-bottom-right-radius:0}.ActionSheetItem[disabled] .ActionSheetItem__children,.ActionSheetItem[disabled] .ActionSheetItem__meta,.ActionSheetItem[disabled] .ActionSheetItem__subtitle{color:#818c99;color:var(--text_secondary)}.ActionSheetItem[disabled] .ActionSheetItem__before{color:#99a2ad;color:var(--icon_secondary)}.ActionSheetItem[disabled] .ActionSheetItem__marker{background:#99a2ad;background:var(--icon_secondary)}.ActionSheetItem--sizeY-compact{min-height:44px}.ActionSheetItem--sizeY-compact .ActionSheetItem__container{padding:12px 0}.ActionSheetItem--sizeY-compact.ActionSheetItem--withSubtitle .ActionSheetItem__container{padding:10px 0}.Alert{-webkit-user-select:none;user-select:none;color:#000;color:var(--text_primary);position:relative;max-width:416px}.Alert::before{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;background-color:var(--modal_card_background);z-index:1;content:'';border-radius:inherit}.Alert__content{position:relative;z-index:2}.Alert__action{white-space:nowrap;background:0 0}.Alert__actions{display:flex;max-width:100%;position:relative;z-index:2}.Alert--ios{width:270px;border-radius:12px;overflow:hidden;-webkit-animation:animation-ios-alert-intro .3s cubic-bezier(.36,.66,.04,1);animation:animation-ios-alert-intro .3s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-alert-intro .3s var(--ios-easing);animation:animation-ios-alert-intro .3s var(--ios-easing)}.Alert--ios.Alert--closing{opacity:0;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing)}.Alert--ios .Alert__content{padding:19px 16px 20px;text-align:center}.Alert--ios .Alert__header:not(:last-child){margin-bottom:7px}.Alert--ios .Alert__content::after{content:'';position:absolute;bottom:0;height:1px;right:0;left:0;background:rgba(0,0,0,.12);background:var(--action_sheet_separator);-webkit-transform-origin:center bottom;transform-origin:center bottom}.Alert--ios.Alert--v .Alert__actions{flex-direction:column}.Alert--ios .Alert__action{position:relative;font-size:17px;line-height:44px;color:#3f8ae0;color:var(--accent);border:0;padding:0 6px;margin:0;height:44px;display:block;outline:0;overflow:hidden;text-overflow:ellipsis;border-radius:0}.Alert--ios .Alert__action:active{z-index:1}.Alert--ios .Alert__action::after{content:'';position:absolute;background:rgba(0,0,0,.12);background:var(--action_sheet_separator)}.Alert--ios.Alert--h .Alert__action::after{top:0;right:0;width:1px;height:100%;-webkit-transform-origin:right center;transform-origin:right center}.Alert--ios.Alert--h .Alert__action:last-child::after{content:none}.Alert--ios.Alert--h .Alert__action{flex-grow:1;flex-shrink:1;flex-basis:0}.Alert--ios.Alert--h .Alert__action:first-child{border-bottom-left-radius:12px}.Alert--ios.Alert--h .Alert__action:last-child{border-bottom-right-radius:12px}.Alert--ios.Alert--v .Alert__action::after{left:0;bottom:0;width:100%;height:1px;-webkit-transform-origin:center bottom;transform-origin:center bottom}.Alert--ios.Alert--v .Alert__action:last-child::after{content:none}.Alert--ios.Alert--v .Alert__action:last-child{border-radius:0 0 12px 12px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.Alert--ios .Alert__content::after,.Alert--ios.Alert--v .Alert__action::after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}.Alert--ios.Alert--h .Alert__action::after{-webkit-transform:scaleX(.5);transform:scaleX(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.Alert--ios .Alert__content::after,.Alert--ios.Alert--v .Alert__action::after{-webkit-transform:scaleY(.33);transform:scaleY(.33)}.Alert--ios.Alert--h .Alert__action::after{-webkit-transform:scaleX(.33);transform:scaleX(.33)}}.Alert--ios .Alert__action--cancel{font-weight:600}.Alert--ios .Alert__action--destructive{color:#e64646;color:var(--destructive)}.Alert--android{min-width:280px;margin:auto 24px;box-shadow:0 20px 35px 0 rgba(0,0,0,.3),0 0 35px 0 rgba(0,0,0,.22);border-radius:12px;-webkit-animation:animation-android-alert-intro .2s ease;animation:animation-android-alert-intro .2s ease}.Alert--android.Alert--closing,.Alert--vkcom.Alert--closing{-webkit-transform:scale(.95);transform:scale(.95);opacity:0;transition:opacity .2s cubic-bezier(.4,0,.2,1),-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1),-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s var(--android-easing),-webkit-transform .2s var(--android-easing);transition:transform .2s var(--android-easing),opacity .2s var(--android-easing);transition:transform .2s var(--android-easing),opacity .2s var(--android-easing),-webkit-transform .2s var(--android-easing)}.Alert--android .Alert__content{padding:24px 24px 20px}.Alert--android .Alert__header,.Alert--vkcom .Alert__header{margin-bottom:8px}.Alert--android .Alert__text,.Alert--vkcom .Alert__text{color:#818c99;color:var(--text_secondary)}.Alert--android .Alert__actions{padding:0 16px 16px}.Alert--android.Alert--h .Alert__actions,.Alert--vkcom.Alert--h .Alert__actions{justify-content:flex-end}.Alert--android.Alert--v .Alert__actions{flex-direction:column;align-items:flex-end}.Alert--android.Alert--v .Alert__button{margin-top:4px;margin-bottom:4px}.Alert--android.Alert--v .Alert__button:first-child{margin-top:0}.Alert--android.Alert--v .Alert__button:last-child{margin-bottom:0}.Alert--android.Alert--h .Alert__button,.Alert--vkcom.Alert--h .Alert__button{margin-left:8px}.Alert--vkcom{box-shadow:0 0 2px rgba(0,0,0,.12),0 0 96px rgba(0,0,0,.16);border-radius:8px;min-width:400px;margin:auto 24px;-webkit-animation:animation-android-alert-intro .2s ease;animation:animation-android-alert-intro .2s ease}.Alert--vkcom .Alert__content{padding:24px}.Alert--vkcom .Alert__actions{padding:0 24px 16px}.Alert--vkcom .Alert__button{order:2}.Alert--vkcom .Alert__button--cancel{order:1}@-webkit-keyframes animation-ios-alert-intro{0%{opacity:0;-webkit-transform:scale(1.05);transform:scale(1.05)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes animation-ios-alert-intro{0%{opacity:0;-webkit-transform:scale(1.05);transform:scale(1.05)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes animation-android-alert-intro{0%{opacity:0;-webkit-transform:scale(.95);transform:scale(.95)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes animation-android-alert-intro{0%{opacity:0;-webkit-transform:scale(.95);transform:scale(.95)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.ScreenSpinner .PopoutWrapper__mask{background:0 0}.ScreenSpinner{-webkit-animation:screen-spinner-intro .3s ease;animation:screen-spinner-intro .3s ease}.ScreenSpinner--ios .ScreenSpinner__container{width:88px;height:88px;background:#fff;background:var(--modal_card_background);box-shadow:0 0 2px 0 rgba(0,0,0,.12),0 0 96px 0 rgba(0,0,0,.16);border-radius:10px}.ScreenSpinner--ios .ScreenSpinner__container .Spinner{color:#818c99;color:var(--overlay_status_icon)}.ScreenSpinner--android .ScreenSpinner__container,.ScreenSpinner--vkcom .ScreenSpinner__container{width:88px;height:88px;background:#f9f9f9;background:var(--tabbar_background);box-shadow:0 16px 32px 0 rgba(0,0,0,.08),0 0 8px 0 rgba(0,0,0,.08);border-radius:8px}.ScreenSpinner--android .ScreenSpinner__container .Spinner,.ScreenSpinner--vkcom .ScreenSpinner__container .Spinner{color:#99a2ad;color:var(--icon_outline_secondary)}@-webkit-keyframes screen-spinner-intro{0%{opacity:0}to{opacity:1}}@keyframes screen-spinner-intro{0%{opacity:0}to{opacity:1}}.Snackbar{-webkit-user-select:none;user-select:none}.Snackbar__in{padding:8px}.Snackbar--closing .Snackbar__in{-webkit-transform:translate3d(0,140%,0);transform:translate3d(0,140%,0)}.Snackbar__body{box-sizing:border-box;padding:12px 16px;min-height:56px;display:flex;align-items:center;background:#fff;background:var(--modal_card_background);box-shadow:0 0 24px 0 rgba(0,0,0,.24),0 0 2px 0 rgba(0,0,0,.08)}.Snackbar__before{margin-left:-4px;margin-right:12px}.Snackbar__after{margin-right:-4px;margin-left:12px}.Snackbar__content{flex:1;display:flex;align-items:center}.Snackbar--l-vertical .Snackbar__content{flex-direction:column;align-items:flex-start}.Snackbar__content-text{flex:1}.Snackbar__content-text{color:#000;color:var(--text_primary)}.Snackbar--l-horizontal .Snackbar__action{margin-right:-16px;position:relative;top:2px}.Snackbar--l-vertical .Snackbar__action{margin-top:2px;margin-bottom:-6px;margin-left:-16px}.ModalRoot .Snackbar{padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.Snackbar--ios .Snackbar__in,.Snackbar--ios .Snackbar__body{transition:-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1),-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing),-webkit-transform 400ms var(--ios-easing)}.Snackbar--ios .Snackbar__in{-webkit-animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.36,.66,.04,1);animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-snackbar-intro-vertical 340ms var(--ios-easing);animation:animation-snackbar-intro-vertical 340ms var(--ios-easing)}.Snackbar--ios .Snackbar__body{border-radius:10px}.Snackbar--android .Snackbar__in,.Snackbar--android .Snackbar__body,.Snackbar--vkcom .Snackbar__in,.Snackbar--vkcom .Snackbar__body{transition:-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1),-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing),-webkit-transform 320ms var(--android-easing)}.Snackbar--android .Snackbar__in,.Snackbar--vkcom .Snackbar__in{-webkit-animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.4,0,.2,1);animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.4,0,.2,1);-webkit-animation:animation-snackbar-intro-vertical 340ms var(--android-easing);animation:animation-snackbar-intro-vertical 340ms var(--android-easing)}.Snackbar--android .Snackbar__body,.Snackbar--vkcom .Snackbar__body{border-radius:8px}.Snackbar--desktop{max-width:328px;left:0;bottom:0}.Snackbar--desktop .Snackbar__in{padding:12px;-webkit-animation-name:animation-snackbar-intro-horizontal;animation-name:animation-snackbar-intro-horizontal}.Snackbar--desktop.Snackbar--closing .Snackbar__in{-webkit-transform:translate3d(-140%,0,0);transform:translate3d(-140%,0,0)}.Snackbar--touched .Snackbar__body{transition:none}@-webkit-keyframes animation-snackbar-intro-vertical{0%{-webkit-transform:translate3d(0,140%,0);transform:translate3d(0,140%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-snackbar-intro-vertical{0%{-webkit-transform:translate3d(0,140%,0);transform:translate3d(0,140%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes animation-snackbar-intro-horizontal{0%{-webkit-transform:translate3d(-140%,0,0);transform:translate3d(-140%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-snackbar-intro-horizontal{0%{-webkit-transform:translate3d(-140%,0,0);transform:translate3d(-140%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.ModalRoot{width:100%;height:100%}.ModalRoot__mask{opacity:1;width:100%;height:100%;position:absolute;left:0;top:0;background:rgba(0,0,0,.4);-webkit-user-select:none;user-select:none;transition:opacity 167ms ease-out;-webkit-animation:animation-fadeIn .32s ease;animation:animation-fadeIn .32s ease}.ModalRoot--touched .ModalRoot__mask{transition:none}.ModalRoot--switching .ModalRoot__mask{pointer-events:none}.ModalRoot__viewport{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ModalRoot--ios .ModalRoot__viewport{top:20px;top:var(--safe-area-inset-top)}.ModalRoot--vkapps.ModalRoot--android .ModalRoot__viewport,.ModalRoot--vkapps.ModalRoot--vkcom .ModalRoot__viewport{top:56px;top:var(--panelheader_height_android)}.ModalRoot--vkapps.ModalRoot--ios .ModalRoot__viewport{top:calc(20px + 52px);top:calc(var(--safe-area-inset-top) + var(--panelheader_height_ios))}.ModalRoot__modal{position:absolute;width:100%;height:100%;box-sizing:border-box;z-index:1}.ModalCard{box-sizing:border-box;position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:flex-end;z-index:1}.ModalCard__in{width:100%;margin-left:auto;margin-right:auto;max-width:360px;padding:8px;-webkit-transform:translateY(100%);transform:translateY(100%);box-sizing:border-box}.ModalCard__container{box-sizing:border-box;position:relative;background:#fff;background:var(--modal_card_background);border-radius:18px;padding:16px;margin-bottom:0;margin-bottom:var(--safe-area-inset-bottom);display:flex;flex-direction:column;justify-content:center;pointer-events:initial}.ModalCard__dismiss{position:absolute;top:4px;right:4px;width:48px;height:48px;color:#99a2ad;color:var(--placeholder_icon_foreground_primary);justify-content:center}.ModalCard__header,.ModalCard__subheader{text-align:center;margin:0;padding:0 8px}.ModalCard__header{color:#000;color:var(--text_primary)}.ModalCard__subheader{color:#818c99;color:var(--text_secondary)}.ModalCard__header+.ModalCard__subheader{margin-top:8px}.ModalCard__header+.FormField,.ModalCard__subheader+.FormField{margin-top:16px}.ModalCard .UsersStack{margin-top:20px}.ModalCard__icon{margin:8px auto 16px;color:#3f8ae0;color:var(--accent)}.ModalCard__actions{display:flex;margin-left:-6px;margin-right:-6px;margin-top:16px}.ModalCard .UsersStack+.ModalCard__actions{margin-top:32px}.ModalCard__header+.ModalCard__actions,.ModalCard__subheader+.ModalCard__actions{margin-top:32px}.ModalCard__actions .Button{flex:1;margin-left:6px;margin-right:6px}.ModalCard__actions--v{flex-direction:column;margin-left:0;margin-right:0}.ModalCard__actions--v .Button{margin-left:0;margin-right:0}.ModalCard__actions--v .Button+.Button{margin-top:12px}.ModalCard--ios .ModalCard__in{transition:-webkit-transform 340ms cubic-bezier(.36,.66,.04,1);transition:transform 340ms cubic-bezier(.36,.66,.04,1);transition:transform 340ms cubic-bezier(.36,.66,.04,1),-webkit-transform 340ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 340ms var(--ios-easing);transition:transform 340ms var(--ios-easing);transition:transform 340ms var(--ios-easing),-webkit-transform 340ms var(--ios-easing)}.ModalCard--ios .ModalCard__header:first-child{padding-left:36px;padding-right:36px}.ModalCard--vkcom .ModalCard__in{max-width:416px}.ModalCard--android .ModalCard__in,.ModalCard--vkcom .ModalCard__in{transition:-webkit-transform 340ms cubic-bezier(.4,0,.2,1);transition:transform 340ms cubic-bezier(.4,0,.2,1);transition:transform 340ms cubic-bezier(.4,0,.2,1),-webkit-transform 340ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 340ms var(--android-easing);transition:transform 340ms var(--android-easing);transition:transform 340ms var(--android-easing),-webkit-transform 340ms var(--android-easing)}.ModalCard--android .ModalCard__container,.ModalCard--vkcom .ModalCard__container{border-radius:12px;box-shadow:0 8px 8px 0 rgba(0,0,0,.16),0 0 4px 0 rgba(0,0,0,.08)}.ModalCard--desktop{align-items:center}.ModalCard--desktop .ModalCard__in{-webkit-transform:unset;transform:unset;opacity:0;transition:opacity 340ms cubic-bezier(.4,0,.2,1);transition:opacity 340ms var(--android-easing)}.ModalCard--desktop .ModalCard__container{border-radius:8px;box-shadow:0 16px 16px rgba(0,0,0,.16),0 0 8px rgba(0,0,0,.12)}.ModalRoot--touched .ModalCard__in{transition:none}.ModalPage{width:100%;height:100%;overflow:hidden;position:absolute;box-sizing:border-box;z-index:1;pointer-events:none}.ModalPage--desktop{display:flex;align-items:center;justify-content:center}.ModalPage__in-wrap{width:100%;height:100%;position:absolute;bottom:0;display:flex;align-items:flex-end;pointer-events:initial;-webkit-transform:translateY(100%);transform:translateY(100%)}.ModalRoot--switching .ModalPage__in-wrap{pointer-events:none}.ModalPage__in{width:416px;max-width:100%;margin:0 auto;background:#fff;background:var(--background_content);overflow:visible;position:relative;box-sizing:border-box;height:100%;display:flex;flex-direction:column}.ModalPage__header{width:100%}.ModalPage__content-wrap{position:relative;display:flex;flex-direction:column;overflow:hidden;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.ModalPage__content{height:100%;overflow-y:hidden;overflow-x:hidden;box-sizing:border-box}.ModalPage--desktop .ModalPage__content,.ModalRoot__modal--expandable .ModalPage__content{overflow-y:auto;-webkit-overflow-scrolling:touch}.ModalPage__content-in{position:relative;padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.ModalRoot__modal--collapsed .ModalPage__content,.ModalRoot__modal--dragging .ModalPage__content{overflow:hidden;touch-action:pan-y}.ModalPage__footer{background:#fff;background:var(--background_content);position:relative;z-index:10}.ModalRoot--touched .ModalPage__footer{transition:none}.ModalPage--ios .ModalPage__in-wrap{transition:-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1),-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing),-webkit-transform 400ms var(--ios-easing)}.ModalPage--ios .ModalPage__in{border-radius:14px 14px 0 0}.ModalPage--android .ModalPage__in-wrap,.ModalPage--vkcom .ModalPage__in-wrap{transition:-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1),-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing),-webkit-transform 320ms var(--android-easing)}.ModalPage--android .ModalPage__in,.ModalPage--vkcom .ModalPage__in{border-radius:12px 12px 0 0}.ModalPage--vkcom .ModalPage__in{width:448px}.ModalPage--desktop .ModalPage__in-wrap{align-items:center;opacity:0;transition:opacity 340ms cubic-bezier(.4,0,.2,1);transition:opacity 340ms var(--android-easing);width:auto;height:auto;position:relative;-webkit-transform:none;transform:none}.ModalPage--desktop .ModalPage__in{height:auto;max-height:640px;box-shadow:0 16px 16px rgba(0,0,0,.16),0 0 8px rgba(0,0,0,.12);border-radius:8px}@media (max-height:672px){.ModalPage--desktop .ModalPage__in{max-height:calc(100vh - 32px)}}.ModalRoot--touched .ModalPage__in-wrap{transition:none}.ModalDismissButton{position:absolute;justify-content:center;width:28px;height:28px;top:14px;padding:4px;box-sizing:border-box;background-color:rgba(0,0,0,.35);color:#fff;color:var(--white);border-radius:50%;right:-42px;transition:opacity .15s ease-out}.ModalDismissButton--ios{top:12px}.ModalDismissButton.Tappable--shadowHovered{opacity:.6}.ModalDismissButton.Tappable--shadowHovered.Tappable--active{opacity:1}.ModalPageHeader__in,.ModalPageHeader__left,.ModalPageHeader__right{box-sizing:border-box}.ModalPageHeader__in{display:flex;align-items:center;white-space:nowrap;color:#000;color:var(--header_text_alternate);position:relative;z-index:2}.ModalPage--android .ModalPageHeader__in,.ModalPage--vkcom .ModalPageHeader__in{height:56px;height:var(--modalheader_height_android);padding:0 4px}.ModalPage--ios .ModalPageHeader__in{height:52px;height:var(--modalheader_height_ios);padding:0 4px}.ModalPageHeader__left,.ModalPageHeader__right{color:#3f8ae0;color:var(--header_tint_alternate)}.ModalPageHeader__left{flex-shrink:0;display:flex;align-items:center}.ModalPageHeader__content{overflow:hidden;text-overflow:ellipsis}.ModalPageHeader__content-in{overflow:hidden;text-overflow:ellipsis;font-weight:500}.ModalPageHeader__right{display:flex;justify-content:flex-end;align-items:center;flex-shrink:0;text-align:right}.ModalPageHeader__shadow{pointer-events:none;opacity:0;position:absolute;top:0;height:100%;width:100%;z-index:1;transition:opacity 120ms ease-out}.ModalRoot--touched .ModalPageHeader__shadow{transition:none}.ModalPageHeader--android .ModalPageHeader__shadow,.ModalPageHeader--vkcom .ModalPageHeader__shadow{box-shadow:0 2px 2px 0 rgba(0,0,0,.06),0 0 2px 0 rgba(0,0,0,.03)}.ModalPageHeader__shadow::after{content:'';position:absolute;top:100%;left:0;width:100%;height:1px;background:#d7d8d9;background:var(--separator_common);-webkit-transform-origin:center bottom;transform-origin:center bottom}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.ModalPageHeader__shadow::after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.ModalPageHeader__shadow::after{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.ModalPageHeader .PanelHeaderButton .Icon--dismiss_24{color:#99a2ad;color:var(--placeholder_icon_foreground_primary)}.ModalPageHeader .PanelHeaderButton .Icon--cancel_24{color:#99a2ad;color:var(--icon_secondary)}.ModalPageHeader--ios .ModalPageHeader__in{justify-content:space-between}.ModalPageHeader--ios .ModalPageHeader__left{flex-grow:1;flex-basis:0;padding-right:12px;font-size:17px}.ModalPageHeader--ios .ModalPageHeader__left .PanelHeaderButton .Icon--24{padding-left:12px;padding-right:12px}.ModalPageHeader--ios .ModalPageHeader__left .PanelHeaderButton--primitive{padding-left:16px}.ModalPageHeader--ios .ModalPageHeader__content{position:relative;z-index:1}.ModalPageHeader--ios .ModalPageHeader__content-in{font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt);font-size:21px;text-align:center}.ModalPageHeader--ios .ModalPageHeader__right{flex-grow:1;flex-basis:0;padding-left:12px;font-size:17px}.ModalPageHeader--ios .ModalPageHeader__right .PanelHeaderButton:not(:first-child){padding-left:12px}.ModalPageHeader--ios .ModalPageHeader__right .PanelHeaderButton .Icon--24{padding-left:12px;padding-right:12px}.ModalPageHeader--ios .ModalPageHeader__right .PanelHeaderButton--primitive{padding-right:16px}.ModalPageHeader--android .ModalPageHeader__left,.ModalPageHeader--vkcom .ModalPageHeader__left{padding-right:6px}.ModalPageHeader--android .ModalPageHeader__left:empty,.ModalPageHeader--vkcom .ModalPageHeader__left:empty{padding-right:12px}.ModalPageHeader--android .ModalPageHeader__left:not(:empty),.ModalPageHeader--vkcom .ModalPageHeader__left:not(:empty){padding-left:4px}.ModalPageHeader--android .ModalPageHeader__dismiss,.ModalPageHeader--vkcom .ModalPageHeader__dismiss{color:#99a2ad;color:var(--icon_secondary)}.ModalPageHeader--android .ModalPageHeader__content,.ModalPageHeader--vkcom .ModalPageHeader__content{max-width:100%;flex-grow:2}.ModalPageHeader--android .ModalPageHeader__content-in,.ModalPageHeader--vkcom .ModalPageHeader__content-in{font-size:20px;font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt);display:flex;align-items:center}.ModalPageHeader--android .ModalPageHeader__right,.ModalPageHeader--vkcom .ModalPageHeader__right{padding-left:6px}.ModalPageHeader--android .ModalPageHeader__right:not(:empty),.ModalPageHeader--vkcom .ModalPageHeader__right:not(:empty){padding-right:4px}.IconButton{-webkit-appearance:none;appearance:none;background:0 0;border:0;outline:0;box-shadow:none;display:block;color:currentColor;padding:0;margin:0;position:relative}.IconButton .Icon--16{padding:16px}.IconButton .Icon--16.Icon--w-8{padding:16px 14px}.IconButton .Icon--24{padding:12px}.IconButton .Icon--28{padding:10px}.IconButton[disabled]{opacity:.6}.IconButton--ios{height:48px}.IconButton--ios.Tappable--active{opacity:.7}.IconButton--android,.IconButton--vkcom{height:48px;border-radius:24px}.IconButton--android.Tappable--active .Icon,.IconButton--vkcom.Tappable--active .Icon{transition:inherit;border-radius:inherit;background-color:rgba(0,0,0,.08);background-color:var(--background_highlighted)}.Card{position:relative;background:#f5f5f5;background:var(--content_tint_background)}.Card__in{position:relative;z-index:2;border-radius:inherit}.Card--md-shadow{box-shadow:0 2px 24px 0 rgba(0,0,0,.08),0 0 2px 0 rgba(0,0,0,.08);background:#fff;background:var(--modal_card_background)}.Card--md-outline{background:#fff;background:var(--modal_card_background)}.Card--md-outline::before{position:absolute;left:0;top:0;width:100%;height:100%;content:'';display:block;border:1px solid #e1e3e6;border:var(--thin-border) solid var(--input_border);z-index:1;box-sizing:border-box;border-radius:inherit}.Card--ios.Card--sz-s{border-radius:6px}.Card--ios.Card--sz-m{border-radius:10px}.Card--ios.Card--sz-l{border-radius:10px}.Card--android,.Card--vkcom{border-radius:8px}.CardGrid{margin-top:-8px}.CardGrid::after{clear:both;content:'';display:block;width:100%}.CardGrid .Card{float:left;margin-top:8px;margin-left:4px;margin-right:4px}.CardGrid .Card--sz-l{width:calc(100% - 8px)}.CardGrid .Card--sz-m{width:calc((100% - 2*8px)/2)}.CardGrid .Card--sz-s{width:calc((100% - 3*8px)/3)}.CardGrid--ios{padding-left:8px;padding-right:8px}.CardGrid--android,.CardGrid--vkcom{padding-left:12px;padding-right:12px}.CardScroll__in{display:flex;align-items:stretch}.CardScroll .CardScroll__slide{margin-right:8px;flex-shrink:0}.CardScroll .CardScroll__slide:last-child{margin-right:0}.CardScroll__in::before,.CardScroll__in::after{content:'';display:block;flex-shrink:0}.CardScroll--ios .CardScroll__in::before,.CardScroll--ios .CardScroll__in::after{width:12px}.CardScroll--ios .CardScroll__slide--sz-l{width:calc(100% - 24px);margin-right:12px}.CardScroll--android .CardScroll__in::before,.CardScroll--android .CardScroll__in::after,.CardScroll--vkcom .CardScroll__in::before,.CardScroll--vkcom .CardScroll__in::after{width:16px}.CardScroll--android .CardScroll__slide--sz-l,.CardScroll--vkcom .CardScroll__slide--sz-l{width:calc(100% - 32px);margin-right:16px}.ContentCard__body{padding:12px 16px}.ContentCard__img{object-fit:cover;display:block}.ContentCard__caption:not(:last-child),.ContentCard__title:not(:last-child),.ContentCard__text:not(:last-child){margin-bottom:4px}.ContentCard__caption{color:#818c99;color:var(--text_secondary)}.ContentCard--ios .ContentCard__tappable{border-radius:10px}.ContentCard--ios .ContentCard__img{border-radius:10px 10px 0 0}.ContentCard--android .ContentCard__tappable,.ContentCard--vkcom .ContentCard__tappable{border-radius:8px}.ContentCard--android .ContentCard__img,.ContentCard--vkcom .ContentCard__img{border-radius:8px 8px 0 0}.Div--ios{padding:12px}.Div--android{padding:12px 16px}.Div--vkcom{padding:12px 16px}.Link{color:#3f8ae0;color:var(--accent);text-decoration:none;border:0;background:0 0;outline:0;margin:0;padding:0;cursor:pointer;font-size:inherit;display:inline}.Link .Icon{margin-left:4px;display:inline-block;vertical-align:middle}.Link.Tappable--shadowHovered,.Link.Tappable--active{opacity:.72}.Header{-webkit-user-select:text;user-select:text}.Header__in{display:flex;align-items:baseline;justify-content:space-between}.Header__main{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Header__content{display:flex;align-items:baseline}.Header__subtitle{color:#818c99;color:var(--text_secondary)}.Header--mode-primary .Header__main{color:#000;color:var(--text_primary)}.Header--mode-secondary .Header__main{color:#818c99;color:var(--text_secondary)}.Header--pi .Header__main{color:#000;color:var(--text_primary)}.Header--mode-tertiary .Header__main{color:#818c99;color:var(--text_secondary)}.Header__indicator{color:#818c99;color:var(--text_secondary);margin-left:6px}.Header:not(.Header--pi) .Header__indicator{align-self:center}.Header--mode-secondary .Header__indicator{margin-left:8px}.Header__aside{white-space:nowrap;margin-left:12px}.Header__aside>.Icon{position:relative;color:#99a2ad;color:var(--icon_secondary)}.Header__aside>.Icon--24{top:3px}.Header__aside>.Icon--16{top:1px}.Header__aside>.Icon--16{top:1px}.Header--ios .Header__in{padding:0 12px}.Header--ios .Header__subtitle{margin-top:1px}.Header--ios.Header--mode-primary .Header__main{margin:13px 0 9px}.Header--ios.Header--mode-primary .Header__content:not(:last-child){margin-top:-1px}.Header--ios.Header--mode-secondary .Header__main{margin:14px 0 10px}.Header--ios.Header--mode-tertiary .Header__main{margin:9px 0}.Header--android .Header__in{padding:0 16px}.Header--android .Header__subtitle{margin-top:1px}.Header--android.Header--mode-primary .Header__main{margin:15px 0 9px}.Header--android.Header--mode-primary .Header__content:not(:last-child){margin-top:-1px}.Header--android.Header--mode-secondary .Header__main{margin:15px 0 9px}.Header--android.Header--mode-tertiary .Header__main{margin:11px 0 9px}.Header--vkcom .Header__in{padding:0 16px;align-items:center;min-height:100%}.Header--vkcom .Header__subtitle{margin-top:2px}.Header--vkcom.Header--mode-primary{height:64px}.Header--vkcom.Header--mode-secondary{height:56px}.Header--vkcom.Header--mode-tertiary{height:40px}.Header--vkcom .Header__main{color:#000;color:var(--text_primary)}.Group{color:#000;color:var(--text_primary)}.Group__inner{padding-top:8px;padding-bottom:8px}.Group--sizeX-regular>.Group__inner{padding:8px}.Group--card>.Group__inner{background:#fff;background:var(--background_content);border-radius:8px;box-shadow:inset 0 0 0 1px #e1e3e6;box-shadow:inset 0 0 0 var(--thin-border) var(--input_border)}.Group--plain:not(:first-of-type) .Group__inner>.Header:first-child{margin-top:-16px}.Group--plain .Group__inner>.Tabs--default:first-child{margin-top:-8px}.Group--card>.Group__inner>.Header:not(.Header--mode-tertiary):first-child,.Group--card>.Group__inner>.Tabs--default:first-child{margin-top:-4px}.Group--plain>.Group__separator{padding-top:8px;padding-bottom:8px}.Group--sizeX-regular.Group--plain>.Group__separator{padding:8px}.Group:last-of-type>.Group__separator{display:none}.Group:last-of-type>.Group__separator--force,.Group--sizeX-regular.Group--card:last-of-type>.Group__separator{display:block}.Group__description{color:#818c99;color:var(--text_secondary)}.Group .Group>.Group__inner{padding-left:0;padding-right:0}.Group .Group>.Group__separator{padding-left:0;padding-right:0}.Group .Group:first-of-type>.Group__inner{padding-top:0}.Group .Group:last-of-type>.Group__inner{padding-bottom:0}.Group--ios .Group__description{padding:4px 12px 16px}.Group--android .Group__description,.Group--vkcom .Group__description{padding:4px 16px 16px}.PanelHeader--vkcom~.Group--card:first-of-type,.PanelHeader--vkcom+* .Group--card:first-of-type{position:relative;top:-1px}.PanelHeader--vkcom~.Group--card:first-of-type .Group__inner,.PanelHeader--vkcom+* .Group--card:first-of-type .Group__inner{border-top-right-radius:0;border-top-left-radius:0}body[scheme=bright_light] .Gradient--md-tint.Gradient--to-top,body[scheme=vkcom] .Gradient--md-tint.Gradient--to-top{background:linear-gradient(to top,#f5f5f5,rgba(245,245,245,.98),rgba(245,245,245,.94),rgba(245,245,245,.88),rgba(245,245,245,.8),rgba(245,245,245,.71),rgba(245,245,245,.61),rgba(245,245,245,.5),rgba(245,245,245,.39),rgba(245,245,245,.29),rgba(245,245,245,.2),rgba(245,245,245,.12),rgba(245,245,245,.06),rgba(245,245,245,.02),rgba(245,245,245,0))}body[scheme=bright_light] .Gradient--md-tint.Gradient--to-bottom,body[scheme=vkcom] .Gradient--md-tint.Gradient--to-bottom{background:linear-gradient(to bottom,#f5f5f5,rgba(245,245,245,.98),rgba(245,245,245,.94),rgba(245,245,245,.88),rgba(245,245,245,.8),rgba(245,245,245,.71),rgba(245,245,245,.61),rgba(245,245,245,.5),rgba(245,245,245,.39),rgba(245,245,245,.29),rgba(245,245,245,.2),rgba(245,245,245,.12),rgba(245,245,245,.06),rgba(245,245,245,.02),rgba(245,245,245,0))}body[scheme=space_gray] .Gradient--md-tint.Gradient--to-top{background:linear-gradient(to top,#232324,rgba(35,35,36,.98),rgba(35,35,36,.94),rgba(35,35,36,.88),rgba(35,35,36,.8),rgba(35,35,36,.71),rgba(35,35,36,.61),rgba(35,35,36,.5),rgba(35,35,36,.39),rgba(35,35,36,.29),rgba(35,35,36,.2),rgba(35,35,36,.12),rgba(35,35,36,.06),rgba(35,35,36,.02),rgba(35,35,36,0))}body[scheme=space_gray] .Gradient--md-tint.Gradient--to-bottom{background:linear-gradient(to bottom,#232324,rgba(35,35,36,.98),rgba(35,35,36,.94),rgba(35,35,36,.88),rgba(35,35,36,.8),rgba(35,35,36,.71),rgba(35,35,36,.61),rgba(35,35,36,.5),rgba(35,35,36,.39),rgba(35,35,36,.29),rgba(35,35,36,.2),rgba(35,35,36,.12),rgba(35,35,36,.06),rgba(35,35,36,.02),rgba(35,35,36,0))}.SimpleCell{display:flex;align-items:center;min-height:48px;white-space:nowrap;text-decoration:none;color:#000;color:var(--text_primary)}.SimpleCell--mult{white-space:normal}.SimpleCell--mult .SimpleCell__description,.SimpleCell--mult .SimpleCell__children{text-overflow:initial}.SimpleCell>.Avatar,.SimpleCell>.Icon{flex-shrink:0}.SimpleCell>.Icon{color:#3f8ae0;color:var(--accent)}.SimpleCell__main{max-width:100%;flex-grow:1;min-width:0;flex-shrink:initial;overflow:hidden}.SimpleCell>.Icon,.SimpleCell>.Avatar{padding-right:12px}.SimpleCell>.Icon--28{padding-right:16px}.SimpleCell>.Icon,.SimpleCell>.Avatar--sz-32,.SimpleCell>.Avatar--sz-28{padding-top:10px;padding-bottom:10px}.SimpleCell>.Avatar--sz-40{padding-top:4px;padding-bottom:4px}.SimpleCell>.Avatar--sz-48,.SimpleCell>.Avatar--sz-72{padding-top:6px;padding-bottom:6px}.SimpleCell__description{color:#818c99;color:var(--text_secondary);text-overflow:ellipsis;overflow:hidden;font-size:13px;line-height:16px;margin-top:3px}.SimpleCell>.Avatar--sz-32~.SimpleCell__main .SimpleCell__description,.SimpleCell>.Avatar--sz-28~.SimpleCell__main .SimpleCell__description{margin-top:2px}.SimpleCell__children{color:inherit;text-overflow:ellipsis;overflow:hidden}.SimpleCell__indicator{color:#818c99;color:var(--text_secondary);min-width:0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-left:4px}.SimpleCell__after{flex-shrink:0;display:flex;align-items:center;color:#3f8ae0;color:var(--accent)}.SimpleCell__after>.Icon{padding-left:8px}.SimpleCell__after>.Icon:last-child{padding-right:2px}.SimpleCell .Switch{padding-left:10px}.SimpleCell__after .IconButton .Icon--28,.SimpleCell__after .IconButton .Icon--28~*{margin-right:-8px}.SimpleCell__after .IconButton .Icon--24,.SimpleCell__after .IconButton .Icon--24~*{margin-right:-10px}.SimpleCell__after .IconButton .Icon--16,.SimpleCell__after .IconButton .Icon--16~*{margin-right:-14px}.SimpleCell__after .IconButton .Icon--w-8,.SimpleCell__after .IconButton .Icon--w-8~*{margin-right:-12px}.SimpleCell--ios{font-size:17px;line-height:22px;padding-left:12px;padding-right:12px}.SimpleCell--ios .SimpleCell__main,.SimpleCell--ios .SimpleCell__indicator{padding-top:9px;padding-bottom:11px}.SimpleCell--ios>.Avatar:not(.Avatar--sz-32)~.SimpleCell__main,.SimpleCell--ios>.Avatar:not(.Avatar--sz-32)~.SimpleCell__indicator{font-size:16px;line-height:20px}.SimpleCell--ios>.Icon--28,.SimpleCell--ios>.Avatar--sz-32,.SimpleCell--ios>.Avatar--sz-28{padding-left:4px}.SimpleCell--ios .SimpleCell__after .Icon--chevron_24{color:#b8c1cc;color:var(--icon_tertiary);padding-right:4px;padding-left:12px}.SimpleCell--ios .SimpleCell__after .IconButton .Icon--16,.SimpleCell--ios .SimpleCell__after .IconButton .Icon--16~*{margin-right:-12px}.SimpleCell--android,.SimpleCell--vkcom{font-size:16px;line-height:20px;padding-left:16px;padding-right:16px}.SimpleCell--android .SimpleCell__main,.SimpleCell--android .SimpleCell__indicator,.SimpleCell--vkcom .SimpleCell__main,.SimpleCell--vkcom .SimpleCell__indicator{padding-top:11px;padding-bottom:10px}.SimpleCell--sizeY-compact{min-height:44px}.SimpleCell--sizeY-compact .SimpleCell__main,.SimpleCell--sizeY-compact .SimpleCell__indicator{padding-top:10px;padding-bottom:10px}.SimpleCell--sizeY-compact>.Avatar--sz-40{padding-top:2px;padding-bottom:2px}.SimpleCell--sizeY-compact>.Avatar--sz-48{padding-top:4px;padding-bottom:4px}.SimpleCell--sizeY-compact>.Icon,.SimpleCell--sizeY-compact>.Avatar--sz-32,.SimpleCell--sizeY-compact>.Avatar--sz-28{padding-top:8px;padding-bottom:8px}.SimpleCell--sizeY-compact,.SimpleCell--sizeY-compact>.Avatar:not(.Avatar--sz-32)~.SimpleCell__main,.SimpleCell--sizeY-compact>.Avatar:not(.Avatar--sz-32)~.SimpleCell__indicator{font-size:15px;line-height:20px}.SimpleCell--sizeY-compact .SimpleCell__description,.SimpleCell--sizeY-compact>.Avatar--sz-32~.SimpleCell__main .SimpleCell__description,.SimpleCell--sizeY-compact>.Avatar--sz-28~.SimpleCell__main .SimpleCell__description{margin-top:1px}.Cell{position:relative;margin:0;padding:0;font-size:16px;line-height:22px}.List--dragging .Cell:not(.Cell--dragging){transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.List--dragging .Cell--dragging,.Cell--dragging{background-color:#fff;background-color:var(--background_content);box-shadow:0 0 5px rgba(0,0,0,.25);z-index:3}.Cell__dragger{position:relative}.Cell .Cell__dragger .Icon{color:#99a2ad;color:var(--icon_secondary)}.Cell__checkbox{display:none}.Cell__marker{width:24px;height:24px;border-radius:50%;border:2px solid #99a2ad;border:2px solid var(--icon_secondary);color:transparent;box-sizing:border-box;flex-shrink:0}.Cell__checkbox:checked~.Cell__marker{border:0;color:#fff;color:var(--white);background-color:#3f8ae0;background-color:var(--accent);padding:4px}.Cell--ios .Cell__in{transition:-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1),-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing),-webkit-transform .6s var(--ios-easing)}.Cell--ios.Cell--removable{overflow:hidden}.Cell--ios .Cell__remove{position:absolute;left:100%;height:100%;top:0;background-color:#e64646;background-color:var(--destructive);color:#fff;color:var(--white);padding:0 10px;line-height:45px;font-size:15px;transition:-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1),-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing),-webkit-transform .6s var(--ios-easing);display:flex;align-items:center;justify-content:center;flex-shrink:0}.Cell--ios .Cell__remove-in{flex-shrink:0}.Cell--ios .Cell__remove-marker{margin-right:12px;width:21px;height:21px;background-color:#e64646;background-color:var(--destructive);border-radius:50%;position:relative}.Cell--ios .Cell__remove-marker::before{position:absolute;left:6px;top:10px;width:9px;height:1px;background-color:#fff;background-color:var(--white);content:'';display:block}.Cell--ios .Cell__marker{margin-right:12px}.Cell--android .Cell__dragger,.Cell--vkcom .Cell__dragger{padding-right:16px}.Cell--android .Cell__remove-marker,.Cell--vkcom .Cell__remove-marker{color:#99a2ad;color:var(--icon_secondary)}.Cell--android .Cell__marker,.Cell--vkcom .Cell__marker{margin-right:16px}.CellButton{box-sizing:border-box;outline:0;text-decoration:none;margin:0;border:0;cursor:pointer;width:100%;background:0 0;text-align:left;padding-top:0;padding-bottom:0}.CellButton[disabled]{opacity:.4}.CellButton--centered{justify-content:center;text-align:center}.CellButton--centered .SimpleCell__main{flex-grow:initial;max-width:initial}.CellButton--centered>.Icon{padding-right:8px}.CellButton--primary,.CellButton--primary>.Icon,.CellButton--primary>.Avatar .Icon{color:#3f8ae0;color:var(--accent)}.CellButton--danger,.CellButton--danger>.Icon,.CellButton--danger>.Avatar .Icon{color:#e64646;color:var(--destructive)}.RichCell{display:flex;min-height:64px;box-sizing:border-box;white-space:nowrap;text-decoration:none;color:#000;color:var(--text_primary)}.RichCell--mult{white-space:normal}.RichCell--mult .RichCell__children,.RichCell--mult .RichCell__caption,.RichCell--mult .RichCell__text{text-overflow:initial}.RichCell>.Avatar{padding-right:12px;padding-top:8px;padding-bottom:8px;flex-shrink:0}.RichCell__in{flex-grow:1;max-width:100%;min-width:0;overflow:hidden;display:flex;flex-direction:column;justify-content:center;position:relative;padding-top:8px;padding-bottom:8px}.RichCell__top{font-size:0;line-height:0}.RichCell__top>:first-child:not(.RichCell__content){display:none;pointer-events:none}.RichCell__top>.Icon--28:first-child~*{margin-right:32px}.RichCell__content{display:flex}.RichCell__after{flex-shrink:0;padding-left:4px;white-space:nowrap}.RichCell__after .Icon--28{position:absolute;right:0;color:#3f8ae0;color:var(--accent)}.RichCell>.Avatar--sz-72+.RichCell__in .RichCell__after .Icon--28{top:22px}.RichCell>.Avatar--sz-48+.RichCell__in .RichCell__after .Icon--28{top:10px}.RichCell__children{flex-grow:1;max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis}.RichCell__text{overflow:hidden;text-overflow:ellipsis}.RichCell__caption{margin-top:1px;color:#818c99;color:var(--text_secondary);overflow:hidden;text-overflow:ellipsis}.RichCell__bottom .UsersStack{padding:5px 0 0}.RichCell__actions{display:flex;margin-top:8px}.RichCell__actions .Button:not(:last-child){margin-right:8px}.RichCell--ios{padding-right:12px;padding-left:12px}.RichCell--android,.RichCell--vkcom{padding-right:16px;padding-left:16px}.RichCell--sizeY-compact{min-height:60px}.RichCell>.Avatar--sz-48{padding-top:6px;padding-bottom:6px}.RichCell--sizeY-compact .RichCell__actions{margin-top:11px}.RichCell--sizeY-compact .UsersStack+.RichCell__actions{margin-top:12px}.HorizontalCell{padding-bottom:6px;display:flex}.HorizontalCell__image{display:flex;justify-content:center}.HorizontalCell__content{word-break:break-all}.HorizontalCell__subtitle{color:#818c99;color:var(--text_secondary);line-height:18px}.HorizontalCell--s{width:72px}.HorizontalCell--s .HorizontalCell__image{padding:4px 8px}.HorizontalCell--s .HorizontalCell__content{padding:2px 4px;text-align:center}.HorizontalCell--m{width:100px}.HorizontalCell--l{width:auto}.HorizontalCell--m .HorizontalCell__image,.HorizontalCell--l .HorizontalCell__image{padding:4px 6px}.HorizontalCell--m .HorizontalCell__content,.HorizontalCell--l .HorizontalCell__content{padding:2px 6px;text-align:left}.HorizontalCell--ios:first-child::before,.HorizontalCell--ios:last-child::after{content:"";width:4px}.HorizontalCell--ios.HorizontalCell--s:first-child,.HorizontalCell--ios.HorizontalCell--s:last-child{width:78px}.HorizontalCell--ios.HorizontalCell--m:first-child,.HorizontalCell--ios.HorizontalCell--m:last-child{width:106px}.HorizontalCell--android:first-child::before,.HorizontalCell--android:last-child::after,.HorizontalCell--vkcom:first-child::before,.HorizontalCell--vkcom:last-child::after{content:"";min-width:8px}.HorizontalCell--android.HorizontalCell--s:first-child,.HorizontalCell--android.HorizontalCell--s:last-child,.HorizontalCell--vkcom.HorizontalCell--s:first-child,.HorizontalCell--vkcom.HorizontalCell--s:last-child{width:80px}.HorizontalCell--android.HorizontalCell--m:first-child,.HorizontalCell--android.HorizontalCell--m:last-child,.HorizontalCell--vkcom.HorizontalCell--m:first-child,.HorizontalCell--vkcom.HorizontalCell--m:last-child{width:116px}.Footer{margin:24px 0;font-size:13px;color:#818c99;color:var(--text_secondary);line-height:16px;font-weight:400;text-align:center}.Div.Footer{padding-top:0;padding-bottom:0}:root{--duration: .7s}.Spinner{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#99a2ad;color:var(--icon_outline_secondary)}.PanelHeader .Spinner{color:currentColor}.Spinner__self{-webkit-animation:rotator .7s linear infinite;animation:rotator .7s linear infinite;-webkit-animation:rotator var(--duration) linear infinite;animation:rotator var(--duration) linear infinite;-webkit-transform-origin:center;transform-origin:center}.Spinner__self svg{-webkit-transform:scale(1);transform:scale(1)}@-webkit-keyframes rotator{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotator{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.Switch{display:block}.Switch__self{display:none}.Switch__pseudo{position:relative;display:block;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent}.Switch__pseudo::before{position:absolute;content:''}.Switch__self:checked+.Switch__pseudo::before{-webkit-transform:translateX(20px);transform:translateX(20px)}.Switch--ios .Switch__pseudo{width:51px;height:31px;border:2px solid #e1e3e6;border:2px solid var(--switch_ios_off_border);background:0 0;border-radius:15px;box-sizing:border-box;transition:background-color .2s ease,border-color .2s ease}.Switch--ios.Switch--sizeY-compact .Switch__pseudo{width:47px;height:27px;border-radius:13px}.Switch--ios .Switch__self:checked+.Switch__pseudo{border-color:#3f8ae0;border-color:var(--accent);background:#3f8ae0;background:var(--accent)}.Switch--ios .Switch__self[disabled]+.Switch__pseudo{opacity:.4}.Switch--ios .Switch__pseudo::before{top:0;left:0;width:27px;height:27px;border-radius:13px;background:#fff;background:var(--white);box-shadow:0 3px 8px rgba(0,0,0,.15),0 3px 1px rgba(0,0,0,.06),inset 0 0 0 .5px rgba(0,0,0,.04);transition:-webkit-transform .2s cubic-bezier(.36,-.24,.26,1.32);transition:transform .2s cubic-bezier(.36,-.24,.26,1.32);transition:transform .2s cubic-bezier(.36,-.24,.26,1.32),-webkit-transform .2s cubic-bezier(.36,-.24,.26,1.32)}.Switch--ios.Switch--sizeY-compact .Switch__pseudo::before{width:23px;height:23px;border-radius:11px}.Switch--ios .Switch__self:checked+.Switch__pseudo::before{-webkit-transform:translateX(20px);transform:translateX(20px)}.Switch--android,.Switch--vkcom{padding:3px}.Switch--android .Switch__pseudo{width:34px;height:14px;background:#c6c5c5;border-radius:7px;transition:background-color .1s ease}.Switch--android.Switch--sizeY-compact .Switch__pseudo{width:32px;height:12px;border-radius:6px}.Switch--android .Switch__self:checked+.Switch__pseudo{background:#a8bfdb}.Switch--android .Switch__self[disabled]+.Switch__pseudo{opacity:.4}.Switch--android .Switch__pseudo::before{top:-3px;left:-3px;width:20px;height:20px;background:#f1f1f1;border-radius:10px;box-shadow:0 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.24);transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease,-webkit-transform .1s ease}.Switch--android.Switch--sizeY-compact .Switch__pseudo::before{width:18px;height:18px;border-radius:9px}.Switch--android .Switch__self:checked+.Switch__pseudo::before{background:#3f8ae0;background:var(--accent)}.Switch--android.Switch--sizeY-compact .Switch__self:checked+.Switch__pseudo::before{-webkit-transform:translateX(19px);transform:translateX(19px)}.Switch--vkcom .Switch__pseudo{width:28px;height:10px}.Switch--vkcom .Switch__pseudo::after{content:'';display:block;border-radius:45px;transition:background-color .1s ease;width:100%;height:100%;background:#b8c1cc;background:var(--icon_tertiary);opacity:.48}.Switch--vkcom .Switch__self:checked+.Switch__pseudo::after{background:#3f8ae0;background:var(--accent);opacity:.48}.Switch--vkcom .Switch__self[disabled]+.Switch__pseudo{opacity:.4}.Switch--vkcom .Switch__pseudo::before{top:-3px;left:-2px;width:16px;height:16px;background:#f9f9f9;background:var(--background_light);border:1px solid #b8c1cc;border:1px solid var(--icon_tertiary);border-radius:8px;box-sizing:border-box;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease,-webkit-transform .1s ease;z-index:1}.Switch--vkcom .Switch__self:checked+.Switch__pseudo::before{background:#3f8ae0;background:var(--accent);border:0;-webkit-transform:translateX(16px);transform:translateX(16px)}.InfoRow{-webkit-user-select:text;user-select:text;text-overflow:ellipsis;overflow:hidden}.InfoRow__header{margin-bottom:2px;color:#6d7885;color:var(--text_subhead);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Avatar{box-sizing:border-box}.Avatar__in{position:relative;color:#99a2ad;color:var(--icon_secondary)}.Avatar__img{background:rgba(0,28,61,.08);background:var(--placeholder_icon_background);border:0;display:block;width:100%;height:100%;position:relative;z-index:1}.Avatar__shadow{position:absolute;left:0;top:0;width:100%;height:100%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);box-shadow:inset 0 0 0 1px var(--image_border);pointer-events:none;z-index:2}.Avatar__children{position:absolute;left:0;top:0;z-index:2;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.Gallery{position:relative;overflow:hidden;height:100px}.Gallery__viewport{margin:0;height:100%;position:relative}.Gallery--center .Gallery__viewport{margin:0 auto}.Gallery__layer{display:flex;width:100%;height:100%;cursor:grab;align-items:stretch}.Gallery__slide{width:100%;height:100%;flex:0 0 auto;max-width:100%;overflow:hidden}.Gallery--custom-width .Gallery__slide{width:auto}.Gallery__slide>*{width:100%;height:100%}.Gallery__bullets{position:absolute;bottom:10px;height:6px;width:100%;left:0;display:flex;align-items:center;justify-content:center}.Gallery__bullets--dark .Gallery__bullet{background-color:#000}.Gallery__bullets--light .Gallery__bullet{background-color:#fff}.Gallery__bullet{height:6px;width:6px;border-radius:50%;margin:0 3px;opacity:.56}.Gallery__bullet--active{opacity:1}.Progress{border-radius:1px;background:#e1e3e6;background:var(--loader_track_fill);height:2px}.Progress__in{height:100%;border-radius:inherit;transition:width .2s ease;background:#3f8ae0;background:var(--accent)}.Search{overflow:hidden;font-weight:400;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);line-height:normal}.Search__in{position:relative}.Search__width{height:36px;height:var(--search_default_height);white-space:nowrap;color:transparent;width:10000px}.Search__control{display:flex;justify-content:flex-start;align-items:center;position:absolute;left:0;top:0;width:calc(100% - 1px);height:100%;border-radius:10px}.Search__input{border:0;margin:0;height:36px;height:var(--search_default_height);position:relative;padding:0 22px 0 36px;box-sizing:border-box;font-size:17px;outline:0;border-radius:10px;max-width:100%;flex-grow:1;min-width:0;background-color:transparent;z-index:2;color:#000;color:var(--text_primary)}.Search--has-after .Search__input{border-radius:10px 0 0 10px}.Search--has-value .Search__input,.Search--has-icon .Search__input,.Search--has-value .Search__placeholder,.Search--has-icon .Search__placeholder{padding-right:40px}.Search--has-icon.Search--has-value .Search__input,.Search--has-icon.Search--has-value .Search__placeholder{padding-right:80px}.Search__after-width{font-size:17px;height:36px;height:var(--search_default_height);line-height:36px;line-height:var(--search_default_height);padding-left:12px;padding-right:4px;flex-shrink:0}.Search__placeholder{position:absolute;left:0;width:100%;cursor:text;z-index:1;text-align:left;height:36px;height:var(--search_default_height);font-size:0;padding-left:12px;padding-right:22px;pointer-events:none;box-sizing:border-box;display:flex}.Search__placeholder-in{height:36px;height:var(--search_default_height);display:flex;align-items:center;overflow:hidden;flex-grow:1;max-width:100%}.Search__placeholder-text{margin-left:8px;line-height:22px;font-size:17px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.Search--has-value .Search__placeholder-text{opacity:0}.Search__icons{position:absolute;right:100%;top:0;display:flex;align-items:center;justify-content:center;color:#818c99;color:var(--search_bar_field_tint)}.Search__icon{width:40px;height:36px;height:var(--search_default_height);display:flex;align-items:center;justify-content:center}.Search__icon.Tappable--active{opacity:.7}.Search__after{position:absolute;left:100%;top:0;line-height:36px;line-height:var(--search_default_height);z-index:2;-webkit-transform:translate(0);transform:translate(0);transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);cursor:default}.Search--focused .Search__after,.Search--has-value .Search__after{-webkit-transform:translate(-100%);transform:translate(-100%)}.Search__after::before{position:absolute;right:calc(100% - 1px);display:block;height:100%;width:10px;content:'';pointer-events:none}.Search__after-in{position:relative;z-index:2;cursor:pointer;font-size:17px;padding-left:12px;padding-right:4px}.Search__after::after{position:absolute;right:100%;display:block;height:100%;width:10px;content:'';top:0;border-radius:0 10px 10px 0;cursor:text;pointer-events:none}.Group--plain .Search{padding-top:4px}.Search{background:#fff;background:var(--search_bar_background)}.Search__control{background-color:#ebedf0;background-color:var(--search_bar_field_background)}.Search__input{color:#000;color:var(--text_primary)}.Search__placeholder{color:#818c99;color:var(--search_bar_field_tint)}.Search__after-width{background:#ebedf0;background:var(--search_bar_field_background);color:#ebedf0;color:var(--search_bar_field_background)}.Search__after{background:#fff;background:var(--search_bar_background);color:#3f8ae0;color:var(--accent)}.Search__after::after{background-color:#ebedf0;background-color:var(--search_bar_field_background)}.Search__after::before{background-color:#fff;background-color:var(--search_bar_background)}.PanelHeader .Search{background:#fff;background:var(--header_background)}.PanelHeader .Search__control{background-color:#ebedf0;background-color:var(--header_search_field_background)}.PanelHeader .Search__input{color:#000;color:var(--text_primary)}.PanelHeader .Search__placeholder{color:#818c99;color:var(--header_search_field_tint)}.PanelHeader .Search__after-width{background:#ebedf0;background:var(--header_search_field_background);color:#ebedf0;color:var(--header_search_field_background)}.PanelHeader .Search__after{background:#fff;background:var(--header_background);color:#3f8ae0;color:var(--header_tint)}.PanelHeader .Search__after::after{background-color:#ebedf0;background-color:var(--header_search_field_background)}.PanelHeader .Search__after::before{background-color:#fff;background-color:var(--header_background)}.Search--ios{padding:8px 12px}.Search--android{padding:8px 16px}.Search--vkcom,.PanelHeader--vkcom .Search{background:0 0}.Search--vkcom .Search__in{padding-top:6px;padding-bottom:6px}.Search--vkcom .Search__input{font-size:15px;line-height:20px;padding-left:40px}.Search--vkcom .Search__placeholder{padding-left:16px}.Search--vkcom .Search__icons{top:4px;right:calc(100% + 8px)}.Search--vkcom.Search--has-value .Search__input{padding-right:56px}.Search--vkcom.Search--has-icon.Search--has-value .Search__input{padding-right:92px}.Search--vkcom .Search__icon{width:40px;height:40px}.Search--vkcom .Search__icon:hover{background-color:rgba(0,0,0,.04);background-color:var(--background_hover);border-radius:50%}.Search--vkcom .Search__control{background-color:transparent}.PanelHeader--vkcom .Search__separator{display:none}.Search--vkcom .Search__separator{color:#e1e3e6;color:var(--input_border)}.Group--card .Search--vkcom{margin:-8px -8px 0}.Group--card .Search--vkcom:not(:last-child){margin-bottom:8px}.Group--card .Search--vkcom .Search__placeholder{padding-left:20px}.Group--card .Search--vkcom .Search__input{padding-left:44px}.Tabs__in,.Tabs .HorizontalScroll__in-wrapper{display:flex;align-items:center}.PanelHeader .Tabs{overflow:hidden;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.PanelHeader .Tabs::after{display:block;width:1000px;content:''}.Tabs .HorizontalScroll{min-width:100%}.Tabs--buttons{padding-top:8px;padding-bottom:8px}.Tabs--default,.Tabs--default .HorizontalScroll__in-wrapper{justify-content:center}.Tabs--buttons,.Tabs--default .HorizontalScroll__in-wrapper{justify-content:flex-start}.Tabs--sizeX-compact.Tabs--buttons .HorizontalScroll__in-wrapper::after,.Tabs--sizeX-compact.Tabs--buttons .HorizontalScroll__in-wrapper::before{display:block;width:8px;flex-shrink:0;height:1px;content:''}.Tabs--ios.Tabs--segmented{padding:4px 12px 8px}.FixedLayout--ios.FixedLayout--bottom .Tabs::after{position:absolute;left:0;top:0;width:100%;height:100%;content:'';background:#fff;background:var(--background_content)}.FixedLayout--ios.FixedLayout--bottom .Tabs__in,.FixedLayout--ios.FixedLayout--bottom .Separator{position:relative;z-index:2}.TabsItem .Counter{margin-left:8px}.Tabs .TabsItem .Counter{background:#76787a;background:var(--panel_tab_inactive_text);color:#fff;color:var(--white)}.Tabs .TabsItem--selected .Counter{background:#5d5f61;background:var(--panel_tab_active_text);color:#ebedf0;color:var(--panel_tab_active_background)}.Tabs--ios.Tabs--segmented .TabsItem .Counter{background:#99a2ad;background:var(--segmented_control_tint);color:#fff;color:var(--background_content)}.Tabs--ios.Tabs--segmented .TabsItem--selected .Counter{background:#fff;background:var(--background_content);color:#99a2ad;color:var(--segmented_control_tint)}.Tabs--ios.Tabs--segmented .TabsItem .Counter--s-m{position:relative;top:1px}.TabsItem{white-space:nowrap;text-align:center;font-weight:500;box-sizing:border-box;flex-shrink:0;display:flex;align-items:baseline;justify-content:center}.Tabs--default .TabsItem{font-size:16px;line-height:20px;color:#818c99;color:var(--text_secondary);max-width:100%;min-width:0;flex-basis:0;flex-shrink:0;flex-grow:1;position:relative;padding-left:16px;padding-right:16px}.Tabs--default .TabsItem__in{overflow:hidden;text-overflow:ellipsis;padding:14px 0}.Tabs--default .TabsItem::after{content:'';display:block;position:absolute;left:16px;bottom:8px;width:calc(100% - 32px);height:2px;border-radius:2px}.Tabs--default .TabsItem--selected{color:#000;color:var(--text_primary)}.Tabs--default .TabsItem--selected::after{background:#3f8ae0;background:var(--accent)}.HorizontalScroll .TabsItem{min-width:64px;flex-basis:auto}.Tabs--buttons .TabsItem{border-radius:10px;box-sizing:border-box;padding:0 16px;font-size:14px;line-height:18px;font-weight:500}.Tabs--buttons .TabsItem__in{padding:6px 0}.Tabs--buttons .Tabs__in>.TabsItem:first-child{margin-left:8px}.Tabs--buttons .TabsItem:not(:last-child){margin-right:8px}.Tabs--buttons .TabsItem{background-color:#fff;background-color:var(--header_background);color:#99a2ad;color:var(--header_tab_inactive_text)}.Tabs--buttons .TabsItem--selected{background-color:transparent;background-color:var(--header_tab_active_background);color:#000;color:var(--header_tab_active_text)}.Tabs--buttons .TabsItem{color:#76787a;color:var(--panel_tab_inactive_text)}.Tabs--buttons .TabsItem--selected{background-color:#ebedf0;background-color:var(--panel_tab_active_background);color:#5d5f61;color:var(--panel_tab_active_text)}.Tabs--ios.Tabs--segmented .TabsItem{border:1px solid;font-size:14px;line-height:18px;padding:0 12px;max-width:100%;flex-basis:0;flex-shrink:0;flex-grow:1}.Tabs--ios.Tabs--segmented .TabsItem__in{padding:7px 0}.Tabs--ios.Tabs--segmented .TabsItem:not(:first-child){border-left:none}.Tabs--ios.Tabs--segmented .TabsItem:last-child{border-radius:0 10px 10px 0}.Tabs--ios.Tabs--segmented .TabsItem:first-child{border-radius:10px 0 0 10px}.Tabs--ios.Tabs--segmented .TabsItem{border-color:#99a2ad;border-color:var(--segmented_control_tint);color:#99a2ad;color:var(--segmented_control_tint)}.Tabs--ios.Tabs--segmented .TabsItem--selected{background-color:#99a2ad;background-color:var(--segmented_control_tint)}.Tabs--ios.Tabs--segmented .TabsItem--selected{color:#fff;color:var(--background_content)}.Tabs--ios.Tabs--segmented .TabsItem:not(.TabsItem--selected).Tappable--active{background:#d7d8d9;background:var(--separator_common)}.PanelHeader--ios .Tabs--segmented.TabsItem:not(.TabsItem--selected).Tappable--active .TabsItem__in{opacity:.7}.PanelHeader--ios .Tabs--segmented .TabsItem{border-color:#3f8ae0;border-color:var(--header_tint);color:#3f8ae0;color:var(--header_tint)}.Tabs--ios.Tabs--segmented.Tabs--header .TabsItem--selected{background-color:#3f8ae0;background-color:var(--header_tint);color:#fff;color:var(--header_background)}.TabsItem--android .Tappable__waves,.TabsItem--vkcom .Tappable__waves{display:none}.Tabs--vkcom .TabsItem--vkcom{flex-grow:0;min-width:auto;font-size:15px;line-height:20px;font-weight:400;padding-left:10px;padding-right:10px}.Tabs--vkcom .TabsItem--vkcom::after{left:2px;bottom:0;width:calc(100% - 4px)}.Tooltip{position:absolute;left:0;top:0;height:100%;width:100%;z-index:2}.Tooltip__container{position:absolute}.Tooltip__corner{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDIwIDgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+dG9vbHRpcF90aXA8L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iTWFzdGVyLUtpdCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+ICAgICAgICA8cGF0aCBkPSJNMTAsMCBDMTMuNSwwIDE1LjUsOCAyMCw4IEwwLDggQzQuNSw4IDYuNSwwIDEwLDAgWiIgaWQ9InRvb2x0aXBfdGlwIiBmaWxsPSIjNDdhM2ZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4gICAgPC9nPjwvc3ZnPg==);width:20px;height:8px;position:absolute}.Tooltip--light .Tooltip__corner{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDIwIDgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+dG9vbHRpcF90aXA8L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iTWFzdGVyLUtpdCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+ICAgICAgICA8cGF0aCBkPSJNMTAsMCBDMTMuNSwwIDE1LjUsOCAyMCw4IEwwLDggQzQuNSw4IDYuNSwwIDEwLDAgWiIgaWQ9InRvb2x0aXBfdGlwIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4gICAgPC9nPjwvc3ZnPg==)}.Tooltip--y-bottom .Tooltip__corner{bottom:100%}.Tooltip--y-top .Tooltip__corner{-webkit-transform:rotate(180deg);transform:rotate(180deg);top:100%}.Tooltip__content{background-color:#47a3ff;box-shadow:0 4px 32px 0 rgba(0,0,0,.16),0 0 4px 0 rgba(0,0,0,.04);padding:6px 16px;border-radius:10px;font-size:14px;color:#fff;line-height:1.29;max-width:220px}.Tooltip--light .Tooltip__content{background:#fff;color:#2c2d2e}.Tooltip__title{font-weight:600}.PullToRefresh{flex-grow:1}.PullToRefresh--refreshing{touch-action:none;pointer-events:none}.PullToRefresh__controls{left:0;width:100%;pointer-events:none;z-index:9}.PullToRefresh--ios .PullToRefresh__controls{z-index:0}.PullToRefresh__spinner{display:flex;margin:auto;width:40px;height:40px;align-items:center;justify-content:center;box-sizing:border-box;transition:opacity 220ms ease-out,-webkit-transform 300ms cubic-bezier(.1,0,.25,1);transition:transform 300ms cubic-bezier(.1,0,.25,1),opacity 220ms ease-out;transition:transform 300ms cubic-bezier(.1,0,.25,1),opacity 220ms ease-out,-webkit-transform 300ms cubic-bezier(.1,0,.25,1);opacity:0}.PullToRefresh--ios .PullToRefresh__spinner{color:#99a2ad;color:var(--icon_outline_secondary)}.PullToRefresh--android .PullToRefresh__spinner,.PullToRefresh--vkcom .PullToRefresh__spinner{background:#fff;background:var(--background_suggestions);border-radius:50%;box-shadow:0 2px 6px rgba(0,0,0,.2);color:#3f8ae0;color:var(--accent)}.PullToRefresh--watching .PullToRefresh__spinner{transition:opacity 220ms ease-out}.PullToRefresh__spinner-self{stroke:currentColor}.PullToRefresh--ios.PullToRefresh--refreshing .PullToRefresh__spinner-self{-webkit-animation:PullToRefreshToRefreshing 380ms ease-out;animation:PullToRefreshToRefreshing 380ms ease-out}.PullToRefresh__spinner-path{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:center center;transform-origin:center center;transition:stroke-dashoffset 167ms ease-out}.PullToRefresh--watching .PullToRefresh__spinner-path,.PullToRefresh--refreshing .PullToRefresh__spinner-path{transition:none}.PullToRefresh__spinner--on .PullToRefresh__spinner-path{-webkit-animation:rotator .7s linear infinite;animation:rotator .7s linear infinite;-webkit-animation:rotator var(--duration) linear infinite;animation:rotator var(--duration) linear infinite}.PullToRefresh__content{overflow:hidden;transition:-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1),-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing),-webkit-transform 400ms var(--ios-easing)}.PullToRefresh--watching .PullToRefresh__content{transition:none}@-webkit-keyframes PullToRefreshToRefreshing{0%{-webkit-transform:scale(1);transform:scale(1)}30%{-webkit-transform:scale(.6);transform:scale(.6)}90%{-webkit-transform:scale(1.1);transform:scale(1.1)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes PullToRefreshToRefreshing{0%{-webkit-transform:scale(1);transform:scale(1)}30%{-webkit-transform:scale(.6);transform:scale(.6)}90%{-webkit-transform:scale(1.1);transform:scale(1.1)}to{-webkit-transform:scale(1);transform:scale(1)}}.Counter{display:flex;align-items:center;justify-content:center}.Counter__in{text-align:center;box-sizing:border-box}.Counter--primary{background:#3f8ae0;background:var(--counter_primary_background);color:#fff;color:var(--counter_primary_text)}.Counter--secondary{background:#aeb7c2;background:var(--counter_secondary_background);color:#fff;color:var(--counter_secondary_text)}.Counter--prominent{background:#ff3347;background:var(--counter_prominent_background);color:#fff;color:var(--counter_prominent_text)}.Counter--s-m{height:24px;border-radius:12px}.Counter--s-m .Counter__in{min-width:24px;padding:2px 5px;font-size:15px;line-height:20px}.Counter--s-s{height:18px;border-radius:9px}.Counter--s-s .Counter__in{min-width:18px;padding:1px 5px;font-size:12px;line-height:16px}.Counter--vkcom.Counter--s-s .Counter__in{font-weight:400;line-height:14px;padding-top:2px;padding-bottom:2px;letter-spacing:.2px}.Counter--vkcom.Counter--s-m .Counter__in{padding-left:6px;padding-right:6px;font-weight:500;letter-spacing:.2px}.UsersStack{display:flex;align-items:center;color:#818c99;color:var(--text_secondary)}.UsersStack__photos{display:flex}.UsersStack__photo{background-position:center;background-repeat:no-repeat;background-size:cover;border-radius:50%}.UsersStack__photo--others{display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:#fff;background:#99a2ad;background:var(--content_placeholder_icon)}.UsersStack--size-s .UsersStack__photo{width:24px;height:24px}.UsersStack--size-m .UsersStack__photo{width:32px;height:32px}.UsersStack__photo+.UsersStack__photo{margin-left:4px}.UsersStack:not(.UsersStack--simple) .UsersStack__photo+.UsersStack__photo{margin-left:-2px}.UsersStack--size-s:not(.UsersStack--simple) .UsersStack__photo+.UsersStack__photo{-webkit-clip-path:url(#users_stack_mask_24_left);clip-path:url(#users_stack_mask_24_left)}.UsersStack--size-m:not(.UsersStack--simple) .UsersStack__photo+.UsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_left);clip-path:url(#users_stack_mask_32_left)}.UsersStack--size-m.UsersStack--others:not(.UsersStack--simple) .UsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_right);clip-path:url(#users_stack_mask_32_right)}.UsersStack--size-m.UsersStack--others:not(.UsersStack--simple) .UsersStack__photo:last-child{-webkit-clip-path:none;clip-path:none}.UsersStack__text{min-width:0;flex:1;margin:0 0 0 8px;font-size:13px;line-height:16px}.UsersStack--l-vertical{flex-direction:column;justify-content:center}.UsersStack--l-vertical .UsersStack__text{margin:8px 0 0;text-align:center}.Separator{color:#d7d8d9;color:var(--separator_common)}.Separator__in:not(.Separator__in--expanded){height:1px;background:currentColor;-webkit-transform-origin:center top;transform-origin:center top}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.Separator__in:not(.Separator__in--expanded){-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.Separator__in:not(.Separator__in--expanded){-webkit-transform:scaleY(.32);transform:scaleY(.32)}}.Separator__in--expanded{height:16px;background:0 0}.Separator:not(.Separator--wide).Separator--ios .Separator__in{margin-left:12px;margin-right:12px}.Separator:not(.Separator--wide).Separator--android .Separator__in,.Separator:not(.Separator--wide).Separator--vkcom .Separator__in{margin-left:16px;margin-right:16px}.Placeholder{display:flex;align-items:center;justify-content:center}.Placeholder--stretched{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;padding-top:inherit;padding-bottom:inherit}.Placeholder__in{text-align:center;box-sizing:border-box;padding:48px 32px}.Placeholder__icon{margin-bottom:12px;display:inline-block;vertical-align:top;color:#aeb7c2;color:var(--placeholder_icon_foreground_secondary)}.Placeholder__header{color:#000;color:var(--text_primary)}.Placeholder__text{color:#818c99;color:var(--text_placeholder)}.Placeholder__header+.Placeholder__text{margin-top:8px}.Placeholder__action:not(:first-child){margin-top:24px}.Placeholder__action .Button--lvl-tertiary{top:-8px}.Banner{color:#000;color:var(--text_primary);margin:12px 0}.Banner__in{display:flex;position:relative;overflow:hidden}.Banner__in.Tappable--active{opacity:.6}.Banner__in::before{position:absolute;left:0;top:0;width:100%;height:100%;content:'';display:block;border:1px solid rgba(0,0,0,.08);border:var(--thin-border) solid var(--image_border);z-index:3;box-sizing:border-box;border-radius:inherit;pointer-events:none}.Banner__before{margin-right:12px}.Banner__content{display:flex;justify-content:center;flex-direction:column;flex:1;min-width:0}.Banner__subheader{color:#6d7885;color:var(--text_subhead)}.Banner__bg{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.Banner__bg>*{width:100%;height:100%}.Banner__expand{align-self:center;color:#b8c1cc;color:var(--icon_tertiary);margin-left:12px}.Banner__dismiss{width:28px}.Banner__dismissIcon{position:absolute;top:0;right:0;z-index:2;width:48px;height:48px;display:flex;align-items:center;justify-content:center;color:#b8c1cc;color:var(--icon_tertiary)}.Banner__dismissIcon:active{opacity:.4}.Banner__actions{margin-bottom:-6px}.Banner__actions>.Button{margin-top:12px;margin-right:16px;margin-bottom:6px}.Banner__actions>.Button--lvl-tertiary{margin:4px 16px 2px -16px}.Banner__actions>.Button--lvl-tertiary:first-child{margin-top:4px}.Banner__actions>.Button:not(.Button--lvl-tertiary)+.Button:not(.Button--lvl-tertiary){margin-top:0}.Banner__actions>.Button:not(.Button--lvl-tertiary)+.Button--lvl-tertiary{margin-top:2px;margin-left:-16px}.Banner__actions>.Button--lvl-tertiary+.Button--lvl-tertiary{margin-top:2px}.Banner--sz-s .Banner__subheader:not(:first-child),.Banner--sz-s .Banner__text:not(:first-child){margin-top:2px}.Banner--sz-m .Banner__subheader:not(:first-child),.Banner--sz-m .Banner__text:not(:first-child){margin-top:4px}.Banner--md-tint .Banner__in,.Banner--md-tint .Banner__in.Tappable--active{background-color:#f5f5f5;background-color:var(--content_tint_background)}.Banner--md-tint .Banner__in{padding:12px}.Banner--md-tint.Banner--sz-s .Banner__before{margin-right:8px}.Banner--md-tint.Banner--sz-s .Banner__content{padding-left:4px}.Banner--md-tint.Banner--sz-m .Banner__in{padding:16px}.Banner--md-image .Banner__in,.Banner--md-image .Banner__in.Tappable--active{background-color:#f5f5f5;background-color:var(--content_tint_background);padding:12px 16px}.Banner--md-image .Banner__before,.Banner--md-image .Banner__content{position:relative;z-index:2}.Banner--inverted{color:#fff;color:var(--white)}.Banner--inverted .Banner__subheader{color:#fff;color:var(--white);opacity:.72}.Banner--md-image.Banner--sz-m .Banner__in{padding:16px}.Banner--ios{padding:0 12px}.Banner--ios .Banner__in{border-radius:10px}.Banner--android,.Banner--vkcom{padding:0 16px}.Banner--android .Banner__in,.Banner--vkcom .Banner__in{border-radius:8px}.Banner--android .Banner__dismissIcon,.Banner--vkcom .Banner__dismissIcon{color:#99a2ad;color:var(--icon_secondary)}.Banner--android.Banner--md-image .Banner__dismissIcon,.Banner--vkcom.Banner--md-image .Banner__dismissIcon{color:#fff;color:var(--white)}.MiniInfoCell{display:flex;padding-top:6px;padding-bottom:6px}.MiniInfoCell--lvl-primary{color:#000;color:var(--text_primary)}.MiniInfoCell--lvl-secondary{color:#6d7885;color:var(--text_subhead)}.MiniInfoCell__icon{color:#99a2ad;color:var(--icon_outline_secondary)}.MiniInfoCell__content{flex:1;min-width:0;margin-left:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.MiniInfoCell--wr-short .MiniInfoCell__content{white-space:initial;display:-webkit-box;max-height:60px;-webkit-line-clamp:3;-webkit-box-orient:vertical}.MiniInfoCell--wr-full .MiniInfoCell__content{overflow:inherit;white-space:initial}.MiniInfoCell__after{margin-left:12px;margin-top:-2px;margin-bottom:-2px}.MiniInfoCell__after .UsersStack{padding:0}.MiniInfoCell--md-add,.MiniInfoCell--md-add .MiniInfoCell__icon{color:#3f8ae0;color:var(--accent)}.MiniInfoCell--md-more,.MiniInfoCell--md-more .MiniInfoCell__icon{color:#4986cc;color:var(--link_alternate)}.MiniInfoCell--md-more{padding-top:10px;padding-bottom:10px}.MiniInfoCell--ios{padding-left:12px;padding-right:12px}.MiniInfoCell--android{padding-left:16px;padding-right:16px}.MiniInfoCell--vkcom{padding-left:12px;padding-right:12px}.WriteBar{background:#fff;background:var(--background_content)}.WriteBar__before,.WriteBar__form,.WriteBar__after{display:flex;align-items:flex-end}.WriteBar__form{min-height:52px}.WriteBar__formIn{flex:1;min-width:0;display:flex;position:relative}.WriteBar__textarea{box-sizing:border-box;width:100%;flex:1;min-width:0;margin:0;background:0 0;border:0;outline:0;resize:none;line-height:20px;color:#000;color:var(--text_primary);-webkit-appearance:none;max-height:120px}.WriteBar__textarea::-webkit-input-placeholder{color:#818c99;color:var(--text_placeholder)}.WriteBar__textarea::placeholder{color:#818c99;color:var(--text_placeholder)}.WriteBar__textarea::-moz-placeholder{opacity:1;color:#818c99;color:var(--text_placeholder)}.WriteBar__inlineAfter{display:flex;align-items:flex-end}.WriteBar--ios .WriteBar__before,.WriteBar--ios .WriteBar__after{padding:0 4px}.WriteBar--ios .WriteBar__formIn{box-sizing:border-box;background-color:#f2f3f5;background-color:var(--input_background);border:1px solid #e1e3e6;border:1px solid var(--input_border);border-radius:18px;margin:8px 0}.WriteBar--ios .WriteBar__formIn:first-child{margin-left:12px}.WriteBar--ios .WriteBar__inlineAfter{margin-right:-1px;margin-top:-9px;margin-bottom:-9px}.WriteBar--ios .WriteBar__textarea{height:34px;padding:6px 11px;font-size:17px;line-height:22px}.WriteBar--android .WriteBar__before,.WriteBar--vkcom .WriteBar__before{padding-left:4px}.WriteBar--android .WriteBar__after,.WriteBar--vkcom .WriteBar__after{padding-right:4px}.WriteBar--android .WriteBar__textarea,.WriteBar--vkcom .WriteBar__textarea{height:52px;padding:16px 12px;font-size:16px;line-height:20px}.WriteBarIcon{background:0 0;border:0;outline:0;position:relative;color:#3f8ae0;color:var(--writebar_icon);height:52px;display:flex;align-items:center;justify-content:center;cursor:pointer}.WriteBarIcon--disabled{opacity:.4;pointer-events:none}.WriteBarIcon:active{opacity:.6}.WriteBarIcon__count{box-sizing:border-box;position:absolute;top:4px;right:4px;display:flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 2px;border:2px solid #fff;border:2px solid var(--background_content);text-align:center;color:#fff;color:var(--button_commerce_foreground);background:#4bb34b;background:var(--button_commerce_background);border-radius:50%}.WriteBarIcon--send:not(.WriteBarIcon--disabled){color:#3f8ae0;color:var(--accent)}.WriteBarIcon--ios{width:44px;color:#3f8ae0;color:var(--writebar_icon)}.WriteBarIcon--ios.WriteBarIcon--send,.WriteBarIcon--ios.WriteBarIcon--done{width:48px}.WriteBarIcon--ios.WriteBarIcon--send:first-child,.WriteBarIcon--ios.WriteBarIcon--done:first-child{margin-left:-4px}.WriteBarIcon--ios.WriteBarIcon--send:last-child,.WriteBarIcon--ios.WriteBarIcon--done:last-child{margin-right:-4px}.WriteBarIcon--android,.WriteBarIcon--vkcom{width:44px;color:#99a2ad;color:var(--icon_secondary)}.WriteBarIcon--android.WriteBarIcon--send,.WriteBarIcon--vkcom.WriteBarIcon--send,.WriteBarIcon--android.WriteBarIcon--done,.WriteBarIcon--vkcom.WriteBarIcon--done{color:#3f8ae0;color:var(--accent)}.FormLayout{position:relative}.FormLayout__submit{position:absolute;visibility:hidden;pointer-events:none;left:0;top:0;padding:0;width:0;height:0;-webkit-appearance:none;appearance:none;border:0}.FormItem{padding-top:12px;padding-bottom:12px;display:block}.FormItem__top{padding-top:2px;padding-bottom:8px;color:#818c99;color:var(--text_secondary)}.FormItem--sizeY-compact .FormItem__top{padding-bottom:6px}.FormItem__bottom{color:#818c99;color:var(--text_secondary);padding-top:8px}.FormItem--sizeY-compact .FormItem__bottom{padding-top:6px}.FormItem--error .FormItem__bottom{color:#e64646;color:var(--field_error_border)}.FormItem--valid .FormItem__bottom,.FormItem--verified .FormItem__bottom{color:#4bb34b;color:var(--field_valid_border)}.FormItem--ios{padding-left:12px;padding-right:12px}.FormItem--ios .Cell,.FormItem--ios .SimpleCell,.FormItem--ios .RichCell,.FormItem--ios .CellButton,.FormItem--ios .Radio,.FormItem--ios .Checkbox{width:100%;box-sizing:content-box;margin-left:-12px;margin-right:-12px}.FormItem--android,.FormItem--vkcom{padding-left:16px;padding-right:16px}.FormItem--android .Cell,.FormItem--vkcom .Cell,.FormItem--android .SimpleCell,.FormItem--vkcom .SimpleCell,.FormItem--android .RichCell,.FormItem--vkcom .RichCell,.FormItem--android .CellButton,.FormItem--vkcom .CellButton,.FormItem--android .Radio,.FormItem--vkcom .Radio,.FormItem--android .Checkbox,.FormItem--vkcom .Checkbox{width:100%;box-sizing:content-box;margin-left:-16px;margin-right:-16px}.FormLayoutGroup--horizontal{flex-direction:row;display:flex}.FormLayoutGroup--horizontal>.FormItem{max-width:100%;flex-grow:1;flex-shrink:0;flex-basis:0;padding-left:0;padding-right:0;min-width:0}.FormLayoutGroup--horizontal>.FormItem+.FormItem{margin-left:24px}.FormLayoutGroup--ios.FormLayoutGroup--horizontal{padding-left:12px;padding-right:12px}.FormLayoutGroup--android.FormLayoutGroup--horizontal,.FormLayoutGroup--vkcom.FormLayoutGroup--horizontal{padding-left:16px;padding-right:16px}.FormStatus{border-radius:10px;padding:12px;background:#f2f3f5;background:var(--field_background);color:#6d7885;color:var(--text_subhead)}.FormStatus__header,.FormStatus b:first-child{color:#000;color:var(--text_primary)}.FormStatus__header:not(:last-child),.FormStatus b:first-child{margin-bottom:2px}.FormStatus--error{background:#faebeb;background:var(--field_error_background);color:#e64646;color:var(--field_error_border)}.FormStatus--error .FormStatus__header,.FormStatus--error .FormStatus b:first-child{color:currentColor}.FormStatus b:first-child{display:block;font-size:16px;line-height:20px;font-weight:500}.Slider{position:relative;z-index:0;height:28px;padding:0 14px}.Slider::before{position:absolute;left:0;width:100%;background-color:rgba(0,28,61,.08);background-color:var(--placeholder_icon_background);content:'';z-index:-1;top:13px;height:2px;border-radius:1px}.Slider__in{height:100%;position:relative}.Slider__dragger{position:absolute;left:0;width:0;height:0;top:13px}.Slider__dragger::before{position:absolute;top:0;width:calc(100% + 28px);background:#3f8ae0;background:var(--accent);content:'';left:-14px;height:2px;border-radius:1px}.Slider__thumb{position:absolute;top:-13px;width:28px;height:28px;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease,-webkit-transform .1s ease;border-radius:14px;background:#fff;background:var(--white);box-shadow:0 3px 8px rgba(0,0,0,.15)}.Slider__thumb--start{left:-14px}.Slider__thumb--end{right:-14px}.Slider--sizeY-compact{height:24px;padding:0 12px}.Slider--sizeY-compact::before{top:11px}.Slider--sizeY-compact .Slider__dragger{top:11px}.Slider--sizeY-compact .Slider__dragger::before{width:calc(100% + 24px);left:-12px}.Slider--sizeY-compact .Slider__thumb{top:-11px;width:24px;height:24px}.Slider--sizeY-compact .Slider__thumb--start{left:-12px}.Slider--sizeY-compact .Slider__thumb--end{right:-12px}.Slider--vkcom{height:20px;padding:0 10px}.Slider--vkcom::before{top:8px;height:4px;border-radius:2px}.Slider--vkcom .Slider__dragger{top:8px}.Slider--vkcom .Slider__dragger::before{width:calc(100% + 20px);background:#3f8ae0;background:var(--accent);left:-10px;height:4px;border-radius:2px}.Slider--vkcom .Slider__thumb{top:-8px;width:20px;height:20px;border-radius:10px;border:1px solid #e1e3e6;border:1px solid var(--input_border);box-shadow:0 0 2px #d7d8d9,0 2px 4px #d7d8d9;box-shadow:0 0 2px var(--separator_common),0 2px 4px var(--separator_common);box-sizing:border-box}.Slider--vkcom .Slider__thumb--start{left:-10px}.Slider--vkcom .Slider__thumb--end{right:-10px}.FormField{position:relative;box-sizing:border-box;padding:1px}.FormField__border{position:absolute;left:0;top:0;width:100%;height:100%;border:1px solid rgba(0,0,0,.12);border:1px solid var(--field_border);background:#f2f3f5;background:var(--field_background);content:'';border-radius:10px;box-sizing:border-box;z-index:1;-webkit-transform-origin:left top;transform-origin:left top}.Textarea .Textarea__el:not(:disabled)~.FormField__border--hover,.Select:not(.Select--disabled) .FormField__border--hover,.Input .Input__el:not(:disabled)~.FormField__border--hover,.ChipsInput:not(.ChipsInput--disabled) .ChipsInput__container~.FormField__border--hover{border-color:rgba(0,0,0,.24);border-color:var(--icon_tertiary_alpha)}.FormField--ios{border-radius:10px}.FormField--android{border-radius:8px}.FormField--vkcom{border-radius:6px}.FormField>*{border-radius:inherit}.FormItem--error .FormField__border{background:#faebeb;background:var(--field_error_background);border-color:#e64646;border-color:var(--field_error_border)}.FormItem--valid .FormField__border{border-color:#4bb34b;border-color:var(--field_valid_border)}.Textarea .Textarea__el:disabled~.FormField__border,.Select .Select__el:disabled~.FormField__border,.Input .Input__el:disabled~.FormField__border,.ChipsInput.ChipsInput--disabled .ChipsInput__container~.FormField__border{opacity:.4}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.FormField--ios .FormField__border{border-radius:20px;-webkit-transform:scale(.5);transform:scale(.5);width:200%;height:200%}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.FormField--ios .FormField__border{border-radius:31.25px;-webkit-transform:scale(.32);transform:scale(.32);width:312.5%;height:312.5%}}.FormField.Input .Input__el:focus~.FormField__border,.FormField.Textarea .Textarea__el:focus~.FormField__border,.FormField.Select .Select__el:focus~.FormField__border,.FormField.Select--mimicry:focus .FormField__border,.FormField.ChipsInput--focused .ChipsInput__container~.FormField__border{border-color:#3f8ae0;border-color:var(--accent);background:#f2f3f5;background:var(--field_background)}.CustomSelect__open.Select--mimicry:focus .FormField__border{border-color:rgba(0,0,0,.12);border-color:var(--field_border)}.FormField--ios.CustomSelect__open .FormField__border,.FormField--ios.ChipsSelect__open .FormField__border{border-radius:10px 10px 0 0}.FormField--android.CustomSelect__open .FormField__border,.FormField--android.ChipsSelect__open .FormField__border{border-radius:8px 8px 0 0}.FormField--vkcom.CustomSelect__open .FormField__border,.FormField--vkcom.ChipsSelect__open .FormField__border{border-radius:6px 6px 0 0}.FormField--ios.CustomSelect__open.CustomSelect__open--popupDirectionTop .FormField__border,.FormField--ios.ChipsSelect__open.ChipsSelect__open--popupDirectionTop .FormField__border{border-radius:0 0 10px 10px}.FormField--android.CustomSelect__open.CustomSelect__open--popupDirectionTop .FormField__border,.FormField--android.ChipsSelect__open.ChipsSelect__open--popupDirectionTop .FormField__border{border-radius:0 0 8px 8px}.FormField--vkcom.CustomSelect__open.CustomSelect__open--popupDirectionTop .FormField__border,.FormField--vkcom.ChipsSelect__open.ChipsSelect__open--popupDirectionTop .FormField__border{border-radius:0 0 6px 6px}.Radio{display:block}.Radio__input{display:none}.Radio__container{display:flex;align-items:center;justify-content:flex-start}.Radio__input:disabled~.Radio__container{opacity:.6}.Radio__icon{flex-shrink:0;box-sizing:border-box;border-radius:50%;position:relative}.Radio__icon::after{position:absolute;content:'';display:block;border-radius:50%;box-sizing:border-box}.Radio__content{flex-grow:1;max-width:100%;color:#000;color:var(--text_primary)}.Radio__description{color:#818c99;color:var(--text_secondary)}.Radio--ios{padding:0 12px}.Radio--ios .Radio__icon{width:22px;height:22px;border:2px solid #b8c1cc;border:2px solid var(--icon_tertiary);margin:1px 12px 1px 1px;transition:border-color .15s cubic-bezier(.36,.66,.04,1);transition:border-color .15s var(--ios-easing)}.Radio--ios.Radio--sizeY-compact .Radio__icon{width:18px;height:18px;margin-right:11px}.Radio--ios .Radio__input:checked~.Radio__container .Radio__icon{border-color:#3f8ae0;border-color:var(--accent)}.Radio--ios .Radio__icon::after{width:14px;height:14px;left:2px;top:2px;-webkit-transform:scale(.3);transform:scale(.3);transition:-webkit-transform .15s cubic-bezier(.36,.66,.04,1);transition:transform .15s cubic-bezier(.36,.66,.04,1);transition:transform .15s cubic-bezier(.36,.66,.04,1),-webkit-transform .15s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .15s var(--ios-easing);transition:transform .15s var(--ios-easing);transition:transform .15s var(--ios-easing),-webkit-transform .15s var(--ios-easing)}.Radio--ios.Radio--sizeY-compact .Radio__icon::after{top:1px;left:1px;width:12px;height:12px}.Radio--ios .Radio__input:checked~.Radio__container .Radio__icon::after{background-color:#3f8ae0;background-color:var(--accent);-webkit-transform:scale(1);transform:scale(1)}.Radio--ios .Radio__children{margin-top:11px}.Radio--ios .Radio__children:last-child{margin-bottom:13px}.Radio--ios .Radio__description{margin-bottom:12px;margin-top:1px}.Radio--android{padding:0 16px}.Radio--android .Radio__icon{width:22px;height:22px;border:2px solid #b8c1cc;border:2px solid var(--icon_tertiary);margin:1px 12px 1px 1px;transition:border-color .5s cubic-bezier(.36,.66,.04,1);transition:border-color .5s var(--ios-easing)}.Radio--android.Radio--sizeY-compact .Radio__icon{width:18px;height:18px;margin-right:11px}.Radio--android .Radio__icon::after{width:14px;height:14px;left:2px;top:2px;-webkit-transform:scale(.3);transform:scale(.3);transition:-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1),-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing),-webkit-transform .5s var(--ios-easing)}.Radio--android.Radio--sizeY-compact .Radio__icon::after{top:1px;left:1px;width:12px;height:12px}.Radio--android .Radio__input:checked~.Radio__container .Radio__icon{border-color:#3f8ae0;border-color:var(--accent)}.Radio--android .Radio__input:checked~.Radio__container .Radio__icon::after{background-color:#3f8ae0;background-color:var(--accent);-webkit-transform:scale(1);transform:scale(1)}.Radio--android .Radio__children{margin-top:12px}.Radio--android .Radio__children:last-child{margin-bottom:12px}.Radio--android .Radio__description{margin-top:1px;margin-bottom:11px}.Radio--vkcom{padding:0 16px}.Radio--vkcom .Radio__icon{width:16px;height:16px;margin:2px 14px 2px 2px;border:1px solid #99a2ad;border:1px solid var(--icon_secondary);border-radius:50%;transition:border-color .5s cubic-bezier(.36,.66,.04,1);transition:border-color .5s var(--ios-easing)}.Radio--vkcom .Radio__icon::after{width:8px;height:8px;left:3px;top:3px;-webkit-transform:scale(.3);transform:scale(.3);transition:-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1),-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing),-webkit-transform .5s var(--ios-easing)}.Radio--vkcom .Radio__input:disabled~.Radio__container{opacity:.4}.Radio--vkcom .Radio__input:checked~.Radio__container .Radio__icon{border-color:#3f8ae0;border-color:var(--accent)}.Radio--vkcom .Radio__input:checked~.Radio__container .Radio__icon::after{background-color:#3f8ae0;background-color:var(--accent);-webkit-transform:scale(1);transform:scale(1)}.Radio--vkcom .Radio__children{margin-top:10px}.Radio--vkcom .Radio__children:last-child{margin-bottom:10px}.Radio--vkcom .Radio__description{margin-top:1px;margin-bottom:9px}.Radio--sizeY-compact .Radio__children{margin-top:8px}.Radio--sizeY-compact .Radio__children:last-child{margin-bottom:8px}.Radio--sizeY-compact .Radio__description{margin-bottom:7px}.Checkbox{display:block}.Checkbox__input{display:none}.Checkbox__container{display:flex;align-items:flex-start;justify-content:flex-start}.Checkbox__icon{flex-shrink:0;box-sizing:border-box;margin-right:12px;border-radius:4px;display:flex;line-height:24px}.Checkbox__icon--on{color:#3f8ae0;color:var(--accent);display:none}.Checkbox__icon--off{color:#b8c1cc;color:var(--icon_tertiary)}.Checkbox__content{flex-grow:1;color:#000;color:var(--text_primary)}.Checkbox__input:checked~.Checkbox__container .Checkbox__icon--on{display:flex}.Checkbox__input:checked~.Checkbox__container .Checkbox__icon--off{display:none}.Checkbox__input[disabled]~.Checkbox__container{opacity:.6}.Checkbox--ios{padding:0 12px}.Checkbox--ios .Checkbox__icon{margin-top:10px}.Checkbox--ios.Checkbox--sizeY-compact .Checkbox__icon{margin-top:8px}.Checkbox--ios .Checkbox__content{margin-top:12px;margin-bottom:12px}.Checkbox--android{padding:0 16px}.Checkbox--android .Checkbox__icon{margin-top:10px}.Checkbox--android.Checkbox--sizeY-compact .Checkbox__icon{margin-top:8px}.Checkbox--android .Checkbox__content{margin-top:12px;margin-bottom:12px}.Checkbox--vkcom{padding:0 16px}.Checkbox--vkcom .Checkbox__icon{border-radius:3px;padding:1px;border-width:1px;margin-top:8px}.Checkbox--vkcom .Checkbox__input[disabled]~.Checkbox__container{opacity:.4}.Checkbox--sizeY-compact .Checkbox__content{margin-top:8px;margin-bottom:8px}.Input{position:relative;line-height:19px;font-size:16px}.Input--center .Input__el{text-align:center}.Input--right .Input__el{text-align:right}.Input__el{margin:0;width:100%;display:block;box-sizing:border-box;box-shadow:none;border:0;outline:0;-webkit-appearance:none;appearance:none;text-overflow:ellipsis;height:42px;line-height:19px;font-size:16px;color:#000;color:var(--text_primary);padding:11px;position:relative;z-index:2;background:0 0}.Input--sizeY-compact .Input__el{height:34px;padding-top:9px;padding-bottom:9px;line-height:20px;font-size:15px}.Input__el:disabled{opacity:.4}.Input__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder)}.Input__el::placeholder{color:#818c99;color:var(--field_text_placeholder)}.Input__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary)}.Input__el:disabled::placeholder{color:#818c99;color:var(--text_secondary)}.ChipsInput{display:flex;position:relative;padding:4px 14px;box-sizing:border-box}.ChipsInput.ChipsInput--sizeY-compact{padding:2px 12px}.ChipsInput__container{display:flex;width:100%;flex-wrap:wrap;position:relative;z-index:2}.ChipsInput__chip{margin:2px 12px 2px -8px;max-width:calc(100% - 8px)}.ChipsInput__input-container{display:flex;flex-direction:column;flex:1;margin:2px 0}.ChipsInput__el{line-height:26px;margin-bottom:2px;font-size:15px;color:#000;color:var(--text_primary);border:0;outline:0;width:100%;box-sizing:border-box;box-shadow:none;-webkit-appearance:none;appearance:none;position:relative;z-index:2;background:0 0;padding:0}.ChipsInput__el:focus{min-width:64px}.ChipsInput:focus{outline:0}.ChipsInput__el::-ms-clear{display:none}.ChipsInput__el:disabled{opacity:.4}.ChipsInput__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder)}.ChipsInput__el::placeholder{color:#818c99;color:var(--field_text_placeholder)}.ChipsInput__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary)}.ChipsInput__el:disabled::placeholder{color:#818c99;color:var(--text_secondary)}.Chip{display:inline-block;border:1px solid rgba(0,0,0,.08);border:1px solid var(--image_border);background:#fff;background:var(--background_content);border-radius:4px;height:28px;box-sizing:border-box}.Chip__in{display:flex;height:100%;padding:0 8px;align-items:center}.Chip__content{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#000;color:var(--text_primary);font-size:13px;line-height:16px;display:inline-block}.Chip__remove{margin-left:4px;margin-right:-2px;cursor:pointer}.Chip__before{margin-right:6px}.Chip__after{margin-left:6px}.Select{display:block;position:relative;box-sizing:border-box}.Select--mimicry:focus{outline:0}.Select__el{display:block;position:absolute;-webkit-appearance:none;appearance:none;outline:0;border:0;left:0;top:0;width:100%;height:100%;opacity:0;z-index:3;font-size:16px}.Select__container{line-height:19px;font-size:16px;padding:12px 39px 11px 11px;color:#000;color:var(--text_primary);box-sizing:border-box;height:42px;position:relative;z-index:2;cursor:pointer}.Select__el{cursor:pointer}.Select--disabled .Select__el{cursor:default}.Select--disabled .Select__container{opacity:.4;cursor:default}.Select:not(.Select--multiline) .Select__title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Select--not-selected .Select__title{color:#818c99;color:var(--field_text_placeholder)}.Select--disabled.Select--not-selected .Select__title{color:#818c99;color:var(--text_secondary)}.Select--align-right .Select__title{text-align:right}.Select--align-center .Select__title{text-align:center}.Select .Icon{position:absolute;top:50%;margin-top:-12px;right:10px;color:#99a2ad;color:var(--icon_secondary)}.Select--multiline .Select__container{height:auto;min-height:42px}.Select--sizeY--compact .Select__container{padding:11px 35px 11px 11px}.Select--sizeX--compact .Icon--h-12{margin-top:-6px}.Select--sizeY--compact .Select__container{height:34px;padding-top:7px;padding-bottom:7px;font-size:15px;line-height:20px}.Select--sizeY--compact .Icon--h-16{margin-top:-8px}.Textarea{position:relative}.Textarea__el{margin:0;width:100%;display:block;box-sizing:border-box;outline:0;resize:none;-webkit-appearance:none;appearance:none;line-height:19px;font-size:16px;color:#000;color:var(--text_primary);padding:11px;min-height:84px;max-height:196px;border:0;z-index:2;position:relative;background:0 0}.Textarea--sizeY-compact .Textarea__el{padding-top:7px;padding-bottom:7px;font-size:15px;line-height:20px;min-height:54px}.Textarea__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder)}.Textarea__el::placeholder{color:#818c99;color:var(--field_text_placeholder)}.Textarea__el:disabled{opacity:.4}.Textarea__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary)}.Textarea__el:disabled::placeholder{color:#818c99;color:var(--text_secondary)}.File__input{display:none}.CustomScrollView{width:100%;height:100%;overflow:hidden;position:relative}.CustomScrollView__box{width:100%;height:100%;overflow-y:scroll;overflow-x:hidden;padding-right:100px;scrollbar-width:none}.CustomScrollView__box::-webkit-scrollbar{display:none}.CustomScrollView__box--dragging{pointer-events:none}.CustomScrollView__barY{position:absolute;top:0;right:0;height:100%;width:10px}.CustomScrollView__trackerY{width:10px;box-sizing:border-box;padding:4px 4px 4px 0;position:absolute;top:0;left:0;-webkit-user-select:none;user-select:none}.CustomScrollView__trackerY::before{content:'';opacity:.28;display:block;width:100%;height:100%;background:#000;background:var(--music_playback_icon);border-radius:12px;transition:opacity 200ms,-webkit-transform 200ms;transition:transform 200ms,opacity 200ms;transition:transform 200ms,opacity 200ms,-webkit-transform 200ms}.CustomScrollView__trackerY:hover::before,.CustomScrollView__trackerY--dragging::before{opacity:.56;-webkit-transform:scaleX(1.34);transform:scaleX(1.34)}.CustomSelect{width:100%;position:relative;cursor:pointer;display:block}.CustomSelect__control{display:none}.CustomSelect__options{width:100%;overflow:hidden;position:absolute;background-color:#fff;background-color:var(--modal_card_background);box-sizing:border-box;border:solid 1px rgba(0,0,0,.12);border:solid 1px var(--field_border);border-top:0;box-shadow:0 2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03);border-radius:0 0 8px 8px;max-height:160px;z-index:3}.CustomSelect__options--popupDirectionTop{bottom:100%;border-radius:8px 8px 0 0;border-top:unset;border-bottom:0;box-shadow:0 -2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03)}.CustomSelect__options .CustomScrollView__box{max-height:160px}.CustomSelectOption__selectedIcon{position:absolute;top:15px;right:12px}.CustomSelect__options--sizeY-compact .CustomSelectOption{height:36px;padding:10px 9px;font-size:15px}.CustomSelect__options--sizeY-compact .CustomSelectOption__selectedIcon{top:11px}.CustomSelectOption{width:100%;height:44px;display:flex;align-items:center;position:relative;box-sizing:border-box;font-size:15px;padding:10px 36px 10px 12px;white-space:nowrap;-webkit-user-select:none;user-select:none;cursor:pointer}.CustomSelectOption--hover{background-color:#f2f3f5;background-color:var(--button_muted_background)}.CustomSelectOption__before{margin-right:7px}.CustomSelectOption__after{margin-left:7px}.CustomSelectOption__selectedIcon{position:absolute;top:15px;right:12px}.DatePicker{margin:0;padding:0;border:0}.DatePicker__container{width:100%;display:flex;flex-direction:row}.DatePicker__month{display:flex;flex:1 0 auto;padding:0 8px}.DatePicker__month .Select{width:100%}.SliderSwitch{display:flex;position:relative;width:100%;height:44px;border-radius:8px;box-sizing:border-box;background-color:#f2f3f5;background-color:var(--field_background);transition:all 100ms ease-out;outline:0}.SliderSwitch__button{width:50%;height:100%;margin:0;padding:0;border:0;display:flex;align-items:center;justify-content:center;box-sizing:border-box;cursor:pointer;background:0 0;line-height:20px;font-family:inherit;font-weight:500;font-size:15px;color:#6d7885;color:var(--text_subhead);transition:color 100ms ease-out;outline:0;-webkit-user-select:none;user-select:none;z-index:1;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.SliderSwitch__button--focus{box-shadow:inset 0 0 0 1px #3f8ae0;box-shadow:inset 0 0 0 1px var(--accent)}.SliderSwitch__button--ios{border-radius:10px}.SliderSwitch__button--android,.SliderSwitch__button--vkcom{border-radius:8px}.SliderSwitch__button--hover{color:#99a2ad;color:var(--text_tertiary)}.SliderSwitch__border{position:absolute;left:50%;top:8px;width:1px;height:28px;opacity:.5;background-color:#b8c1cc;background-color:var(--toolbar_attach_background_from)}.SliderSwitch__button--active{color:#000;color:var(--text_primary);transition:-webkit-transform 150ms ease-in;transition:transform 150ms ease-in;transition:transform 150ms ease-in,-webkit-transform 150ms ease-in}.SliderSwitch__button--activeHover{color:#000;color:var(--header_alternate_tab_active_text)}.SliderSwitch__slider{position:absolute;width:calc(50% - 4px);height:40px;margin:2px;border-radius:6px;transition:margin-left 150ms}.SliderSwitch--firstActive{margin-left:2px;background-color:#fff;background-color:var(--background_content)}.SliderSwitch--secondActive{margin-left:calc(50% + 2px);background-color:#fff;background-color:var(--background_content)}.PromoBanner{width:100%;box-sizing:border-box;outline:1px solid rgba(0,0,0,.12);outline:1px solid var(--separator_alpha);color:#000;color:var(--text_primary);background:#fff;background:var(--background_content);padding-bottom:10px;position:relative}.PromoBanner__head{display:flex;padding-top:14px;padding-bottom:10px;color:#818c99;color:var(--text_secondary)}.PromoBanner__age{margin-left:6px}.PromoBanner__close{position:absolute;top:0;right:0;width:48px;height:48px;color:#99a2ad;color:var(--placeholder_icon_foreground_primary);display:flex;justify-content:center;align-items:center}.PromoBanner__close:active{opacity:.7}.PromoBanner__pixels{display:none}.PromoBanner--ios .PromoBanner__head{padding-left:12px;padding-right:12px}.PromoBanner--android .PromoBanner__head,.PromoBanner--vkcom .PromoBanner__head{padding-left:16px;padding-right:16px}html,body,div#root{margin:0;padding:0;height:100%;-webkit-font-smoothing:subpixel-antialiased;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);color:#000;color:var(--text_primary)}body{overflow-x:hidden}.vkui-sizeX-regular{background:#ebedf0;background:var(--background_page)}input,textarea,select,button{font-family:inherit}#root{-webkit-user-select:none;user-select:none}a:focus{outline:0} \ No newline at end of file diff --git a/e2e/index.ts b/e2e/index.ts new file mode 100644 index 0000000000..c6af58cf0e --- /dev/null +++ b/e2e/index.ts @@ -0,0 +1,12 @@ +export async function screenshot(render: any, options = {}) { + console.log('start screenshoting...'); + await page.goto('http://localhost:9000'); + console.log('goto done'); + await page.evaluate(({ code }) => { + const api = Object.assign({}, window['vkui'], { React: window['React'], ReactDOM: window['ReactDOM'] }); + const jsx = eval(`(${code})(api);`); + api.ReactDOM.render(jsx, document.getElementById('mount')); + }, { code: render.toString() }); + console.log('script injected'); + return page.screenshot({ fullPage: true }); +} diff --git a/e2e/matchers.ts b/e2e/matchers.ts new file mode 100644 index 0000000000..579dbe11f8 --- /dev/null +++ b/e2e/matchers.ts @@ -0,0 +1,3 @@ +import { toMatchImageSnapshot } from 'jest-image-snapshot'; + +expect.extend({ toMatchImageSnapshot }); diff --git a/e2e/react-playwright.js b/e2e/react-playwright.js new file mode 100644 index 0000000000..05d76246c2 --- /dev/null +++ b/e2e/react-playwright.js @@ -0,0 +1,57 @@ +const PlaywrightEnvironment = require('jest-playwright-preset/lib/PlaywrightEnvironment').default; +const webpack = require('webpack'); +const WebpackDevServer = require('webpack-dev-server'); +const webpackConfig = require('../webpack.config.js'); +const path = require('path'); + +module.exports = class ReactPlaywrightEnvironment extends PlaywrightEnvironment { + async setup() { + const { externals, resolve = {}, output = {}, ...baseWebpackConfig } = webpackConfig + const compiler = webpack({ + ...baseWebpackConfig, + entry: { + main: path.join(__dirname, './browser-env.js'), + }, + output: { + ...output, + path: path.resolve(__dirname, 'dist'), + }, + resolve: { + ...resolve, + alias: { + ...resolve.alias, + // 'jest-puppeteer-react-plugin': path.resolve(__dirname, 'render.browser.js'), + } + } + }); + const compilerHooks = new Promise((resolve, reject) => { + compiler.hooks.done.tapAsync('jest-puppeteer-react-plugin', (stats, callback) => { + console.log('done'); + if (stats.hasErrors()) { + // spinner.fail('Webpack build failed'); + reject(stats); + } else { + // spinner.succeed('Webpack build finished'); + resolve(stats); + } + callback(); + }); + }); + + this.devServer = new WebpackDevServer(compiler, { + contentBase: path.join(__dirname, 'dist'), + }); + this.devServer.listen(9000); + + await compilerHooks + console.log('compiler done') + + await super.setup() + console.log('playwright done') + } + + async teardown() { + await super.teardown(); + this.devServer.close(); + } +} \ No newline at end of file diff --git a/jest.e2e.config.js b/jest.e2e.config.js new file mode 100644 index 0000000000..8970d6201b --- /dev/null +++ b/jest.e2e.config.js @@ -0,0 +1,19 @@ +const base = require('./jest.config') + +module.exports = { + ...base, + testMatch: ['**/*.e2e.{ts,tsx}'], + preset: 'jest-playwright-preset', + collectCoverage: false, + setupFilesAfterEnv: [ + ...(base.setupFilesAfterEnv || []), + './e2e/matchers.ts' + ], + testEnvironment: './e2e/react-playwright.js', + testEnvironmentOptions: { + ...(base.testEnvironmentOptions || {}), + 'jest-playwright': { + collectCoverage: true + }, + }, +} diff --git a/package.json b/package.json index a4c5059102..787949efd7 100644 --- a/package.json +++ b/package.json @@ -50,11 +50,15 @@ "danger": "^10.5.1", "danger-plugin-jest": "^1.3.0", "eslint": "~6.8.0", + "eslint-plugin-jest-playwright": "^0.2.1", "eslint-plugin-react": "^7.16.0", "eslint-plugin-react-hooks": "^2.0.1", "file-loader": "^6.2.0", "jest": "^26.6.3", + "jest-image-snapshot": "^4.2.0", + "jest-playwright-preset": "^1.4.1", "mini-css-extract-plugin": "^1.2.1", + "playwright": "^1.6.2", "postcss": "8.1.4", "postcss-cli": "8.1.0", "postcss-csso": "5.0.0", @@ -73,7 +77,7 @@ "stylelint-config-standard": "^18.3.0", "ts-loader": "^8.0.9", "typescript": "3.8", - "webpack": "^4.41.2", + "webpack": "^4.44.2", "webpack-cli": "^3.3.10", "webpack-merge": "^4.2.2", "yargs": "^15.4.1" @@ -107,6 +111,7 @@ "clear": "shx rm -rf dist/*", "test:unit": "jest", "test:unit:ci": "jest --ci --silent --outputFile test-results.json --json --coverageReporters='json-summary'", + "test:e2e": "yarn postcss && cp dist/*.css e2e/dist && jest --config jest.e2e.config.js", "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", "lint:ci": "yarn lint -o lint-results.json -f json", "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", diff --git a/src/components/Checkbox/Checkbox.e2e.tsx b/src/components/Checkbox/Checkbox.e2e.tsx new file mode 100644 index 0000000000..89e2ac5d76 --- /dev/null +++ b/src/components/Checkbox/Checkbox.e2e.tsx @@ -0,0 +1,10 @@ +import { screenshot } from '../../../e2e'; + +describe('Checkbox', () => { + test('should render', async () => { + console.log('executing test'); + expect(true).toBe(true); + const screen = await screenshot(({ Checkbox, React }) => label); + expect(screen).toMatchImageSnapshot(); + }); +}); diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8f24d12a8c656967ec45b4498a9dd64ec4c4e8 GIT binary patch literal 6634 zcmeHK>r)d~6kpI9#R0S;85N0+qqe1r9jYWE#Ahk>Ich;bL)8+hpfNbzyCLX3F!X#feHsv&EL}7Z9<1Gw8=(qyzz_t@`!#CwhP|hY z47#m%goDM+mV|ZDdmECkN_-aX9$C7(;QfHgXrfoe=2^jgr(zYnAj`#@Gl^bCKgG=B zexWa}#>@}+>FnJBZ_8&Nd3~{zym-pf^HI}hB>5k@c%{4)-d3AH73wIc-r*FcI|l7? zQ}!)zc>o`v>thp5q1XU&qO&1vYSA`mDiFL?9<#9N`%~9rV)~r_|FW_%pH)?^m1qd0 zV+CkW4LfbL$8K0tUAZdg8u@FEJx8eGIE>;VttU{-BbCqH3a<95C!NQ%$WBqCqr63r zN^JM1`P&zn++E^P$LxUle3Ktar;lmVg_Qn$v_>1Jf1YL2g^HRchC@rZ!*_4PmNt^U z)KtW`zq+v#?#(b2doNfsYKg=2R0ia&fH?LJeYkzdnBQd_(tIbX8^~r)4BeJnoW<$A zl=L2ETVNKVR9+%+$T2kbV1unUBcs6|+x;kS)^;68*9CB$7S@vu1l3@E zLWHTos@9LJ!L0Pf$4jITx+}|kkHG4TO;SCLB!wq;RTN*Nx=$PBsGDtSw86DqH0^3z z>jH+-jtHp;aJ?w=%_FP1#aF{mDxomsuCbz%&!WVK+j3>Ef60NtB)?45bjF9=$7A=M zCBR^t5X6_5yLR}F$+8mTN}s5m(5w=KYPN^!J|!k(S^`+gPeMYl$Yk$2Kj6tWbtRJnW zSRTwluw)1rO?HQD0~YD{d^=P}R~5#J>8h0O>cn1a@fSiT190sYTJ4qNGNy>V=4yAlYG(qrb=19;G*t zSJzcmR%&}_8Lkg{Z(+xxnR+u*7AHNf3t+$cfn})eQV%~bL!NB%Ehf@V_Xn|Za&qcj z+>YP2Tid8^CdXERZ^U?C5wmq(NC*qiSpyhE z!KhrD+@)3$gMDNp74`5yPO!U7?~U2gOaG}Ja#z~|tUOR$3EXgp!J(sNSDn(1*=_my z!bYM$tlWbpQY5wQc`M@S;Kq6|J2KPI^X%EPlovHeI1?R0w~BvED^VdrZUi{Wp`nR+2H%%cwTq9fU)&MgkJeN&A2B2A9wB6}`i`kT>x5{PWwGIg@NfqKPQ=xL+v zD_8 { + toMatchImageSnapshot(): R; + } +} diff --git a/tsconfig.json b/tsconfig.json index a18bb332b1..66e5ee59c1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,5 +16,10 @@ "noImplicitAny": true }, "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["node_modules", "src/**/*.test.ts", "src/**/*.test.tsx", "src/**/*.spec.ts", "src/**/*.spec.tsx"] + "exclude": [ + "node_modules", + "src/**/*.test.ts", "src/**/*.test.tsx", + "src/**/*.spec.ts", "src/**/*.spec.tsx", + "src/**/*.e2e.ts", "src/**/*.e2e.tsx", + ] } diff --git a/yarn.lock b/yarn.lock index 4002c52e08..d45c3ecb1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1380,6 +1380,18 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@hapi/hoek@^9.0.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6" + integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw== + +"@hapi/topo@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" + integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1703,6 +1715,23 @@ dependencies: "@types/node" ">= 8" +"@sideway/address@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.0.tgz#0b301ada10ac4e0e3fa525c90615e0b61a72b78d" + integrity sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -1958,6 +1987,11 @@ "@types/unist" "*" "@types/vfile-message" "*" +"@types/wait-on@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/wait-on/-/wait-on-4.0.0.tgz#fb6fa2854b592f7344f1dd9836b5655795510dce" + integrity sha512-Cj2jcMOzrdvWMP+Vl+qlz942eQfJk96S9kRnB1ejVMl+w9/9mUn0+pF4J+v0Iv+6zCrmBBODZAXKsRo6Y91Cfw== + "@types/webpack-sources@*": version "0.1.7" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" @@ -1989,6 +2023,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" + integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^2.28.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" @@ -2091,6 +2132,7 @@ "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/helper-wasm-bytecode" "1.9.0" @@ -2099,38 +2141,46 @@ "@webassemblyjs/floating-point-hex-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== "@webassemblyjs/helper-api-error@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== "@webassemblyjs/helper-buffer@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== "@webassemblyjs/helper-code-frame@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: "@webassemblyjs/wast-printer" "1.9.0" "@webassemblyjs/helper-fsm@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== "@webassemblyjs/helper-module-context@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-wasm-bytecode@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== "@webassemblyjs/helper-wasm-section@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -2140,22 +2190,26 @@ "@webassemblyjs/ieee754@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== "@webassemblyjs/wasm-edit@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -2169,6 +2223,7 @@ "@webassemblyjs/wasm-gen@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-wasm-bytecode" "1.9.0" @@ -2179,6 +2234,7 @@ "@webassemblyjs/wasm-opt@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -2188,6 +2244,7 @@ "@webassemblyjs/wasm-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-api-error" "1.9.0" @@ -2199,6 +2256,7 @@ "@webassemblyjs/wast-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/floating-point-hex-parser" "1.9.0" @@ -2210,6 +2268,7 @@ "@webassemblyjs/wast-printer@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/wast-parser" "1.9.0" @@ -2218,6 +2277,7 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" @@ -2264,7 +2324,7 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.1.1, acorn@^6.2.1, acorn@^6.4.1: +acorn@^6.1.1, acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" @@ -2283,6 +2343,13 @@ agent-base@4, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" @@ -2293,29 +2360,26 @@ aggregate-error@^3.0.0: ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - -ajv-keywords@^3.5.2: +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ajv@^6.10.0, ajv@^6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2376,6 +2440,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" @@ -2388,11 +2453,23 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2410,14 +2487,17 @@ aria-query@^4.2.2: arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-find-index@^1.0.1: version "1.0.2" @@ -2457,18 +2537,21 @@ array-uniq@^1.0.1: array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" asn1@~0.2.3: version "0.2.4" @@ -2485,6 +2568,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: object-assign "^4.1.1" util "0.10.3" @@ -2492,6 +2576,7 @@ assert@^1.1.1: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= ast-types@0.13.3, ast-types@^0.13.2, ast-types@~0.13.2: version "0.13.3" @@ -2508,6 +2593,7 @@ astral-regex@^1.0.0: async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async-limiter@~1.0.0: version "1.0.1" @@ -2544,6 +2630,7 @@ atob-lite@^2.0.0: atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.5.1: version "9.7.5" @@ -2580,6 +2667,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2684,14 +2778,17 @@ bail@^1.0.0: balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -2720,10 +2817,12 @@ before-after-hook@^2.0.0: big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: version "2.1.0" @@ -2733,6 +2832,7 @@ binary-extensions@^2.0.0: bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" @@ -2740,9 +2840,15 @@ bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== body-parser@1.19.0: version "1.19.0" @@ -2773,6 +2879,7 @@ bonjour@^3.5.0: brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -2780,6 +2887,7 @@ brace-expansion@^1.1.7: braces@^2.2.2, braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -2801,6 +2909,7 @@ braces@^3.0.1, braces@~3.0.2: brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-process-hrtime@^1.0.0: version "1.0.0" @@ -2810,6 +2919,7 @@ browser-process-hrtime@^1.0.0: browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -2821,6 +2931,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" @@ -2829,34 +2940,40 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" @@ -2912,6 +3029,11 @@ buble@0.19.8: os-homedir "^2.0.0" regexpu-core "^4.5.4" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -2920,6 +3042,7 @@ buffer-equal-constant-time@1.0.1: buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-indexof@^1.0.0: version "1.1.1" @@ -2928,10 +3051,12 @@ buffer-indexof@^1.0.0: buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -2940,6 +3065,7 @@ buffer@^4.3.0: builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@3.0.0: version "3.0.0" @@ -2995,6 +3121,7 @@ cacache@^13.0.1: cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -3006,6 +3133,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -3137,6 +3274,7 @@ chardet@^0.7.0: chokidar@^2.0.4, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" async-each "^1.0.1" @@ -3153,6 +3291,21 @@ chokidar@^2.0.4, chokidar@^2.1.8: fsevents "^1.2.7" chokidar@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + +chokidar@^3.4.1: version "3.4.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== @@ -3174,6 +3327,7 @@ chownr@^1.1.1, chownr@^1.1.2: chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: tslib "^1.9.0" @@ -3185,6 +3339,7 @@ ci-info@^2.0.0: cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -3197,6 +3352,7 @@ cjs-module-lexer@^0.6.0: class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -3323,6 +3479,7 @@ collect-v8-coverage@^1.0.0: collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -3372,10 +3529,20 @@ commander@^2.18.0, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" +commander@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + commander@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" @@ -3397,10 +3564,12 @@ common-tags@^1.8.0: commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== compressible@~2.0.16: version "2.0.18" @@ -3423,6 +3592,7 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.4.7, concat-stream@^1.5.0: version "1.6.2" @@ -3459,6 +3629,7 @@ console-browserify@^1.1.0: constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= content-disposition@0.5.3: version "0.5.3" @@ -3487,6 +3658,7 @@ cookie@0.4.0: copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" @@ -3498,6 +3670,7 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= copy-webpack-plugin@^5.1.0: version "5.1.1" @@ -3540,6 +3713,7 @@ core-js@^3.6.4: core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.2.0: version "5.2.1" @@ -3562,15 +3736,17 @@ cosmiconfig@^7.0.0: yaml "^1.10.0" create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -3578,9 +3754,10 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -3626,6 +3803,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1: crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -3721,9 +3899,18 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +cwd@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/cwd/-/cwd-0.10.0.tgz#172400694057c22a13b0cf16162c7e4b7a7fe567" + integrity sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc= + dependencies: + find-pkg "^0.1.2" + fs-exists-sync "^0.1.0" + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= danger-plugin-jest@^1.3.0: version "1.3.0" @@ -3797,16 +3984,24 @@ date-fns@^1.30.1: debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0: +debug@3.1.0, debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" +debug@4: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3838,6 +4033,12 @@ decimal.js@^10.2.0: decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-equal@^1.0.1: version "1.1.1" @@ -3870,6 +4071,13 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + dependencies: + strip-bom "^4.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -3885,18 +4093,21 @@ define-properties@^1.1.2, define-properties@^1.1.3: define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" @@ -3940,6 +4151,7 @@ deprecation@^2.0.0, deprecation@^2.3.1: des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -3977,6 +4189,7 @@ diff-sequences@^26.6.2: diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -4046,6 +4259,7 @@ dom-serializer@0: domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domelementtype@1, domelementtype@^1.3.1: version "1.3.1" @@ -4088,6 +4302,7 @@ duplexer@^0.1.1: duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -4122,9 +4337,10 @@ electron-to-chromium@^1.3.488: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.504.tgz#54d6288202f8453053c006eb862e2e3b7bc867a5" integrity sha512-yOXnuPaaLAIZUVuXHYDCo3EeaiEfbFgYWCPH1tBMp+jznCq/zQYKnf6HmkKBmLJ0VES81avl18JZO1lx/XAHOw== -elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -4158,6 +4374,7 @@ emojis-list@^2.0.0: emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== encodeurl@~1.0.2: version "1.0.2" @@ -4166,6 +4383,7 @@ encodeurl@~1.0.2: end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" @@ -4177,7 +4395,7 @@ enhanced-resolve@4.1.0: memory-fs "^0.4.0" tapable "^1.0.0" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: +enhanced-resolve@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" dependencies: @@ -4185,6 +4403,15 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -4196,6 +4423,7 @@ entities@^2.0.0: errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" @@ -4229,6 +4457,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + es6-object-assign@1.1.0, es6-object-assign@^1.0.3, es6-object-assign@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" @@ -4294,6 +4527,11 @@ eslint-config-google@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.9.1.tgz#83353c3dba05f72bb123169a4094f4ff120391eb" +eslint-plugin-jest-playwright@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest-playwright/-/eslint-plugin-jest-playwright-0.2.1.tgz#8778fee9d5915132a03d94370d3eea0a7ddd08f3" + integrity sha512-BicKUJUpVPsLbHN8c5hYaZn6pv8PCMjBGHXUfvlY1p75fh4APVfX2gTK14HuiR8/Bv3fKBQu5MTaqCro4E3OHg== + eslint-plugin-react-hooks@^2.0.1: version "2.5.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" @@ -4318,6 +4556,7 @@ eslint-plugin-react@^7.16.0: eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -4410,19 +4649,26 @@ esquery@^1.0.1: estraverse "^5.0.0" esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + estree-walker@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.9.0.tgz#9116372f09c02fd88fcafb0c04343631012a0aa6" @@ -4445,8 +4691,9 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== eventsource@^1.0.7: version "1.0.7" @@ -4457,6 +4704,7 @@ eventsource@^1.0.7: evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -4507,6 +4755,7 @@ exit@^0.1.2: expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -4516,12 +4765,24 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-tilde@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" + integrity sha1-C4HrqJflo9MdHD0QL48BRB5VlEk= + dependencies: + os-homedir "^1.0.1" + expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" dependencies: homedir-polyfill "^1.0.1" +expect-playwright@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/expect-playwright/-/expect-playwright-0.2.6.tgz#fb690763ea386c6b88494512119817beb2c61cf1" + integrity sha512-zb+0L9ayNPhFm89F0BOQP8yTckETbA33wmWoxcnUY/A0pFsd7e4Tn8YrDsLiMQ7gZX2dD3LQHH9TWSnvEJi8rw== + expect@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" @@ -4572,12 +4833,14 @@ express@^4.17.1: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -4597,6 +4860,7 @@ external-editor@^3.0.3: extglob@^2.0.2, extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -4607,6 +4871,17 @@ extglob@^2.0.2, extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -4618,8 +4893,9 @@ extsprintf@^1.2.0: integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^2.0.2, fast-glob@^2.2.6: version "2.2.7" @@ -4652,6 +4928,7 @@ fast-json-patch@^3.0.0-1: fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" @@ -4683,9 +4960,17 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^2.0.0: version "2.0.0" @@ -4716,6 +5001,7 @@ file-loader@^6.2.0: file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== filesize@3.6.1: version "3.6.1" @@ -4724,6 +5010,7 @@ filesize@3.6.1: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -4733,6 +5020,7 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" @@ -4751,6 +5039,7 @@ finalhandler@~1.1.2: find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" make-dir "^2.0.0" @@ -4764,9 +5053,34 @@ find-cache-dir@^3.2.0: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-file-up@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/find-file-up/-/find-file-up-0.1.3.tgz#cf68091bcf9f300a40da411b37da5cce5a2fbea0" + integrity sha1-z2gJG8+fMApA2kEbN9pczlovvqA= + dependencies: + fs-exists-sync "^0.1.0" + resolve-dir "^0.1.0" + +find-pkg@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/find-pkg/-/find-pkg-0.1.2.tgz#1bdc22c06e36365532e2a248046854b9788da557" + integrity sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc= + dependencies: + find-file-up "^0.1.2" + +find-process@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.4.tgz#52820561162fda0d1feef9aed5d56b3787f0fd6e" + integrity sha512-rRSuT1LE4b+BFK588D2V8/VG9liW0Ark1XJgroxZXI0LtwmQJOb490DvDYvbm+Hek9ETFzTutGfJ90gumITPhQ== + dependencies: + chalk "^4.0.0" + commander "^5.1.0" + debug "^4.1.1" + find-up@3.0.0, find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" @@ -4814,10 +5128,18 @@ flatted@^2.0.0: flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" @@ -4827,6 +5149,15 @@ follow-redirects@^1.0.0: for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" forever-agent@~0.6.1: version "0.6.1" @@ -4871,6 +5202,7 @@ forwarded@~0.1.2: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" @@ -4881,10 +5213,16 @@ fresh@0.5.2: from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" @@ -4913,6 +5251,7 @@ fs-readdir-recursive@^1.1.0: fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -4922,10 +5261,12 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.12" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" nan "^2.12.1" @@ -4974,6 +5315,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -4994,7 +5340,7 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -5004,6 +5350,7 @@ get-stream@^5.0.0: get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" @@ -5043,6 +5390,7 @@ gitlab@^10.0.1: glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -5074,6 +5422,14 @@ global-modules@2.0.0, global-modules@^2.0.0: dependencies: global-prefix "^3.0.0" +global-modules@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" + integrity sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0= + dependencies: + global-prefix "^0.1.4" + is-windows "^0.2.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -5082,6 +5438,16 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" +global-prefix@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" + integrity sha1-jTvGuNo8qBEqFg2NSW/wRiv+948= + dependencies: + homedir-polyfill "^1.0.0" + ini "^1.3.4" + is-windows "^0.2.0" + which "^1.2.12" + global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -5178,6 +5544,11 @@ glogg@^1.0.2: dependencies: sparkles "^1.0.0" +glur@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glur/-/glur-1.1.2.tgz#f20ea36db103bfc292343921f1f91e83c3467689" + integrity sha1-8g6jbbEDv8KSNDkh8fkeg8NGdok= + gonzales-pe@^4.2.3: version "4.3.0" resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" @@ -5190,15 +5561,15 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - -graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.1.6, graceful-fs@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -5258,6 +5629,7 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -5266,6 +5638,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -5274,10 +5647,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -5289,11 +5664,13 @@ has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash-sum@^2.0.0: version "2.0.0" @@ -5302,10 +5679,19 @@ hash-sum@^2.0.0: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + hasurl@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hasurl/-/hasurl-1.0.0.tgz#e4c619097ae1e8fc906bee904ce47e94f5e1ea37" @@ -5318,6 +5704,7 @@ he@^1.1.1: hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -5447,6 +5834,7 @@ http-signature@~1.2.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= https-proxy-agent@^2.2.1: version "2.2.4" @@ -5456,6 +5844,14 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -5488,8 +5884,9 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: postcss "^7.0.14" ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" @@ -5571,6 +5968,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^3.0.0: version "3.2.0" @@ -5591,6 +5989,7 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -5598,14 +5997,17 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4, ini@^1.3.5: version "1.3.5" @@ -5700,12 +6102,14 @@ is-absolute-url@^3.0.3: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" @@ -5735,6 +6139,7 @@ is-arrayish@^0.2.1: is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" @@ -5748,6 +6153,7 @@ is-binary-path@~2.1.0: is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-buffer@^2.0.0: version "2.0.4" @@ -5774,12 +6180,14 @@ is-core-module@^2.1.0: is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" @@ -5794,6 +6202,7 @@ is-decimal@^1.0.0, is-decimal@^1.0.2: is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -5802,6 +6211,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -5819,16 +6229,19 @@ is-docker@^2.0.0: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -5852,12 +6265,14 @@ is-generator-fn@^2.0.0: is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" @@ -5876,12 +6291,14 @@ is-interactive@^1.0.0: is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^1.0.1: version "1.0.1" @@ -5918,6 +6335,7 @@ is-plain-obj@^2.0.0: is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" @@ -5986,9 +6404,15 @@ is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw= + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: version "1.0.4" @@ -5997,6 +6421,7 @@ is-word-character@^1.0.0: is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= is-wsl@^2.2.0: version "2.2.0" @@ -6008,6 +6433,7 @@ is-wsl@^2.2.0: isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" @@ -6016,23 +6442,32 @@ isexe@^2.0.0: isobject@^2.0.0, isobject@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" @@ -6043,6 +6478,19 @@ istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -6082,6 +6530,33 @@ jest-changed-files@^26.6.2: execa "^4.0.0" throat "^5.0.0" +jest-circus@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.3.tgz#3cc7ef2a6a3787e5d7bfbe2c72d83262154053e7" + integrity sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + stack-utils "^2.0.2" + throat "^5.0.0" + jest-cli@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" @@ -6204,6 +6679,21 @@ jest-haste-map@^26.6.2: optionalDependencies: fsevents "^2.1.2" +jest-image-snapshot@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-4.2.0.tgz#559d7ade69e9918517269cef184261c80029a69e" + integrity sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ== + dependencies: + chalk "^1.1.3" + get-stdin "^5.0.1" + glur "^1.1.2" + lodash "^4.17.4" + mkdirp "^0.5.1" + pixelmatch "^5.1.0" + pngjs "^3.4.0" + rimraf "^2.6.2" + ssim.js "^3.1.1" + jest-jasmine2@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" @@ -6269,11 +6759,41 @@ jest-mock@^26.6.2: "@jest/types" "^26.6.2" "@types/node" "*" +jest-playwright-preset@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jest-playwright-preset/-/jest-playwright-preset-1.4.1.tgz#94488dfbbfd516e55311d1ba4483c465c0f1fb85" + integrity sha512-SOPxGvjcZCmWkhxRwoOxkJIGTpIQjgFQsbvek0MUHR2TuoovEfcv22OvK+UWt2GBEWp4deln+zh+FXuDOXrduA== + dependencies: + expect-playwright "^0.2.6" + jest-circus "^26.6.3" + jest-environment-node "^26.6.2" + jest-process-manager "^0.2.6" + nyc "^15.1.0" + playwright-core ">=1.2.0" + rimraf "^3.0.2" + uuid "^8.3.1" + jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== +jest-process-manager@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/jest-process-manager/-/jest-process-manager-0.2.6.tgz#98c6608de2677b0be584d7275e8d64932121359d" + integrity sha512-uWxUgTtgljoJMEg4T2FswXj/OWha1daZvHXWre7zty6Zv2lsghI4OepEStneJNefs9HQT7N6R8bIq5VlgRiFpA== + dependencies: + "@types/wait-on" "^4.0.0" + chalk "^4.1.0" + cwd "^0.10.0" + exit "^0.1.2" + find-process "^1.4.4" + prompts "^2.3.2" + signal-exit "^3.0.3" + spawnd "^4.4.0" + tree-kill "^1.2.2" + wait-on "^5.2.0" + jest-regex-util@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" @@ -6453,6 +6973,22 @@ jest@^26.6.3: import-local "^3.0.2" jest-cli "^26.6.3" +joi@^17.1.1: + version "17.3.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.3.0.tgz#f1be4a6ce29bc1716665819ac361dfa139fff5d2" + integrity sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.0" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +jpeg-js@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d" + integrity sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw== + js-base64@^2.1.9: version "2.5.2" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" @@ -6529,6 +7065,7 @@ json-parse-even-better-errors@^2.3.0: json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" @@ -6551,6 +7088,7 @@ json3@^3.3.2: json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" @@ -6693,22 +7231,26 @@ killable@^1.0.1: kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" @@ -6793,6 +7335,7 @@ load-json-file@^4.0.0: loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== loader-utils@1.2.3: version "1.2.3" @@ -6829,6 +7372,7 @@ locate-path@^2.0.0: locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" @@ -6849,6 +7393,11 @@ lodash.find@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + lodash.forown@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.forown/-/lodash.forown-4.4.0.tgz#85115cf04f73ef966eced52511d3893cc46683af" @@ -6939,7 +7488,7 @@ lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== -lodash@^4.17.19: +lodash@^4.17.19, lodash@^4.17.4: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -6998,6 +7547,7 @@ lru-cache@^4.0.1: lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" @@ -7053,6 +7603,7 @@ map-age-cleaner@^0.1.1: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-obj@^1.0.0: version "1.0.1" @@ -7065,6 +7616,7 @@ map-obj@^2.0.0: map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" @@ -7091,6 +7643,7 @@ mathml-tag-names@^2.1.0: md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -7129,6 +7682,7 @@ memfs-or-file-map-to-github-branch@^1.1.0: memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -7136,6 +7690,7 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: memory-fs@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -7206,6 +7761,7 @@ micromatch@3.1.0: micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -7231,6 +7787,7 @@ micromatch@^4.0.0, micromatch@^4.0.2: miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" @@ -7265,6 +7822,11 @@ mime@^2.4.4: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" +mime@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -7296,14 +7858,17 @@ mini-html-webpack-plugin@^2.0.0: minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" @@ -7317,6 +7882,7 @@ minimist-options@^3.0.1: minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minipass-collect@^1.0.2: version "1.0.2" @@ -7345,6 +7911,7 @@ minipass@^3.0.0, minipass@^3.1.1: mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" @@ -7364,19 +7931,22 @@ mitt@1.1.2: mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" mkdirp@^0.5.1, mkdirp@^0.5.3: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -7392,12 +7962,13 @@ mri@^1.1.4: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" -ms@^2.1.1: +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -7421,8 +7992,9 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nanoid@^3.1.15: version "3.1.16" @@ -7432,6 +8004,7 @@ nanoid@^3.1.15: nanomatch@^1.2.1, nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -7455,8 +8028,9 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nice-try@^1.0.4: version "1.0.5" @@ -7490,6 +8064,7 @@ node-int64@^0.4.0: node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -7532,6 +8107,13 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + node-releases@^1.1.29, node-releases@^1.1.53: version "1.1.53" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" @@ -7554,12 +8136,14 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" @@ -7596,6 +8180,39 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -7608,6 +8225,7 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" @@ -7628,6 +8246,7 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" @@ -7661,6 +8280,7 @@ object.fromentries@^2.0.2: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" @@ -7695,6 +8315,7 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" @@ -7757,6 +8378,11 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= +os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + os-homedir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-2.0.0.tgz#a0c76bb001a8392a503cbd46e7e650b3423a923c" @@ -7814,19 +8440,19 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - dependencies: - p-try "^2.0.0" - -p-limit@^2.1.0: +p-limit@^2.0.0, p-limit@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -7836,6 +8462,7 @@ p-locate@^2.0.0: p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" @@ -7868,14 +8495,27 @@ p-try@^1.0.0: p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: cyclist "^1.0.1" inherits "^2.0.3" @@ -7887,13 +8527,13 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - asn1.js "^4.0.0" + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" @@ -7968,18 +8608,22 @@ parseurl@~1.3.2, parseurl@~1.3.3: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" @@ -7988,6 +8632,7 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.2: version "1.0.2" @@ -8022,8 +8667,9 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -8031,12 +8677,17 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -8051,6 +8702,7 @@ pify@^3.0.0: pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" @@ -8074,9 +8726,17 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pixelmatch@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.2.1.tgz#9e4e4f4aa59648208a31310306a5bed5522b0d65" + integrity sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ== + dependencies: + pngjs "^4.0.1" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" @@ -8092,6 +8752,55 @@ pkg-up@2.0.0, pkg-up@^2.0.0: dependencies: find-up "^2.1.0" +playwright-core@>=1.2.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.6.2.tgz#71080db6e33d6ff33746fbeee1e1d07537fcc853" + integrity sha512-A8tDBwgMWY2WoxNsI6tCbKVr0QLUFWwuRpLYFVZQiEoep5vn1VVEnFA6bGdvbxvWVcA5E6vx8BkVcABCAzXhww== + dependencies: + debug "^4.1.1" + extract-zip "^2.0.1" + https-proxy-agent "^5.0.0" + jpeg-js "^0.4.2" + mime "^2.4.6" + pngjs "^5.0.0" + progress "^2.0.3" + proper-lockfile "^4.1.1" + proxy-from-env "^1.1.0" + rimraf "^3.0.2" + ws "^7.3.1" + +playwright@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.6.2.tgz#8631aec4d16b081d8ac414637b006099814a69d1" + integrity sha512-KiMmQuANG4O/ozpwxP8EwBBap0/liS3+wwkGo6nBJ4O4951y4ZsRPR1dqwsMOUD9wjsWf3ER+bAmQH5XmEO4Ig== + dependencies: + debug "^4.1.1" + extract-zip "^2.0.1" + https-proxy-agent "^5.0.0" + jpeg-js "^0.4.2" + mime "^2.4.6" + pngjs "^5.0.0" + progress "^2.0.3" + proper-lockfile "^4.1.1" + proxy-from-env "^1.1.0" + rimraf "^3.0.2" + ws "^7.3.1" + +pngjs@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +pngjs@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-4.0.1.tgz#f803869bb2fc1bfe1bf99aa4ec21c108117cfdbe" + integrity sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg== + +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + portfinder@^1.0.25: version "1.0.25" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" @@ -8103,6 +8812,7 @@ portfinder@^1.0.25: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-cli@8.1.0: version "8.1.0" @@ -8432,20 +9142,30 @@ private@^0.1.8: process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: +progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -prompts@^2.0.1: +prompts@^2.0.1, prompts@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== @@ -8461,6 +9181,15 @@ prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +proper-lockfile@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.1.tgz#284cf9db9e30a90e647afad69deb7cb06881262c" + integrity sha512-1w6rxXodisVpn7QYvLk706mzprPTAPCYAqxMvctmPN3ekuRk/kuGkGc82pangZiAt4R3lwSuUzheTTn0/Yb7Zg== + dependencies: + graceful-fs "^4.1.11" + retry "^0.12.0" + signal-exit "^3.0.2" + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -8468,9 +9197,15 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= pseudomap@^1.0.2: version "1.0.2" @@ -8484,6 +9219,7 @@ psl@^1.1.28: public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -8495,6 +9231,7 @@ public-encrypt@^4.0.0: pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -8502,6 +9239,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -8509,6 +9247,7 @@ pump@^3.0.0: pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -8517,14 +9256,17 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== q-i@^2.0.1: version "2.0.1" @@ -8566,10 +9308,12 @@ query-string@^6.8.2: querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystringify@^2.1.1: version "2.1.1" @@ -8579,15 +9323,17 @@ quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" @@ -8829,6 +9575,7 @@ read-pkg@^5.2.0: "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -8838,7 +9585,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" dependencies: @@ -8849,11 +9596,19 @@ readable-stream@^3.0.6, readable-stream@^3.1.1: readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: graceful-fs "^4.1.11" micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== + dependencies: + picomatch "^2.0.7" + readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" @@ -8927,6 +9682,7 @@ regenerator-transform@^0.14.2: regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" @@ -8967,6 +9723,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" + remark-parse@^6.0.0: version "6.0.3" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" @@ -9064,14 +9827,17 @@ remark@^11.0.1: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= replace-ext@1.0.0: version "1.0.0" @@ -9153,6 +9919,14 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-dir@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" + integrity sha1-shklmlYC+sXFxJatiUpujMQwJh4= + dependencies: + expand-tilde "^1.2.2" + global-modules "^0.2.3" + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -9175,6 +9949,7 @@ resolve-from@^5.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.1.6: version "1.17.0" @@ -9214,6 +9989,7 @@ restore-cursor@^3.1.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@0.12.0, retry@^0.12.0: version "0.12.0" @@ -9230,13 +10006,14 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -9246,6 +10023,7 @@ rimraf@^3.0.0: ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -9269,6 +10047,7 @@ run-parallel@^1.1.9: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" @@ -9278,17 +10057,31 @@ rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.3: dependencies: tslib "^1.9.0" +rxjs@^6.5.5: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" @@ -9329,6 +10122,7 @@ scheduler@^0.19.1: schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: ajv "^6.1.0" ajv-errors "^1.0.0" @@ -9376,6 +10170,7 @@ selfsigned@^1.10.7: "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@7.0.0: version "7.0.0" @@ -9411,6 +10206,14 @@ send@0.17.1: serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" @@ -9440,6 +10243,7 @@ set-blocking@^2.0.0: set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -9449,6 +10253,7 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.1.0: version "1.1.0" @@ -9461,6 +10266,7 @@ setprototypeof@1.1.1: sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -9521,7 +10327,7 @@ side-channel@^1.0.2: es-abstract "^1.17.0-next.1" object-inspect "^1.7.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -9553,6 +10359,7 @@ slice-ansi@^2.1.0: snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -9561,12 +10368,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -9598,6 +10407,7 @@ sockjs@0.3.19: source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-loader@^0.2.4: version "0.2.4" @@ -9609,6 +10419,7 @@ source-map-loader@^0.2.4: source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" decode-uri-component "^0.2.0" @@ -9624,7 +10435,7 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@^0.5.6: +source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -9632,16 +10443,10 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" @@ -9650,6 +10455,7 @@ source-map@^0.5.0, source-map@^0.5.6: source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: version "0.7.3" @@ -9675,6 +10481,28 @@ spawn-sync@^1.0.15: concat-stream "^1.4.7" os-shim "^0.1.2" +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + +spawnd@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/spawnd/-/spawnd-4.4.0.tgz#bb52c5b34a22e3225ae1d3acb873b2cd58af0886" + integrity sha512-jLPOfB6QOEgMOQY15Z6+lwZEhH3F5ncXxIaZ7WHPIapwNNLyjrs61okj3VJ3K6tmP5TZ6cO0VAu9rEY4MD4YQg== + dependencies: + exit "^0.1.2" + signal-exit "^3.0.2" + tree-kill "^1.2.2" + wait-port "^0.2.7" + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -9730,6 +10558,7 @@ split-on-first@^1.0.0: split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" @@ -9752,9 +10581,15 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssim.js@^3.1.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/ssim.js/-/ssim.js-3.5.0.tgz#d7276b9ee99b57a5ff0db34035f02f35197e62df" + integrity sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g== + ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" @@ -9779,6 +10614,7 @@ state-toggle@^1.0.0: static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -9795,6 +10631,7 @@ stealthy-require@^1.1.1: stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -9802,6 +10639,7 @@ stream-browserify@^2.0.1: stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" @@ -9809,6 +10647,7 @@ stream-each@^1.1.0: stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -9819,6 +10658,7 @@ stream-http@^2.7.2: stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" @@ -9918,6 +10758,7 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" @@ -10193,14 +11034,15 @@ terminal-link@^2.0.0: supports-hyperlinks "^2.0.0" terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^4.0.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" @@ -10220,7 +11062,16 @@ terser-webpack-plugin@^2.2.1: terser "^4.4.3" webpack-sources "^1.4.3" -terser@^4.1.2, terser@^4.4.3: +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^4.4.3: version "4.6.9" resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.9.tgz#deec3d8c4536461f46392e4d457bcd1ba2ab1212" dependencies: @@ -10249,6 +11100,7 @@ throat@^5.0.0: through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" @@ -10262,8 +11114,9 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" @@ -10289,6 +11142,7 @@ tmpl@1.0.x: to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-ast@^1.0.0: version "1.0.0" @@ -10304,12 +11158,14 @@ to-fast-properties@^2.0.0: to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -10317,12 +11173,14 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -10368,7 +11226,7 @@ traverse@^0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" -tree-kill@^1.2.1: +tree-kill@^1.2.1, tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -10399,10 +11257,15 @@ ts-loader@^8.0.9: micromatch "^4.0.0" semver "^6.0.0" -tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.1: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -10412,6 +11275,7 @@ tsutils@^3.17.1: tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= tunnel-agent@^0.6.0: version "0.6.0" @@ -10444,7 +11308,7 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.1: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -10465,6 +11329,7 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@3.8: version "3.8.3" @@ -10523,6 +11388,7 @@ unified@^8.2.0: union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -10536,12 +11402,14 @@ uniq@^1.0.1: unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" @@ -10638,6 +11506,7 @@ unquote@^1.1.0: unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -10645,16 +11514,19 @@ unset-value@^1.0.0: upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3: version "1.4.7" @@ -10666,6 +11538,7 @@ url-parse@^1.4.3: url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" @@ -10673,20 +11546,24 @@ url@^0.11.0: use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" util@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== dependencies: inherits "2.0.3" @@ -10694,11 +11571,11 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -uuid@^3.0.1, uuid@^3.3.2: +uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" -uuid@^8.3.0: +uuid@^8.3.0, uuid@^8.3.1: version "8.3.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== @@ -10779,6 +11656,7 @@ vfile@^4.0.0: vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== w3c-hr-time@^1.0.2: version "1.0.2" @@ -10794,6 +11672,26 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" +wait-on@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.2.0.tgz#6711e74422523279714a36d52cf49fb47c9d9597" + integrity sha512-U1D9PBgGw2XFc6iZqn45VBubw02VsLwnZWteQ1au4hUVHasTZuFSKRzlTB2dqgLhji16YVI8fgpEpwUdCr8B6g== + dependencies: + axios "^0.19.2" + joi "^17.1.1" + lodash "^4.17.19" + minimist "^1.2.5" + rxjs "^6.5.5" + +wait-port@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/wait-port/-/wait-port-0.2.9.tgz#3905cf271b5dbe37a85c03b85b418b81cb24ee55" + integrity sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ== + dependencies: + chalk "^2.4.2" + commander "^3.0.2" + debug "^4.1.1" + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -10801,13 +11699,23 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -watchpack@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -10920,19 +11828,20 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.41.2: - version "4.42.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef" +webpack@^4.44.2: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/wasm-edit" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.2.1" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" @@ -10945,7 +11854,7 @@ webpack@^4.41.2: schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" + watchpack "^1.7.4" webpack-sources "^1.4.1" websocket-driver@>=0.5.1: @@ -11001,7 +11910,7 @@ which@1.2.x: dependencies: isexe "^2.0.0" -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -11028,6 +11937,7 @@ word-wrap@~1.2.3: worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: errno "~0.1.7" @@ -11073,6 +11983,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^3.0.0: version "3.0.3" @@ -11096,7 +12007,7 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.2.3: +ws@^7.2.3, ws@^7.3.1: version "7.4.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== @@ -11124,11 +12035,17 @@ xregexp@^4.3.0: xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +"y18n@^3.2.1 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + y18n@^5.0.2: version "5.0.5" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" @@ -11141,6 +12058,7 @@ yallist@^2.1.2: yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" @@ -11217,7 +12135,7 @@ yargs@13.2.4: y18n "^4.0.0" yargs-parser "^13.1.0" -yargs@^15.4.1: +yargs@^15.0.2, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11246,3 +12164,11 @@ yargs@^16.0.0: string-width "^4.2.0" y18n "^5.0.2" yargs-parser "^20.2.2" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" From 918ecbad9244ae577f2a943fbf72447a654a6f3a Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Mon, 23 Nov 2020 17:35:11 +0300 Subject: [PATCH 10/29] TEST: Tighter jest / playwright integration --- e2e/browser-env.js | 8 --- e2e/browser/jest-mock.ts | 43 +++++++++++++++ e2e/browser/mount.ts | 9 ++++ e2e/browser/runtime.ts | 2 + e2e/browser/test-handle.ts | 24 +++++++++ e2e/generateWebpackConfig.js | 35 ++++++++++++ e2e/index.ts | 21 ++++---- jest.e2e.config.js => e2e/jest.e2e.config.js | 12 +++-- e2e/jest/globalSetup.js | 31 +++++++++++ e2e/jest/globalTeardown.js | 6 +++ e2e/jest/jsdomPlaywrightEnv.js | 3 ++ e2e/{ => jest}/matchers.ts | 0 e2e/react-playwright.js | 57 -------------------- jest.config.js | 3 +- package.json | 2 +- src/components/Checkbox/Checkbox.e2e.tsx | 8 +-- tsconfig.eslint.json | 5 +- tsconfig.json | 6 ++- 18 files changed, 189 insertions(+), 86 deletions(-) delete mode 100644 e2e/browser-env.js create mode 100644 e2e/browser/jest-mock.ts create mode 100644 e2e/browser/mount.ts create mode 100644 e2e/browser/runtime.ts create mode 100644 e2e/browser/test-handle.ts create mode 100644 e2e/generateWebpackConfig.js rename jest.e2e.config.js => e2e/jest.e2e.config.js (51%) create mode 100644 e2e/jest/globalSetup.js create mode 100644 e2e/jest/globalTeardown.js create mode 100644 e2e/jest/jsdomPlaywrightEnv.js rename e2e/{ => jest}/matchers.ts (100%) delete mode 100644 e2e/react-playwright.js diff --git a/e2e/browser-env.js b/e2e/browser-env.js deleted file mode 100644 index e088846571..0000000000 --- a/e2e/browser-env.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import * as vkui from '../src'; - -console.log('init', React, ReactDOM, vkui) -window['React'] = React; -window['ReactDOM'] = ReactDOM; -window['vkui'] = vkui; diff --git a/e2e/browser/jest-mock.ts b/e2e/browser/jest-mock.ts new file mode 100644 index 0000000000..96b29cb283 --- /dev/null +++ b/e2e/browser/jest-mock.ts @@ -0,0 +1,43 @@ +if (!window.Proxy) { + throw new Error('The environment needs to support window.Proxy!'); +} + +function makeAny(): any { + // callable + return new Proxy(() => makeAny(), { + // and with any property + get: () => makeAny(), + }); +} + +window.jest = makeAny(); +(window as any)['page'] = makeAny(); +(window as any)['expect'] = makeAny(); + +const notImplemented = (name: string) => () => { + throw new Error(`${name} is not supported in react / playwright browser runtime`); +}; +const noop = () => {/* do nothing */}; + +window.beforeAll = notImplemented('beforeAll'); +window.afterAll = notImplemented('afterAll'); +window.beforeEach = notImplemented('beforeEach'); +window.afterEach = notImplemented('afterEach'); + +const path: string[] = []; +const withPath = (name: string, fun: jest.ProvidesCallback) => { + path.push(name); + fun(Object.assign(noop, { fail: noop })); + path.pop(); +}; +const fakeTest = Object.assign(withPath, { + each: notImplemented('describe.each'), + only: withPath, + skip: noop as any, +}) as any as typeof test; + +window.describe = fakeTest; +window.test = fakeTest; +window.it = fakeTest; + +export const currentPath = () => path.join(' '); diff --git a/e2e/browser/mount.ts b/e2e/browser/mount.ts new file mode 100644 index 0000000000..9dc6a88125 --- /dev/null +++ b/e2e/browser/mount.ts @@ -0,0 +1,9 @@ +import { ReactElement } from 'react' +import { currentPath } from './jest-mock' +import { testHandle } from './test-handle' + +export function mount(jsx: ReactElement) { + testHandle.register(currentPath(), jsx); +} + +export const screenshot = mount; \ No newline at end of file diff --git a/e2e/browser/runtime.ts b/e2e/browser/runtime.ts new file mode 100644 index 0000000000..9ca6d3fa2f --- /dev/null +++ b/e2e/browser/runtime.ts @@ -0,0 +1,2 @@ +import './test-handle'; +import './jest-mock'; diff --git a/e2e/browser/test-handle.ts b/e2e/browser/test-handle.ts new file mode 100644 index 0000000000..fe96653283 --- /dev/null +++ b/e2e/browser/test-handle.ts @@ -0,0 +1,24 @@ +import { ReactElement } from 'react'; +import { render } from 'react-dom'; + +class ComponentHandle { + constructor(private readonly mountNode: Element) {} + private components: { [name: string]: { node: ReactElement } } = {}; + + register(name: string, node: ReactElement) { + if (name in this.components) { + throw new Error(`Test ${name} already exists. make sure path is unique and mount() is called once.`); + } + this.components[name] = { node }; + } + + mount(name: string) { + if (!(name in this.components)) { + throw new Error(`Test "${name}" does not exist, ${JSON.stringify(Object.keys(this.components))}`); + } + render(this.components[name].node, this.mountNode); + } +} + +export const testHandle = new ComponentHandle(document.getElementById('mount')); +(window as any)['testHandle'] = testHandle; diff --git a/e2e/generateWebpackConfig.js b/e2e/generateWebpackConfig.js new file mode 100644 index 0000000000..3161f273cb --- /dev/null +++ b/e2e/generateWebpackConfig.js @@ -0,0 +1,35 @@ +const path = require('path'); +const { promisify } = require('util'); +const glob = promisify(require('glob')); +const webpackConfig = require('../webpack.config.js'); + +const { externals, devServer, resolve = {}, output = {}, ...baseWebpackConfig } = webpackConfig; + +async function generateWebpackConfig() { + const testFiles = await glob(path.join(__dirname, '../src/**/*.e2e.{ts,tsx}')); + return { + ...baseWebpackConfig, + entry: { + main: [path.resolve(__dirname, 'browser/runtime.ts'), ...testFiles], + }, + output: { + ...output, + path: path.resolve(__dirname, 'dist'), + }, + resolve: { + ...resolve, + alias: { + ...resolve.alias, + '@react-playwright': path.resolve(__dirname, 'browser/mount.ts'), + }, + }, + devServer: { + ...devServer, + contentBase: path.join(__dirname, 'dist'), + } + }; +}; + +module.exports = { + generateWebpackConfig, +}; diff --git a/e2e/index.ts b/e2e/index.ts index c6af58cf0e..c2487d58bb 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -1,12 +1,15 @@ -export async function screenshot(render: any, options = {}) { - console.log('start screenshoting...'); +import { ReactElement } from 'react'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export async function mount(jsx: ReactElement) { await page.goto('http://localhost:9000'); - console.log('goto done'); - await page.evaluate(({ code }) => { - const api = Object.assign({}, window['vkui'], { React: window['React'], ReactDOM: window['ReactDOM'] }); - const jsx = eval(`(${code})(api);`); - api.ReactDOM.render(jsx, document.getElementById('mount')); - }, { code: render.toString() }); - console.log('script injected'); + const testName = expect.getState().currentTestName; + await page.evaluate(({ testName }) => { + window['testHandle'].mount(testName); + }, { testName }); +} + +export async function screenshot(jsx: ReactElement) { + await mount(jsx); return page.screenshot({ fullPage: true }); } diff --git a/jest.e2e.config.js b/e2e/jest.e2e.config.js similarity index 51% rename from jest.e2e.config.js rename to e2e/jest.e2e.config.js index 8970d6201b..be1255b915 100644 --- a/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -1,4 +1,5 @@ -const base = require('./jest.config') +const base = require('../jest.config') +const path = require('path'); module.exports = { ...base, @@ -7,13 +8,18 @@ module.exports = { collectCoverage: false, setupFilesAfterEnv: [ ...(base.setupFilesAfterEnv || []), - './e2e/matchers.ts' + './jest/matchers.ts' ], - testEnvironment: './e2e/react-playwright.js', + globalSetup: './jest/globalSetup.js', + globalTeardown: './jest/globalTeardown.js', + testEnvironment: './jest/jsdomPlaywrightEnv.js', testEnvironmentOptions: { ...(base.testEnvironmentOptions || {}), 'jest-playwright': { collectCoverage: true }, }, + moduleNameMapper: { + '@react-playwright': path.join(__dirname, 'index.ts'), + }, } diff --git a/e2e/jest/globalSetup.js b/e2e/jest/globalSetup.js new file mode 100644 index 0000000000..0b4b0dcfbb --- /dev/null +++ b/e2e/jest/globalSetup.js @@ -0,0 +1,31 @@ +const webpack = require('webpack'); +const WebpackDevServer = require('webpack-dev-server'); +const baseSetup = require('jest-playwright-preset/setup'); +const { generateWebpackConfig } = require('../generateWebpackConfig'); + +module.exports = async function setup(jestConfig) { + const webpackConfig = await generateWebpackConfig() + const compiler = webpack(webpackConfig); + const compilerDone = new Promise((resolve, reject) => { + compiler.hooks.done.tapAsync('@jest-playwright', (stats, callback) => { + if (stats.hasErrors()) { + reject(stats); + } else { + resolve(stats); + } + callback(); + }); + }); + + const devServer = new WebpackDevServer(compiler, { + noInfo: true, + stats: 'minimal', + ...webpackConfig.devServer, + }); + devServer.listen(9000); + global.__DEV_SERVER__ = devServer; + + await compilerDone; + + await baseSetup(jestConfig); +} diff --git a/e2e/jest/globalTeardown.js b/e2e/jest/globalTeardown.js new file mode 100644 index 0000000000..cae1f416b2 --- /dev/null +++ b/e2e/jest/globalTeardown.js @@ -0,0 +1,6 @@ +const baseTeardown = require('jest-playwright-preset/teardown'); + +module.exports = async function teardown(config) { + await baseTeardown(config); + global.__DEV_SERVER__.close(); +} diff --git a/e2e/jest/jsdomPlaywrightEnv.js b/e2e/jest/jsdomPlaywrightEnv.js new file mode 100644 index 0000000000..76aff20992 --- /dev/null +++ b/e2e/jest/jsdomPlaywrightEnv.js @@ -0,0 +1,3 @@ +const { getPlaywrightEnv } = require('jest-playwright-preset/lib/PlaywrightEnvironment'); + +module.exports = getPlaywrightEnv('jsdom'); diff --git a/e2e/matchers.ts b/e2e/jest/matchers.ts similarity index 100% rename from e2e/matchers.ts rename to e2e/jest/matchers.ts diff --git a/e2e/react-playwright.js b/e2e/react-playwright.js deleted file mode 100644 index 05d76246c2..0000000000 --- a/e2e/react-playwright.js +++ /dev/null @@ -1,57 +0,0 @@ -const PlaywrightEnvironment = require('jest-playwright-preset/lib/PlaywrightEnvironment').default; -const webpack = require('webpack'); -const WebpackDevServer = require('webpack-dev-server'); -const webpackConfig = require('../webpack.config.js'); -const path = require('path'); - -module.exports = class ReactPlaywrightEnvironment extends PlaywrightEnvironment { - async setup() { - const { externals, resolve = {}, output = {}, ...baseWebpackConfig } = webpackConfig - const compiler = webpack({ - ...baseWebpackConfig, - entry: { - main: path.join(__dirname, './browser-env.js'), - }, - output: { - ...output, - path: path.resolve(__dirname, 'dist'), - }, - resolve: { - ...resolve, - alias: { - ...resolve.alias, - // 'jest-puppeteer-react-plugin': path.resolve(__dirname, 'render.browser.js'), - } - } - }); - const compilerHooks = new Promise((resolve, reject) => { - compiler.hooks.done.tapAsync('jest-puppeteer-react-plugin', (stats, callback) => { - console.log('done'); - if (stats.hasErrors()) { - // spinner.fail('Webpack build failed'); - reject(stats); - } else { - // spinner.succeed('Webpack build finished'); - resolve(stats); - } - callback(); - }); - }); - - this.devServer = new WebpackDevServer(compiler, { - contentBase: path.join(__dirname, 'dist'), - }); - this.devServer.listen(9000); - - await compilerHooks - console.log('compiler done') - - await super.setup() - console.log('playwright done') - } - - async teardown() { - await super.teardown(); - this.devServer.close(); - } -} \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 5a40cb3065..067136c4b9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,6 @@ +const path = require('path'); module.exports = { - roots: ['src'], + roots: [path.join(__dirname, 'src')], collectCoverage: true, collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], coveragePathIgnorePatterns: [ diff --git a/package.json b/package.json index 787949efd7..a14974b8fe 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "clear": "shx rm -rf dist/*", "test:unit": "jest", "test:unit:ci": "jest --ci --silent --outputFile test-results.json --json --coverageReporters='json-summary'", - "test:e2e": "yarn postcss && cp dist/*.css e2e/dist && jest --config jest.e2e.config.js", + "test:e2e": "yarn postcss && cp dist/*.css e2e/dist && jest --config e2e/jest.e2e.config.js", "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", "lint:ci": "yarn lint -o lint-results.json -f json", "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", diff --git a/src/components/Checkbox/Checkbox.e2e.tsx b/src/components/Checkbox/Checkbox.e2e.tsx index 89e2ac5d76..16c8b8eda6 100644 --- a/src/components/Checkbox/Checkbox.e2e.tsx +++ b/src/components/Checkbox/Checkbox.e2e.tsx @@ -1,10 +1,10 @@ -import { screenshot } from '../../../e2e'; +import React from 'react'; +import { screenshot } from '@react-playwright'; +import { Checkbox } from './Checkbox'; describe('Checkbox', () => { test('should render', async () => { - console.log('executing test'); - expect(true).toBe(true); - const screen = await screenshot(({ Checkbox, React }) => label); + const screen = await screenshot(label); expect(screen).toMatchImageSnapshot(); }); }); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 02883efa9f..1081d8afdf 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,4 +1,5 @@ { -"extends": "./tsconfig.json", -"exclude": [] + "extends": "./tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.tsx", "e2e/**/*ts", "e2e/**/*tsx"], + "exclude": [] } \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 66e5ee59c1..12d107afd8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,11 @@ "noFallthroughCasesInSwitch": true, "moduleResolution": "node", "isolatedModules": true, - "noImplicitAny": true + "noImplicitAny": true, + "baseUrl": "src", + "paths": { + "@react-playwright": ["../e2e"] + } }, "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": [ From cf7e503c4f806e9729cfe5ab2622ca4365f08587 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Tue, 24 Nov 2020 13:45:48 +0300 Subject: [PATCH 11/29] TEST: Optimize e2e watch --- e2e/dist/default_scheme.css | 234 ------------------ e2e/dist/unstable.css | 1 - e2e/dist/vkui.css | 1 - ...packConfig.js => generateWebpackConfig.ts} | 2 +- e2e/jest.e2e.config.js | 6 +- e2e/jest/globalSetup.js | 31 --- e2e/jest/globalSetup.ts | 47 ++++ e2e/jest/globalTeardown.js | 6 - e2e/jest/globalTeardown.ts | 9 + ...PlaywrightEnv.js => jsdomPlaywrightEnv.ts} | 0 10 files changed, 60 insertions(+), 277 deletions(-) delete mode 100644 e2e/dist/default_scheme.css delete mode 100644 e2e/dist/unstable.css delete mode 100644 e2e/dist/vkui.css rename e2e/{generateWebpackConfig.js => generateWebpackConfig.ts} (99%) delete mode 100644 e2e/jest/globalSetup.js create mode 100644 e2e/jest/globalSetup.ts delete mode 100644 e2e/jest/globalTeardown.js create mode 100644 e2e/jest/globalTeardown.ts rename e2e/jest/{jsdomPlaywrightEnv.js => jsdomPlaywrightEnv.ts} (100%) diff --git a/e2e/dist/default_scheme.css b/e2e/dist/default_scheme.css deleted file mode 100644 index fe28e4da11..0000000000 --- a/e2e/dist/default_scheme.css +++ /dev/null @@ -1,234 +0,0 @@ -/* stylelint-disable */ -/* -* Этот файл сгенерирован автоматически. Не надо править его руками. -*/ -:root { - --accent: #3f8ae0; - --action_sheet_action_foreground: #3f8ae0; - --action_sheet_separator: rgba(0, 0, 0, 0.12); - --activity_indicator_tint: #aeb7c2; - --attach_picker_tab_active_background: #4986cc; - --attach_picker_tab_active_icon: #ffffff; - --attach_picker_tab_active_text: #4986cc; - --attach_picker_tab_inactive_background: #f2f3f5; - --attach_picker_tab_inactive_icon: #818c99; - --attach_picker_tab_inactive_text: #818c99; - --background_content: #ffffff; - --background_highlighted: rgba(0, 0, 0, 0.08); - --background_hover: rgba(0, 0, 0, 0.04); - --background_keyboard: #e1e3e6; - --background_light: #f9f9f9; - --background_page: #ebedf0; - --background_suggestions: #ffffff; - --background_text_highlighted: rgba(63, 138, 224, 0.20); - --button_bot_shadow: #c4c8cc; - --button_commerce_background: #4bb34b; - --button_commerce_foreground: #ffffff; - --button_muted_background: #f2f3f5; - --button_muted_foreground: #3f8ae0; - --button_outline_border: #3f8ae0; - --button_outline_foreground: #3f8ae0; - --button_primary_background: #4986cc; - --button_primary_foreground: #ffffff; - --button_secondary_background: rgba(0, 28, 61, 0.05); - --button_secondary_background_highlighted: rgba(0, 28, 61, 0.03); - --button_secondary_destructive_background: rgba(0, 28, 61, 0.05); - --button_secondary_destructive_background_highlighted: rgba(0, 28, 61, 0.03); - --button_secondary_destructive_foreground: #e64646; - --button_secondary_destructive_foreground_highlighted: rgba(230, 70, 70, 0.60); - --button_secondary_foreground: #3f8ae0; - --button_secondary_foreground_highlighted: rgba(63, 138, 224, 0.60); - --button_tertiary_background: rgba(0, 0, 0, 0.00); - --button_tertiary_foreground: #4986cc; - --cell_button_foreground: #3f8ae0; - --content_placeholder_icon: #99a2ad; - --content_placeholder_text: #818c99; - --content_tint_background: #f5f5f5; - --content_tint_foreground: #7f8285; - --content_warning_background: #fff2d6; - --control_background: #ebedf0; - --control_foreground: #5181b8; - --control_tint: #ffffff; - --control_tint_muted: #76787a; - --counter_primary_background: #3f8ae0; - --counter_primary_text: #ffffff; - --counter_prominent_background: #ff3347; - --counter_prominent_text: #ffffff; - --counter_secondary_background: #aeb7c2; - --counter_secondary_text: #ffffff; - --destructive: #e64646; - --dynamic_blue: #3f8ae0; - --dynamic_gray: #a3adb8; - --dynamic_green: #4bb34b; - --dynamic_orange: #ffa000; - --dynamic_purple: #735ce6; - --dynamic_red: #ff3347; - --dynamic_violet: #792ec0; - --feed_recommended_friend_promo_background: #528bcc; - --field_background: #f2f3f5; - --field_border: rgba(0, 0, 0, 0.12); - --field_error_background: #faebeb; - --field_error_border: #e64646; - --field_text_placeholder: #818c99; - --field_valid_border: #4bb34b; - --float_button_background: #f5f5f5; - --float_button_background_highlighted: #ebedf0; - --float_button_border: rgba(0, 0, 0, 0.05); - --float_button_foreground: #99a2ad; - --header_alternate_background: #ffffff; - --header_alternate_tab_active_indicator: #3f8ae0; - --header_alternate_tab_active_text: #000000; - --header_alternate_tab_inactive_text: #99a2ad; - --header_background: #ffffff; - --header_background_before_blur: #ffffff; - --header_background_before_blur_alternate: #ffffff; - --header_search_field_background: #ebedf0; - --header_search_field_tint: #818c99; - --header_tab_active_background: rgba(0, 0, 0, 0.00); - --header_tab_active_indicator: #3f8ae0; - --header_tab_active_text: #000000; - --header_tab_inactive_text: #99a2ad; - --header_text: #000000; - --header_text_alternate: #000000; - --header_text_secondary: #818c99; - --header_tint: #3f8ae0; - --header_tint_alternate: #3f8ae0; - --icon_alpha_placeholder: #ffffff; - --icon_medium: #818c99; - --icon_medium_alpha: rgba(0, 0, 0, 0.48); - --icon_name: #74a2d6; - --icon_outline_medium: #818c99; - --icon_outline_secondary: #99a2ad; - --icon_secondary: #99a2ad; - --icon_secondary_alpha: rgba(0, 0, 0, 0.36); - --icon_tertiary: #b8c1cc; - --icon_tertiary_alpha: rgba(0, 0, 0, 0.24); - --im_attach_tint: #4986cc; - --im_bubble_border_alternate: #e1e3e6; - --im_bubble_border_alternate_highlighted: #d7d8d9; - --im_bubble_button_background: #f9f9f9; - --im_bubble_button_background_highlighted: #d7d8d9; - --im_bubble_button_foreground: #000000; - --im_bubble_button_outgoing_background: rgba(255, 255, 255, 0.60); - --im_bubble_gift_background: #f4e7c3; - --im_bubble_gift_background_highlighted: #e3d3ac; - --im_bubble_gift_text: #857250; - --im_bubble_gift_text_secondary: #ab9871; - --im_bubble_incoming: #ebedf0; - --im_bubble_incoming_alternate: #ffffff; - --im_bubble_incoming_alternate_highlighted: #f9f9f9; - --im_bubble_incoming_expiring: #e6e9ff; - --im_bubble_incoming_expiring_highlighted: #ccd3ff; - --im_bubble_incoming_highlighted: #d7d8d9; - --im_bubble_outgoing: #cce4ff; - --im_bubble_outgoing_alternate: #ffffff; - --im_bubble_outgoing_alternate_highlighted: #f9f9f9; - --im_bubble_outgoing_expiring: #ccd3ff; - --im_bubble_outgoing_expiring_highlighted: #adb8ff; - --im_bubble_outgoing_highlighted: #add3ff; - --im_bubble_wallpaper_button_background: #f2f3f5; - --im_bubble_wallpaper_button_background_highlighted: #e1e3e6; - --im_bubble_wallpaper_button_foreground: #000000; - --im_bubble_wallpaper_incoming: #ffffff; - --im_bubble_wallpaper_incoming_highlighted: #ebedf0; - --im_bubble_wallpaper_outgoing: #cce4ff; - --im_bubble_wallpaper_outgoing_highlighted: #add3ff; - --im_forward_line_tint: #45678f; - --im_reply_separator: #4986cc; - --im_service_message_text: #818c99; - --im_text_name: #4986cc; - --im_toolbar_separator: #001c3d; - --im_toolbar_voice_msg_background: #99a2ad; - --image_border: rgba(0, 0, 0, 0.08); - --input_background: #f2f3f5; - --input_border: #e1e3e6; - --landing_background: #ffffff; - --landing_field_background: #f2f3f5; - --landing_field_border: rgba(0, 0, 0, 0.00); - --landing_field_placeholder: #818c99; - --landing_login_button_background: #4986cc; - --landing_login_button_foreground: #ffffff; - --landing_primary_button_background: #4986cc; - --landing_primary_button_foreground: #ffffff; - --landing_secondary_button_background: rgba(0, 57, 115, 0.10); - --landing_secondary_button_foreground: #3f8ae0; - --landing_snippet_border: rgba(0, 0, 0, 0.15); - --landing_tertiary_button_background: rgba(0, 0, 0, 0.00); - --landing_tertiary_button_foreground: #4986cc; - --landing_text_primary: #000000; - --landing_text_secondary: #818c99; - --landing_text_title: #4986cc; - --like_text_tint: #ff3347; - --link_alternate: #4986cc; - --loader_background: #ebedf0; - --loader_tint: #76787a; - --loader_track_fill: #e1e3e6; - --loader_track_value_fill: #528bcc; - --media_overlay_button_background: #ffffff; - --media_overlay_button_foreground: #2c2d2e; - --modal_card_background: #ffffff; - --modal_card_border: rgba(0, 0, 0, 0.00); - --modal_card_header_close: #000000; - --music_playback_icon: #000000; - --overlay_status_background: #ebedf0; - --overlay_status_foreground: #6d7885; - --overlay_status_icon: #818c99; - --panel_tab_active_background: #ebedf0; - --panel_tab_active_text: #5d5f61; - --panel_tab_inactive_text: #76787a; - --placeholder_icon_background: rgba(0, 28, 61, 0.08); - --placeholder_icon_background_opaque: #ebedf0; - --placeholder_icon_foreground_primary: #99a2ad; - --placeholder_icon_foreground_secondary: #aeb7c2; - --placeholder_icon_tint: #001c3d; - --poll_option_background: #45678f; - --search_bar_background: #ffffff; - --search_bar_field_background: #ebedf0; - --search_bar_field_tint: #818c99; - --search_bar_segmented_control_tint: #818c99; - --segmented_control_bar_background: rgba(0, 0, 0, 0.00); - --segmented_control_tint: #99a2ad; - --selection_off_icon: #b8c1cc; - --separator_alpha: rgba(0, 0, 0, 0.12); - --separator_alternate: #e1e3e6; - --separator_common: #d7d8d9; - --skeleton_shimmer_from: #ffffff; - --skeleton_shimmer_to: #ffffff; - --snippet_background: #ffffff; - --snippet_border: rgba(0, 0, 0, 0.15); - --snippet_icon_tertiary: #c4c8cc; - --splashscreen_icon: #e1e3e6; - --statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.20); - --stories_create_button_background_from: #f2f3f5; - --stories_create_button_background_to: #e1e3e6; - --stories_create_button_foreground: #6d7885; - --stories_create_button_icon_background: #ffffff; - --stories_skeleton_loader_background: #c4c8cc; - --switch_ios_off_border: #e1e3e6; - --tabbar_active_icon: #2975cc; - --tabbar_background: #f9f9f9; - --tabbar_inactive_icon: #99a2ad; - --tabbar_tablet_active_icon: #2975cc; - --tabbar_tablet_background: #f9f9f9; - --tabbar_tablet_inactive_icon: #99a2ad; - --tabbar_tablet_text_primary: #000000; - --tabbar_tablet_text_secondary: #909499; - --text_action_counter: #818c99; - --text_link: #4986cc; - --text_link_highlighted_background: #000000; - --text_muted: #2c2d2e; - --text_name: #4986cc; - --text_placeholder: #818c99; - --text_primary: #000000; - --text_secondary: #818c99; - --text_subhead: #6d7885; - --text_tertiary: #99a2ad; - --toolbar_attach_background_from: #b8c1cc; - --toolbar_attach_background_to: #a3adb8; - --vk_connect_button_primary_background: #19191a; - --vk_connect_button_primary_foreground: #ffffff; - --vk_connect_button_secondary_background: #f2f3f5; - --vk_connect_button_secondary_foreground: #19191a; - --writebar_icon: #3f8ae0; -} -/* stylelint-enable */ diff --git a/e2e/dist/unstable.css b/e2e/dist/unstable.css deleted file mode 100644 index dc300c2c6f..0000000000 --- a/e2e/dist/unstable.css +++ /dev/null @@ -1 +0,0 @@ -.ChipsSelect{position:relative}.ChipsSelect .ChipsInput__container{padding-right:25px}.ChipsSelect__fetching,.ChipsSelect__empty{padding:12px 0}.ChipsSelect__empty{font-size:13px;text-align:center;color:var(--text_secondary)}.ChipsSelect__toggle{position:absolute;right:10px;top:12px;z-index:1;color:var(--icon_secondary)}.ChipsSelect--sizeY-compact .ChipsSelect__toggle{right:8px;top:10px}.ChipsSelect__options{width:100%;overflow:hidden;position:absolute;background-color:var(--modal_card_background);box-sizing:border-box;border:solid 1px var(--field_border);border-top:0;box-shadow:0 2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03);border-radius:0 0 8px 8px;max-height:160px;z-index:3}.ChipsSelect__options .CustomScrollView__box{max-height:160px}.ChipsSelect__options--popupDirectionTop{bottom:100%;border-radius:8px 8px 0 0;border-top:unset;border-bottom:0;box-shadow:0 -2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03)}.ChipsSelect--sizeY-compact .CustomSelectOption{height:36px;padding:10px 9px;font-size:15px} \ No newline at end of file diff --git a/e2e/dist/vkui.css b/e2e/dist/vkui.css deleted file mode 100644 index 23ddd29efb..0000000000 --- a/e2e/dist/vkui.css +++ /dev/null @@ -1 +0,0 @@ -:root{--accent: #3f8ae0;--action_sheet_action_foreground: #3f8ae0;--action_sheet_separator: rgba(0, 0, 0, 0.12);--activity_indicator_tint: #aeb7c2;--attach_picker_tab_active_background: #4986cc;--attach_picker_tab_active_icon: #ffffff;--attach_picker_tab_active_text: #4986cc;--attach_picker_tab_inactive_background: #f2f3f5;--attach_picker_tab_inactive_icon: #818c99;--attach_picker_tab_inactive_text: #818c99;--background_content: #ffffff;--background_highlighted: rgba(0, 0, 0, 0.08);--background_hover: rgba(0, 0, 0, 0.04);--background_keyboard: #e1e3e6;--background_light: #f9f9f9;--background_page: #ebedf0;--background_suggestions: #ffffff;--background_text_highlighted: rgba(63, 138, 224, 0.20);--button_bot_shadow: #c4c8cc;--button_commerce_background: #4bb34b;--button_commerce_foreground: #ffffff;--button_muted_background: #f2f3f5;--button_muted_foreground: #3f8ae0;--button_outline_border: #3f8ae0;--button_outline_foreground: #3f8ae0;--button_primary_background: #4986cc;--button_primary_foreground: #ffffff;--button_secondary_background: rgba(0, 28, 61, 0.05);--button_secondary_background_highlighted: rgba(0, 28, 61, 0.03);--button_secondary_destructive_background: rgba(0, 28, 61, 0.05);--button_secondary_destructive_background_highlighted: rgba(0, 28, 61, 0.03);--button_secondary_destructive_foreground: #e64646;--button_secondary_destructive_foreground_highlighted: rgba(230, 70, 70, 0.60);--button_secondary_foreground: #3f8ae0;--button_secondary_foreground_highlighted: rgba(63, 138, 224, 0.60);--button_tertiary_background: rgba(0, 0, 0, 0.00);--button_tertiary_foreground: #4986cc;--cell_button_foreground: #3f8ae0;--content_placeholder_icon: #99a2ad;--content_placeholder_text: #818c99;--content_tint_background: #f5f5f5;--content_tint_foreground: #7f8285;--content_warning_background: #fff2d6;--control_background: #ebedf0;--control_foreground: #5181b8;--control_tint: #ffffff;--control_tint_muted: #76787a;--counter_primary_background: #3f8ae0;--counter_primary_text: #ffffff;--counter_prominent_background: #ff3347;--counter_prominent_text: #ffffff;--counter_secondary_background: #aeb7c2;--counter_secondary_text: #ffffff;--destructive: #e64646;--dynamic_blue: #3f8ae0;--dynamic_gray: #a3adb8;--dynamic_green: #4bb34b;--dynamic_orange: #ffa000;--dynamic_purple: #735ce6;--dynamic_red: #ff3347;--dynamic_violet: #792ec0;--feed_recommended_friend_promo_background: #528bcc;--field_background: #f2f3f5;--field_border: rgba(0, 0, 0, 0.12);--field_error_background: #faebeb;--field_error_border: #e64646;--field_text_placeholder: #818c99;--field_valid_border: #4bb34b;--float_button_background: #f5f5f5;--float_button_background_highlighted: #ebedf0;--float_button_border: rgba(0, 0, 0, 0.05);--float_button_foreground: #99a2ad;--header_alternate_background: #ffffff;--header_alternate_tab_active_indicator: #3f8ae0;--header_alternate_tab_active_text: #000000;--header_alternate_tab_inactive_text: #99a2ad;--header_background: #ffffff;--header_background_before_blur: #ffffff;--header_background_before_blur_alternate: #ffffff;--header_search_field_background: #ebedf0;--header_search_field_tint: #818c99;--header_tab_active_background: rgba(0, 0, 0, 0.00);--header_tab_active_indicator: #3f8ae0;--header_tab_active_text: #000000;--header_tab_inactive_text: #99a2ad;--header_text: #000000;--header_text_alternate: #000000;--header_text_secondary: #818c99;--header_tint: #3f8ae0;--header_tint_alternate: #3f8ae0;--icon_alpha_placeholder: #ffffff;--icon_medium: #818c99;--icon_medium_alpha: rgba(0, 0, 0, 0.48);--icon_name: #74a2d6;--icon_outline_medium: #818c99;--icon_outline_secondary: #99a2ad;--icon_secondary: #99a2ad;--icon_secondary_alpha: rgba(0, 0, 0, 0.36);--icon_tertiary: #b8c1cc;--icon_tertiary_alpha: rgba(0, 0, 0, 0.24);--im_attach_tint: #4986cc;--im_bubble_border_alternate: #e1e3e6;--im_bubble_border_alternate_highlighted: #d7d8d9;--im_bubble_button_background: #f9f9f9;--im_bubble_button_background_highlighted: #d7d8d9;--im_bubble_button_foreground: #000000;--im_bubble_button_outgoing_background: rgba(255, 255, 255, 0.60);--im_bubble_gift_background: #f4e7c3;--im_bubble_gift_background_highlighted: #e3d3ac;--im_bubble_gift_text: #857250;--im_bubble_gift_text_secondary: #ab9871;--im_bubble_incoming: #ebedf0;--im_bubble_incoming_alternate: #ffffff;--im_bubble_incoming_alternate_highlighted: #f9f9f9;--im_bubble_incoming_expiring: #e6e9ff;--im_bubble_incoming_expiring_highlighted: #ccd3ff;--im_bubble_incoming_highlighted: #d7d8d9;--im_bubble_outgoing: #cce4ff;--im_bubble_outgoing_alternate: #ffffff;--im_bubble_outgoing_alternate_highlighted: #f9f9f9;--im_bubble_outgoing_expiring: #ccd3ff;--im_bubble_outgoing_expiring_highlighted: #adb8ff;--im_bubble_outgoing_highlighted: #add3ff;--im_bubble_wallpaper_button_background: #f2f3f5;--im_bubble_wallpaper_button_background_highlighted: #e1e3e6;--im_bubble_wallpaper_button_foreground: #000000;--im_bubble_wallpaper_incoming: #ffffff;--im_bubble_wallpaper_incoming_highlighted: #ebedf0;--im_bubble_wallpaper_outgoing: #cce4ff;--im_bubble_wallpaper_outgoing_highlighted: #add3ff;--im_forward_line_tint: #45678f;--im_reply_separator: #4986cc;--im_service_message_text: #818c99;--im_text_name: #4986cc;--im_toolbar_separator: #001c3d;--im_toolbar_voice_msg_background: #99a2ad;--image_border: rgba(0, 0, 0, 0.08);--input_background: #f2f3f5;--input_border: #e1e3e6;--landing_background: #ffffff;--landing_field_background: #f2f3f5;--landing_field_border: rgba(0, 0, 0, 0.00);--landing_field_placeholder: #818c99;--landing_login_button_background: #4986cc;--landing_login_button_foreground: #ffffff;--landing_primary_button_background: #4986cc;--landing_primary_button_foreground: #ffffff;--landing_secondary_button_background: rgba(0, 57, 115, 0.10);--landing_secondary_button_foreground: #3f8ae0;--landing_snippet_border: rgba(0, 0, 0, 0.15);--landing_tertiary_button_background: rgba(0, 0, 0, 0.00);--landing_tertiary_button_foreground: #4986cc;--landing_text_primary: #000000;--landing_text_secondary: #818c99;--landing_text_title: #4986cc;--like_text_tint: #ff3347;--link_alternate: #4986cc;--loader_background: #ebedf0;--loader_tint: #76787a;--loader_track_fill: #e1e3e6;--loader_track_value_fill: #528bcc;--media_overlay_button_background: #ffffff;--media_overlay_button_foreground: #2c2d2e;--modal_card_background: #ffffff;--modal_card_border: rgba(0, 0, 0, 0.00);--modal_card_header_close: #000000;--music_playback_icon: #000000;--overlay_status_background: #ebedf0;--overlay_status_foreground: #6d7885;--overlay_status_icon: #818c99;--panel_tab_active_background: #ebedf0;--panel_tab_active_text: #5d5f61;--panel_tab_inactive_text: #76787a;--placeholder_icon_background: rgba(0, 28, 61, 0.08);--placeholder_icon_background_opaque: #ebedf0;--placeholder_icon_foreground_primary: #99a2ad;--placeholder_icon_foreground_secondary: #aeb7c2;--placeholder_icon_tint: #001c3d;--poll_option_background: #45678f;--search_bar_background: #ffffff;--search_bar_field_background: #ebedf0;--search_bar_field_tint: #818c99;--search_bar_segmented_control_tint: #818c99;--segmented_control_bar_background: rgba(0, 0, 0, 0.00);--segmented_control_tint: #99a2ad;--selection_off_icon: #b8c1cc;--separator_alpha: rgba(0, 0, 0, 0.12);--separator_alternate: #e1e3e6;--separator_common: #d7d8d9;--skeleton_shimmer_from: #ffffff;--skeleton_shimmer_to: #ffffff;--snippet_background: #ffffff;--snippet_border: rgba(0, 0, 0, 0.15);--snippet_icon_tertiary: #c4c8cc;--splashscreen_icon: #e1e3e6;--statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.20);--stories_create_button_background_from: #f2f3f5;--stories_create_button_background_to: #e1e3e6;--stories_create_button_foreground: #6d7885;--stories_create_button_icon_background: #ffffff;--stories_skeleton_loader_background: #c4c8cc;--switch_ios_off_border: #e1e3e6;--tabbar_active_icon: #2975cc;--tabbar_background: #f9f9f9;--tabbar_inactive_icon: #99a2ad;--tabbar_tablet_active_icon: #2975cc;--tabbar_tablet_background: #f9f9f9;--tabbar_tablet_inactive_icon: #99a2ad;--tabbar_tablet_text_primary: #000000;--tabbar_tablet_text_secondary: #909499;--text_action_counter: #818c99;--text_link: #4986cc;--text_link_highlighted_background: #000000;--text_muted: #2c2d2e;--text_name: #4986cc;--text_placeholder: #818c99;--text_primary: #000000;--text_secondary: #818c99;--text_subhead: #6d7885;--text_tertiary: #99a2ad;--toolbar_attach_background_from: #b8c1cc;--toolbar_attach_background_to: #a3adb8;--vk_connect_button_primary_background: #19191a;--vk_connect_button_primary_foreground: #ffffff;--vk_connect_button_secondary_background: #f2f3f5;--vk_connect_button_secondary_foreground: #19191a;--writebar_icon: #3f8ae0}body[scheme=space_gray]{--accent: #71aaeb;--action_sheet_action_foreground: #ffffff;--action_sheet_separator: rgba(255, 255, 255, 0.12);--activity_indicator_tint: #5d5f61;--attach_picker_tab_active_background: #e1e3e6;--attach_picker_tab_active_icon: #19191a;--attach_picker_tab_active_text: #e1e3e6;--attach_picker_tab_inactive_background: #2c2d2e;--attach_picker_tab_inactive_icon: #e1e3e6;--attach_picker_tab_inactive_text: #76787a;--background_content: #19191a;--background_highlighted: rgba(255, 255, 255, 0.08);--background_hover: rgba(255, 255, 255, 0.04);--background_keyboard: #2c2d2e;--background_light: #232324;--background_page: #0a0a0a;--background_suggestions: #2c2d2e;--background_text_highlighted: rgba(113, 170, 235, 0.24);--button_bot_shadow: #19191a;--button_commerce_background: #4bb34b;--button_commerce_foreground: #ffffff;--button_muted_background: #2c2d2e;--button_muted_foreground: #e1e3e6;--button_outline_border: #e1e3e6;--button_outline_foreground: #e1e3e6;--button_primary_background: #e1e3e6;--button_primary_foreground: #19191a;--button_secondary_background: #454647;--button_secondary_background_highlighted: rgba(69, 70, 71, 0.60);--button_secondary_destructive_background: #454647;--button_secondary_destructive_background_highlighted: rgba(69, 70, 71, 0.60);--button_secondary_destructive_foreground: #ff5c5c;--button_secondary_destructive_foreground_highlighted: rgba(255, 92, 92, 0.60);--button_secondary_foreground: #e1e3e6;--button_secondary_foreground_highlighted: rgba(225, 227, 230, 0.60);--button_tertiary_background: rgba(0, 0, 0, 0.00);--button_tertiary_foreground: #e1e3e6;--cell_button_foreground: #e1e3e6;--content_placeholder_icon: #aaaeb3;--content_placeholder_text: #aaaeb3;--content_tint_background: #232324;--content_tint_foreground: #909499;--content_warning_background: #857250;--control_background: #454647;--control_foreground: #e1e3e6;--control_tint: #19191a;--control_tint_muted: #909499;--counter_primary_background: #ffffff;--counter_primary_text: #19191a;--counter_prominent_background: #ff3347;--counter_prominent_text: #ffffff;--counter_secondary_background: #76787a;--counter_secondary_text: #19191a;--destructive: #ff5c5c;--dynamic_blue: #3f8ae0;--dynamic_gray: #a3adb8;--dynamic_green: #4bb34b;--dynamic_orange: #ffa000;--dynamic_purple: #937ff5;--dynamic_red: #ff3347;--dynamic_violet: #a393f5;--feed_recommended_friend_promo_background: #6d7885;--field_background: #232324;--field_border: rgba(255, 255, 255, 0.12);--field_error_background: #522e2e;--field_error_border: #ff5c5c;--field_text_placeholder: #76787a;--field_valid_border: #4bb34b;--float_button_background: #454647;--float_button_background_highlighted: #5d5f61;--float_button_border: rgba(0, 0, 0, 0.12);--float_button_foreground: #aaaeb3;--header_alternate_background: #2c2d2e;--header_alternate_tab_active_indicator: #e1e3e6;--header_alternate_tab_active_text: #e1e3e6;--header_alternate_tab_inactive_text: #76787a;--header_background: #19191a;--header_background_before_blur: #070708;--header_background_before_blur_alternate: #070708;--header_search_field_background: #363738;--header_search_field_tint: #aaaeb3;--header_tab_active_background: #5d5f61;--header_tab_active_indicator: #71aaeb;--header_tab_active_text: #e1e3e6;--header_tab_inactive_text: #76787a;--header_text: #e1e3e6;--header_text_alternate: #e1e3e6;--header_text_secondary: rgba(255, 255, 255, 0.60);--header_tint: #e1e3e6;--header_tint_alternate: #e1e3e6;--icon_alpha_placeholder: #e1e3e6;--icon_medium: #909499;--icon_medium_alpha: rgba(255, 255, 255, 0.48);--icon_name: #aaaeb3;--icon_outline_medium: #aaaeb3;--icon_outline_secondary: #909499;--icon_secondary: #76787a;--icon_secondary_alpha: rgba(255, 255, 255, 0.36);--icon_tertiary: #5d5f61;--icon_tertiary_alpha: rgba(255, 255, 255, 0.24);--im_attach_tint: #ffffff;--im_bubble_border_alternate: rgba(0, 0, 0, 0.00);--im_bubble_border_alternate_highlighted: rgba(0, 0, 0, 0.00);--im_bubble_button_background: rgba(255, 255, 255, 0.16);--im_bubble_button_background_highlighted: rgba(255, 255, 255, 0.24);--im_bubble_button_foreground: #e1e3e6;--im_bubble_button_outgoing_background: #5d5f61;--im_bubble_gift_background: #857250;--im_bubble_gift_background_highlighted: #ab9871;--im_bubble_gift_text: #ffffff;--im_bubble_gift_text_secondary: #e3d3ac;--im_bubble_incoming: #2c2d2e;--im_bubble_incoming_alternate: #2c2d2e;--im_bubble_incoming_alternate_highlighted: #5d5f61;--im_bubble_incoming_expiring: #262b4d;--im_bubble_incoming_expiring_highlighted: #404980;--im_bubble_incoming_highlighted: #5d5f61;--im_bubble_outgoing: #454647;--im_bubble_outgoing_alternate: #454647;--im_bubble_outgoing_alternate_highlighted: #76787a;--im_bubble_outgoing_expiring: #404980;--im_bubble_outgoing_expiring_highlighted: #5965b3;--im_bubble_outgoing_highlighted: #5d5f61;--im_bubble_wallpaper_button_background: #454647;--im_bubble_wallpaper_button_background_highlighted: #76787a;--im_bubble_wallpaper_button_foreground: #e1e3e6;--im_bubble_wallpaper_incoming: #2c2d2e;--im_bubble_wallpaper_incoming_highlighted: #5d5f61;--im_bubble_wallpaper_outgoing: #454647;--im_bubble_wallpaper_outgoing_highlighted: #5d5f61;--im_forward_line_tint: #ffffff;--im_reply_separator: #ffffff;--im_service_message_text: #76787a;--im_text_name: #71aaeb;--im_toolbar_separator: #aaaeb3;--im_toolbar_voice_msg_background: #454647;--image_border: rgba(255, 255, 255, 0.08);--input_background: #2c2d2e;--input_border: #2c2d2e;--landing_background: #19191a;--landing_field_background: #232324;--landing_field_border: rgba(0, 0, 0, 0.00);--landing_field_placeholder: #aaaeb3;--landing_login_button_background: #e1e3e6;--landing_login_button_foreground: #19191a;--landing_primary_button_background: #e1e3e6;--landing_primary_button_foreground: #19191a;--landing_secondary_button_background: rgba(255, 255, 255, 0.15);--landing_secondary_button_foreground: #ffffff;--landing_snippet_border: rgba(255, 255, 255, 0.15);--landing_tertiary_button_background: rgba(0, 0, 0, 0.00);--landing_tertiary_button_foreground: #ffffff;--landing_text_primary: #e1e3e6;--landing_text_secondary: #76787a;--landing_text_title: #ffffff;--like_text_tint: #ff5c5c;--link_alternate: #ffffff;--loader_background: #19191a;--loader_tint: #76787a;--loader_track_fill: #454647;--loader_track_value_fill: #ffffff;--media_overlay_button_background: #ffffff;--media_overlay_button_foreground: #2c2d2e;--modal_card_background: #2c2d2e;--modal_card_border: rgba(255, 255, 255, 0.12);--modal_card_header_close: #ffffff;--music_playback_icon: #ffffff;--overlay_status_background: #19191a;--overlay_status_foreground: #e1e3e6;--overlay_status_icon: #ebedf0;--panel_tab_active_background: #454647;--panel_tab_active_text: #e1e3e6;--panel_tab_inactive_text: #76787a;--placeholder_icon_background: rgba(255, 255, 255, 0.08);--placeholder_icon_background_opaque: #232324;--placeholder_icon_foreground_primary: #909499;--placeholder_icon_foreground_secondary: #5d5f61;--placeholder_icon_tint: #ffffff;--poll_option_background: #ffffff;--search_bar_background: #19191a;--search_bar_field_background: #363738;--search_bar_field_tint: #aaaeb3;--search_bar_segmented_control_tint: #909499;--segmented_control_bar_background: #19191a;--segmented_control_tint: #76787a;--selection_off_icon: #5d5f61;--separator_alpha: rgba(255, 255, 255, 0.12);--separator_alternate: #232324;--separator_common: #363738;--skeleton_shimmer_from: #19191a;--skeleton_shimmer_to: #19191a;--snippet_background: #232324;--snippet_border: rgba(255, 255, 255, 0.15);--snippet_icon_tertiary: #5d5f61;--splashscreen_icon: #2c2d2e;--statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.00);--stories_create_button_background_from: #363738;--stories_create_button_background_to: #363738;--stories_create_button_foreground: #c4c8cc;--stories_create_button_icon_background: #454647;--stories_skeleton_loader_background: #454647;--switch_ios_off_border: #2c2d2e;--tabbar_active_icon: #ffffff;--tabbar_background: #2c2d2e;--tabbar_inactive_icon: #76787a;--tabbar_tablet_active_icon: #71aaeb;--tabbar_tablet_background: #232324;--tabbar_tablet_inactive_icon: #76787a;--tabbar_tablet_text_primary: #e1e3e6;--tabbar_tablet_text_secondary: #76787a;--text_action_counter: #aaaeb3;--text_link: #71aaeb;--text_link_highlighted_background: #71aaeb;--text_muted: #c4c8cc;--text_name: #e1e3e6;--text_placeholder: #aaaeb3;--text_primary: #e1e3e6;--text_secondary: #76787a;--text_subhead: #909499;--text_tertiary: #5d5f61;--toolbar_attach_background_from: #76787a;--toolbar_attach_background_to: #5d5f61;--vk_connect_button_primary_background: #e1e3e6;--vk_connect_button_primary_foreground: #19191a;--vk_connect_button_secondary_background: #454647;--vk_connect_button_secondary_foreground: #e1e3e6;--writebar_icon: #e1e3e6}body[scheme=vkcom]{--accent: #5181b8;--action_sheet_action_foreground: #5181b8;--action_sheet_separator: rgba(0, 0, 0, 0.12);--activity_indicator_tint: #aeb7c2;--attach_picker_tab_active_background: #5181b8;--attach_picker_tab_active_icon: #ffffff;--attach_picker_tab_active_text: #5181b8;--attach_picker_tab_inactive_background: #f5f5f5;--attach_picker_tab_inactive_icon: #818c99;--attach_picker_tab_inactive_text: #818c99;--background_content: #ffffff;--background_highlighted: rgba(0, 0, 0, 0.08);--background_hover: rgba(0, 0, 0, 0.04);--background_keyboard: #dce1e6;--background_light: #f0f2f5;--background_page: #edeef0;--background_suggestions: #ffffff;--background_text_highlighted: rgba(81, 129, 184, 0.20);--button_bot_shadow: #cccccc;--button_commerce_background: #4bb34b;--button_commerce_foreground: #ffffff;--button_muted_background: #e5ebf1;--button_muted_foreground: #55677d;--button_outline_border: #2a5885;--button_outline_foreground: #2a5885;--button_primary_background: #5181b8;--button_primary_foreground: #ffffff;--button_secondary_background: #e5ebf1;--button_secondary_background_highlighted: rgba(229, 235, 241, 0.72);--button_secondary_destructive_background: rgba(230, 70, 70, 0.16);--button_secondary_destructive_background_highlighted: rgba(230, 70, 70, 0.12);--button_secondary_destructive_foreground: #e64646;--button_secondary_destructive_foreground_highlighted: rgba(230, 70, 70, 0.12);--button_secondary_foreground: #55677d;--button_secondary_foreground_highlighted: rgba(85, 103, 125, 0.64);--button_tertiary_background: rgba(0, 0, 0, 0.00);--button_tertiary_foreground: #2a5885;--cell_button_foreground: #2a5885;--content_placeholder_icon: #99a2ad;--content_placeholder_text: #818c99;--content_tint_background: #f7f8fa;--content_tint_foreground: #828282;--control_background: #edeef0;--control_foreground: #5181b8;--control_tint: #ffffff;--control_tint_muted: #828282;--counter_primary_background: #5181b8;--counter_primary_text: #ffffff;--counter_prominent_background: #ff3347;--counter_prominent_text: #ffffff;--counter_secondary_background: #aeb7c2;--counter_secondary_text: #ffffff;--destructive: #e64646;--dynamic_blue: #5181b8;--dynamic_gray: #aeb7c2;--dynamic_green: #4bb34b;--dynamic_orange: #ffa000;--dynamic_purple: #735ce6;--dynamic_red: #ff3347;--dynamic_violet: #792ec0;--feed_recommended_friend_promo_background: #5181b8;--field_background: #f7f8fa;--field_border: rgba(0, 0, 0, 0.12);--field_error_background: #ffd6cc;--field_error_border: #e64646;--field_text_placeholder: #818c99;--field_valid_border: #4bb34b;--float_button_background: #f7f8fa;--float_button_background_highlighted: #edeef0;--float_button_border: rgba(0, 0, 0, 0.08);--float_button_foreground: #99a2ad;--header_alternate_background: #ffffff;--header_alternate_tab_active_indicator: #5181b8;--header_alternate_tab_active_text: #000000;--header_alternate_tab_inactive_text: #99a2ad;--header_background: #ffffff;--header_background_before_blur: #ffffff;--header_background_before_blur_alternate: #ffffff;--header_search_field_background: #edeef0;--header_search_field_tint: #818c99;--header_tab_active_background: rgba(0, 0, 0, 0.00);--header_tab_active_indicator: #5181b8;--header_tab_active_text: #000000;--header_tab_inactive_text: #99a2ad;--header_text: #000000;--header_text_alternate: #000000;--header_text_secondary: #818c99;--header_tint: #aeb7c2;--header_tint_alternate: #aeb7c2;--icon_alpha_placeholder: #ffffff;--icon_medium: #818c99;--icon_medium_alpha: rgba(0, 0, 0, 0.48);--icon_name: #8fadc8;--icon_outline_medium: #818c99;--icon_outline_secondary: #99a2ad;--icon_secondary: #99a2ad;--icon_secondary_alpha: rgba(0, 0, 0, 0.36);--icon_tertiary: #aeb7c2;--icon_tertiary_alpha: rgba(0, 0, 0, 0.24);--im_attach_tint: #5181b8;--im_bubble_border_alternate: #dce1e6;--im_bubble_border_alternate_highlighted: #cccccc;--im_bubble_button_background: #f7f8fa;--im_bubble_button_background_highlighted: #cccccc;--im_bubble_button_foreground: #000000;--im_bubble_button_outgoing_background: rgba(255, 255, 255, 0.72);--im_bubble_gift_background: #f4e7c3;--im_bubble_gift_background_highlighted: #e3d3ac;--im_bubble_gift_text: #857250;--im_bubble_gift_text_secondary: #ab9871;--im_bubble_incoming: #edeef0;--im_bubble_incoming_alternate: #ffffff;--im_bubble_incoming_alternate_highlighted: #f7f8fa;--im_bubble_incoming_expiring: #e6e9ff;--im_bubble_incoming_expiring_highlighted: #ccd3ff;--im_bubble_incoming_highlighted: #aeb7c2;--im_bubble_outgoing: #cce4ff;--im_bubble_outgoing_alternate: #ffffff;--im_bubble_outgoing_alternate_highlighted: #f0f2f5;--im_bubble_outgoing_expiring: #ccd3ff;--im_bubble_outgoing_expiring_highlighted: #adb8ff;--im_bubble_outgoing_highlighted: #add3ff;--im_bubble_wallpaper_button_background: #f0f2f5;--im_bubble_wallpaper_button_background_highlighted: #e7e8ec;--im_bubble_wallpaper_button_foreground: #000000;--im_bubble_wallpaper_incoming: #ffffff;--im_bubble_wallpaper_incoming_highlighted: #edeef0;--im_bubble_wallpaper_outgoing: #cce4ff;--im_bubble_wallpaper_outgoing_highlighted: #add3ff;--im_forward_line_tint: #2a5885;--im_reply_separator: #2a5885;--im_service_message_text: #818c99;--im_text_name: #2a5885;--im_toolbar_separator: #001c3d;--im_toolbar_voice_msg_background: #99a2ad;--image_border: rgba(0, 0, 0, 0.08);--input_background: #f5f5f5;--input_border: #dce1e6;--landing_background: #ffffff;--landing_field_background: #f7f8fa;--landing_field_border: rgba(0, 0, 0, 0.00);--landing_field_placeholder: #818c99;--landing_login_button_background: #5181b8;--landing_login_button_foreground: #ffffff;--landing_primary_button_background: #5181b8;--landing_primary_button_foreground: #ffffff;--landing_secondary_button_background: rgba(0, 57, 115, 0.10);--landing_secondary_button_foreground: #5181b8;--landing_snippet_border: rgba(0, 0, 0, 0.12);--landing_tertiary_button_background: rgba(0, 0, 0, 0.00);--landing_tertiary_button_foreground: #5181b8;--landing_text_primary: #000000;--landing_text_secondary: #818c99;--landing_text_title: #5181b8;--like_text_tint: #ff3347;--link_alternate: #2a5885;--loader_background: #edeef0;--loader_tint: #99a2ad;--loader_track_fill: #e7e8ec;--loader_track_value_fill: #5181b8;--media_overlay_button_background: #ffffff;--media_overlay_button_foreground: #333333;--modal_card_background: #ffffff;--modal_card_border: rgba(0, 0, 0, 0.00);--modal_card_header_close: #000000;--music_playback_icon: #000000;--overlay_status_background: #edeef0;--overlay_status_foreground: #6f7985;--overlay_status_icon: #818c99;--panel_tab_active_background: #edeef0;--panel_tab_active_text: #4e5966;--panel_tab_inactive_text: #6f7985;--placeholder_icon_background: rgba(0, 28, 61, 0.08);--placeholder_icon_background_opaque: #edeef0;--placeholder_icon_foreground_primary: #99a2ad;--placeholder_icon_foreground_secondary: #aeb7c2;--placeholder_icon_tint: #1d3a5c;--poll_option_background: #5181b8;--search_bar_background: rgba(0, 0, 0, 0.00);--search_bar_field_background: #edeef0;--search_bar_field_tint: #818c99;--search_bar_segmented_control_tint: #818c99;--segmented_control_bar_background: rgba(0, 0, 0, 0.00);--segmented_control_tint: #99a2ad;--selection_off_icon: #c5d0db;--separator_alpha: rgba(0, 0, 0, 0.12);--separator_alternate: #e7e8ec;--separator_common: #dce1e6;--skeleton_shimmer_from: #ffffff;--skeleton_shimmer_to: rgba(255, 255, 255, 0.00);--snippet_background: #ffffff;--snippet_border: rgba(0, 0, 0, 0.12);--snippet_icon_tertiary: #aeb7c2;--splashscreen_icon: #dce1e6;--statusbar_alternate_legacy_background: rgba(0, 0, 0, 0.24);--stories_create_button_background_from: #f0f2f5;--stories_create_button_background_to: #dce1e6;--stories_create_button_foreground: #6f7985;--stories_create_button_icon_background: #ffffff;--stories_skeleton_loader_background: #cccccc;--switch_ios_off_border: #dce1e6;--tabbar_active_icon: #5181b8;--tabbar_background: #f7f8fa;--tabbar_inactive_icon: #99a2ad;--tabbar_tablet_active_icon: #5181b8;--tabbar_tablet_background: #f7f8fa;--tabbar_tablet_inactive_icon: #99a2ad;--tabbar_tablet_text_primary: #000000;--tabbar_tablet_text_secondary: #818c99;--text_action_counter: #818c99;--text_link: #5181b8;--text_link_hightlighted_background: #000000;--text_muted: #333333;--text_name: #2a5885;--text_placeholder: #818c99;--text_primary: #000000;--text_secondary: #818c99;--text_subhead: #6f7985;--text_tertiary: #99a2ad;--toolbar_attach_background_from: #dce1e6;--toolbar_attach_background_to: #aeb7c2;--vk_connect_button_primary_background: #222222;--vk_connect_button_primary_foreground: #ffffff;--vk_connect_button_secondary_background: #f5f5f5;--vk_connect_button_secondary_foreground: #222222;--writebar_icon: #818c99}:root{--font-common: -apple-system, system-ui, Helvetica Neue, Roboto, sans-serif;--font-tt: "TT Commons", -apple-system, system-ui, Helvetica Neue, Roboto, sans-serif;--ios-easing: cubic-bezier(.36, .66, .04, 1);--android-easing: cubic-bezier(.4, 0, .2, 1);--tabbar_height: 48px;--panelheader_height_ios: 52px;--panelheader_height_android: 56px;--panelheader_height_vkcom: 48px;--modalheader_height_ios: 52px;--modalheader_height_android: 56px;--search_default_height: 36px;--thin-border: 1px;--white: #fff;--safe-area-inset-top: 20px;--safe-area-inset-right: 0px;--safe-area-inset-bottom: 0px;--safe-area-inset-left: 0px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){:root{--thin-border: .5px}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){:root{--thin-border: .33px}}@supports (padding-top:constant(safe-area-inset-top)){:root{--safe-area-inset-top: constant(safe-area-inset-top);--safe-area-inset-right: constant(safe-area-inset-right);--safe-area-inset-bottom: constant(safe-area-inset-bottom);--safe-area-inset-left: constant(safe-area-inset-left)}}@supports (padding-top:env(safe-area-inset-top)){:root{--safe-area-inset-top: env(safe-area-inset-top);--safe-area-inset-right: env(safe-area-inset-right);--safe-area-inset-bottom: env(safe-area-inset-bottom);--safe-area-inset-left: env(safe-area-inset-left)}}@-webkit-keyframes animation-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes animation-fadeIn{0%{opacity:0}to{opacity:1}}.Title{margin:0}.Title--l-1{font-size:24px;line-height:28px}.Title--l-2{font-size:20px;line-height:24px}.Title--l-3{font-size:17px;line-height:22px}.Title--w-regular{font-weight:400}.Title--w-medium{font-weight:500}.Title--w-semibold{font-weight:600}.Title--w-bold{font-weight:700}.Title--w-heavy{font-weight:800}.Headline{margin:0;font-size:16px;line-height:20px}.Headline--w-regular{font-weight:400}.Headline--w-medium{font-weight:500}.Headline--w-semibold{font-weight:600}.Subhead{margin:0;font-size:14px;line-height:18px}.Subhead--w-regular{font-weight:400}.Subhead--w-medium{font-weight:500}.Subhead--w-semibold{font-weight:600}.Subhead--w-bold{font-weight:600}.Caption--caps{text-transform:uppercase}.Caption--l-1{font-size:13px;line-height:16px}.Caption--l-2{font-size:12px;line-height:14px}.Caption--l-3{font-size:11px;line-height:14px}.Caption--l-4{font-size:9px;line-height:12px}.Caption--w-regular{font-weight:400}.Caption--w-medium{font-weight:500}.Caption--w-semibold{font-weight:600}.Caption--w-bold{font-weight:700}.Caption--w-heavy{font-weight:800}.Text{font-size:15px;line-height:20px}.Text--w-regular{font-weight:400}.Text--w-medium{font-weight:500}.Text--w-semibold{font-weight:600}.Tappable:not([disabled]){cursor:pointer}.Tappable--ios{position:relative;border-radius:10px;transition:background-color .15s ease-out}.Tappable--ios.Tappable--active:not([disabled]):not(.TabsItem):not(.PanelHeaderButton):not(.IconButton):not(.Button):not(.Link):not(.SliderSwitch__button):not(.PanelHeaderContent__in):not(.ActionSheetItem):not(.Banner__in):not(.ModalDismissButton){background:rgba(0,0,0,.08)!important;background:var(--background_highlighted)!important;transition:none}.Tappable--android{position:relative;transition:background-color .15s ease-out;border-radius:8px}.Tappable--android.Tappable--active:not([disabled]):not(.TabsItem):not(.PanelHeaderButton):not(.IconButton):not(.Button):not(.Link):not(.SliderSwitch__button):not(.PanelHeaderContent__in):not(.ModalDismissButton){background:rgba(0,0,0,.08)!important;background:var(--background_highlighted)!important}.Tappable--vkcom{position:relative;transition:background-color .15s ease-out;border-radius:8px}.Tappable--vkcom.Tappable--active:not([disabled]):not(.TabsItem):not(.PanelHeaderButton):not(.IconButton):not(.Button):not(.Link):not(.SliderSwitch__button):not(.PanelHeaderContent__in):not(.ModalDismissButton){background:rgba(0,0,0,.08)!important;background:var(--background_highlighted)!important}.Tappable--android .Tappable__waves{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;border-radius:inherit;will-change:transform}.Tappable--android .Tappable__wave{position:absolute;top:0;left:0;width:24px;height:24px;margin:-12px 0 0 -12px;opacity:0;content:'';border-radius:50%;background:rgba(127,127,127,.1);-webkit-animation:animation-wave .3s cubic-bezier(.4,0,.2,1);animation:animation-wave .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-wave .3s var(--android-easing);animation:animation-wave .3s var(--android-easing)}.Tappable__hoverShadow{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;border-radius:inherit}.Tappable:not(.SliderSwitch__button):not(.ModalDismissButton):not(.Link).Tappable--shadowHovered>.Tappable__hoverShadow{background:rgba(0,0,0,.04);background:var(--background_hover)}.Tappable--opacityHovered{opacity:.8}.Tappable--sizeX-compact{border-radius:0}.Tappable--mouse{transition:opacity .15s ease-out}.Tappable--mouse .Tappable__hoverShadow{transition:background-color .15s ease-out}@-webkit-keyframes animation-wave{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}30%{opacity:1}to{-webkit-transform:scale(8);transform:scale(8);opacity:0}}@keyframes animation-wave{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}30%{opacity:1}to{-webkit-transform:scale(8);transform:scale(8);opacity:0}}.FixedLayout{position:fixed;box-sizing:border-box;left:auto;z-index:3;padding-left:0;padding-left:var(--safe-area-inset-left);padding-right:0;padding-right:var(--safe-area-inset-right)}.FixedLayout--filled{background:#fff;background:var(--background_content)}.FixedLayout--top{width:100%;top:0}.FixedLayout--bottom{width:100%;bottom:0;padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.Epic .FixedLayout--bottom{padding-bottom:calc(48px + 0px);padding-bottom:calc(var(--tabbar_height) + var(--safe-area-inset-bottom))}.Button{display:inline-block;box-sizing:border-box;outline:0;text-decoration:none;border:1px solid transparent;margin:0;padding:0;-webkit-user-select:none;user-select:none}.Button__in{display:flex;align-items:center}.Button__before:not(:last-child){margin-left:-4px}.Button.Tappable--active{opacity:.6}.Button[disabled]{opacity:.4}.Button--aln-left .Button__in{justify-content:flex-start;text-align:left}.Button--aln-center .Button__in{justify-content:center;text-align:center}.Button--aln-right .Button__in{justify-content:flex-end;text-align:right}.Button--str{display:block;width:100%;flex-grow:1;flex-basis:0}.Button--str .Button__in{justify-content:center}.Button--lvl-primary{background-color:#4986cc;background-color:var(--button_primary_background);color:#fff;color:var(--button_primary_foreground)}.Button--lvl-secondary{background-color:rgba(0,28,61,.05);background-color:var(--button_secondary_background);color:#3f8ae0;color:var(--button_secondary_foreground)}.Button--lvl-tertiary{background-color:transparent;background-color:var(--button_tertiary_background);color:#4986cc;color:var(--button_tertiary_foreground)}.Button--lvl-commerce{background-color:#4bb34b;background-color:var(--button_commerce_background);color:#fff;color:var(--button_commerce_foreground)}.Button--lvl-outline{background-color:transparent;border:1px solid #3f8ae0;border:1px solid var(--button_outline_border);color:#3f8ae0;color:var(--button_outline_foreground)}.Button--lvl-destructive{background-color:#e64646;background-color:var(--destructive);color:#fff}.Button--lvl-overlay_primary{background-color:#fff;background-color:var(--media_overlay_button_background);color:#2c2d2e;color:var(--media_overlay_button_foreground)}.Button--lvl-overlay_secondary{background-color:rgba(255,255,255,.2);color:#fff}.Button--lvl-overlay_outline{background-color:transparent;border:1px solid #fff;color:#fff}.Button--sz-s{min-height:30px;padding:0 15px}.Button--sz-s .Button__before:not(:last-child){margin-right:6px}.Button--sz-s .Button__after:not(:first-child){margin-left:6px}.Button--sz-s .Button__content{padding:4px 0 6px}.Button--sz-s .Button__content--caps{padding:7px 0}.Button--sz-m{padding:0 15px;min-height:36px}.Button--sz-m .Button__before:not(:last-child){margin-right:6px}.Button--sz-m .Button__after:not(:first-child){margin-left:6px}.Button--sz-m .Button__content{padding:6px 0 8px}.Button--sz-l{padding:0 19px;min-height:44px}.Button--sz-l .Button__before:not(:last-child){margin-right:8px}.Button--sz-l .Button__after:not(:first-child){margin-left:8px}.Button--sz-l .Button__in{justify-content:center}.Button--ios{border-radius:10px}.Button--ios.Button--sz-l .Button__content{padding:9px 0 11px}.Button--android{border-radius:8px}.Button--android.Button--sz-l .Button__content{padding:10px 0 12px}.Button--vkcom{border-radius:4px}.Button--sizeY-compact.Button--sz-s{min-height:26px}.Button--sizeY-compact.Button--sz-s .Button__content{padding-top:3px;padding-bottom:5px}.Button--sizeY-compact.Button--sz-s .Button__content--caps{padding:5px 0}.Button--sizeY-compact.Button--sz-m{min-height:32px}.Button--sizeY-compact.Button--sz-m .Button__content{padding-top:4px;padding-bottom:6px}.Button--sizeY-compact.Button--sz-l{min-height:36px}.Button--sizeY-compact.Button--sz-l .Button__content{padding-top:6px;padding-bottom:8px}.Button--lvl-primary .Counter{background-color:#fff;background-color:var(--button_primary_foreground);color:#4986cc;color:var(--button_primary_background)}.Button--lvl-secondary .Counter{background-color:#3f8ae0;background-color:var(--button_secondary_foreground);color:#fff;color:var(--background_content)}.Button--lvl-tertiary .Counter{background-color:#4986cc;background-color:var(--button_tertiary_foreground);color:#fff;color:var(--background_content)}.Button--lvl-outline .Counter{background-color:#3f8ae0;background-color:var(--button_outline_foreground);color:#fff;color:var(--background_content)}.Button--lvl-commerce .Counter{background-color:#fff;background-color:var(--button_commerce_foreground);color:#4bb34b;color:var(--button_commerce_background)}.Button--vkcom.Button--lvl-secondary .Counter,.Button--vkcom.Button--lvl-tertiary .Counter,.Button--vkcom.Button--lvl-outline .Counter,.Button--vkcom.Button--lvl-secondary .Icon,.Button--vkcom.Button--lvl-tertiary .Icon,.Button--vkcom.Button--lvl-outline .Icon{opacity:.72}.Root{width:100%;height:100%;position:relative}.Root--transition{pointer-events:none}.Root__view{width:100%;height:100%;position:relative}.Root--transition .Root__view:not(.Root__view--hide-forward){position:absolute;left:0;top:0}.Root--transition .Root__view:not(.Root__view--hide-forward) .View__panel{overflow:hidden}.Root__view--show-back,.Root__view--hide-forward{z-index:1}.Root__view--show-forward,.Root__view--hide-back{z-index:2}.Root__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.Root__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.Root__modal:empty{display:none}.Root--ios .Root__view--show-back::after,.Root--ios .Root__view--hide-forward::after{position:absolute;width:100%;height:100%;left:0;top:0;display:block;content:'';background-color:#000;z-index:6}.Root--ios .Root__view--show-back::after{-webkit-animation:root-ios-animation-show-back .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-show-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-show-back .6s var(--ios-easing);animation:root-ios-animation-show-back .6s var(--ios-easing)}.Root--ios .Root__view--hide-forward::after{-webkit-animation:root-ios-animation-hide-forward .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-hide-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-hide-forward .6s var(--ios-easing);animation:root-ios-animation-hide-forward .6s var(--ios-easing)}.Root--ios .Root__view--show-forward{-webkit-animation:root-ios-animation-show-forward .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-show-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-show-forward .6s var(--ios-easing);animation:root-ios-animation-show-forward .6s var(--ios-easing)}.Root--ios .Root__view--hide-back{-webkit-animation:root-ios-animation-hide-back .6s cubic-bezier(.36,.66,.04,1);animation:root-ios-animation-hide-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:root-ios-animation-hide-back .6s var(--ios-easing);animation:root-ios-animation-hide-back .6s var(--ios-easing)}@-webkit-keyframes root-ios-animation-show-back{0%{opacity:.3}to{opacity:0}}@keyframes root-ios-animation-show-back{0%{opacity:.3}to{opacity:0}}@-webkit-keyframes root-ios-animation-hide-forward{0%{opacity:0}to{opacity:.3}}@keyframes root-ios-animation-hide-forward{0%{opacity:0}to{opacity:.3}}@-webkit-keyframes root-ios-animation-hide-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes root-ios-animation-hide-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@-webkit-keyframes root-ios-animation-show-forward{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes root-ios-animation-show-forward{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.Root--android .Root__view--show-forward,.Root--vkcom .Root__view--show-forward{-webkit-animation:root-android-animation-show-forward .3s cubic-bezier(.4,0,.2,1);animation:root-android-animation-show-forward .3s cubic-bezier(.4,0,.2,1);-webkit-animation:root-android-animation-show-forward .3s var(--android-easing);animation:root-android-animation-show-forward .3s var(--android-easing)}.Root--android .Root__view--hide-back,.Root--vkcom .Root__view--hide-back{-webkit-animation:root-android-animation-hide-back .3s cubic-bezier(.4,0,.2,1);animation:root-android-animation-hide-back .3s cubic-bezier(.4,0,.2,1);-webkit-animation:root-android-animation-hide-back .3s var(--android-easing);animation:root-android-animation-hide-back .3s var(--android-easing)}@-webkit-keyframes root-android-animation-hide-back{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}to{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}}@keyframes root-android-animation-hide-back{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}to{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}}@-webkit-keyframes root-android-animation-show-forward{0%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes root-android-animation-show-forward{0%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.Root--ios.Root--no-motion .Root__view,.Root--android.Root--no-motion .Root__view,.Root--vkcom.Root--no-motion .Root__view{-webkit-animation:none;animation:none}.View--ios .Panel__in{padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.View--ios .Panel__in{padding:0 0 0 0;padding:0 var(--safe-area-inset-right) var(--safe-area-inset-bottom) var(--safe-area-inset-left)}.View--ios .View__panel--swipe-back-prev{box-shadow:-2px 0 12px rgba(0,0,0,.3)}.View--ios .View__panel--swipe-back-prev.View__panel--swipe-back-success{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.View--ios .View__panel--swipe-back-next.View__panel--swipe-back-success{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.View--ios .View__panel--swipe-back-prev.View__panel--swipe-back-failed{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.View--ios .View__panel--swipe-back-next.View__panel--swipe-back-failed{transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}.View--ios .View__panel--prev{-webkit-animation:animation-ios-prev-forward .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-prev-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-prev-forward .6s var(--ios-easing);animation:animation-ios-prev-forward .6s var(--ios-easing)}.View--ios .View__panel--next{-webkit-animation:animation-ios-next-back .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-next-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-next-back .6s var(--ios-easing);animation:animation-ios-next-back .6s var(--ios-easing)}.View--ios .View__panel--prev~.View__panel--next{-webkit-animation:animation-ios-next-forward .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-next-forward .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-next-forward .6s var(--ios-easing);animation:animation-ios-next-forward .6s var(--ios-easing)}.View--ios .View__panel--next~.View__panel--prev{-webkit-animation:animation-ios-prev-back .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-prev-back .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-prev-back .6s var(--ios-easing);animation:animation-ios-prev-back .6s var(--ios-easing)}.View--ios .View__panel--prev .Panel__fade,.View--ios .View__panel--next .Panel__fade{position:absolute;width:100%;height:100%;left:0;top:0;z-index:10;background:#000;pointer-events:none}.View--ios .View__panel--prev .Panel__fade{-webkit-animation:animation-ios-fade-in .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-fade-in .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-fade-in .6s var(--ios-easing);animation:animation-ios-fade-in .6s var(--ios-easing)}.View--ios .View__panel--next .Panel__fade{-webkit-animation:animation-ios-fade-out .6s cubic-bezier(.36,.66,.04,1);animation:animation-ios-fade-out .6s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-fade-out .6s var(--ios-easing);animation:animation-ios-fade-out .6s var(--ios-easing)}.View--ios .View__panel--prev~.View__panel--next .Panel__fade,.View--ios .View__panel--next~.View__panel--prev .Panel__fade{display:none}.View--ios.View--no-motion .View__panel,.View--ios.View--no-motion .View__panel .Panel__in{-webkit-animation:none;animation:none}.View--ios .View__panel--active .Panel__fade{display:none}@-webkit-keyframes animation-ios-next-forward{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-ios-next-forward{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes animation-ios-next-back{0%{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-ios-next-back{0%{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes animation-ios-prev-forward{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}}@keyframes animation-ios-prev-forward{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}}@-webkit-keyframes animation-ios-prev-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes animation-ios-prev-back{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@-webkit-keyframes animation-ios-fade-in{0%{opacity:0}to{opacity:.3}}@keyframes animation-ios-fade-in{0%{opacity:0}to{opacity:.3}}@-webkit-keyframes animation-ios-fade-out{0%{opacity:.3}to{opacity:0}}@keyframes animation-ios-fade-out{0%{opacity:.3}to{opacity:0}}.View--android{font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.View--android .View__panel--next~.View__panel--prev{-webkit-animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-prev-back .3s var(--android-easing);animation:animation-android-prev-back .3s var(--android-easing)}.View--android .View__panel--prev~.View__panel--next{-webkit-animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-next-forward .3s var(--android-easing);animation:animation-android-next-forward .3s var(--android-easing)}.View--android.View--no-motion .View__panel{-webkit-animation:none;animation:none}.View--android .View__panel--active::before{content:none}@-webkit-keyframes animation-android-prev-back{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}}@keyframes animation-android-prev-back{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}}@-webkit-keyframes animation-android-next-forward{0%{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes animation-android-next-forward{0%{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.View--vkcom{font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.View--vkcom .View__panel--next~.View__panel--prev{-webkit-animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);animation:animation-android-prev-back .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-prev-back .3s var(--android-easing);animation:animation-android-prev-back .3s var(--android-easing)}.View--vkcom .View__panel--prev~.View__panel--next{-webkit-animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);animation:animation-android-next-forward .3s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-android-next-forward .3s var(--android-easing);animation:animation-android-next-forward .3s var(--android-easing)}.View--vkcom.View--no-motion .View__panel{-webkit-animation:none;animation:none}.View--vkcom .View__panel--active::before{content:none}@keyframes animation-android-prev-back{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}}@keyframes animation-android-next-forward{0%{opacity:0;-webkit-transform:translateY(80px);transform:translateY(80px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.View{position:relative;height:100%;width:100%;word-wrap:break-word}.View--animated,.View--swiping-back{overflow:hidden}.View__header{z-index:2;position:fixed;width:100%}.View--animated .View__panel,.View--animated .View__header,.View--swiping-back .View__panel,.View--swiping-back .View__header{pointer-events:none}.View__panels{height:100%;width:100%}.View__panel{position:relative;width:100%;height:100%;box-sizing:border-box;z-index:1}.View__panel-in{height:100%}.View--animated .View__panel,.View--swiping-back .View__panel{position:fixed;top:0;left:0;overflow:hidden}.View__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.View__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.View__modal:empty{display:none}.Panel{position:relative;width:100%;height:100%}.Panel::after{position:absolute;width:100%;height:100%;left:0;top:0;z-index:1;content:''}.Panel--centered .Panel__in{height:100%}.Panel--centered .PanelHeader{position:absolute;left:0;top:0;width:100%}.Panel__in{position:relative;box-sizing:border-box;width:100%;min-height:100%;z-index:2;display:flex;flex-direction:column}.Panel__centered{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box}.Panel__centered .PanelHeader--ios.PanelHeader--vis+*{margin-top:52px;margin-top:var(--panelheader_height_ios)}.Panel__centered .PanelHeader--android.PanelHeader--vis+*,.Panel__centered .PanelHeader--vkcom.PanelHeader--vis+*{margin-top:56px;margin-top:var(--panelheader_height_android)}.Panel--sizeX-compact .Panel__centered .PanelHeader--ios.PanelHeader--sep+*{margin-top:calc(52px + 5px);margin-top:calc(var(--panelheader_height_ios) + 5px)}.Panel--sizeX-compact .Panel__centered .PanelHeader--android.PanelHeader--sep+*{margin-top:calc(56px + 5px);margin-top:calc(var(--panelheader_height_android) + 5px)}.Panel--sizeX-compact .Panel__centered .PanelHeader--vkcom.PanelHeader--sep+*{margin-top:calc(48px + 5px);margin-top:calc(var(--panelheader_height_vkcom) + 5px)}.Panel--sizeX-regular .Panel__centered .PanelHeader--ios.PanelHeader--sep+*{margin-top:calc(52px + 16px);margin-top:calc(var(--panelheader_height_ios) + 16px)}.Panel--sizeX-regular .Panel__centered .PanelHeader--android.PanelHeader--sep+*{margin-top:calc(56px + 16px);margin-top:calc(var(--panelheader_height_android) + 16px)}.Panel--sizeX-regular .Panel__centered .PanelHeader--vkcom.PanelHeader--sep+*{margin-top:calc(48px + 16px);margin-top:calc(var(--panelheader_height_vkcom) + 16px)}.Epic .Panel__in{padding-bottom:48px;padding-bottom:var(--tabbar_height);padding-bottom:calc(0px + 48px);padding-bottom:calc(var(--safe-area-inset-bottom) + var(--tabbar_height))}.Panel__in-before{height:1px;margin-bottom:-1px}.Panel__separator{position:relative;z-index:3}.Panel__in-after{height:1px;margin-top:-1px}.Panel .Panel__in,.Panel::after{background-color:#fff;background-color:var(--background_content)}.Panel.Panel--regular .Panel__in,.Panel.Panel--regular::after{background-color:transparent}.PanelHeader{position:relative}.PanelHeader--vis.PanelHeader--fixed::before{display:block;content:''}.PanelHeader__fixed{z-index:10}.PanelHeader__in{display:flex;justify-content:space-between;align-items:center;white-space:nowrap;position:relative;background:#fff;background:var(--header_background)}.PanelHeader--trnsp .PanelHeader__in{background:0 0}.PanelHeader--shadow .PanelHeader__in{box-shadow:0 0 4px rgba(0,0,0,.08)}.PanelHeader__left{box-sizing:border-box;color:#3f8ae0;color:var(--header_tint);display:flex;flex-shrink:0}.PanelHeader__left .Avatar{margin-left:8px}.PanelHeader__content{overflow:hidden;color:#000;color:var(--header_text);font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt)}.PanelHeader__content>*{display:block;overflow:hidden;text-overflow:ellipsis}.PanelHeader__right{display:flex;justify-content:flex-end;box-sizing:border-box;color:#3f8ae0;color:var(--header_tint)}.PanelHeader__right .Avatar{margin-right:8px}.PanelHeader--vkapps .PanelHeader__right{min-width:90px}.PanelHeader--sizeX-compact .PanelHeader__separator{padding-top:4px}.PanelHeader--ios~.FixedLayout--top,.PanelHeader--ios~* .FixedLayout--top:not(.PanelHeader__fixed){top:calc(52px + 20px);top:calc(var(--panelheader_height_ios) + var(--safe-area-inset-top))}.PanelHeader--ios::before,.PanelHeader--ios .PanelHeader__in{height:52px;height:var(--panelheader_height_ios);padding-top:20px;padding-top:var(--safe-area-inset-top)}.PanelHeader--ios .PanelHeader__left{flex-basis:0;flex-shrink:0;flex-grow:1;opacity:1;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing);padding:4px 0 4px 4px}.PanelHeader--ios .PanelHeader__left .PanelHeaderButton--primitive{padding-left:12px}.PanelHeader--ios .PanelHeader__left .PanelHeaderButton+.PanelHeaderButton--primitive{margin-left:-6px;padding-left:0}.PanelHeader--ios .PanelHeader__content{font-size:21px;line-height:52px;line-height:var(--panelheader_height_ios);text-align:center;opacity:1;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing)}.PanelHeader--ios .PanelHeader__content>*{padding:0 4px}.PanelHeader--ios.PanelHeader--no-left .PanelHeader__content>*{padding-left:0}.PanelHeader--ios.PanelHeader--no-left .PanelHeader__content{padding-left:8px}.PanelHeader--ios.PanelHeader--no-right .PanelHeader__content>*{padding-right:0}.PanelHeader--ios.PanelHeader--no-right .PanelHeader__content{padding-right:8px}.PanelHeader--ios .PanelHeader__right{flex-basis:0;flex-shrink:0;flex-grow:1;opacity:1;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing);padding:4px 4px 4px 0}.PanelHeader--ios .PanelHeader__right .PanelHeaderButton--primitive{padding-right:12px}.View--ios .View__panel--prev .PanelHeader__left,.View--ios .View__panel--prev .PanelHeader__right,.View--ios .View__panel--prev .PanelHeader__content{opacity:0}@supports not (padding-top:env(safe-area-inset-top)){.PanelHeader--android,.PanelHeader--vkcom{--safe-area-inset-top: 0px}}.PanelHeader--android~.FixedLayout--top,.PanelHeader--android~* .FixedLayout--top:not(.PanelHeader__fixed){top:calc(56px + 20px);top:calc(var(--panelheader_height_android) + var(--safe-area-inset-top))}.PanelHeader--android::before,.PanelHeader--android .PanelHeader__in{height:56px;height:var(--panelheader_height_android);padding-top:20px;padding-top:var(--safe-area-inset-top)}.PanelHeader--android .PanelHeader__left:not(:empty){padding:4px 0 4px 4px}.PanelHeader--android .PanelHeader__content{font-size:23px;align-items:center;flex-grow:1;max-width:100%}.PanelHeader--android .PanelHeader__content>*{padding:0 12px}.PanelHeader--android .Search,.PanelHeader--vkcom .Search{padding:0 4px}.PanelHeader--android.PanelHeader--no-left .PanelHeader__content>*,.PanelHeader--vkcom.PanelHeader--no-left .PanelHeader__content>*{padding-left:0}.PanelHeader--android.PanelHeader--no-left .PanelHeader__content{padding-left:16px}.SplitCol--spaced .PanelHeader--android.PanelHeader--no-left .PanelHeader__content{padding-left:0}.PanelHeader--android.PanelHeader--no-right .PanelHeader__content>*,.PanelHeader--vkcom.PanelHeader--no-right .PanelHeader__content>*{padding-right:0}.PanelHeader--android.PanelHeader--no-right .PanelHeader__content{padding-right:16px}.SplitCol--spaced .PanelHeader--android.PanelHeader--no-right .PanelHeader__content{padding-right:0}.PanelHeader--android .PanelHeader__right:not(:empty),.PanelHeader--vkcom .PanelHeader__right:not(:empty){padding:4px 4px 4px 0}.PanelHeader--vkcom{position:relative;z-index:10}.PanelHeader--vkcom~.FixedLayout--top,.PanelHeader--vkcom~* .FixedLayout--top:not(.PanelHeader__fixed){top:calc(48px + 20px);top:calc(var(--panelheader_height_vkcom) + var(--safe-area-inset-top))}.PanelHeader--vkcom .PanelHeader__in{border-top-left-radius:8px;border-top-right-radius:8px;box-shadow:0 0 0 1px #e1e3e6 inset;box-shadow:0 0 0 var(--thin-border) var(--input_border) inset;border-bottom:none}.PanelHeader--vkcom .PanelHeader__content{text-align:center}.PanelHeader--vkcom::before,.PanelHeader--vkcom .PanelHeader__in{height:48px;height:var(--panelheader_height_vkcom);padding-top:20px;padding-top:var(--safe-area-inset-top)}.PanelHeader--vkcom .PanelHeader__left:not(:empty){padding:0 0 0 4px}.PanelHeader--vkcom .PanelHeader__content{font-family:inherit}.PanelHeader--vkcom .PanelHeader__left,.PanelHeader--vkcom .PanelHeader__right{flex-basis:0;flex-shrink:0;flex-grow:1}.PanelHeaderButton{-webkit-appearance:none;appearance:none;background:0 0;border:0;outline:0;box-shadow:none;display:block;color:currentColor;padding:0;margin:0;font-size:17px;position:relative}.PanelHeaderButton[disabled]{opacity:.6}.PanelHeaderButton .Counter{position:absolute;padding:0;top:8px;right:2px}.PanelHeaderButton--ios{position:relative;display:flex;align-items:center}.PanelHeaderButton--ios.PanelHeaderButton--primary{font-weight:600}.PanelHeaderButton--ios.PanelHeaderButton--primitive{height:44px;line-height:44px}.PanelHeaderButton--ios .Icon--24{padding:10px}.PanelHeaderButton--ios .Icon--28{padding:8px}.PanelHeaderButton--ios.Tappable--active{opacity:.7}.PanelHeaderButton--android{border-radius:50%;font-weight:500;font-size:15px}.PanelHeaderButton--android.PanelHeaderButton--primitive{height:48px;line-height:48px;padding:0 12px}.PanelHeaderButton--android .Icon--24{padding:12px}.PanelHeaderButton--android .Icon--28{padding:10px}.PanelHeaderButton--android.Tappable--active,.PanelHeaderButton--vkcom.Tappable--active{background-color:rgba(0,0,0,.08);background-color:var(--background_highlighted)}.PanelHeaderButton--vkcom{display:flex;align-items:center;padding:10px}.PanelHeaderButton--vkcom.PanelHeaderButton--primitive{height:48px;line-height:48px;padding:0 10px}.PanelHeaderButton--vkcom.PanelHeaderButton--notPrimitive{border-radius:50%}.PanelHeaderContent{line-height:initial;height:100%;max-width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:flex-start}.PanelHeaderContent__before{flex-shrink:0;margin-right:12px}.PanelHeaderContent__in{flex-grow:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%}.PanelHeaderContent__status,.PanelHeaderContent__children-in{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.PanelHeaderContent__status{order:1;font-weight:400;font-size:13px;line-height:16px;margin-top:1px;max-width:100%;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);color:#818c99;color:var(--header_text_secondary)}.PanelHeaderContent__status~.PanelHeaderContent__children .PanelHeaderContent__children-in{font-weight:500;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);font-size:16px;line-height:20px}.PanelHeaderContent__children{max-width:100%;display:flex;align-items:center}.PanelHeaderContent__children-in{flex-grow:0;min-width:0;font-size:21px;line-height:52px;line-height:var(--panelheader_height_ios);font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt)}.PanelHeaderContent__aside{display:flex;align-items:center;justify-content:flex-start;margin-left:2px;color:#3f8ae0;color:var(--header_tint)}.PanelHeaderContent__width{width:1000px}.PanelHeaderContent--ios .PanelHeaderContent__in.Tappable--active{opacity:.7}.PanelHeaderContent--ios .PanelHeaderContent__before~.PanelHeaderContent__in{align-items:flex-start}.PanelHeaderContent--ios .PanelHeaderContent__in{align-items:center}.PanelHeaderContent--android .PanelHeaderContent__in.Tappable--active,.PanelHeaderContent--vkcom .PanelHeaderContent__in.Tappable--active{background-color:rgba(255,255,255,.1)}.PanelHeaderContext--opened,.PanelHeaderContext--closing{width:100%;height:100%}.PanelHeaderContext__in{position:absolute;left:0;width:100%;z-index:2}.PanelHeaderContext__fade{position:absolute;width:100%;height:100%;left:0;top:0;z-index:1;background:rgba(0,0,0,.4)}.PanelHeaderContext--opened .PanelHeaderContext__fade{-webkit-animation:animation-panelheadercontext-fade-in .2s ease;animation:animation-panelheadercontext-fade-in .2s ease}.PanelHeaderContext--closing .PanelHeaderContext__fade{-webkit-animation:animation-panelheadercontext-fade-out .2s ease;animation:animation-panelheadercontext-fade-out .2s ease}.PanelHeaderContext--ios.PanelHeaderContext--opened .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-in .2s ease;animation:animation-panelheadercontext-translate-in .2s ease}.PanelHeaderContext--ios.PanelHeaderContext--closing .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-out .2s ease;animation:animation-panelheadercontext-translate-out .2s ease}.PanelHeaderContext--ios .List{background:#fff;background:var(--header_background)}.PanelHeaderContext--android .PanelHeaderContext__in,.PanelHeaderContext--vkcom .PanelHeaderContext__in{padding:8px;box-sizing:border-box}.PanelHeaderContext--android.PanelHeaderContext--opened .PanelHeaderContext__in,.PanelHeaderContext--vkcom.PanelHeaderContext--opened .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-in .2s ease;animation:animation-panelheadercontext-translate-in .2s ease}.PanelHeaderContext--android.PanelHeaderContext--closing .PanelHeaderContext__in,.PanelHeaderContext--vkcom.PanelHeaderContext--closing .PanelHeaderContext__in{-webkit-animation:animation-panelheadercontext-translate-out .2s ease;animation:animation-panelheadercontext-translate-out .2s ease}.PanelHeaderContext--android .List,.PanelHeaderContext--vkcom .List{overflow:hidden;border-radius:12px;padding:8px 0;background:#fff;background:var(--header_background)}@-webkit-keyframes animation-panelheadercontext-translate-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes animation-panelheadercontext-translate-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes animation-panelheadercontext-translate-out{0%{-webkit-transform:translateY(0);transform:translateY(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes animation-panelheadercontext-translate-out{0%{-webkit-transform:translateY(0);transform:translateY(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes animation-panelheadercontext-fade-in{0%{opacity:0}to{opacity:1}}@keyframes animation-panelheadercontext-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes animation-panelheadercontext-fade-out{0%{opacity:1}to{opacity:0}}@keyframes animation-panelheadercontext-fade-out{0%{opacity:1}to{opacity:0}}.PopoutRoot{width:100%;height:100%;position:relative}.PopoutRoot__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.PopoutRoot--absolute{position:absolute;left:0;top:0;z-index:100;width:100%;height:100%}.PopoutRoot__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.PopoutRoot__modal:empty{display:none}.SplitLayout{width:100%;height:100%;position:relative;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.SplitLayout__inner{width:100%;height:100%;display:flex}.SplitLayout__inner--header{position:relative;z-index:11}.SplitLayout--ios .SplitLayout__inner--header{margin-top:calc(-1*52px);margin-top:calc(-1*var(--panelheader_height_ios))}.SplitLayout--android .SplitLayout__inner--header,.SplitLayout--vkcom .SplitLayout__inner--header{margin-top:calc(-1*56px);margin-top:calc(-1*var(--panelheader_height_android))}.SplitLayout__popout{position:fixed;left:0;top:0;z-index:100;width:100%;height:100%}.SplitLayout__modal{position:fixed;left:0;top:0;z-index:99;width:100%;height:100%}.SplitLayout__modal:empty{display:none}.SplitCol{height:100%;width:1px;flex-grow:1;flex-shrink:1;position:relative}.SplitCol--spaced{margin:0 16px}.SplitCol--fixed{height:100%;width:1px;flex-grow:1;flex-shrink:1}.SplitCol__fixedInner{height:inherit;width:inherit;min-width:inherit;max-width:inherit;position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);overflow:hidden}.Epic{width:100%;height:100%}.Tabbar{position:fixed;z-index:2;bottom:0;left:0;width:100%;height:48px;height:var(--tabbar_height);display:flex;align-items:stretch;justify-content:center;box-sizing:content-box;background:#fff;background:var(--header_alternate_background);padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.Tabbar--ios.Tabbar--shadow::before{position:absolute;bottom:100%;left:0;width:100%;height:1px;background:#d7d8d9;background:var(--separator_common);-webkit-transform-origin:center bottom;transform-origin:center bottom;content:''}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.Tabbar--ios::before{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.Tabbar--ios::before{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.Tabbar--android.Tabbar--shadow,.Tabbar--vkcom.Tabbar--shadow{box-shadow:0 -2px 4px 0 rgba(0,0,0,.06),0 0 2px 0 rgba(0,0,0,.08)}.TabbarItem{flex-shrink:0;max-width:100%;flex-grow:1;flex-basis:0;display:flex;align-items:center;justify-content:center;color:#99a2ad;color:var(--tabbar_inactive_icon);text-decoration:none}.Tabbar--l-vertical .TabbarItem.TabbarItem--text{position:relative;top:2px}.TabbarItem--selected{color:#2975cc;color:var(--tabbar_active_icon)}.TabbarItem__in{align-self:center;display:flex}.Tabbar--l-vertical .TabbarItem__in{flex-direction:column;align-items:center;justify-content:center}.Tabbar--l-horizontal .TabbarItem__in{flex-direction:row;align-items:center}.TabbarItem__icon{position:relative}.TabbarItem__label{position:absolute;top:-2px;left:calc(100% - 9px)}.Tabbar--l-vertical .TabbarItem__text{font-size:10px;line-height:12px;font-weight:500;margin-top:2px}.Tabbar--l-horizontal .TabbarItem__text{font-size:13px;font-weight:500;margin-left:8px}.HorizontalScroll{position:relative;overflow:hidden}.HorizontalScroll__in{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:20px;margin-bottom:-20px}.HorizontalScroll__in::-webkit-scrollbar{display:none}.HorizontalScroll__arrow{position:absolute;cursor:pointer;-webkit-user-select:auto;user-select:auto;top:0;height:100%;opacity:0;z-index:3;display:flex;flex-direction:column;justify-content:center;transition:opacity .15s}.HorizontalScroll--ios .HorizontalScroll__arrow{transition-timing-function:cubic-bezier(.36,.66,.04,1);transition-timing-function:var(--ios-easing)}.HorizontalScroll--android .HorizontalScroll__arrow,.HorizontalScroll--vkcom .HorizontalScroll__arrow{transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:var(--android-easing)}.HorizontalScroll:hover .HorizontalScroll__arrow{opacity:.72}.HorizontalScroll:hover .HorizontalScroll__arrow:hover{opacity:1}.HorizontalScroll__arrow-icon{background-color:#fff;background-color:var(--modal_card_background);color:#99a2ad;color:var(--icon_secondary);width:40px;height:40px;border-radius:24px;box-shadow:0 0 2px rgba(0,0,0,.08),0 0 16px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center}.HorizontalScroll__arrow-left{margin-left:16px;left:0}.HorizontalScroll__arrow-left .HorizontalScroll__arrow-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.HorizontalScroll__arrow-right{margin-right:16px;right:0}.HorizontalScroll__in-wrapper{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.HorizontalScroll__arrow-left:hover~.HorizontalScroll__in .HorizontalScroll__in-wrapper{-webkit-transform:translateX(8px);transform:translateX(8px)}.HorizontalScroll__arrow-right:hover~.HorizontalScroll__in .HorizontalScroll__in-wrapper{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.PopoutWrapper{width:100%;height:100%;box-sizing:border-box;left:0;top:0;pointer-events:none}.PopoutWrapper--opened{pointer-events:initial}.PopoutWrapper--closing{pointer-events:none}.PopoutWrapper--fixed{position:fixed}.PopoutWrapper--closing .PopoutWrapper__mask{opacity:0}.PopoutWrapper__mask{opacity:1;width:100%;height:100%;position:absolute;left:0;top:0;background:rgba(0,0,0,.4)}.PopoutWrapper__container{width:100%;height:100%;position:relative;display:flex;box-sizing:border-box;z-index:2}.PopoutWrapper--v-center .PopoutWrapper__container{align-items:center}.PopoutWrapper--v-bottom .PopoutWrapper__container{align-items:flex-end}.PopoutWrapper--v-top .PopoutWrapper__container{align-items:flex-start}.PopoutWrapper--h-center .PopoutWrapper__container{justify-content:center}.PopoutWrapper--h-left .PopoutWrapper__container{justify-content:flex-start}.PopoutWrapper--h-right .PopoutWrapper__container{justify-content:flex-end}.PopoutWrapper--ios .PopoutWrapper__mask{-webkit-animation:animation-full-fade-in .3s ease;animation:animation-full-fade-in .3s ease}.PopoutWrapper--ios.PopoutWrapper--closing .PopoutWrapper__mask{transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing)}.PopoutWrapper--android .PopoutWrapper__mask,.PopoutWrapper--vkcom .PopoutWrapper__mask{-webkit-animation:animation-full-fade-in .2s ease;animation:animation-full-fade-in .2s ease}.PopoutWrapper--android.PopoutWrapper--closing .PopoutWrapper__mask,.PopoutWrapper--vkcom.PopoutWrapper--closing .PopoutWrapper__mask{transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s var(--android-easing)}@-webkit-keyframes animation-full-fade-in{0%{opacity:0}to{opacity:1}}@keyframes animation-full-fade-in{0%{opacity:0}to{opacity:1}}.ActionSheet{position:relative;overflow:hidden}.ActionSheet__header{color:#818c99;color:var(--text_secondary)}.ActionSheet--ios{width:100%;-webkit-animation:animation-actionsheet-intro .3s cubic-bezier(.36,.66,.04,1);animation:animation-actionsheet-intro .3s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-actionsheet-intro .3s var(--ios-easing);animation:animation-actionsheet-intro .3s var(--ios-easing);padding:10px;box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch}.ActionSheet--ios.ActionSheet--closing{-webkit-transform:translateY(100%);transform:translateY(100%);transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing)}.ActionSheet--ios .ActionSheet__header{padding:15px 10px;position:relative;overflow:hidden;border-radius:14px 14px 0 0;text-align:center}.ActionSheet--ios .ActionSheet__title{position:relative;z-index:2}.ActionSheet--ios .ActionSheet__title+.ActionSheet__text{margin-top:9px}.ActionSheet--ios .ActionSheet__text{position:relative;z-index:2}.ActionSheet--ios .ActionSheet__header::before{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;background-color:var(--modal_card_background);z-index:1;content:''}.ActionSheet--android,.ActionSheet--vkcom{width:calc(100% - 20px);margin:10px;-webkit-animation:animation-actionsheet-intro .2s cubic-bezier(.4,0,.2,1);animation:animation-actionsheet-intro .2s cubic-bezier(.4,0,.2,1);-webkit-animation:animation-actionsheet-intro .2s var(--android-easing);animation:animation-actionsheet-intro .2s var(--android-easing);box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;border-radius:12px;box-shadow:0 8px 8px 0 rgba(0,0,0,.16),0 0 4px 0 rgba(0,0,0,.08);padding:8px 0;background:#fff;background:var(--modal_card_background)}.ActionSheet--android.ActionSheet--closing,.ActionSheet--vkcom.ActionSheet--closing{-webkit-transform:translateY(calc(100% + 20px));transform:translateY(calc(100% + 20px));transition:-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .2s var(--android-easing);transition:transform .2s var(--android-easing);transition:transform .2s var(--android-easing),-webkit-transform .2s var(--android-easing)}.ActionSheet--android .ActionSheet__header,.ActionSheet--vkcom .ActionSheet__header{padding:16px 20px}.ActionSheet--android .ActionSheet__title+.ActionSheet__text,.ActionSheet--vkcom .ActionSheet__title+.ActionSheet__text{margin-top:8px}.ActionSheet--desktop{width:auto;height:auto;background:#fff;background:var(--modal_card_background);-webkit-animation:none;animation:none;position:absolute;top:0;left:0;z-index:110;padding:0;margin:0}.ActionSheet--desktop.ActionSheet--ios{border-radius:14px;box-shadow:0 0 96px rgba(0,0,0,.16),0 0 2px rgba(0,0,0,.12)}.ActionSheet--desktop.ActionSheet--android{min-width:112px;border-radius:12px;padding:8px 0;box-shadow:0 8px 8px rgba(0,0,0,.16),0 0 4px rgba(0,0,0,.08)}.ActionSheet--desktop.ActionSheet--vkcom{border-radius:12px;box-shadow:0 0 2px rgba(0,0,0,.08),0 8px 24px rgba(0,0,0,.08)}.ActionSheet--desktop.ActionSheet--sizeY-compact{padding-top:8px;padding-bottom:8px}.ActionSheet--desktop.ActionSheet--vkcom .ActionSheet__header{padding:14px 20px}@-webkit-keyframes animation-actionsheet-intro{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes animation-actionsheet-intro{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.ActionSheetItem{position:relative;z-index:2;overflow:hidden;display:flex;align-items:center;text-decoration:none;color:#000;color:var(--text_primary)}.ActionSheetItem__container,.ActionSheetItem__before,.ActionSheetItem__after{position:relative;z-index:2}.ActionSheetItem__before,.ActionSheetItem__after{flex-shrink:0}.ActionSheetItem__container{max-width:100%;flex-grow:1;white-space:nowrap;overflow:hidden}.ActionSheetItem__content{display:flex;align-items:baseline;overflow:hidden}.ActionSheetItem__children{min-width:0;overflow:hidden;text-overflow:ellipsis}.ActionSheetItem__subtitle{color:#818c99;color:var(--text_secondary);overflow:hidden;text-overflow:ellipsis}.ActionSheetItem__meta{color:#818c99;color:var(--text_secondary);margin-left:6px;flex-shrink:0}.ActionSheetItem__before{color:#3f8ae0;color:var(--action_sheet_action_foreground)}.ActionSheetItem--destructive .ActionSheetItem__container:first-child{color:#e64646;color:var(--destructive)}.ActionSheetItem--destructive .ActionSheetItem__before{color:#e64646;color:var(--destructive)}.ActionSheetItem--compact .ActionSheetItem__container{color:#000;color:var(--text_primary)}.ActionSheetItem__radio{display:none}.ActionSheetItem__marker{display:none;width:24px;height:24px;border-radius:50%;align-items:center;justify-content:center;background-color:#3f8ae0;background-color:var(--accent);color:#fff;color:var(--white);margin-left:4px}.ActionSheetItem__radio:checked~.ActionSheetItem__marker{display:flex}.ActionSheetItem--ios{padding:0 20px;min-height:56px;border-radius:0;color:#3f8ae0;color:var(--action_sheet_action_foreground)}.ActionSheetItem--ios.ActionSheetItem--destructive{color:#e64646;color:var(--destructive)}.ActionSheetItem--ios:first-child{border-top-left-radius:14px;border-top-right-radius:14px}.ActionSheetItem--ios:nth-last-child(2){border-bottom-left-radius:14px;border-bottom-right-radius:14px}.ActionSheetItem--ios::before{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;background-color:var(--modal_card_background);z-index:1;content:'';transition:opacity .15s ease-out,background-color .15s ease-out}.ActionSheetItem--ios::after{position:absolute;right:0;left:0;z-index:1;height:1px;content:'';top:0;background:rgba(0,0,0,.12);background:var(--action_sheet_separator);-webkit-transform-origin:center bottom;transform-origin:center bottom}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.ActionSheetItem--ios::after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.ActionSheetItem--ios::after{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.ActionSheetItem--ios:first-child::after,.ActionSheetItem--cancel::after{content:none}.ActionSheet--ios .ActionSheetItem--last::after,.ActionSheet--ios .ActionSheet__header:empty{content:none}.ActionSheetItem--ios.Tappable--active::before{background:#d7d8d9;background:var(--separator_common);opacity:1;transition:none}.ActionSheetItem--ios .ActionSheetItem__container{padding:13px 0}.ActionSheetItem--ios .ActionSheetItem__content{justify-content:center}.ActionSheetItem--ios .ActionSheetItem__subtitle{margin-top:2px}.ActionSheetItem--ios.ActionSheetItem--compact .ActionSheetItem__content,.ActionSheetItem--ios .ActionSheetItem__before+.ActionSheetItem__container .ActionSheetItem__content{justify-content:flex-start}.ActionSheetItem--ios .ActionSheetItem__before{margin-right:18px;margin-left:-2px}.ActionSheetItem--cancel{margin-top:7px;margin-bottom:0;margin-bottom:var(--safe-area-inset-bottom);border-radius:14px;min-height:52px}.ActionSheetItem--android{padding:0 20px;min-height:48px;border-radius:0}.ActionSheetItem--android.Tappable--active{background-color:rgba(0,0,0,.12);background-color:var(--action_sheet_separator)}.ActionSheetItem--android .ActionSheetItem__before{margin-right:18px;margin-left:-2px}.ActionSheetItem--android .ActionSheetItem__container{padding:11px 0}.ActionSheetItem--android .ActionSheetItem__subtitle{margin-top:1px;margin-bottom:-1px}.ActionSheetItem--vkcom{padding:0 20px;min-height:48px;border-radius:0}.ActionSheetItem--vkcom.Tappable--active{background-color:rgba(0,0,0,.12);background-color:var(--action_sheet_separator)}.ActionSheetItem--vkcom .ActionSheetItem__before{margin-right:17px;margin-left:-1px}.ActionSheetItem--vkcom .ActionSheetItem__subtitle{margin-top:2px;margin-bottom:-2px}.ActionSheetItem--vkcom .ActionSheetItem__marker{margin-left:26px;color:#3f8ae0;color:var(--accent);background-color:transparent}.ActionSheetItem--desktop{width:auto;cursor:pointer}.ActionSheetItem--desktop.ActionSheetItem--ios:nth-last-child(2){border-bottom-left-radius:0;border-bottom-right-radius:0}.ActionSheetItem[disabled] .ActionSheetItem__children,.ActionSheetItem[disabled] .ActionSheetItem__meta,.ActionSheetItem[disabled] .ActionSheetItem__subtitle{color:#818c99;color:var(--text_secondary)}.ActionSheetItem[disabled] .ActionSheetItem__before{color:#99a2ad;color:var(--icon_secondary)}.ActionSheetItem[disabled] .ActionSheetItem__marker{background:#99a2ad;background:var(--icon_secondary)}.ActionSheetItem--sizeY-compact{min-height:44px}.ActionSheetItem--sizeY-compact .ActionSheetItem__container{padding:12px 0}.ActionSheetItem--sizeY-compact.ActionSheetItem--withSubtitle .ActionSheetItem__container{padding:10px 0}.Alert{-webkit-user-select:none;user-select:none;color:#000;color:var(--text_primary);position:relative;max-width:416px}.Alert::before{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;background-color:var(--modal_card_background);z-index:1;content:'';border-radius:inherit}.Alert__content{position:relative;z-index:2}.Alert__action{white-space:nowrap;background:0 0}.Alert__actions{display:flex;max-width:100%;position:relative;z-index:2}.Alert--ios{width:270px;border-radius:12px;overflow:hidden;-webkit-animation:animation-ios-alert-intro .3s cubic-bezier(.36,.66,.04,1);animation:animation-ios-alert-intro .3s cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-ios-alert-intro .3s var(--ios-easing);animation:animation-ios-alert-intro .3s var(--ios-easing)}.Alert--ios.Alert--closing{opacity:0;transition:opacity .3s cubic-bezier(.36,.66,.04,1);transition:opacity .3s var(--ios-easing)}.Alert--ios .Alert__content{padding:19px 16px 20px;text-align:center}.Alert--ios .Alert__header:not(:last-child){margin-bottom:7px}.Alert--ios .Alert__content::after{content:'';position:absolute;bottom:0;height:1px;right:0;left:0;background:rgba(0,0,0,.12);background:var(--action_sheet_separator);-webkit-transform-origin:center bottom;transform-origin:center bottom}.Alert--ios.Alert--v .Alert__actions{flex-direction:column}.Alert--ios .Alert__action{position:relative;font-size:17px;line-height:44px;color:#3f8ae0;color:var(--accent);border:0;padding:0 6px;margin:0;height:44px;display:block;outline:0;overflow:hidden;text-overflow:ellipsis;border-radius:0}.Alert--ios .Alert__action:active{z-index:1}.Alert--ios .Alert__action::after{content:'';position:absolute;background:rgba(0,0,0,.12);background:var(--action_sheet_separator)}.Alert--ios.Alert--h .Alert__action::after{top:0;right:0;width:1px;height:100%;-webkit-transform-origin:right center;transform-origin:right center}.Alert--ios.Alert--h .Alert__action:last-child::after{content:none}.Alert--ios.Alert--h .Alert__action{flex-grow:1;flex-shrink:1;flex-basis:0}.Alert--ios.Alert--h .Alert__action:first-child{border-bottom-left-radius:12px}.Alert--ios.Alert--h .Alert__action:last-child{border-bottom-right-radius:12px}.Alert--ios.Alert--v .Alert__action::after{left:0;bottom:0;width:100%;height:1px;-webkit-transform-origin:center bottom;transform-origin:center bottom}.Alert--ios.Alert--v .Alert__action:last-child::after{content:none}.Alert--ios.Alert--v .Alert__action:last-child{border-radius:0 0 12px 12px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.Alert--ios .Alert__content::after,.Alert--ios.Alert--v .Alert__action::after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}.Alert--ios.Alert--h .Alert__action::after{-webkit-transform:scaleX(.5);transform:scaleX(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.Alert--ios .Alert__content::after,.Alert--ios.Alert--v .Alert__action::after{-webkit-transform:scaleY(.33);transform:scaleY(.33)}.Alert--ios.Alert--h .Alert__action::after{-webkit-transform:scaleX(.33);transform:scaleX(.33)}}.Alert--ios .Alert__action--cancel{font-weight:600}.Alert--ios .Alert__action--destructive{color:#e64646;color:var(--destructive)}.Alert--android{min-width:280px;margin:auto 24px;box-shadow:0 20px 35px 0 rgba(0,0,0,.3),0 0 35px 0 rgba(0,0,0,.22);border-radius:12px;-webkit-animation:animation-android-alert-intro .2s ease;animation:animation-android-alert-intro .2s ease}.Alert--android.Alert--closing,.Alert--vkcom.Alert--closing{-webkit-transform:scale(.95);transform:scale(.95);opacity:0;transition:opacity .2s cubic-bezier(.4,0,.2,1),-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1),-webkit-transform .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s var(--android-easing),-webkit-transform .2s var(--android-easing);transition:transform .2s var(--android-easing),opacity .2s var(--android-easing);transition:transform .2s var(--android-easing),opacity .2s var(--android-easing),-webkit-transform .2s var(--android-easing)}.Alert--android .Alert__content{padding:24px 24px 20px}.Alert--android .Alert__header,.Alert--vkcom .Alert__header{margin-bottom:8px}.Alert--android .Alert__text,.Alert--vkcom .Alert__text{color:#818c99;color:var(--text_secondary)}.Alert--android .Alert__actions{padding:0 16px 16px}.Alert--android.Alert--h .Alert__actions,.Alert--vkcom.Alert--h .Alert__actions{justify-content:flex-end}.Alert--android.Alert--v .Alert__actions{flex-direction:column;align-items:flex-end}.Alert--android.Alert--v .Alert__button{margin-top:4px;margin-bottom:4px}.Alert--android.Alert--v .Alert__button:first-child{margin-top:0}.Alert--android.Alert--v .Alert__button:last-child{margin-bottom:0}.Alert--android.Alert--h .Alert__button,.Alert--vkcom.Alert--h .Alert__button{margin-left:8px}.Alert--vkcom{box-shadow:0 0 2px rgba(0,0,0,.12),0 0 96px rgba(0,0,0,.16);border-radius:8px;min-width:400px;margin:auto 24px;-webkit-animation:animation-android-alert-intro .2s ease;animation:animation-android-alert-intro .2s ease}.Alert--vkcom .Alert__content{padding:24px}.Alert--vkcom .Alert__actions{padding:0 24px 16px}.Alert--vkcom .Alert__button{order:2}.Alert--vkcom .Alert__button--cancel{order:1}@-webkit-keyframes animation-ios-alert-intro{0%{opacity:0;-webkit-transform:scale(1.05);transform:scale(1.05)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes animation-ios-alert-intro{0%{opacity:0;-webkit-transform:scale(1.05);transform:scale(1.05)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes animation-android-alert-intro{0%{opacity:0;-webkit-transform:scale(.95);transform:scale(.95)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes animation-android-alert-intro{0%{opacity:0;-webkit-transform:scale(.95);transform:scale(.95)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.ScreenSpinner .PopoutWrapper__mask{background:0 0}.ScreenSpinner{-webkit-animation:screen-spinner-intro .3s ease;animation:screen-spinner-intro .3s ease}.ScreenSpinner--ios .ScreenSpinner__container{width:88px;height:88px;background:#fff;background:var(--modal_card_background);box-shadow:0 0 2px 0 rgba(0,0,0,.12),0 0 96px 0 rgba(0,0,0,.16);border-radius:10px}.ScreenSpinner--ios .ScreenSpinner__container .Spinner{color:#818c99;color:var(--overlay_status_icon)}.ScreenSpinner--android .ScreenSpinner__container,.ScreenSpinner--vkcom .ScreenSpinner__container{width:88px;height:88px;background:#f9f9f9;background:var(--tabbar_background);box-shadow:0 16px 32px 0 rgba(0,0,0,.08),0 0 8px 0 rgba(0,0,0,.08);border-radius:8px}.ScreenSpinner--android .ScreenSpinner__container .Spinner,.ScreenSpinner--vkcom .ScreenSpinner__container .Spinner{color:#99a2ad;color:var(--icon_outline_secondary)}@-webkit-keyframes screen-spinner-intro{0%{opacity:0}to{opacity:1}}@keyframes screen-spinner-intro{0%{opacity:0}to{opacity:1}}.Snackbar{-webkit-user-select:none;user-select:none}.Snackbar__in{padding:8px}.Snackbar--closing .Snackbar__in{-webkit-transform:translate3d(0,140%,0);transform:translate3d(0,140%,0)}.Snackbar__body{box-sizing:border-box;padding:12px 16px;min-height:56px;display:flex;align-items:center;background:#fff;background:var(--modal_card_background);box-shadow:0 0 24px 0 rgba(0,0,0,.24),0 0 2px 0 rgba(0,0,0,.08)}.Snackbar__before{margin-left:-4px;margin-right:12px}.Snackbar__after{margin-right:-4px;margin-left:12px}.Snackbar__content{flex:1;display:flex;align-items:center}.Snackbar--l-vertical .Snackbar__content{flex-direction:column;align-items:flex-start}.Snackbar__content-text{flex:1}.Snackbar__content-text{color:#000;color:var(--text_primary)}.Snackbar--l-horizontal .Snackbar__action{margin-right:-16px;position:relative;top:2px}.Snackbar--l-vertical .Snackbar__action{margin-top:2px;margin-bottom:-6px;margin-left:-16px}.ModalRoot .Snackbar{padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.Snackbar--ios .Snackbar__in,.Snackbar--ios .Snackbar__body{transition:-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1),-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing),-webkit-transform 400ms var(--ios-easing)}.Snackbar--ios .Snackbar__in{-webkit-animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.36,.66,.04,1);animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.36,.66,.04,1);-webkit-animation:animation-snackbar-intro-vertical 340ms var(--ios-easing);animation:animation-snackbar-intro-vertical 340ms var(--ios-easing)}.Snackbar--ios .Snackbar__body{border-radius:10px}.Snackbar--android .Snackbar__in,.Snackbar--android .Snackbar__body,.Snackbar--vkcom .Snackbar__in,.Snackbar--vkcom .Snackbar__body{transition:-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1),-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing),-webkit-transform 320ms var(--android-easing)}.Snackbar--android .Snackbar__in,.Snackbar--vkcom .Snackbar__in{-webkit-animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.4,0,.2,1);animation:animation-snackbar-intro-vertical 340ms cubic-bezier(.4,0,.2,1);-webkit-animation:animation-snackbar-intro-vertical 340ms var(--android-easing);animation:animation-snackbar-intro-vertical 340ms var(--android-easing)}.Snackbar--android .Snackbar__body,.Snackbar--vkcom .Snackbar__body{border-radius:8px}.Snackbar--desktop{max-width:328px;left:0;bottom:0}.Snackbar--desktop .Snackbar__in{padding:12px;-webkit-animation-name:animation-snackbar-intro-horizontal;animation-name:animation-snackbar-intro-horizontal}.Snackbar--desktop.Snackbar--closing .Snackbar__in{-webkit-transform:translate3d(-140%,0,0);transform:translate3d(-140%,0,0)}.Snackbar--touched .Snackbar__body{transition:none}@-webkit-keyframes animation-snackbar-intro-vertical{0%{-webkit-transform:translate3d(0,140%,0);transform:translate3d(0,140%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-snackbar-intro-vertical{0%{-webkit-transform:translate3d(0,140%,0);transform:translate3d(0,140%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes animation-snackbar-intro-horizontal{0%{-webkit-transform:translate3d(-140%,0,0);transform:translate3d(-140%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes animation-snackbar-intro-horizontal{0%{-webkit-transform:translate3d(-140%,0,0);transform:translate3d(-140%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.ModalRoot{width:100%;height:100%}.ModalRoot__mask{opacity:1;width:100%;height:100%;position:absolute;left:0;top:0;background:rgba(0,0,0,.4);-webkit-user-select:none;user-select:none;transition:opacity 167ms ease-out;-webkit-animation:animation-fadeIn .32s ease;animation:animation-fadeIn .32s ease}.ModalRoot--touched .ModalRoot__mask{transition:none}.ModalRoot--switching .ModalRoot__mask{pointer-events:none}.ModalRoot__viewport{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ModalRoot--ios .ModalRoot__viewport{top:20px;top:var(--safe-area-inset-top)}.ModalRoot--vkapps.ModalRoot--android .ModalRoot__viewport,.ModalRoot--vkapps.ModalRoot--vkcom .ModalRoot__viewport{top:56px;top:var(--panelheader_height_android)}.ModalRoot--vkapps.ModalRoot--ios .ModalRoot__viewport{top:calc(20px + 52px);top:calc(var(--safe-area-inset-top) + var(--panelheader_height_ios))}.ModalRoot__modal{position:absolute;width:100%;height:100%;box-sizing:border-box;z-index:1}.ModalCard{box-sizing:border-box;position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:flex-end;z-index:1}.ModalCard__in{width:100%;margin-left:auto;margin-right:auto;max-width:360px;padding:8px;-webkit-transform:translateY(100%);transform:translateY(100%);box-sizing:border-box}.ModalCard__container{box-sizing:border-box;position:relative;background:#fff;background:var(--modal_card_background);border-radius:18px;padding:16px;margin-bottom:0;margin-bottom:var(--safe-area-inset-bottom);display:flex;flex-direction:column;justify-content:center;pointer-events:initial}.ModalCard__dismiss{position:absolute;top:4px;right:4px;width:48px;height:48px;color:#99a2ad;color:var(--placeholder_icon_foreground_primary);justify-content:center}.ModalCard__header,.ModalCard__subheader{text-align:center;margin:0;padding:0 8px}.ModalCard__header{color:#000;color:var(--text_primary)}.ModalCard__subheader{color:#818c99;color:var(--text_secondary)}.ModalCard__header+.ModalCard__subheader{margin-top:8px}.ModalCard__header+.FormField,.ModalCard__subheader+.FormField{margin-top:16px}.ModalCard .UsersStack{margin-top:20px}.ModalCard__icon{margin:8px auto 16px;color:#3f8ae0;color:var(--accent)}.ModalCard__actions{display:flex;margin-left:-6px;margin-right:-6px;margin-top:16px}.ModalCard .UsersStack+.ModalCard__actions{margin-top:32px}.ModalCard__header+.ModalCard__actions,.ModalCard__subheader+.ModalCard__actions{margin-top:32px}.ModalCard__actions .Button{flex:1;margin-left:6px;margin-right:6px}.ModalCard__actions--v{flex-direction:column;margin-left:0;margin-right:0}.ModalCard__actions--v .Button{margin-left:0;margin-right:0}.ModalCard__actions--v .Button+.Button{margin-top:12px}.ModalCard--ios .ModalCard__in{transition:-webkit-transform 340ms cubic-bezier(.36,.66,.04,1);transition:transform 340ms cubic-bezier(.36,.66,.04,1);transition:transform 340ms cubic-bezier(.36,.66,.04,1),-webkit-transform 340ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 340ms var(--ios-easing);transition:transform 340ms var(--ios-easing);transition:transform 340ms var(--ios-easing),-webkit-transform 340ms var(--ios-easing)}.ModalCard--ios .ModalCard__header:first-child{padding-left:36px;padding-right:36px}.ModalCard--vkcom .ModalCard__in{max-width:416px}.ModalCard--android .ModalCard__in,.ModalCard--vkcom .ModalCard__in{transition:-webkit-transform 340ms cubic-bezier(.4,0,.2,1);transition:transform 340ms cubic-bezier(.4,0,.2,1);transition:transform 340ms cubic-bezier(.4,0,.2,1),-webkit-transform 340ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 340ms var(--android-easing);transition:transform 340ms var(--android-easing);transition:transform 340ms var(--android-easing),-webkit-transform 340ms var(--android-easing)}.ModalCard--android .ModalCard__container,.ModalCard--vkcom .ModalCard__container{border-radius:12px;box-shadow:0 8px 8px 0 rgba(0,0,0,.16),0 0 4px 0 rgba(0,0,0,.08)}.ModalCard--desktop{align-items:center}.ModalCard--desktop .ModalCard__in{-webkit-transform:unset;transform:unset;opacity:0;transition:opacity 340ms cubic-bezier(.4,0,.2,1);transition:opacity 340ms var(--android-easing)}.ModalCard--desktop .ModalCard__container{border-radius:8px;box-shadow:0 16px 16px rgba(0,0,0,.16),0 0 8px rgba(0,0,0,.12)}.ModalRoot--touched .ModalCard__in{transition:none}.ModalPage{width:100%;height:100%;overflow:hidden;position:absolute;box-sizing:border-box;z-index:1;pointer-events:none}.ModalPage--desktop{display:flex;align-items:center;justify-content:center}.ModalPage__in-wrap{width:100%;height:100%;position:absolute;bottom:0;display:flex;align-items:flex-end;pointer-events:initial;-webkit-transform:translateY(100%);transform:translateY(100%)}.ModalRoot--switching .ModalPage__in-wrap{pointer-events:none}.ModalPage__in{width:416px;max-width:100%;margin:0 auto;background:#fff;background:var(--background_content);overflow:visible;position:relative;box-sizing:border-box;height:100%;display:flex;flex-direction:column}.ModalPage__header{width:100%}.ModalPage__content-wrap{position:relative;display:flex;flex-direction:column;overflow:hidden;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.ModalPage__content{height:100%;overflow-y:hidden;overflow-x:hidden;box-sizing:border-box}.ModalPage--desktop .ModalPage__content,.ModalRoot__modal--expandable .ModalPage__content{overflow-y:auto;-webkit-overflow-scrolling:touch}.ModalPage__content-in{position:relative;padding-bottom:0;padding-bottom:var(--safe-area-inset-bottom)}.ModalRoot__modal--collapsed .ModalPage__content,.ModalRoot__modal--dragging .ModalPage__content{overflow:hidden;touch-action:pan-y}.ModalPage__footer{background:#fff;background:var(--background_content);position:relative;z-index:10}.ModalRoot--touched .ModalPage__footer{transition:none}.ModalPage--ios .ModalPage__in-wrap{transition:-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1),-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing),-webkit-transform 400ms var(--ios-easing)}.ModalPage--ios .ModalPage__in{border-radius:14px 14px 0 0}.ModalPage--android .ModalPage__in-wrap,.ModalPage--vkcom .ModalPage__in-wrap{transition:-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1);transition:transform 320ms cubic-bezier(.4,0,.2,1),-webkit-transform 320ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing);transition:transform 320ms var(--android-easing),-webkit-transform 320ms var(--android-easing)}.ModalPage--android .ModalPage__in,.ModalPage--vkcom .ModalPage__in{border-radius:12px 12px 0 0}.ModalPage--vkcom .ModalPage__in{width:448px}.ModalPage--desktop .ModalPage__in-wrap{align-items:center;opacity:0;transition:opacity 340ms cubic-bezier(.4,0,.2,1);transition:opacity 340ms var(--android-easing);width:auto;height:auto;position:relative;-webkit-transform:none;transform:none}.ModalPage--desktop .ModalPage__in{height:auto;max-height:640px;box-shadow:0 16px 16px rgba(0,0,0,.16),0 0 8px rgba(0,0,0,.12);border-radius:8px}@media (max-height:672px){.ModalPage--desktop .ModalPage__in{max-height:calc(100vh - 32px)}}.ModalRoot--touched .ModalPage__in-wrap{transition:none}.ModalDismissButton{position:absolute;justify-content:center;width:28px;height:28px;top:14px;padding:4px;box-sizing:border-box;background-color:rgba(0,0,0,.35);color:#fff;color:var(--white);border-radius:50%;right:-42px;transition:opacity .15s ease-out}.ModalDismissButton--ios{top:12px}.ModalDismissButton.Tappable--shadowHovered{opacity:.6}.ModalDismissButton.Tappable--shadowHovered.Tappable--active{opacity:1}.ModalPageHeader__in,.ModalPageHeader__left,.ModalPageHeader__right{box-sizing:border-box}.ModalPageHeader__in{display:flex;align-items:center;white-space:nowrap;color:#000;color:var(--header_text_alternate);position:relative;z-index:2}.ModalPage--android .ModalPageHeader__in,.ModalPage--vkcom .ModalPageHeader__in{height:56px;height:var(--modalheader_height_android);padding:0 4px}.ModalPage--ios .ModalPageHeader__in{height:52px;height:var(--modalheader_height_ios);padding:0 4px}.ModalPageHeader__left,.ModalPageHeader__right{color:#3f8ae0;color:var(--header_tint_alternate)}.ModalPageHeader__left{flex-shrink:0;display:flex;align-items:center}.ModalPageHeader__content{overflow:hidden;text-overflow:ellipsis}.ModalPageHeader__content-in{overflow:hidden;text-overflow:ellipsis;font-weight:500}.ModalPageHeader__right{display:flex;justify-content:flex-end;align-items:center;flex-shrink:0;text-align:right}.ModalPageHeader__shadow{pointer-events:none;opacity:0;position:absolute;top:0;height:100%;width:100%;z-index:1;transition:opacity 120ms ease-out}.ModalRoot--touched .ModalPageHeader__shadow{transition:none}.ModalPageHeader--android .ModalPageHeader__shadow,.ModalPageHeader--vkcom .ModalPageHeader__shadow{box-shadow:0 2px 2px 0 rgba(0,0,0,.06),0 0 2px 0 rgba(0,0,0,.03)}.ModalPageHeader__shadow::after{content:'';position:absolute;top:100%;left:0;width:100%;height:1px;background:#d7d8d9;background:var(--separator_common);-webkit-transform-origin:center bottom;transform-origin:center bottom}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.ModalPageHeader__shadow::after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.ModalPageHeader__shadow::after{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.ModalPageHeader .PanelHeaderButton .Icon--dismiss_24{color:#99a2ad;color:var(--placeholder_icon_foreground_primary)}.ModalPageHeader .PanelHeaderButton .Icon--cancel_24{color:#99a2ad;color:var(--icon_secondary)}.ModalPageHeader--ios .ModalPageHeader__in{justify-content:space-between}.ModalPageHeader--ios .ModalPageHeader__left{flex-grow:1;flex-basis:0;padding-right:12px;font-size:17px}.ModalPageHeader--ios .ModalPageHeader__left .PanelHeaderButton .Icon--24{padding-left:12px;padding-right:12px}.ModalPageHeader--ios .ModalPageHeader__left .PanelHeaderButton--primitive{padding-left:16px}.ModalPageHeader--ios .ModalPageHeader__content{position:relative;z-index:1}.ModalPageHeader--ios .ModalPageHeader__content-in{font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt);font-size:21px;text-align:center}.ModalPageHeader--ios .ModalPageHeader__right{flex-grow:1;flex-basis:0;padding-left:12px;font-size:17px}.ModalPageHeader--ios .ModalPageHeader__right .PanelHeaderButton:not(:first-child){padding-left:12px}.ModalPageHeader--ios .ModalPageHeader__right .PanelHeaderButton .Icon--24{padding-left:12px;padding-right:12px}.ModalPageHeader--ios .ModalPageHeader__right .PanelHeaderButton--primitive{padding-right:16px}.ModalPageHeader--android .ModalPageHeader__left,.ModalPageHeader--vkcom .ModalPageHeader__left{padding-right:6px}.ModalPageHeader--android .ModalPageHeader__left:empty,.ModalPageHeader--vkcom .ModalPageHeader__left:empty{padding-right:12px}.ModalPageHeader--android .ModalPageHeader__left:not(:empty),.ModalPageHeader--vkcom .ModalPageHeader__left:not(:empty){padding-left:4px}.ModalPageHeader--android .ModalPageHeader__dismiss,.ModalPageHeader--vkcom .ModalPageHeader__dismiss{color:#99a2ad;color:var(--icon_secondary)}.ModalPageHeader--android .ModalPageHeader__content,.ModalPageHeader--vkcom .ModalPageHeader__content{max-width:100%;flex-grow:2}.ModalPageHeader--android .ModalPageHeader__content-in,.ModalPageHeader--vkcom .ModalPageHeader__content-in{font-size:20px;font-weight:800;font-family:"TT Commons",-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-tt);display:flex;align-items:center}.ModalPageHeader--android .ModalPageHeader__right,.ModalPageHeader--vkcom .ModalPageHeader__right{padding-left:6px}.ModalPageHeader--android .ModalPageHeader__right:not(:empty),.ModalPageHeader--vkcom .ModalPageHeader__right:not(:empty){padding-right:4px}.IconButton{-webkit-appearance:none;appearance:none;background:0 0;border:0;outline:0;box-shadow:none;display:block;color:currentColor;padding:0;margin:0;position:relative}.IconButton .Icon--16{padding:16px}.IconButton .Icon--16.Icon--w-8{padding:16px 14px}.IconButton .Icon--24{padding:12px}.IconButton .Icon--28{padding:10px}.IconButton[disabled]{opacity:.6}.IconButton--ios{height:48px}.IconButton--ios.Tappable--active{opacity:.7}.IconButton--android,.IconButton--vkcom{height:48px;border-radius:24px}.IconButton--android.Tappable--active .Icon,.IconButton--vkcom.Tappable--active .Icon{transition:inherit;border-radius:inherit;background-color:rgba(0,0,0,.08);background-color:var(--background_highlighted)}.Card{position:relative;background:#f5f5f5;background:var(--content_tint_background)}.Card__in{position:relative;z-index:2;border-radius:inherit}.Card--md-shadow{box-shadow:0 2px 24px 0 rgba(0,0,0,.08),0 0 2px 0 rgba(0,0,0,.08);background:#fff;background:var(--modal_card_background)}.Card--md-outline{background:#fff;background:var(--modal_card_background)}.Card--md-outline::before{position:absolute;left:0;top:0;width:100%;height:100%;content:'';display:block;border:1px solid #e1e3e6;border:var(--thin-border) solid var(--input_border);z-index:1;box-sizing:border-box;border-radius:inherit}.Card--ios.Card--sz-s{border-radius:6px}.Card--ios.Card--sz-m{border-radius:10px}.Card--ios.Card--sz-l{border-radius:10px}.Card--android,.Card--vkcom{border-radius:8px}.CardGrid{margin-top:-8px}.CardGrid::after{clear:both;content:'';display:block;width:100%}.CardGrid .Card{float:left;margin-top:8px;margin-left:4px;margin-right:4px}.CardGrid .Card--sz-l{width:calc(100% - 8px)}.CardGrid .Card--sz-m{width:calc((100% - 2*8px)/2)}.CardGrid .Card--sz-s{width:calc((100% - 3*8px)/3)}.CardGrid--ios{padding-left:8px;padding-right:8px}.CardGrid--android,.CardGrid--vkcom{padding-left:12px;padding-right:12px}.CardScroll__in{display:flex;align-items:stretch}.CardScroll .CardScroll__slide{margin-right:8px;flex-shrink:0}.CardScroll .CardScroll__slide:last-child{margin-right:0}.CardScroll__in::before,.CardScroll__in::after{content:'';display:block;flex-shrink:0}.CardScroll--ios .CardScroll__in::before,.CardScroll--ios .CardScroll__in::after{width:12px}.CardScroll--ios .CardScroll__slide--sz-l{width:calc(100% - 24px);margin-right:12px}.CardScroll--android .CardScroll__in::before,.CardScroll--android .CardScroll__in::after,.CardScroll--vkcom .CardScroll__in::before,.CardScroll--vkcom .CardScroll__in::after{width:16px}.CardScroll--android .CardScroll__slide--sz-l,.CardScroll--vkcom .CardScroll__slide--sz-l{width:calc(100% - 32px);margin-right:16px}.ContentCard__body{padding:12px 16px}.ContentCard__img{object-fit:cover;display:block}.ContentCard__caption:not(:last-child),.ContentCard__title:not(:last-child),.ContentCard__text:not(:last-child){margin-bottom:4px}.ContentCard__caption{color:#818c99;color:var(--text_secondary)}.ContentCard--ios .ContentCard__tappable{border-radius:10px}.ContentCard--ios .ContentCard__img{border-radius:10px 10px 0 0}.ContentCard--android .ContentCard__tappable,.ContentCard--vkcom .ContentCard__tappable{border-radius:8px}.ContentCard--android .ContentCard__img,.ContentCard--vkcom .ContentCard__img{border-radius:8px 8px 0 0}.Div--ios{padding:12px}.Div--android{padding:12px 16px}.Div--vkcom{padding:12px 16px}.Link{color:#3f8ae0;color:var(--accent);text-decoration:none;border:0;background:0 0;outline:0;margin:0;padding:0;cursor:pointer;font-size:inherit;display:inline}.Link .Icon{margin-left:4px;display:inline-block;vertical-align:middle}.Link.Tappable--shadowHovered,.Link.Tappable--active{opacity:.72}.Header{-webkit-user-select:text;user-select:text}.Header__in{display:flex;align-items:baseline;justify-content:space-between}.Header__main{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Header__content{display:flex;align-items:baseline}.Header__subtitle{color:#818c99;color:var(--text_secondary)}.Header--mode-primary .Header__main{color:#000;color:var(--text_primary)}.Header--mode-secondary .Header__main{color:#818c99;color:var(--text_secondary)}.Header--pi .Header__main{color:#000;color:var(--text_primary)}.Header--mode-tertiary .Header__main{color:#818c99;color:var(--text_secondary)}.Header__indicator{color:#818c99;color:var(--text_secondary);margin-left:6px}.Header:not(.Header--pi) .Header__indicator{align-self:center}.Header--mode-secondary .Header__indicator{margin-left:8px}.Header__aside{white-space:nowrap;margin-left:12px}.Header__aside>.Icon{position:relative;color:#99a2ad;color:var(--icon_secondary)}.Header__aside>.Icon--24{top:3px}.Header__aside>.Icon--16{top:1px}.Header__aside>.Icon--16{top:1px}.Header--ios .Header__in{padding:0 12px}.Header--ios .Header__subtitle{margin-top:1px}.Header--ios.Header--mode-primary .Header__main{margin:13px 0 9px}.Header--ios.Header--mode-primary .Header__content:not(:last-child){margin-top:-1px}.Header--ios.Header--mode-secondary .Header__main{margin:14px 0 10px}.Header--ios.Header--mode-tertiary .Header__main{margin:9px 0}.Header--android .Header__in{padding:0 16px}.Header--android .Header__subtitle{margin-top:1px}.Header--android.Header--mode-primary .Header__main{margin:15px 0 9px}.Header--android.Header--mode-primary .Header__content:not(:last-child){margin-top:-1px}.Header--android.Header--mode-secondary .Header__main{margin:15px 0 9px}.Header--android.Header--mode-tertiary .Header__main{margin:11px 0 9px}.Header--vkcom .Header__in{padding:0 16px;align-items:center;min-height:100%}.Header--vkcom .Header__subtitle{margin-top:2px}.Header--vkcom.Header--mode-primary{height:64px}.Header--vkcom.Header--mode-secondary{height:56px}.Header--vkcom.Header--mode-tertiary{height:40px}.Header--vkcom .Header__main{color:#000;color:var(--text_primary)}.Group{color:#000;color:var(--text_primary)}.Group__inner{padding-top:8px;padding-bottom:8px}.Group--sizeX-regular>.Group__inner{padding:8px}.Group--card>.Group__inner{background:#fff;background:var(--background_content);border-radius:8px;box-shadow:inset 0 0 0 1px #e1e3e6;box-shadow:inset 0 0 0 var(--thin-border) var(--input_border)}.Group--plain:not(:first-of-type) .Group__inner>.Header:first-child{margin-top:-16px}.Group--plain .Group__inner>.Tabs--default:first-child{margin-top:-8px}.Group--card>.Group__inner>.Header:not(.Header--mode-tertiary):first-child,.Group--card>.Group__inner>.Tabs--default:first-child{margin-top:-4px}.Group--plain>.Group__separator{padding-top:8px;padding-bottom:8px}.Group--sizeX-regular.Group--plain>.Group__separator{padding:8px}.Group:last-of-type>.Group__separator{display:none}.Group:last-of-type>.Group__separator--force,.Group--sizeX-regular.Group--card:last-of-type>.Group__separator{display:block}.Group__description{color:#818c99;color:var(--text_secondary)}.Group .Group>.Group__inner{padding-left:0;padding-right:0}.Group .Group>.Group__separator{padding-left:0;padding-right:0}.Group .Group:first-of-type>.Group__inner{padding-top:0}.Group .Group:last-of-type>.Group__inner{padding-bottom:0}.Group--ios .Group__description{padding:4px 12px 16px}.Group--android .Group__description,.Group--vkcom .Group__description{padding:4px 16px 16px}.PanelHeader--vkcom~.Group--card:first-of-type,.PanelHeader--vkcom+* .Group--card:first-of-type{position:relative;top:-1px}.PanelHeader--vkcom~.Group--card:first-of-type .Group__inner,.PanelHeader--vkcom+* .Group--card:first-of-type .Group__inner{border-top-right-radius:0;border-top-left-radius:0}body[scheme=bright_light] .Gradient--md-tint.Gradient--to-top,body[scheme=vkcom] .Gradient--md-tint.Gradient--to-top{background:linear-gradient(to top,#f5f5f5,rgba(245,245,245,.98),rgba(245,245,245,.94),rgba(245,245,245,.88),rgba(245,245,245,.8),rgba(245,245,245,.71),rgba(245,245,245,.61),rgba(245,245,245,.5),rgba(245,245,245,.39),rgba(245,245,245,.29),rgba(245,245,245,.2),rgba(245,245,245,.12),rgba(245,245,245,.06),rgba(245,245,245,.02),rgba(245,245,245,0))}body[scheme=bright_light] .Gradient--md-tint.Gradient--to-bottom,body[scheme=vkcom] .Gradient--md-tint.Gradient--to-bottom{background:linear-gradient(to bottom,#f5f5f5,rgba(245,245,245,.98),rgba(245,245,245,.94),rgba(245,245,245,.88),rgba(245,245,245,.8),rgba(245,245,245,.71),rgba(245,245,245,.61),rgba(245,245,245,.5),rgba(245,245,245,.39),rgba(245,245,245,.29),rgba(245,245,245,.2),rgba(245,245,245,.12),rgba(245,245,245,.06),rgba(245,245,245,.02),rgba(245,245,245,0))}body[scheme=space_gray] .Gradient--md-tint.Gradient--to-top{background:linear-gradient(to top,#232324,rgba(35,35,36,.98),rgba(35,35,36,.94),rgba(35,35,36,.88),rgba(35,35,36,.8),rgba(35,35,36,.71),rgba(35,35,36,.61),rgba(35,35,36,.5),rgba(35,35,36,.39),rgba(35,35,36,.29),rgba(35,35,36,.2),rgba(35,35,36,.12),rgba(35,35,36,.06),rgba(35,35,36,.02),rgba(35,35,36,0))}body[scheme=space_gray] .Gradient--md-tint.Gradient--to-bottom{background:linear-gradient(to bottom,#232324,rgba(35,35,36,.98),rgba(35,35,36,.94),rgba(35,35,36,.88),rgba(35,35,36,.8),rgba(35,35,36,.71),rgba(35,35,36,.61),rgba(35,35,36,.5),rgba(35,35,36,.39),rgba(35,35,36,.29),rgba(35,35,36,.2),rgba(35,35,36,.12),rgba(35,35,36,.06),rgba(35,35,36,.02),rgba(35,35,36,0))}.SimpleCell{display:flex;align-items:center;min-height:48px;white-space:nowrap;text-decoration:none;color:#000;color:var(--text_primary)}.SimpleCell--mult{white-space:normal}.SimpleCell--mult .SimpleCell__description,.SimpleCell--mult .SimpleCell__children{text-overflow:initial}.SimpleCell>.Avatar,.SimpleCell>.Icon{flex-shrink:0}.SimpleCell>.Icon{color:#3f8ae0;color:var(--accent)}.SimpleCell__main{max-width:100%;flex-grow:1;min-width:0;flex-shrink:initial;overflow:hidden}.SimpleCell>.Icon,.SimpleCell>.Avatar{padding-right:12px}.SimpleCell>.Icon--28{padding-right:16px}.SimpleCell>.Icon,.SimpleCell>.Avatar--sz-32,.SimpleCell>.Avatar--sz-28{padding-top:10px;padding-bottom:10px}.SimpleCell>.Avatar--sz-40{padding-top:4px;padding-bottom:4px}.SimpleCell>.Avatar--sz-48,.SimpleCell>.Avatar--sz-72{padding-top:6px;padding-bottom:6px}.SimpleCell__description{color:#818c99;color:var(--text_secondary);text-overflow:ellipsis;overflow:hidden;font-size:13px;line-height:16px;margin-top:3px}.SimpleCell>.Avatar--sz-32~.SimpleCell__main .SimpleCell__description,.SimpleCell>.Avatar--sz-28~.SimpleCell__main .SimpleCell__description{margin-top:2px}.SimpleCell__children{color:inherit;text-overflow:ellipsis;overflow:hidden}.SimpleCell__indicator{color:#818c99;color:var(--text_secondary);min-width:0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-left:4px}.SimpleCell__after{flex-shrink:0;display:flex;align-items:center;color:#3f8ae0;color:var(--accent)}.SimpleCell__after>.Icon{padding-left:8px}.SimpleCell__after>.Icon:last-child{padding-right:2px}.SimpleCell .Switch{padding-left:10px}.SimpleCell__after .IconButton .Icon--28,.SimpleCell__after .IconButton .Icon--28~*{margin-right:-8px}.SimpleCell__after .IconButton .Icon--24,.SimpleCell__after .IconButton .Icon--24~*{margin-right:-10px}.SimpleCell__after .IconButton .Icon--16,.SimpleCell__after .IconButton .Icon--16~*{margin-right:-14px}.SimpleCell__after .IconButton .Icon--w-8,.SimpleCell__after .IconButton .Icon--w-8~*{margin-right:-12px}.SimpleCell--ios{font-size:17px;line-height:22px;padding-left:12px;padding-right:12px}.SimpleCell--ios .SimpleCell__main,.SimpleCell--ios .SimpleCell__indicator{padding-top:9px;padding-bottom:11px}.SimpleCell--ios>.Avatar:not(.Avatar--sz-32)~.SimpleCell__main,.SimpleCell--ios>.Avatar:not(.Avatar--sz-32)~.SimpleCell__indicator{font-size:16px;line-height:20px}.SimpleCell--ios>.Icon--28,.SimpleCell--ios>.Avatar--sz-32,.SimpleCell--ios>.Avatar--sz-28{padding-left:4px}.SimpleCell--ios .SimpleCell__after .Icon--chevron_24{color:#b8c1cc;color:var(--icon_tertiary);padding-right:4px;padding-left:12px}.SimpleCell--ios .SimpleCell__after .IconButton .Icon--16,.SimpleCell--ios .SimpleCell__after .IconButton .Icon--16~*{margin-right:-12px}.SimpleCell--android,.SimpleCell--vkcom{font-size:16px;line-height:20px;padding-left:16px;padding-right:16px}.SimpleCell--android .SimpleCell__main,.SimpleCell--android .SimpleCell__indicator,.SimpleCell--vkcom .SimpleCell__main,.SimpleCell--vkcom .SimpleCell__indicator{padding-top:11px;padding-bottom:10px}.SimpleCell--sizeY-compact{min-height:44px}.SimpleCell--sizeY-compact .SimpleCell__main,.SimpleCell--sizeY-compact .SimpleCell__indicator{padding-top:10px;padding-bottom:10px}.SimpleCell--sizeY-compact>.Avatar--sz-40{padding-top:2px;padding-bottom:2px}.SimpleCell--sizeY-compact>.Avatar--sz-48{padding-top:4px;padding-bottom:4px}.SimpleCell--sizeY-compact>.Icon,.SimpleCell--sizeY-compact>.Avatar--sz-32,.SimpleCell--sizeY-compact>.Avatar--sz-28{padding-top:8px;padding-bottom:8px}.SimpleCell--sizeY-compact,.SimpleCell--sizeY-compact>.Avatar:not(.Avatar--sz-32)~.SimpleCell__main,.SimpleCell--sizeY-compact>.Avatar:not(.Avatar--sz-32)~.SimpleCell__indicator{font-size:15px;line-height:20px}.SimpleCell--sizeY-compact .SimpleCell__description,.SimpleCell--sizeY-compact>.Avatar--sz-32~.SimpleCell__main .SimpleCell__description,.SimpleCell--sizeY-compact>.Avatar--sz-28~.SimpleCell__main .SimpleCell__description{margin-top:1px}.Cell{position:relative;margin:0;padding:0;font-size:16px;line-height:22px}.List--dragging .Cell:not(.Cell--dragging){transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.List--dragging .Cell--dragging,.Cell--dragging{background-color:#fff;background-color:var(--background_content);box-shadow:0 0 5px rgba(0,0,0,.25);z-index:3}.Cell__dragger{position:relative}.Cell .Cell__dragger .Icon{color:#99a2ad;color:var(--icon_secondary)}.Cell__checkbox{display:none}.Cell__marker{width:24px;height:24px;border-radius:50%;border:2px solid #99a2ad;border:2px solid var(--icon_secondary);color:transparent;box-sizing:border-box;flex-shrink:0}.Cell__checkbox:checked~.Cell__marker{border:0;color:#fff;color:var(--white);background-color:#3f8ae0;background-color:var(--accent);padding:4px}.Cell--ios .Cell__in{transition:-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1),-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing),-webkit-transform .6s var(--ios-easing)}.Cell--ios.Cell--removable{overflow:hidden}.Cell--ios .Cell__remove{position:absolute;left:100%;height:100%;top:0;background-color:#e64646;background-color:var(--destructive);color:#fff;color:var(--white);padding:0 10px;line-height:45px;font-size:15px;transition:-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1);transition:transform .6s cubic-bezier(.36,.66,.04,1),-webkit-transform .6s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing);transition:transform .6s var(--ios-easing),-webkit-transform .6s var(--ios-easing);display:flex;align-items:center;justify-content:center;flex-shrink:0}.Cell--ios .Cell__remove-in{flex-shrink:0}.Cell--ios .Cell__remove-marker{margin-right:12px;width:21px;height:21px;background-color:#e64646;background-color:var(--destructive);border-radius:50%;position:relative}.Cell--ios .Cell__remove-marker::before{position:absolute;left:6px;top:10px;width:9px;height:1px;background-color:#fff;background-color:var(--white);content:'';display:block}.Cell--ios .Cell__marker{margin-right:12px}.Cell--android .Cell__dragger,.Cell--vkcom .Cell__dragger{padding-right:16px}.Cell--android .Cell__remove-marker,.Cell--vkcom .Cell__remove-marker{color:#99a2ad;color:var(--icon_secondary)}.Cell--android .Cell__marker,.Cell--vkcom .Cell__marker{margin-right:16px}.CellButton{box-sizing:border-box;outline:0;text-decoration:none;margin:0;border:0;cursor:pointer;width:100%;background:0 0;text-align:left;padding-top:0;padding-bottom:0}.CellButton[disabled]{opacity:.4}.CellButton--centered{justify-content:center;text-align:center}.CellButton--centered .SimpleCell__main{flex-grow:initial;max-width:initial}.CellButton--centered>.Icon{padding-right:8px}.CellButton--primary,.CellButton--primary>.Icon,.CellButton--primary>.Avatar .Icon{color:#3f8ae0;color:var(--accent)}.CellButton--danger,.CellButton--danger>.Icon,.CellButton--danger>.Avatar .Icon{color:#e64646;color:var(--destructive)}.RichCell{display:flex;min-height:64px;box-sizing:border-box;white-space:nowrap;text-decoration:none;color:#000;color:var(--text_primary)}.RichCell--mult{white-space:normal}.RichCell--mult .RichCell__children,.RichCell--mult .RichCell__caption,.RichCell--mult .RichCell__text{text-overflow:initial}.RichCell>.Avatar{padding-right:12px;padding-top:8px;padding-bottom:8px;flex-shrink:0}.RichCell__in{flex-grow:1;max-width:100%;min-width:0;overflow:hidden;display:flex;flex-direction:column;justify-content:center;position:relative;padding-top:8px;padding-bottom:8px}.RichCell__top{font-size:0;line-height:0}.RichCell__top>:first-child:not(.RichCell__content){display:none;pointer-events:none}.RichCell__top>.Icon--28:first-child~*{margin-right:32px}.RichCell__content{display:flex}.RichCell__after{flex-shrink:0;padding-left:4px;white-space:nowrap}.RichCell__after .Icon--28{position:absolute;right:0;color:#3f8ae0;color:var(--accent)}.RichCell>.Avatar--sz-72+.RichCell__in .RichCell__after .Icon--28{top:22px}.RichCell>.Avatar--sz-48+.RichCell__in .RichCell__after .Icon--28{top:10px}.RichCell__children{flex-grow:1;max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis}.RichCell__text{overflow:hidden;text-overflow:ellipsis}.RichCell__caption{margin-top:1px;color:#818c99;color:var(--text_secondary);overflow:hidden;text-overflow:ellipsis}.RichCell__bottom .UsersStack{padding:5px 0 0}.RichCell__actions{display:flex;margin-top:8px}.RichCell__actions .Button:not(:last-child){margin-right:8px}.RichCell--ios{padding-right:12px;padding-left:12px}.RichCell--android,.RichCell--vkcom{padding-right:16px;padding-left:16px}.RichCell--sizeY-compact{min-height:60px}.RichCell>.Avatar--sz-48{padding-top:6px;padding-bottom:6px}.RichCell--sizeY-compact .RichCell__actions{margin-top:11px}.RichCell--sizeY-compact .UsersStack+.RichCell__actions{margin-top:12px}.HorizontalCell{padding-bottom:6px;display:flex}.HorizontalCell__image{display:flex;justify-content:center}.HorizontalCell__content{word-break:break-all}.HorizontalCell__subtitle{color:#818c99;color:var(--text_secondary);line-height:18px}.HorizontalCell--s{width:72px}.HorizontalCell--s .HorizontalCell__image{padding:4px 8px}.HorizontalCell--s .HorizontalCell__content{padding:2px 4px;text-align:center}.HorizontalCell--m{width:100px}.HorizontalCell--l{width:auto}.HorizontalCell--m .HorizontalCell__image,.HorizontalCell--l .HorizontalCell__image{padding:4px 6px}.HorizontalCell--m .HorizontalCell__content,.HorizontalCell--l .HorizontalCell__content{padding:2px 6px;text-align:left}.HorizontalCell--ios:first-child::before,.HorizontalCell--ios:last-child::after{content:"";width:4px}.HorizontalCell--ios.HorizontalCell--s:first-child,.HorizontalCell--ios.HorizontalCell--s:last-child{width:78px}.HorizontalCell--ios.HorizontalCell--m:first-child,.HorizontalCell--ios.HorizontalCell--m:last-child{width:106px}.HorizontalCell--android:first-child::before,.HorizontalCell--android:last-child::after,.HorizontalCell--vkcom:first-child::before,.HorizontalCell--vkcom:last-child::after{content:"";min-width:8px}.HorizontalCell--android.HorizontalCell--s:first-child,.HorizontalCell--android.HorizontalCell--s:last-child,.HorizontalCell--vkcom.HorizontalCell--s:first-child,.HorizontalCell--vkcom.HorizontalCell--s:last-child{width:80px}.HorizontalCell--android.HorizontalCell--m:first-child,.HorizontalCell--android.HorizontalCell--m:last-child,.HorizontalCell--vkcom.HorizontalCell--m:first-child,.HorizontalCell--vkcom.HorizontalCell--m:last-child{width:116px}.Footer{margin:24px 0;font-size:13px;color:#818c99;color:var(--text_secondary);line-height:16px;font-weight:400;text-align:center}.Div.Footer{padding-top:0;padding-bottom:0}:root{--duration: .7s}.Spinner{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#99a2ad;color:var(--icon_outline_secondary)}.PanelHeader .Spinner{color:currentColor}.Spinner__self{-webkit-animation:rotator .7s linear infinite;animation:rotator .7s linear infinite;-webkit-animation:rotator var(--duration) linear infinite;animation:rotator var(--duration) linear infinite;-webkit-transform-origin:center;transform-origin:center}.Spinner__self svg{-webkit-transform:scale(1);transform:scale(1)}@-webkit-keyframes rotator{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotator{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.Switch{display:block}.Switch__self{display:none}.Switch__pseudo{position:relative;display:block;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent}.Switch__pseudo::before{position:absolute;content:''}.Switch__self:checked+.Switch__pseudo::before{-webkit-transform:translateX(20px);transform:translateX(20px)}.Switch--ios .Switch__pseudo{width:51px;height:31px;border:2px solid #e1e3e6;border:2px solid var(--switch_ios_off_border);background:0 0;border-radius:15px;box-sizing:border-box;transition:background-color .2s ease,border-color .2s ease}.Switch--ios.Switch--sizeY-compact .Switch__pseudo{width:47px;height:27px;border-radius:13px}.Switch--ios .Switch__self:checked+.Switch__pseudo{border-color:#3f8ae0;border-color:var(--accent);background:#3f8ae0;background:var(--accent)}.Switch--ios .Switch__self[disabled]+.Switch__pseudo{opacity:.4}.Switch--ios .Switch__pseudo::before{top:0;left:0;width:27px;height:27px;border-radius:13px;background:#fff;background:var(--white);box-shadow:0 3px 8px rgba(0,0,0,.15),0 3px 1px rgba(0,0,0,.06),inset 0 0 0 .5px rgba(0,0,0,.04);transition:-webkit-transform .2s cubic-bezier(.36,-.24,.26,1.32);transition:transform .2s cubic-bezier(.36,-.24,.26,1.32);transition:transform .2s cubic-bezier(.36,-.24,.26,1.32),-webkit-transform .2s cubic-bezier(.36,-.24,.26,1.32)}.Switch--ios.Switch--sizeY-compact .Switch__pseudo::before{width:23px;height:23px;border-radius:11px}.Switch--ios .Switch__self:checked+.Switch__pseudo::before{-webkit-transform:translateX(20px);transform:translateX(20px)}.Switch--android,.Switch--vkcom{padding:3px}.Switch--android .Switch__pseudo{width:34px;height:14px;background:#c6c5c5;border-radius:7px;transition:background-color .1s ease}.Switch--android.Switch--sizeY-compact .Switch__pseudo{width:32px;height:12px;border-radius:6px}.Switch--android .Switch__self:checked+.Switch__pseudo{background:#a8bfdb}.Switch--android .Switch__self[disabled]+.Switch__pseudo{opacity:.4}.Switch--android .Switch__pseudo::before{top:-3px;left:-3px;width:20px;height:20px;background:#f1f1f1;border-radius:10px;box-shadow:0 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.24);transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease,-webkit-transform .1s ease}.Switch--android.Switch--sizeY-compact .Switch__pseudo::before{width:18px;height:18px;border-radius:9px}.Switch--android .Switch__self:checked+.Switch__pseudo::before{background:#3f8ae0;background:var(--accent)}.Switch--android.Switch--sizeY-compact .Switch__self:checked+.Switch__pseudo::before{-webkit-transform:translateX(19px);transform:translateX(19px)}.Switch--vkcom .Switch__pseudo{width:28px;height:10px}.Switch--vkcom .Switch__pseudo::after{content:'';display:block;border-radius:45px;transition:background-color .1s ease;width:100%;height:100%;background:#b8c1cc;background:var(--icon_tertiary);opacity:.48}.Switch--vkcom .Switch__self:checked+.Switch__pseudo::after{background:#3f8ae0;background:var(--accent);opacity:.48}.Switch--vkcom .Switch__self[disabled]+.Switch__pseudo{opacity:.4}.Switch--vkcom .Switch__pseudo::before{top:-3px;left:-2px;width:16px;height:16px;background:#f9f9f9;background:var(--background_light);border:1px solid #b8c1cc;border:1px solid var(--icon_tertiary);border-radius:8px;box-sizing:border-box;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease,-webkit-transform .1s ease;z-index:1}.Switch--vkcom .Switch__self:checked+.Switch__pseudo::before{background:#3f8ae0;background:var(--accent);border:0;-webkit-transform:translateX(16px);transform:translateX(16px)}.InfoRow{-webkit-user-select:text;user-select:text;text-overflow:ellipsis;overflow:hidden}.InfoRow__header{margin-bottom:2px;color:#6d7885;color:var(--text_subhead);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Avatar{box-sizing:border-box}.Avatar__in{position:relative;color:#99a2ad;color:var(--icon_secondary)}.Avatar__img{background:rgba(0,28,61,.08);background:var(--placeholder_icon_background);border:0;display:block;width:100%;height:100%;position:relative;z-index:1}.Avatar__shadow{position:absolute;left:0;top:0;width:100%;height:100%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);box-shadow:inset 0 0 0 1px var(--image_border);pointer-events:none;z-index:2}.Avatar__children{position:absolute;left:0;top:0;z-index:2;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.Gallery{position:relative;overflow:hidden;height:100px}.Gallery__viewport{margin:0;height:100%;position:relative}.Gallery--center .Gallery__viewport{margin:0 auto}.Gallery__layer{display:flex;width:100%;height:100%;cursor:grab;align-items:stretch}.Gallery__slide{width:100%;height:100%;flex:0 0 auto;max-width:100%;overflow:hidden}.Gallery--custom-width .Gallery__slide{width:auto}.Gallery__slide>*{width:100%;height:100%}.Gallery__bullets{position:absolute;bottom:10px;height:6px;width:100%;left:0;display:flex;align-items:center;justify-content:center}.Gallery__bullets--dark .Gallery__bullet{background-color:#000}.Gallery__bullets--light .Gallery__bullet{background-color:#fff}.Gallery__bullet{height:6px;width:6px;border-radius:50%;margin:0 3px;opacity:.56}.Gallery__bullet--active{opacity:1}.Progress{border-radius:1px;background:#e1e3e6;background:var(--loader_track_fill);height:2px}.Progress__in{height:100%;border-radius:inherit;transition:width .2s ease;background:#3f8ae0;background:var(--accent)}.Search{overflow:hidden;font-weight:400;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);line-height:normal}.Search__in{position:relative}.Search__width{height:36px;height:var(--search_default_height);white-space:nowrap;color:transparent;width:10000px}.Search__control{display:flex;justify-content:flex-start;align-items:center;position:absolute;left:0;top:0;width:calc(100% - 1px);height:100%;border-radius:10px}.Search__input{border:0;margin:0;height:36px;height:var(--search_default_height);position:relative;padding:0 22px 0 36px;box-sizing:border-box;font-size:17px;outline:0;border-radius:10px;max-width:100%;flex-grow:1;min-width:0;background-color:transparent;z-index:2;color:#000;color:var(--text_primary)}.Search--has-after .Search__input{border-radius:10px 0 0 10px}.Search--has-value .Search__input,.Search--has-icon .Search__input,.Search--has-value .Search__placeholder,.Search--has-icon .Search__placeholder{padding-right:40px}.Search--has-icon.Search--has-value .Search__input,.Search--has-icon.Search--has-value .Search__placeholder{padding-right:80px}.Search__after-width{font-size:17px;height:36px;height:var(--search_default_height);line-height:36px;line-height:var(--search_default_height);padding-left:12px;padding-right:4px;flex-shrink:0}.Search__placeholder{position:absolute;left:0;width:100%;cursor:text;z-index:1;text-align:left;height:36px;height:var(--search_default_height);font-size:0;padding-left:12px;padding-right:22px;pointer-events:none;box-sizing:border-box;display:flex}.Search__placeholder-in{height:36px;height:var(--search_default_height);display:flex;align-items:center;overflow:hidden;flex-grow:1;max-width:100%}.Search__placeholder-text{margin-left:8px;line-height:22px;font-size:17px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.Search--has-value .Search__placeholder-text{opacity:0}.Search__icons{position:absolute;right:100%;top:0;display:flex;align-items:center;justify-content:center;color:#818c99;color:var(--search_bar_field_tint)}.Search__icon{width:40px;height:36px;height:var(--search_default_height);display:flex;align-items:center;justify-content:center}.Search__icon.Tappable--active{opacity:.7}.Search__after{position:absolute;left:100%;top:0;line-height:36px;line-height:var(--search_default_height);z-index:2;-webkit-transform:translate(0);transform:translate(0);transition:-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1);transition:transform .3s cubic-bezier(.36,.66,.04,1),-webkit-transform .3s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing);transition:transform .3s var(--ios-easing),-webkit-transform .3s var(--ios-easing);cursor:default}.Search--focused .Search__after,.Search--has-value .Search__after{-webkit-transform:translate(-100%);transform:translate(-100%)}.Search__after::before{position:absolute;right:calc(100% - 1px);display:block;height:100%;width:10px;content:'';pointer-events:none}.Search__after-in{position:relative;z-index:2;cursor:pointer;font-size:17px;padding-left:12px;padding-right:4px}.Search__after::after{position:absolute;right:100%;display:block;height:100%;width:10px;content:'';top:0;border-radius:0 10px 10px 0;cursor:text;pointer-events:none}.Group--plain .Search{padding-top:4px}.Search{background:#fff;background:var(--search_bar_background)}.Search__control{background-color:#ebedf0;background-color:var(--search_bar_field_background)}.Search__input{color:#000;color:var(--text_primary)}.Search__placeholder{color:#818c99;color:var(--search_bar_field_tint)}.Search__after-width{background:#ebedf0;background:var(--search_bar_field_background);color:#ebedf0;color:var(--search_bar_field_background)}.Search__after{background:#fff;background:var(--search_bar_background);color:#3f8ae0;color:var(--accent)}.Search__after::after{background-color:#ebedf0;background-color:var(--search_bar_field_background)}.Search__after::before{background-color:#fff;background-color:var(--search_bar_background)}.PanelHeader .Search{background:#fff;background:var(--header_background)}.PanelHeader .Search__control{background-color:#ebedf0;background-color:var(--header_search_field_background)}.PanelHeader .Search__input{color:#000;color:var(--text_primary)}.PanelHeader .Search__placeholder{color:#818c99;color:var(--header_search_field_tint)}.PanelHeader .Search__after-width{background:#ebedf0;background:var(--header_search_field_background);color:#ebedf0;color:var(--header_search_field_background)}.PanelHeader .Search__after{background:#fff;background:var(--header_background);color:#3f8ae0;color:var(--header_tint)}.PanelHeader .Search__after::after{background-color:#ebedf0;background-color:var(--header_search_field_background)}.PanelHeader .Search__after::before{background-color:#fff;background-color:var(--header_background)}.Search--ios{padding:8px 12px}.Search--android{padding:8px 16px}.Search--vkcom,.PanelHeader--vkcom .Search{background:0 0}.Search--vkcom .Search__in{padding-top:6px;padding-bottom:6px}.Search--vkcom .Search__input{font-size:15px;line-height:20px;padding-left:40px}.Search--vkcom .Search__placeholder{padding-left:16px}.Search--vkcom .Search__icons{top:4px;right:calc(100% + 8px)}.Search--vkcom.Search--has-value .Search__input{padding-right:56px}.Search--vkcom.Search--has-icon.Search--has-value .Search__input{padding-right:92px}.Search--vkcom .Search__icon{width:40px;height:40px}.Search--vkcom .Search__icon:hover{background-color:rgba(0,0,0,.04);background-color:var(--background_hover);border-radius:50%}.Search--vkcom .Search__control{background-color:transparent}.PanelHeader--vkcom .Search__separator{display:none}.Search--vkcom .Search__separator{color:#e1e3e6;color:var(--input_border)}.Group--card .Search--vkcom{margin:-8px -8px 0}.Group--card .Search--vkcom:not(:last-child){margin-bottom:8px}.Group--card .Search--vkcom .Search__placeholder{padding-left:20px}.Group--card .Search--vkcom .Search__input{padding-left:44px}.Tabs__in,.Tabs .HorizontalScroll__in-wrapper{display:flex;align-items:center}.PanelHeader .Tabs{overflow:hidden;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common)}.PanelHeader .Tabs::after{display:block;width:1000px;content:''}.Tabs .HorizontalScroll{min-width:100%}.Tabs--buttons{padding-top:8px;padding-bottom:8px}.Tabs--default,.Tabs--default .HorizontalScroll__in-wrapper{justify-content:center}.Tabs--buttons,.Tabs--default .HorizontalScroll__in-wrapper{justify-content:flex-start}.Tabs--sizeX-compact.Tabs--buttons .HorizontalScroll__in-wrapper::after,.Tabs--sizeX-compact.Tabs--buttons .HorizontalScroll__in-wrapper::before{display:block;width:8px;flex-shrink:0;height:1px;content:''}.Tabs--ios.Tabs--segmented{padding:4px 12px 8px}.FixedLayout--ios.FixedLayout--bottom .Tabs::after{position:absolute;left:0;top:0;width:100%;height:100%;content:'';background:#fff;background:var(--background_content)}.FixedLayout--ios.FixedLayout--bottom .Tabs__in,.FixedLayout--ios.FixedLayout--bottom .Separator{position:relative;z-index:2}.TabsItem .Counter{margin-left:8px}.Tabs .TabsItem .Counter{background:#76787a;background:var(--panel_tab_inactive_text);color:#fff;color:var(--white)}.Tabs .TabsItem--selected .Counter{background:#5d5f61;background:var(--panel_tab_active_text);color:#ebedf0;color:var(--panel_tab_active_background)}.Tabs--ios.Tabs--segmented .TabsItem .Counter{background:#99a2ad;background:var(--segmented_control_tint);color:#fff;color:var(--background_content)}.Tabs--ios.Tabs--segmented .TabsItem--selected .Counter{background:#fff;background:var(--background_content);color:#99a2ad;color:var(--segmented_control_tint)}.Tabs--ios.Tabs--segmented .TabsItem .Counter--s-m{position:relative;top:1px}.TabsItem{white-space:nowrap;text-align:center;font-weight:500;box-sizing:border-box;flex-shrink:0;display:flex;align-items:baseline;justify-content:center}.Tabs--default .TabsItem{font-size:16px;line-height:20px;color:#818c99;color:var(--text_secondary);max-width:100%;min-width:0;flex-basis:0;flex-shrink:0;flex-grow:1;position:relative;padding-left:16px;padding-right:16px}.Tabs--default .TabsItem__in{overflow:hidden;text-overflow:ellipsis;padding:14px 0}.Tabs--default .TabsItem::after{content:'';display:block;position:absolute;left:16px;bottom:8px;width:calc(100% - 32px);height:2px;border-radius:2px}.Tabs--default .TabsItem--selected{color:#000;color:var(--text_primary)}.Tabs--default .TabsItem--selected::after{background:#3f8ae0;background:var(--accent)}.HorizontalScroll .TabsItem{min-width:64px;flex-basis:auto}.Tabs--buttons .TabsItem{border-radius:10px;box-sizing:border-box;padding:0 16px;font-size:14px;line-height:18px;font-weight:500}.Tabs--buttons .TabsItem__in{padding:6px 0}.Tabs--buttons .Tabs__in>.TabsItem:first-child{margin-left:8px}.Tabs--buttons .TabsItem:not(:last-child){margin-right:8px}.Tabs--buttons .TabsItem{background-color:#fff;background-color:var(--header_background);color:#99a2ad;color:var(--header_tab_inactive_text)}.Tabs--buttons .TabsItem--selected{background-color:transparent;background-color:var(--header_tab_active_background);color:#000;color:var(--header_tab_active_text)}.Tabs--buttons .TabsItem{color:#76787a;color:var(--panel_tab_inactive_text)}.Tabs--buttons .TabsItem--selected{background-color:#ebedf0;background-color:var(--panel_tab_active_background);color:#5d5f61;color:var(--panel_tab_active_text)}.Tabs--ios.Tabs--segmented .TabsItem{border:1px solid;font-size:14px;line-height:18px;padding:0 12px;max-width:100%;flex-basis:0;flex-shrink:0;flex-grow:1}.Tabs--ios.Tabs--segmented .TabsItem__in{padding:7px 0}.Tabs--ios.Tabs--segmented .TabsItem:not(:first-child){border-left:none}.Tabs--ios.Tabs--segmented .TabsItem:last-child{border-radius:0 10px 10px 0}.Tabs--ios.Tabs--segmented .TabsItem:first-child{border-radius:10px 0 0 10px}.Tabs--ios.Tabs--segmented .TabsItem{border-color:#99a2ad;border-color:var(--segmented_control_tint);color:#99a2ad;color:var(--segmented_control_tint)}.Tabs--ios.Tabs--segmented .TabsItem--selected{background-color:#99a2ad;background-color:var(--segmented_control_tint)}.Tabs--ios.Tabs--segmented .TabsItem--selected{color:#fff;color:var(--background_content)}.Tabs--ios.Tabs--segmented .TabsItem:not(.TabsItem--selected).Tappable--active{background:#d7d8d9;background:var(--separator_common)}.PanelHeader--ios .Tabs--segmented.TabsItem:not(.TabsItem--selected).Tappable--active .TabsItem__in{opacity:.7}.PanelHeader--ios .Tabs--segmented .TabsItem{border-color:#3f8ae0;border-color:var(--header_tint);color:#3f8ae0;color:var(--header_tint)}.Tabs--ios.Tabs--segmented.Tabs--header .TabsItem--selected{background-color:#3f8ae0;background-color:var(--header_tint);color:#fff;color:var(--header_background)}.TabsItem--android .Tappable__waves,.TabsItem--vkcom .Tappable__waves{display:none}.Tabs--vkcom .TabsItem--vkcom{flex-grow:0;min-width:auto;font-size:15px;line-height:20px;font-weight:400;padding-left:10px;padding-right:10px}.Tabs--vkcom .TabsItem--vkcom::after{left:2px;bottom:0;width:calc(100% - 4px)}.Tooltip{position:absolute;left:0;top:0;height:100%;width:100%;z-index:2}.Tooltip__container{position:absolute}.Tooltip__corner{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDIwIDgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+dG9vbHRpcF90aXA8L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iTWFzdGVyLUtpdCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+ICAgICAgICA8cGF0aCBkPSJNMTAsMCBDMTMuNSwwIDE1LjUsOCAyMCw4IEwwLDggQzQuNSw4IDYuNSwwIDEwLDAgWiIgaWQ9InRvb2x0aXBfdGlwIiBmaWxsPSIjNDdhM2ZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4gICAgPC9nPjwvc3ZnPg==);width:20px;height:8px;position:absolute}.Tooltip--light .Tooltip__corner{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDIwIDgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+dG9vbHRpcF90aXA8L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iTWFzdGVyLUtpdCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+ICAgICAgICA8cGF0aCBkPSJNMTAsMCBDMTMuNSwwIDE1LjUsOCAyMCw4IEwwLDggQzQuNSw4IDYuNSwwIDEwLDAgWiIgaWQ9InRvb2x0aXBfdGlwIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4gICAgPC9nPjwvc3ZnPg==)}.Tooltip--y-bottom .Tooltip__corner{bottom:100%}.Tooltip--y-top .Tooltip__corner{-webkit-transform:rotate(180deg);transform:rotate(180deg);top:100%}.Tooltip__content{background-color:#47a3ff;box-shadow:0 4px 32px 0 rgba(0,0,0,.16),0 0 4px 0 rgba(0,0,0,.04);padding:6px 16px;border-radius:10px;font-size:14px;color:#fff;line-height:1.29;max-width:220px}.Tooltip--light .Tooltip__content{background:#fff;color:#2c2d2e}.Tooltip__title{font-weight:600}.PullToRefresh{flex-grow:1}.PullToRefresh--refreshing{touch-action:none;pointer-events:none}.PullToRefresh__controls{left:0;width:100%;pointer-events:none;z-index:9}.PullToRefresh--ios .PullToRefresh__controls{z-index:0}.PullToRefresh__spinner{display:flex;margin:auto;width:40px;height:40px;align-items:center;justify-content:center;box-sizing:border-box;transition:opacity 220ms ease-out,-webkit-transform 300ms cubic-bezier(.1,0,.25,1);transition:transform 300ms cubic-bezier(.1,0,.25,1),opacity 220ms ease-out;transition:transform 300ms cubic-bezier(.1,0,.25,1),opacity 220ms ease-out,-webkit-transform 300ms cubic-bezier(.1,0,.25,1);opacity:0}.PullToRefresh--ios .PullToRefresh__spinner{color:#99a2ad;color:var(--icon_outline_secondary)}.PullToRefresh--android .PullToRefresh__spinner,.PullToRefresh--vkcom .PullToRefresh__spinner{background:#fff;background:var(--background_suggestions);border-radius:50%;box-shadow:0 2px 6px rgba(0,0,0,.2);color:#3f8ae0;color:var(--accent)}.PullToRefresh--watching .PullToRefresh__spinner{transition:opacity 220ms ease-out}.PullToRefresh__spinner-self{stroke:currentColor}.PullToRefresh--ios.PullToRefresh--refreshing .PullToRefresh__spinner-self{-webkit-animation:PullToRefreshToRefreshing 380ms ease-out;animation:PullToRefreshToRefreshing 380ms ease-out}.PullToRefresh__spinner-path{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:center center;transform-origin:center center;transition:stroke-dashoffset 167ms ease-out}.PullToRefresh--watching .PullToRefresh__spinner-path,.PullToRefresh--refreshing .PullToRefresh__spinner-path{transition:none}.PullToRefresh__spinner--on .PullToRefresh__spinner-path{-webkit-animation:rotator .7s linear infinite;animation:rotator .7s linear infinite;-webkit-animation:rotator var(--duration) linear infinite;animation:rotator var(--duration) linear infinite}.PullToRefresh__content{overflow:hidden;transition:-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1);transition:transform 400ms cubic-bezier(.36,.66,.04,1),-webkit-transform 400ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing);transition:transform 400ms var(--ios-easing),-webkit-transform 400ms var(--ios-easing)}.PullToRefresh--watching .PullToRefresh__content{transition:none}@-webkit-keyframes PullToRefreshToRefreshing{0%{-webkit-transform:scale(1);transform:scale(1)}30%{-webkit-transform:scale(.6);transform:scale(.6)}90%{-webkit-transform:scale(1.1);transform:scale(1.1)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes PullToRefreshToRefreshing{0%{-webkit-transform:scale(1);transform:scale(1)}30%{-webkit-transform:scale(.6);transform:scale(.6)}90%{-webkit-transform:scale(1.1);transform:scale(1.1)}to{-webkit-transform:scale(1);transform:scale(1)}}.Counter{display:flex;align-items:center;justify-content:center}.Counter__in{text-align:center;box-sizing:border-box}.Counter--primary{background:#3f8ae0;background:var(--counter_primary_background);color:#fff;color:var(--counter_primary_text)}.Counter--secondary{background:#aeb7c2;background:var(--counter_secondary_background);color:#fff;color:var(--counter_secondary_text)}.Counter--prominent{background:#ff3347;background:var(--counter_prominent_background);color:#fff;color:var(--counter_prominent_text)}.Counter--s-m{height:24px;border-radius:12px}.Counter--s-m .Counter__in{min-width:24px;padding:2px 5px;font-size:15px;line-height:20px}.Counter--s-s{height:18px;border-radius:9px}.Counter--s-s .Counter__in{min-width:18px;padding:1px 5px;font-size:12px;line-height:16px}.Counter--vkcom.Counter--s-s .Counter__in{font-weight:400;line-height:14px;padding-top:2px;padding-bottom:2px;letter-spacing:.2px}.Counter--vkcom.Counter--s-m .Counter__in{padding-left:6px;padding-right:6px;font-weight:500;letter-spacing:.2px}.UsersStack{display:flex;align-items:center;color:#818c99;color:var(--text_secondary)}.UsersStack__photos{display:flex}.UsersStack__photo{background-position:center;background-repeat:no-repeat;background-size:cover;border-radius:50%}.UsersStack__photo--others{display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:#fff;background:#99a2ad;background:var(--content_placeholder_icon)}.UsersStack--size-s .UsersStack__photo{width:24px;height:24px}.UsersStack--size-m .UsersStack__photo{width:32px;height:32px}.UsersStack__photo+.UsersStack__photo{margin-left:4px}.UsersStack:not(.UsersStack--simple) .UsersStack__photo+.UsersStack__photo{margin-left:-2px}.UsersStack--size-s:not(.UsersStack--simple) .UsersStack__photo+.UsersStack__photo{-webkit-clip-path:url(#users_stack_mask_24_left);clip-path:url(#users_stack_mask_24_left)}.UsersStack--size-m:not(.UsersStack--simple) .UsersStack__photo+.UsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_left);clip-path:url(#users_stack_mask_32_left)}.UsersStack--size-m.UsersStack--others:not(.UsersStack--simple) .UsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_right);clip-path:url(#users_stack_mask_32_right)}.UsersStack--size-m.UsersStack--others:not(.UsersStack--simple) .UsersStack__photo:last-child{-webkit-clip-path:none;clip-path:none}.UsersStack__text{min-width:0;flex:1;margin:0 0 0 8px;font-size:13px;line-height:16px}.UsersStack--l-vertical{flex-direction:column;justify-content:center}.UsersStack--l-vertical .UsersStack__text{margin:8px 0 0;text-align:center}.Separator{color:#d7d8d9;color:var(--separator_common)}.Separator__in:not(.Separator__in--expanded){height:1px;background:currentColor;-webkit-transform-origin:center top;transform-origin:center top}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.Separator__in:not(.Separator__in--expanded){-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.Separator__in:not(.Separator__in--expanded){-webkit-transform:scaleY(.32);transform:scaleY(.32)}}.Separator__in--expanded{height:16px;background:0 0}.Separator:not(.Separator--wide).Separator--ios .Separator__in{margin-left:12px;margin-right:12px}.Separator:not(.Separator--wide).Separator--android .Separator__in,.Separator:not(.Separator--wide).Separator--vkcom .Separator__in{margin-left:16px;margin-right:16px}.Placeholder{display:flex;align-items:center;justify-content:center}.Placeholder--stretched{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;padding-top:inherit;padding-bottom:inherit}.Placeholder__in{text-align:center;box-sizing:border-box;padding:48px 32px}.Placeholder__icon{margin-bottom:12px;display:inline-block;vertical-align:top;color:#aeb7c2;color:var(--placeholder_icon_foreground_secondary)}.Placeholder__header{color:#000;color:var(--text_primary)}.Placeholder__text{color:#818c99;color:var(--text_placeholder)}.Placeholder__header+.Placeholder__text{margin-top:8px}.Placeholder__action:not(:first-child){margin-top:24px}.Placeholder__action .Button--lvl-tertiary{top:-8px}.Banner{color:#000;color:var(--text_primary);margin:12px 0}.Banner__in{display:flex;position:relative;overflow:hidden}.Banner__in.Tappable--active{opacity:.6}.Banner__in::before{position:absolute;left:0;top:0;width:100%;height:100%;content:'';display:block;border:1px solid rgba(0,0,0,.08);border:var(--thin-border) solid var(--image_border);z-index:3;box-sizing:border-box;border-radius:inherit;pointer-events:none}.Banner__before{margin-right:12px}.Banner__content{display:flex;justify-content:center;flex-direction:column;flex:1;min-width:0}.Banner__subheader{color:#6d7885;color:var(--text_subhead)}.Banner__bg{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.Banner__bg>*{width:100%;height:100%}.Banner__expand{align-self:center;color:#b8c1cc;color:var(--icon_tertiary);margin-left:12px}.Banner__dismiss{width:28px}.Banner__dismissIcon{position:absolute;top:0;right:0;z-index:2;width:48px;height:48px;display:flex;align-items:center;justify-content:center;color:#b8c1cc;color:var(--icon_tertiary)}.Banner__dismissIcon:active{opacity:.4}.Banner__actions{margin-bottom:-6px}.Banner__actions>.Button{margin-top:12px;margin-right:16px;margin-bottom:6px}.Banner__actions>.Button--lvl-tertiary{margin:4px 16px 2px -16px}.Banner__actions>.Button--lvl-tertiary:first-child{margin-top:4px}.Banner__actions>.Button:not(.Button--lvl-tertiary)+.Button:not(.Button--lvl-tertiary){margin-top:0}.Banner__actions>.Button:not(.Button--lvl-tertiary)+.Button--lvl-tertiary{margin-top:2px;margin-left:-16px}.Banner__actions>.Button--lvl-tertiary+.Button--lvl-tertiary{margin-top:2px}.Banner--sz-s .Banner__subheader:not(:first-child),.Banner--sz-s .Banner__text:not(:first-child){margin-top:2px}.Banner--sz-m .Banner__subheader:not(:first-child),.Banner--sz-m .Banner__text:not(:first-child){margin-top:4px}.Banner--md-tint .Banner__in,.Banner--md-tint .Banner__in.Tappable--active{background-color:#f5f5f5;background-color:var(--content_tint_background)}.Banner--md-tint .Banner__in{padding:12px}.Banner--md-tint.Banner--sz-s .Banner__before{margin-right:8px}.Banner--md-tint.Banner--sz-s .Banner__content{padding-left:4px}.Banner--md-tint.Banner--sz-m .Banner__in{padding:16px}.Banner--md-image .Banner__in,.Banner--md-image .Banner__in.Tappable--active{background-color:#f5f5f5;background-color:var(--content_tint_background);padding:12px 16px}.Banner--md-image .Banner__before,.Banner--md-image .Banner__content{position:relative;z-index:2}.Banner--inverted{color:#fff;color:var(--white)}.Banner--inverted .Banner__subheader{color:#fff;color:var(--white);opacity:.72}.Banner--md-image.Banner--sz-m .Banner__in{padding:16px}.Banner--ios{padding:0 12px}.Banner--ios .Banner__in{border-radius:10px}.Banner--android,.Banner--vkcom{padding:0 16px}.Banner--android .Banner__in,.Banner--vkcom .Banner__in{border-radius:8px}.Banner--android .Banner__dismissIcon,.Banner--vkcom .Banner__dismissIcon{color:#99a2ad;color:var(--icon_secondary)}.Banner--android.Banner--md-image .Banner__dismissIcon,.Banner--vkcom.Banner--md-image .Banner__dismissIcon{color:#fff;color:var(--white)}.MiniInfoCell{display:flex;padding-top:6px;padding-bottom:6px}.MiniInfoCell--lvl-primary{color:#000;color:var(--text_primary)}.MiniInfoCell--lvl-secondary{color:#6d7885;color:var(--text_subhead)}.MiniInfoCell__icon{color:#99a2ad;color:var(--icon_outline_secondary)}.MiniInfoCell__content{flex:1;min-width:0;margin-left:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.MiniInfoCell--wr-short .MiniInfoCell__content{white-space:initial;display:-webkit-box;max-height:60px;-webkit-line-clamp:3;-webkit-box-orient:vertical}.MiniInfoCell--wr-full .MiniInfoCell__content{overflow:inherit;white-space:initial}.MiniInfoCell__after{margin-left:12px;margin-top:-2px;margin-bottom:-2px}.MiniInfoCell__after .UsersStack{padding:0}.MiniInfoCell--md-add,.MiniInfoCell--md-add .MiniInfoCell__icon{color:#3f8ae0;color:var(--accent)}.MiniInfoCell--md-more,.MiniInfoCell--md-more .MiniInfoCell__icon{color:#4986cc;color:var(--link_alternate)}.MiniInfoCell--md-more{padding-top:10px;padding-bottom:10px}.MiniInfoCell--ios{padding-left:12px;padding-right:12px}.MiniInfoCell--android{padding-left:16px;padding-right:16px}.MiniInfoCell--vkcom{padding-left:12px;padding-right:12px}.WriteBar{background:#fff;background:var(--background_content)}.WriteBar__before,.WriteBar__form,.WriteBar__after{display:flex;align-items:flex-end}.WriteBar__form{min-height:52px}.WriteBar__formIn{flex:1;min-width:0;display:flex;position:relative}.WriteBar__textarea{box-sizing:border-box;width:100%;flex:1;min-width:0;margin:0;background:0 0;border:0;outline:0;resize:none;line-height:20px;color:#000;color:var(--text_primary);-webkit-appearance:none;max-height:120px}.WriteBar__textarea::-webkit-input-placeholder{color:#818c99;color:var(--text_placeholder)}.WriteBar__textarea::placeholder{color:#818c99;color:var(--text_placeholder)}.WriteBar__textarea::-moz-placeholder{opacity:1;color:#818c99;color:var(--text_placeholder)}.WriteBar__inlineAfter{display:flex;align-items:flex-end}.WriteBar--ios .WriteBar__before,.WriteBar--ios .WriteBar__after{padding:0 4px}.WriteBar--ios .WriteBar__formIn{box-sizing:border-box;background-color:#f2f3f5;background-color:var(--input_background);border:1px solid #e1e3e6;border:1px solid var(--input_border);border-radius:18px;margin:8px 0}.WriteBar--ios .WriteBar__formIn:first-child{margin-left:12px}.WriteBar--ios .WriteBar__inlineAfter{margin-right:-1px;margin-top:-9px;margin-bottom:-9px}.WriteBar--ios .WriteBar__textarea{height:34px;padding:6px 11px;font-size:17px;line-height:22px}.WriteBar--android .WriteBar__before,.WriteBar--vkcom .WriteBar__before{padding-left:4px}.WriteBar--android .WriteBar__after,.WriteBar--vkcom .WriteBar__after{padding-right:4px}.WriteBar--android .WriteBar__textarea,.WriteBar--vkcom .WriteBar__textarea{height:52px;padding:16px 12px;font-size:16px;line-height:20px}.WriteBarIcon{background:0 0;border:0;outline:0;position:relative;color:#3f8ae0;color:var(--writebar_icon);height:52px;display:flex;align-items:center;justify-content:center;cursor:pointer}.WriteBarIcon--disabled{opacity:.4;pointer-events:none}.WriteBarIcon:active{opacity:.6}.WriteBarIcon__count{box-sizing:border-box;position:absolute;top:4px;right:4px;display:flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 2px;border:2px solid #fff;border:2px solid var(--background_content);text-align:center;color:#fff;color:var(--button_commerce_foreground);background:#4bb34b;background:var(--button_commerce_background);border-radius:50%}.WriteBarIcon--send:not(.WriteBarIcon--disabled){color:#3f8ae0;color:var(--accent)}.WriteBarIcon--ios{width:44px;color:#3f8ae0;color:var(--writebar_icon)}.WriteBarIcon--ios.WriteBarIcon--send,.WriteBarIcon--ios.WriteBarIcon--done{width:48px}.WriteBarIcon--ios.WriteBarIcon--send:first-child,.WriteBarIcon--ios.WriteBarIcon--done:first-child{margin-left:-4px}.WriteBarIcon--ios.WriteBarIcon--send:last-child,.WriteBarIcon--ios.WriteBarIcon--done:last-child{margin-right:-4px}.WriteBarIcon--android,.WriteBarIcon--vkcom{width:44px;color:#99a2ad;color:var(--icon_secondary)}.WriteBarIcon--android.WriteBarIcon--send,.WriteBarIcon--vkcom.WriteBarIcon--send,.WriteBarIcon--android.WriteBarIcon--done,.WriteBarIcon--vkcom.WriteBarIcon--done{color:#3f8ae0;color:var(--accent)}.FormLayout{position:relative}.FormLayout__submit{position:absolute;visibility:hidden;pointer-events:none;left:0;top:0;padding:0;width:0;height:0;-webkit-appearance:none;appearance:none;border:0}.FormItem{padding-top:12px;padding-bottom:12px;display:block}.FormItem__top{padding-top:2px;padding-bottom:8px;color:#818c99;color:var(--text_secondary)}.FormItem--sizeY-compact .FormItem__top{padding-bottom:6px}.FormItem__bottom{color:#818c99;color:var(--text_secondary);padding-top:8px}.FormItem--sizeY-compact .FormItem__bottom{padding-top:6px}.FormItem--error .FormItem__bottom{color:#e64646;color:var(--field_error_border)}.FormItem--valid .FormItem__bottom,.FormItem--verified .FormItem__bottom{color:#4bb34b;color:var(--field_valid_border)}.FormItem--ios{padding-left:12px;padding-right:12px}.FormItem--ios .Cell,.FormItem--ios .SimpleCell,.FormItem--ios .RichCell,.FormItem--ios .CellButton,.FormItem--ios .Radio,.FormItem--ios .Checkbox{width:100%;box-sizing:content-box;margin-left:-12px;margin-right:-12px}.FormItem--android,.FormItem--vkcom{padding-left:16px;padding-right:16px}.FormItem--android .Cell,.FormItem--vkcom .Cell,.FormItem--android .SimpleCell,.FormItem--vkcom .SimpleCell,.FormItem--android .RichCell,.FormItem--vkcom .RichCell,.FormItem--android .CellButton,.FormItem--vkcom .CellButton,.FormItem--android .Radio,.FormItem--vkcom .Radio,.FormItem--android .Checkbox,.FormItem--vkcom .Checkbox{width:100%;box-sizing:content-box;margin-left:-16px;margin-right:-16px}.FormLayoutGroup--horizontal{flex-direction:row;display:flex}.FormLayoutGroup--horizontal>.FormItem{max-width:100%;flex-grow:1;flex-shrink:0;flex-basis:0;padding-left:0;padding-right:0;min-width:0}.FormLayoutGroup--horizontal>.FormItem+.FormItem{margin-left:24px}.FormLayoutGroup--ios.FormLayoutGroup--horizontal{padding-left:12px;padding-right:12px}.FormLayoutGroup--android.FormLayoutGroup--horizontal,.FormLayoutGroup--vkcom.FormLayoutGroup--horizontal{padding-left:16px;padding-right:16px}.FormStatus{border-radius:10px;padding:12px;background:#f2f3f5;background:var(--field_background);color:#6d7885;color:var(--text_subhead)}.FormStatus__header,.FormStatus b:first-child{color:#000;color:var(--text_primary)}.FormStatus__header:not(:last-child),.FormStatus b:first-child{margin-bottom:2px}.FormStatus--error{background:#faebeb;background:var(--field_error_background);color:#e64646;color:var(--field_error_border)}.FormStatus--error .FormStatus__header,.FormStatus--error .FormStatus b:first-child{color:currentColor}.FormStatus b:first-child{display:block;font-size:16px;line-height:20px;font-weight:500}.Slider{position:relative;z-index:0;height:28px;padding:0 14px}.Slider::before{position:absolute;left:0;width:100%;background-color:rgba(0,28,61,.08);background-color:var(--placeholder_icon_background);content:'';z-index:-1;top:13px;height:2px;border-radius:1px}.Slider__in{height:100%;position:relative}.Slider__dragger{position:absolute;left:0;width:0;height:0;top:13px}.Slider__dragger::before{position:absolute;top:0;width:calc(100% + 28px);background:#3f8ae0;background:var(--accent);content:'';left:-14px;height:2px;border-radius:1px}.Slider__thumb{position:absolute;top:-13px;width:28px;height:28px;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease,-webkit-transform .1s ease;border-radius:14px;background:#fff;background:var(--white);box-shadow:0 3px 8px rgba(0,0,0,.15)}.Slider__thumb--start{left:-14px}.Slider__thumb--end{right:-14px}.Slider--sizeY-compact{height:24px;padding:0 12px}.Slider--sizeY-compact::before{top:11px}.Slider--sizeY-compact .Slider__dragger{top:11px}.Slider--sizeY-compact .Slider__dragger::before{width:calc(100% + 24px);left:-12px}.Slider--sizeY-compact .Slider__thumb{top:-11px;width:24px;height:24px}.Slider--sizeY-compact .Slider__thumb--start{left:-12px}.Slider--sizeY-compact .Slider__thumb--end{right:-12px}.Slider--vkcom{height:20px;padding:0 10px}.Slider--vkcom::before{top:8px;height:4px;border-radius:2px}.Slider--vkcom .Slider__dragger{top:8px}.Slider--vkcom .Slider__dragger::before{width:calc(100% + 20px);background:#3f8ae0;background:var(--accent);left:-10px;height:4px;border-radius:2px}.Slider--vkcom .Slider__thumb{top:-8px;width:20px;height:20px;border-radius:10px;border:1px solid #e1e3e6;border:1px solid var(--input_border);box-shadow:0 0 2px #d7d8d9,0 2px 4px #d7d8d9;box-shadow:0 0 2px var(--separator_common),0 2px 4px var(--separator_common);box-sizing:border-box}.Slider--vkcom .Slider__thumb--start{left:-10px}.Slider--vkcom .Slider__thumb--end{right:-10px}.FormField{position:relative;box-sizing:border-box;padding:1px}.FormField__border{position:absolute;left:0;top:0;width:100%;height:100%;border:1px solid rgba(0,0,0,.12);border:1px solid var(--field_border);background:#f2f3f5;background:var(--field_background);content:'';border-radius:10px;box-sizing:border-box;z-index:1;-webkit-transform-origin:left top;transform-origin:left top}.Textarea .Textarea__el:not(:disabled)~.FormField__border--hover,.Select:not(.Select--disabled) .FormField__border--hover,.Input .Input__el:not(:disabled)~.FormField__border--hover,.ChipsInput:not(.ChipsInput--disabled) .ChipsInput__container~.FormField__border--hover{border-color:rgba(0,0,0,.24);border-color:var(--icon_tertiary_alpha)}.FormField--ios{border-radius:10px}.FormField--android{border-radius:8px}.FormField--vkcom{border-radius:6px}.FormField>*{border-radius:inherit}.FormItem--error .FormField__border{background:#faebeb;background:var(--field_error_background);border-color:#e64646;border-color:var(--field_error_border)}.FormItem--valid .FormField__border{border-color:#4bb34b;border-color:var(--field_valid_border)}.Textarea .Textarea__el:disabled~.FormField__border,.Select .Select__el:disabled~.FormField__border,.Input .Input__el:disabled~.FormField__border,.ChipsInput.ChipsInput--disabled .ChipsInput__container~.FormField__border{opacity:.4}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.FormField--ios .FormField__border{border-radius:20px;-webkit-transform:scale(.5);transform:scale(.5);width:200%;height:200%}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.FormField--ios .FormField__border{border-radius:31.25px;-webkit-transform:scale(.32);transform:scale(.32);width:312.5%;height:312.5%}}.FormField.Input .Input__el:focus~.FormField__border,.FormField.Textarea .Textarea__el:focus~.FormField__border,.FormField.Select .Select__el:focus~.FormField__border,.FormField.Select--mimicry:focus .FormField__border,.FormField.ChipsInput--focused .ChipsInput__container~.FormField__border{border-color:#3f8ae0;border-color:var(--accent);background:#f2f3f5;background:var(--field_background)}.CustomSelect__open.Select--mimicry:focus .FormField__border{border-color:rgba(0,0,0,.12);border-color:var(--field_border)}.FormField--ios.CustomSelect__open .FormField__border,.FormField--ios.ChipsSelect__open .FormField__border{border-radius:10px 10px 0 0}.FormField--android.CustomSelect__open .FormField__border,.FormField--android.ChipsSelect__open .FormField__border{border-radius:8px 8px 0 0}.FormField--vkcom.CustomSelect__open .FormField__border,.FormField--vkcom.ChipsSelect__open .FormField__border{border-radius:6px 6px 0 0}.FormField--ios.CustomSelect__open.CustomSelect__open--popupDirectionTop .FormField__border,.FormField--ios.ChipsSelect__open.ChipsSelect__open--popupDirectionTop .FormField__border{border-radius:0 0 10px 10px}.FormField--android.CustomSelect__open.CustomSelect__open--popupDirectionTop .FormField__border,.FormField--android.ChipsSelect__open.ChipsSelect__open--popupDirectionTop .FormField__border{border-radius:0 0 8px 8px}.FormField--vkcom.CustomSelect__open.CustomSelect__open--popupDirectionTop .FormField__border,.FormField--vkcom.ChipsSelect__open.ChipsSelect__open--popupDirectionTop .FormField__border{border-radius:0 0 6px 6px}.Radio{display:block}.Radio__input{display:none}.Radio__container{display:flex;align-items:center;justify-content:flex-start}.Radio__input:disabled~.Radio__container{opacity:.6}.Radio__icon{flex-shrink:0;box-sizing:border-box;border-radius:50%;position:relative}.Radio__icon::after{position:absolute;content:'';display:block;border-radius:50%;box-sizing:border-box}.Radio__content{flex-grow:1;max-width:100%;color:#000;color:var(--text_primary)}.Radio__description{color:#818c99;color:var(--text_secondary)}.Radio--ios{padding:0 12px}.Radio--ios .Radio__icon{width:22px;height:22px;border:2px solid #b8c1cc;border:2px solid var(--icon_tertiary);margin:1px 12px 1px 1px;transition:border-color .15s cubic-bezier(.36,.66,.04,1);transition:border-color .15s var(--ios-easing)}.Radio--ios.Radio--sizeY-compact .Radio__icon{width:18px;height:18px;margin-right:11px}.Radio--ios .Radio__input:checked~.Radio__container .Radio__icon{border-color:#3f8ae0;border-color:var(--accent)}.Radio--ios .Radio__icon::after{width:14px;height:14px;left:2px;top:2px;-webkit-transform:scale(.3);transform:scale(.3);transition:-webkit-transform .15s cubic-bezier(.36,.66,.04,1);transition:transform .15s cubic-bezier(.36,.66,.04,1);transition:transform .15s cubic-bezier(.36,.66,.04,1),-webkit-transform .15s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .15s var(--ios-easing);transition:transform .15s var(--ios-easing);transition:transform .15s var(--ios-easing),-webkit-transform .15s var(--ios-easing)}.Radio--ios.Radio--sizeY-compact .Radio__icon::after{top:1px;left:1px;width:12px;height:12px}.Radio--ios .Radio__input:checked~.Radio__container .Radio__icon::after{background-color:#3f8ae0;background-color:var(--accent);-webkit-transform:scale(1);transform:scale(1)}.Radio--ios .Radio__children{margin-top:11px}.Radio--ios .Radio__children:last-child{margin-bottom:13px}.Radio--ios .Radio__description{margin-bottom:12px;margin-top:1px}.Radio--android{padding:0 16px}.Radio--android .Radio__icon{width:22px;height:22px;border:2px solid #b8c1cc;border:2px solid var(--icon_tertiary);margin:1px 12px 1px 1px;transition:border-color .5s cubic-bezier(.36,.66,.04,1);transition:border-color .5s var(--ios-easing)}.Radio--android.Radio--sizeY-compact .Radio__icon{width:18px;height:18px;margin-right:11px}.Radio--android .Radio__icon::after{width:14px;height:14px;left:2px;top:2px;-webkit-transform:scale(.3);transform:scale(.3);transition:-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1),-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing),-webkit-transform .5s var(--ios-easing)}.Radio--android.Radio--sizeY-compact .Radio__icon::after{top:1px;left:1px;width:12px;height:12px}.Radio--android .Radio__input:checked~.Radio__container .Radio__icon{border-color:#3f8ae0;border-color:var(--accent)}.Radio--android .Radio__input:checked~.Radio__container .Radio__icon::after{background-color:#3f8ae0;background-color:var(--accent);-webkit-transform:scale(1);transform:scale(1)}.Radio--android .Radio__children{margin-top:12px}.Radio--android .Radio__children:last-child{margin-bottom:12px}.Radio--android .Radio__description{margin-top:1px;margin-bottom:11px}.Radio--vkcom{padding:0 16px}.Radio--vkcom .Radio__icon{width:16px;height:16px;margin:2px 14px 2px 2px;border:1px solid #99a2ad;border:1px solid var(--icon_secondary);border-radius:50%;transition:border-color .5s cubic-bezier(.36,.66,.04,1);transition:border-color .5s var(--ios-easing)}.Radio--vkcom .Radio__icon::after{width:8px;height:8px;left:3px;top:3px;-webkit-transform:scale(.3);transform:scale(.3);transition:-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1),-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing);transition:transform .5s var(--ios-easing),-webkit-transform .5s var(--ios-easing)}.Radio--vkcom .Radio__input:disabled~.Radio__container{opacity:.4}.Radio--vkcom .Radio__input:checked~.Radio__container .Radio__icon{border-color:#3f8ae0;border-color:var(--accent)}.Radio--vkcom .Radio__input:checked~.Radio__container .Radio__icon::after{background-color:#3f8ae0;background-color:var(--accent);-webkit-transform:scale(1);transform:scale(1)}.Radio--vkcom .Radio__children{margin-top:10px}.Radio--vkcom .Radio__children:last-child{margin-bottom:10px}.Radio--vkcom .Radio__description{margin-top:1px;margin-bottom:9px}.Radio--sizeY-compact .Radio__children{margin-top:8px}.Radio--sizeY-compact .Radio__children:last-child{margin-bottom:8px}.Radio--sizeY-compact .Radio__description{margin-bottom:7px}.Checkbox{display:block}.Checkbox__input{display:none}.Checkbox__container{display:flex;align-items:flex-start;justify-content:flex-start}.Checkbox__icon{flex-shrink:0;box-sizing:border-box;margin-right:12px;border-radius:4px;display:flex;line-height:24px}.Checkbox__icon--on{color:#3f8ae0;color:var(--accent);display:none}.Checkbox__icon--off{color:#b8c1cc;color:var(--icon_tertiary)}.Checkbox__content{flex-grow:1;color:#000;color:var(--text_primary)}.Checkbox__input:checked~.Checkbox__container .Checkbox__icon--on{display:flex}.Checkbox__input:checked~.Checkbox__container .Checkbox__icon--off{display:none}.Checkbox__input[disabled]~.Checkbox__container{opacity:.6}.Checkbox--ios{padding:0 12px}.Checkbox--ios .Checkbox__icon{margin-top:10px}.Checkbox--ios.Checkbox--sizeY-compact .Checkbox__icon{margin-top:8px}.Checkbox--ios .Checkbox__content{margin-top:12px;margin-bottom:12px}.Checkbox--android{padding:0 16px}.Checkbox--android .Checkbox__icon{margin-top:10px}.Checkbox--android.Checkbox--sizeY-compact .Checkbox__icon{margin-top:8px}.Checkbox--android .Checkbox__content{margin-top:12px;margin-bottom:12px}.Checkbox--vkcom{padding:0 16px}.Checkbox--vkcom .Checkbox__icon{border-radius:3px;padding:1px;border-width:1px;margin-top:8px}.Checkbox--vkcom .Checkbox__input[disabled]~.Checkbox__container{opacity:.4}.Checkbox--sizeY-compact .Checkbox__content{margin-top:8px;margin-bottom:8px}.Input{position:relative;line-height:19px;font-size:16px}.Input--center .Input__el{text-align:center}.Input--right .Input__el{text-align:right}.Input__el{margin:0;width:100%;display:block;box-sizing:border-box;box-shadow:none;border:0;outline:0;-webkit-appearance:none;appearance:none;text-overflow:ellipsis;height:42px;line-height:19px;font-size:16px;color:#000;color:var(--text_primary);padding:11px;position:relative;z-index:2;background:0 0}.Input--sizeY-compact .Input__el{height:34px;padding-top:9px;padding-bottom:9px;line-height:20px;font-size:15px}.Input__el:disabled{opacity:.4}.Input__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder)}.Input__el::placeholder{color:#818c99;color:var(--field_text_placeholder)}.Input__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary)}.Input__el:disabled::placeholder{color:#818c99;color:var(--text_secondary)}.ChipsInput{display:flex;position:relative;padding:4px 14px;box-sizing:border-box}.ChipsInput.ChipsInput--sizeY-compact{padding:2px 12px}.ChipsInput__container{display:flex;width:100%;flex-wrap:wrap;position:relative;z-index:2}.ChipsInput__chip{margin:2px 12px 2px -8px;max-width:calc(100% - 8px)}.ChipsInput__input-container{display:flex;flex-direction:column;flex:1;margin:2px 0}.ChipsInput__el{line-height:26px;margin-bottom:2px;font-size:15px;color:#000;color:var(--text_primary);border:0;outline:0;width:100%;box-sizing:border-box;box-shadow:none;-webkit-appearance:none;appearance:none;position:relative;z-index:2;background:0 0;padding:0}.ChipsInput__el:focus{min-width:64px}.ChipsInput:focus{outline:0}.ChipsInput__el::-ms-clear{display:none}.ChipsInput__el:disabled{opacity:.4}.ChipsInput__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder)}.ChipsInput__el::placeholder{color:#818c99;color:var(--field_text_placeholder)}.ChipsInput__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary)}.ChipsInput__el:disabled::placeholder{color:#818c99;color:var(--text_secondary)}.Chip{display:inline-block;border:1px solid rgba(0,0,0,.08);border:1px solid var(--image_border);background:#fff;background:var(--background_content);border-radius:4px;height:28px;box-sizing:border-box}.Chip__in{display:flex;height:100%;padding:0 8px;align-items:center}.Chip__content{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#000;color:var(--text_primary);font-size:13px;line-height:16px;display:inline-block}.Chip__remove{margin-left:4px;margin-right:-2px;cursor:pointer}.Chip__before{margin-right:6px}.Chip__after{margin-left:6px}.Select{display:block;position:relative;box-sizing:border-box}.Select--mimicry:focus{outline:0}.Select__el{display:block;position:absolute;-webkit-appearance:none;appearance:none;outline:0;border:0;left:0;top:0;width:100%;height:100%;opacity:0;z-index:3;font-size:16px}.Select__container{line-height:19px;font-size:16px;padding:12px 39px 11px 11px;color:#000;color:var(--text_primary);box-sizing:border-box;height:42px;position:relative;z-index:2;cursor:pointer}.Select__el{cursor:pointer}.Select--disabled .Select__el{cursor:default}.Select--disabled .Select__container{opacity:.4;cursor:default}.Select:not(.Select--multiline) .Select__title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Select--not-selected .Select__title{color:#818c99;color:var(--field_text_placeholder)}.Select--disabled.Select--not-selected .Select__title{color:#818c99;color:var(--text_secondary)}.Select--align-right .Select__title{text-align:right}.Select--align-center .Select__title{text-align:center}.Select .Icon{position:absolute;top:50%;margin-top:-12px;right:10px;color:#99a2ad;color:var(--icon_secondary)}.Select--multiline .Select__container{height:auto;min-height:42px}.Select--sizeY--compact .Select__container{padding:11px 35px 11px 11px}.Select--sizeX--compact .Icon--h-12{margin-top:-6px}.Select--sizeY--compact .Select__container{height:34px;padding-top:7px;padding-bottom:7px;font-size:15px;line-height:20px}.Select--sizeY--compact .Icon--h-16{margin-top:-8px}.Textarea{position:relative}.Textarea__el{margin:0;width:100%;display:block;box-sizing:border-box;outline:0;resize:none;-webkit-appearance:none;appearance:none;line-height:19px;font-size:16px;color:#000;color:var(--text_primary);padding:11px;min-height:84px;max-height:196px;border:0;z-index:2;position:relative;background:0 0}.Textarea--sizeY-compact .Textarea__el{padding-top:7px;padding-bottom:7px;font-size:15px;line-height:20px;min-height:54px}.Textarea__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder)}.Textarea__el::placeholder{color:#818c99;color:var(--field_text_placeholder)}.Textarea__el:disabled{opacity:.4}.Textarea__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary)}.Textarea__el:disabled::placeholder{color:#818c99;color:var(--text_secondary)}.File__input{display:none}.CustomScrollView{width:100%;height:100%;overflow:hidden;position:relative}.CustomScrollView__box{width:100%;height:100%;overflow-y:scroll;overflow-x:hidden;padding-right:100px;scrollbar-width:none}.CustomScrollView__box::-webkit-scrollbar{display:none}.CustomScrollView__box--dragging{pointer-events:none}.CustomScrollView__barY{position:absolute;top:0;right:0;height:100%;width:10px}.CustomScrollView__trackerY{width:10px;box-sizing:border-box;padding:4px 4px 4px 0;position:absolute;top:0;left:0;-webkit-user-select:none;user-select:none}.CustomScrollView__trackerY::before{content:'';opacity:.28;display:block;width:100%;height:100%;background:#000;background:var(--music_playback_icon);border-radius:12px;transition:opacity 200ms,-webkit-transform 200ms;transition:transform 200ms,opacity 200ms;transition:transform 200ms,opacity 200ms,-webkit-transform 200ms}.CustomScrollView__trackerY:hover::before,.CustomScrollView__trackerY--dragging::before{opacity:.56;-webkit-transform:scaleX(1.34);transform:scaleX(1.34)}.CustomSelect{width:100%;position:relative;cursor:pointer;display:block}.CustomSelect__control{display:none}.CustomSelect__options{width:100%;overflow:hidden;position:absolute;background-color:#fff;background-color:var(--modal_card_background);box-sizing:border-box;border:solid 1px rgba(0,0,0,.12);border:solid 1px var(--field_border);border-top:0;box-shadow:0 2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03);border-radius:0 0 8px 8px;max-height:160px;z-index:3}.CustomSelect__options--popupDirectionTop{bottom:100%;border-radius:8px 8px 0 0;border-top:unset;border-bottom:0;box-shadow:0 -2px 2px rgba(0,0,0,.06),0 0 2px rgba(0,0,0,.03)}.CustomSelect__options .CustomScrollView__box{max-height:160px}.CustomSelectOption__selectedIcon{position:absolute;top:15px;right:12px}.CustomSelect__options--sizeY-compact .CustomSelectOption{height:36px;padding:10px 9px;font-size:15px}.CustomSelect__options--sizeY-compact .CustomSelectOption__selectedIcon{top:11px}.CustomSelectOption{width:100%;height:44px;display:flex;align-items:center;position:relative;box-sizing:border-box;font-size:15px;padding:10px 36px 10px 12px;white-space:nowrap;-webkit-user-select:none;user-select:none;cursor:pointer}.CustomSelectOption--hover{background-color:#f2f3f5;background-color:var(--button_muted_background)}.CustomSelectOption__before{margin-right:7px}.CustomSelectOption__after{margin-left:7px}.CustomSelectOption__selectedIcon{position:absolute;top:15px;right:12px}.DatePicker{margin:0;padding:0;border:0}.DatePicker__container{width:100%;display:flex;flex-direction:row}.DatePicker__month{display:flex;flex:1 0 auto;padding:0 8px}.DatePicker__month .Select{width:100%}.SliderSwitch{display:flex;position:relative;width:100%;height:44px;border-radius:8px;box-sizing:border-box;background-color:#f2f3f5;background-color:var(--field_background);transition:all 100ms ease-out;outline:0}.SliderSwitch__button{width:50%;height:100%;margin:0;padding:0;border:0;display:flex;align-items:center;justify-content:center;box-sizing:border-box;cursor:pointer;background:0 0;line-height:20px;font-family:inherit;font-weight:500;font-size:15px;color:#6d7885;color:var(--text_subhead);transition:color 100ms ease-out;outline:0;-webkit-user-select:none;user-select:none;z-index:1;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.SliderSwitch__button--focus{box-shadow:inset 0 0 0 1px #3f8ae0;box-shadow:inset 0 0 0 1px var(--accent)}.SliderSwitch__button--ios{border-radius:10px}.SliderSwitch__button--android,.SliderSwitch__button--vkcom{border-radius:8px}.SliderSwitch__button--hover{color:#99a2ad;color:var(--text_tertiary)}.SliderSwitch__border{position:absolute;left:50%;top:8px;width:1px;height:28px;opacity:.5;background-color:#b8c1cc;background-color:var(--toolbar_attach_background_from)}.SliderSwitch__button--active{color:#000;color:var(--text_primary);transition:-webkit-transform 150ms ease-in;transition:transform 150ms ease-in;transition:transform 150ms ease-in,-webkit-transform 150ms ease-in}.SliderSwitch__button--activeHover{color:#000;color:var(--header_alternate_tab_active_text)}.SliderSwitch__slider{position:absolute;width:calc(50% - 4px);height:40px;margin:2px;border-radius:6px;transition:margin-left 150ms}.SliderSwitch--firstActive{margin-left:2px;background-color:#fff;background-color:var(--background_content)}.SliderSwitch--secondActive{margin-left:calc(50% + 2px);background-color:#fff;background-color:var(--background_content)}.PromoBanner{width:100%;box-sizing:border-box;outline:1px solid rgba(0,0,0,.12);outline:1px solid var(--separator_alpha);color:#000;color:var(--text_primary);background:#fff;background:var(--background_content);padding-bottom:10px;position:relative}.PromoBanner__head{display:flex;padding-top:14px;padding-bottom:10px;color:#818c99;color:var(--text_secondary)}.PromoBanner__age{margin-left:6px}.PromoBanner__close{position:absolute;top:0;right:0;width:48px;height:48px;color:#99a2ad;color:var(--placeholder_icon_foreground_primary);display:flex;justify-content:center;align-items:center}.PromoBanner__close:active{opacity:.7}.PromoBanner__pixels{display:none}.PromoBanner--ios .PromoBanner__head{padding-left:12px;padding-right:12px}.PromoBanner--android .PromoBanner__head,.PromoBanner--vkcom .PromoBanner__head{padding-left:16px;padding-right:16px}html,body,div#root{margin:0;padding:0;height:100%;-webkit-font-smoothing:subpixel-antialiased;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;font-family:-apple-system,system-ui,Helvetica Neue,Roboto,sans-serif;font-family:var(--font-common);color:#000;color:var(--text_primary)}body{overflow-x:hidden}.vkui-sizeX-regular{background:#ebedf0;background:var(--background_page)}input,textarea,select,button{font-family:inherit}#root{-webkit-user-select:none;user-select:none}a:focus{outline:0} \ No newline at end of file diff --git a/e2e/generateWebpackConfig.js b/e2e/generateWebpackConfig.ts similarity index 99% rename from e2e/generateWebpackConfig.js rename to e2e/generateWebpackConfig.ts index 3161f273cb..9ee21e7261 100644 --- a/e2e/generateWebpackConfig.js +++ b/e2e/generateWebpackConfig.ts @@ -26,7 +26,7 @@ async function generateWebpackConfig() { devServer: { ...devServer, contentBase: path.join(__dirname, 'dist'), - } + }, }; }; diff --git a/e2e/jest.e2e.config.js b/e2e/jest.e2e.config.js index be1255b915..e9207653ad 100644 --- a/e2e/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -10,9 +10,9 @@ module.exports = { ...(base.setupFilesAfterEnv || []), './jest/matchers.ts' ], - globalSetup: './jest/globalSetup.js', - globalTeardown: './jest/globalTeardown.js', - testEnvironment: './jest/jsdomPlaywrightEnv.js', + globalSetup: './jest/globalSetup.ts', + globalTeardown: './jest/globalTeardown.ts', + testEnvironment: './jest/jsdomPlaywrightEnv.ts', testEnvironmentOptions: { ...(base.testEnvironmentOptions || {}), 'jest-playwright': { diff --git a/e2e/jest/globalSetup.js b/e2e/jest/globalSetup.js deleted file mode 100644 index 0b4b0dcfbb..0000000000 --- a/e2e/jest/globalSetup.js +++ /dev/null @@ -1,31 +0,0 @@ -const webpack = require('webpack'); -const WebpackDevServer = require('webpack-dev-server'); -const baseSetup = require('jest-playwright-preset/setup'); -const { generateWebpackConfig } = require('../generateWebpackConfig'); - -module.exports = async function setup(jestConfig) { - const webpackConfig = await generateWebpackConfig() - const compiler = webpack(webpackConfig); - const compilerDone = new Promise((resolve, reject) => { - compiler.hooks.done.tapAsync('@jest-playwright', (stats, callback) => { - if (stats.hasErrors()) { - reject(stats); - } else { - resolve(stats); - } - callback(); - }); - }); - - const devServer = new WebpackDevServer(compiler, { - noInfo: true, - stats: 'minimal', - ...webpackConfig.devServer, - }); - devServer.listen(9000); - global.__DEV_SERVER__ = devServer; - - await compilerDone; - - await baseSetup(jestConfig); -} diff --git a/e2e/jest/globalSetup.ts b/e2e/jest/globalSetup.ts new file mode 100644 index 0000000000..5688c41824 --- /dev/null +++ b/e2e/jest/globalSetup.ts @@ -0,0 +1,47 @@ +import webpack from 'webpack'; +import WebpackDevServer from 'webpack-dev-server'; +import baseSetup from 'jest-playwright-preset/setup'; +import { generateWebpackConfig } from '../generateWebpackConfig'; + +let devServer: WebpackDevServer; +async function setupWebpack() { + const webpackConfig = await generateWebpackConfig(); + const compiler = webpack(webpackConfig); + const compilerDone = new Promise((resolve, reject) => { + compiler.hooks.watchRun.tapAsync('@jest-playwright', (_, callback) => { + console.log('\nBuilding browser bundle...'); + callback(); + }); + compiler.hooks.done.tapAsync('@jest-playwright', (stats, callback) => { + if (stats.hasErrors()) { + console.log('Build failed'); + reject(stats); + } else { + console.log('Build OK'); + resolve(stats); + } + callback(); + }); + }); + + devServer = new WebpackDevServer(compiler, { + noInfo: true, + stats: 'minimal', + ...webpackConfig.devServer, + }); + devServer.listen(9000); + global['__DEV_SERVER__'] = devServer; + + return compilerDone; +} + +module.exports = async function setup(jestConfig) { + // do not re-run webpack in watch mode + // https://github.com/facebook/jest/issues/6800 + if (devServer) { + return new Promise((ok) => devServer.middleware.waitUntilValid(ok)); + } + + await setupWebpack(); + await baseSetup(jestConfig); +}; diff --git a/e2e/jest/globalTeardown.js b/e2e/jest/globalTeardown.js deleted file mode 100644 index cae1f416b2..0000000000 --- a/e2e/jest/globalTeardown.js +++ /dev/null @@ -1,6 +0,0 @@ -const baseTeardown = require('jest-playwright-preset/teardown'); - -module.exports = async function teardown(config) { - await baseTeardown(config); - global.__DEV_SERVER__.close(); -} diff --git a/e2e/jest/globalTeardown.ts b/e2e/jest/globalTeardown.ts new file mode 100644 index 0000000000..182b82cf5d --- /dev/null +++ b/e2e/jest/globalTeardown.ts @@ -0,0 +1,9 @@ +import baseTeardown from 'jest-playwright-preset/teardown'; + +module.exports = async function teardown(config) { + await baseTeardown(config); + // I don't know why, but devServer closes in watch mode, too + if (!config.watch && !config.watchAll) { + global['__DEV_SERVER__'].close(); + } +}; diff --git a/e2e/jest/jsdomPlaywrightEnv.js b/e2e/jest/jsdomPlaywrightEnv.ts similarity index 100% rename from e2e/jest/jsdomPlaywrightEnv.js rename to e2e/jest/jsdomPlaywrightEnv.ts From af5c5ad7c521d42229c42972f1728f41545cc8e6 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Tue, 24 Nov 2020 17:39:49 +0300 Subject: [PATCH 12/29] TEST: Multi-project jest for e2e + unit --- .gitignore | 1 + .nyc_output/coverage.json | 1 - e2e/generateWebpackConfig.ts | 22 +++++- e2e/jest.e2e.config.js | 11 +-- jest.config.js | 9 +-- jest.unit.config.js | 11 +++ package.json | 15 ++-- yarn.lock | 140 ++++++++++++++++++++--------------- 8 files changed, 127 insertions(+), 83 deletions(-) delete mode 100644 .nyc_output/coverage.json create mode 100644 jest.unit.config.js diff --git a/.gitignore b/.gitignore index b0f917d7f1..a42925d9cf 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ docs/ .vscode/ test-results.json lint-results.json +.nyc_output diff --git a/.nyc_output/coverage.json b/.nyc_output/coverage.json deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/.nyc_output/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/e2e/generateWebpackConfig.ts b/e2e/generateWebpackConfig.ts index 9ee21e7261..a3a5b742af 100644 --- a/e2e/generateWebpackConfig.ts +++ b/e2e/generateWebpackConfig.ts @@ -2,8 +2,9 @@ const path = require('path'); const { promisify } = require('util'); const glob = promisify(require('glob')); const webpackConfig = require('../webpack.config.js'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const { externals, devServer, resolve = {}, output = {}, ...baseWebpackConfig } = webpackConfig; +const { externals, plugins = [], devServer, resolve = {}, output = {}, ...baseWebpackConfig } = webpackConfig; async function generateWebpackConfig() { const testFiles = await glob(path.join(__dirname, '../src/**/*.e2e.{ts,tsx}')); @@ -11,6 +12,7 @@ async function generateWebpackConfig() { ...baseWebpackConfig, entry: { main: [path.resolve(__dirname, 'browser/runtime.ts'), ...testFiles], + vkui: [path.resolve(__dirname, '../src/styles/styles.css')], }, output: { ...output, @@ -27,6 +29,24 @@ async function generateWebpackConfig() { ...devServer, contentBase: path.join(__dirname, 'dist'), }, + module: { + ...webpackConfig.module, + rules: [ + ...(webpackConfig.module || {}).rules, + { + test: /\.css$/i, + use: [ + { loader: MiniCssExtractPlugin.loader }, + 'css-loader', + 'postcss-loader', + ], + }, + ], + }, + plugins: [ + ...plugins, + new MiniCssExtractPlugin(), + ], }; }; diff --git a/e2e/jest.e2e.config.js b/e2e/jest.e2e.config.js index e9207653ad..fa45994186 100644 --- a/e2e/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -1,18 +1,19 @@ -const base = require('../jest.config') +const base = require('../jest.unit.config') const path = require('path'); module.exports = { ...base, + displayName: 'e2e', testMatch: ['**/*.e2e.{ts,tsx}'], preset: 'jest-playwright-preset', collectCoverage: false, setupFilesAfterEnv: [ ...(base.setupFilesAfterEnv || []), - './jest/matchers.ts' + path.join(__dirname, 'jest/matchers.ts'), ], - globalSetup: './jest/globalSetup.ts', - globalTeardown: './jest/globalTeardown.ts', - testEnvironment: './jest/jsdomPlaywrightEnv.ts', + globalSetup: path.join(__dirname, 'jest/globalSetup.ts'), + globalTeardown: path.join(__dirname, 'jest/globalTeardown.ts'), + testEnvironment: path.join(__dirname, 'jest/jsdomPlaywrightEnv.ts'), testEnvironmentOptions: { ...(base.testEnvironmentOptions || {}), 'jest-playwright': { diff --git a/jest.config.js b/jest.config.js index 067136c4b9..788c9cff3c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,10 +1,3 @@ -const path = require('path'); module.exports = { - roots: [path.join(__dirname, 'src')], - collectCoverage: true, - collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], - coveragePathIgnorePatterns: [ - '\\.d\\.ts$', - 'src/types', - ], + projects: ['', '/e2e/jest.e2e.config.js'], } diff --git a/jest.unit.config.js b/jest.unit.config.js new file mode 100644 index 0000000000..274897c7c2 --- /dev/null +++ b/jest.unit.config.js @@ -0,0 +1,11 @@ +const path = require('path'); +module.exports = { + displayName: 'unit', + roots: [path.join(__dirname, 'src')], + collectCoverage: true, + collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], + coveragePathIgnorePatterns: [ + '\\.d\\.ts$', + 'src/types', + ], +} diff --git a/package.json b/package.json index a14974b8fe..8e0668dfc0 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "clean-webpack-plugin": "^3.0.0", "concurrently": "^4.1.2", "cross-env": "^7.0.2", - "css-loader": "^4.3.0", + "css-loader": "^5.0.1", "danger": "^10.5.1", "danger-plugin-jest": "^1.3.0", "eslint": "~6.8.0", @@ -57,14 +57,14 @@ "jest": "^26.6.3", "jest-image-snapshot": "^4.2.0", "jest-playwright-preset": "^1.4.1", - "mini-css-extract-plugin": "^1.2.1", + "mini-css-extract-plugin": "^1.3.1", "playwright": "^1.6.2", "postcss": "8.1.4", "postcss-cli": "8.1.0", "postcss-csso": "5.0.0", "postcss-custom-properties": "10.0.0", "postcss-import": "13.0.0", - "postcss-loader": "4.0.4", + "postcss-loader": "^4.1.0", "pre-commit": "^1.2.2", "prop-types": "^15.6.1", "react": "^16.8.6", @@ -109,15 +109,16 @@ "babel": "cross-env NODE_ENV=production babel src/ --out-dir dist/ --source-maps --extensions .tsx,.jsx,.ts,.js", "tsc": "cross-env NODE_ENV=production tsc --emitDeclarationOnly --declaration", "clear": "shx rm -rf dist/*", - "test:unit": "jest", - "test:unit:ci": "jest --ci --silent --outputFile test-results.json --json --coverageReporters='json-summary'", - "test:e2e": "yarn postcss && cp dist/*.css e2e/dist && jest --config e2e/jest.e2e.config.js", + "test:unit": "jest --config jest.unit.config.js", + "test:e2e": "jest --config e2e/jest.e2e.config.js", + "test:code": "jest", + "test:code:ci": "jest --ci --silent --outputFile test-results.json --json --coverageReporters='json-summary'", "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", "lint:ci": "yarn lint -o lint-results.json -f json", "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", "test:static:ci": "concurrently 'tsc --noEmit' 'yarn lint:ci' 'stylelint \"./src/**/*.css\"'", "test": "concurrently 'yarn test:unit' 'yarn test:static'", - "test:ci": "concurrently 'yarn test:unit:ci' 'yarn test:static:ci'", + "test:ci": "concurrently 'yarn test:code:ci' 'yarn test:static:ci'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" }, "pre-commit": [ diff --git a/yarn.lock b/yarn.lock index d45c3ecb1f..05119fd4ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1889,7 +1889,7 @@ version "7.0.4" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": +"@types/json-schema@^7.0.6": version "7.0.6" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== @@ -2367,7 +2367,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3183,7 +3183,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== @@ -3821,22 +3821,22 @@ css-initials@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/css-initials/-/css-initials-0.3.1.tgz#0406d78e586fd12b9984a3f7d8a87fcbb2073208" -css-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" - integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== +css-loader@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.1.tgz#9e4de0d6636a6266a585bd0900b422c85539d25f" + integrity sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw== dependencies: - camelcase "^6.0.0" + camelcase "^6.2.0" cssesc "^3.0.0" - icss-utils "^4.1.1" + icss-utils "^5.0.0" loader-utils "^2.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.3" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" + postcss "^8.1.4" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" postcss-value-parser "^4.1.0" - schema-utils "^2.7.1" + schema-utils "^3.0.0" semver "^7.3.2" css-tree@^1.0.0: @@ -5877,11 +5877,10 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - dependencies: - postcss "^7.0.14" +icss-utils@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ieee754@^1.1.4: version "1.2.1" @@ -7840,10 +7839,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.1.tgz#30ea7dee632b3002b0c77aeed447790408cb247e" - integrity sha512-G3yw7/TQaPfkuiR73MDcyiqhyP8SnbmLhUbpC76H+wtQxA6wfKhMCQOCb6wnPK0dQbjORAeOILQqEesg4/wF7A== +mini-css-extract-plugin@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.1.tgz#1375c88b2bc2a9d197670a55761edcd1b5d72f21" + integrity sha512-jIOheqh9EU98rqj6ZaFTYNNDSFqdakNqaUZfkYwaXPjI9batmXVXX+K71NrqRAgtoGefELBMld1EQ7dqSAD5SQ== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" @@ -8001,6 +8000,11 @@ nanoid@^3.1.15: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.16.tgz#b21f0a7d031196faf75314d7c65d36352beeef64" integrity sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w== +nanoid@^3.1.18: + version "3.1.18" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.18.tgz#0680db22ab01c372e89209f5d18283d98de3e96d" + integrity sha512-rndlDjbbHbcV3xi+R2fpJ+PbGMdfBxz5v1fATIQFq0DP64FsicQdwnKLy47K4kZHdRpmQXtz24eGsxQqamzYTA== + nanomatch@^1.2.1, nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -8881,10 +8885,10 @@ postcss-load-config@^3.0.0: cosmiconfig "^7.0.0" import-cwd "^3.0.0" -postcss-loader@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.0.4.tgz#b2d005b52e008a44991cf8123bee207e635eb53e" - integrity sha512-pntA9zIR14drQo84yGTjQJg1m7T0DkXR4vXYHBngiRZdJtEeCrojL6lOpqUanMzG375lIJbT4Yug85zC/AJWGw== +postcss-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.1.0.tgz#4647a6c8dad3cb6b253fbfaa21d62201086f6e39" + integrity sha512-vbCkP70F3Q9PIk6d47aBwjqAMI4LfkXCoyxj+7NPNuVIwfTGdzv2KVQes59/RuxMniIgsYQCFSY42P3+ykJfaw== dependencies: cosmiconfig "^7.0.0" klona "^2.0.4" @@ -8903,35 +8907,33 @@ postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - dependencies: - postcss "^7.0.5" +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" + icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" + postcss-selector-parser "^6.0.4" -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + icss-utils "^5.0.0" postcss-prefix-selector@^1.6.0: version "1.7.2" @@ -8992,7 +8994,7 @@ postcss-selector-parser@^3.1.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: +postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" dependencies: @@ -9000,6 +9002,16 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-selector-parser@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + postcss-syntax@^0.36.2: version "0.36.2" resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" @@ -9045,7 +9057,7 @@ postcss@^5.2.17: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6, postcss@^7.0.7: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.7: version "7.0.27" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" dependencies: @@ -9062,6 +9074,16 @@ postcss@^7.0.32: source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.4: + version "8.1.10" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.10.tgz#129834f94c720554d2cfdaeb27d5542ac4a026ea" + integrity sha512-iBXEV5VTTYaRRdxiFYzTtuv2lGMQBExqkZKSzkJe+Fl6rvQrA/49UVGKqB+LG54hpW/TtDBMGds8j33GFNW7pg== + dependencies: + colorette "^1.2.1" + nanoid "^3.1.18" + source-map "^0.6.1" + vfile-location "^3.2.0" + posthtml-parser@^0.2.0, posthtml-parser@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz#35d530de386740c2ba24ff2eb2faf39ccdf271dd" @@ -10135,15 +10157,6 @@ schema-utils@^2.6.4, schema-utils@^2.6.5: ajv "^6.12.0" ajv-keywords "^3.4.1" -schema-utils@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - schema-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" @@ -11548,7 +11561,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -11621,6 +11634,11 @@ vfile-location@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" +vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + vfile-message@*, vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" From d341829648cb47a136d365bfd8308199dc4940c7 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Wed, 25 Nov 2020 00:02:29 +0300 Subject: [PATCH 13/29] TEST: Trim screenshots lower than viewport --- e2e/index.ts | 4 +++- ...-2-e-tsx-checkbox-should-render-1-snap.png | Bin 6634 -> 1621 bytes 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/e2e/index.ts b/e2e/index.ts index c2487d58bb..0056be7267 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -11,5 +11,7 @@ export async function mount(jsx: ReactElement) { export async function screenshot(jsx: ReactElement) { await mount(jsx); - return page.screenshot({ fullPage: true }); + const wrapper = await page.$('#mount'); + const { width, height } = await wrapper.boundingBox(); + return page.screenshot({ fullPage: true, clip: { x: 0, y: 0, width, height } }); } diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png index 2b8f24d12a8c656967ec45b4498a9dd64ec4c4e8..10d0ff256e0925354b27bcfc832d2bd6b3c9c5f3 100644 GIT binary patch literal 1621 zcmbVMe>~H982_rIt57d>z4G&_$*C*-Ai4Y~TpA+IS(a`tgtXK$Gue-Hh3kjcYiKc> zepn1!G2`5fNl3IsmWcV)=7f!w*)Y5Bx7WSyzx(6vpYQX0UZ3alyx-6J`#ewPi2xtt z)#j@K05FCh^9}|8L(m1jTeTAWeqXuK3N!|ngMB;!j>vKx09Km9y^n+>7fcQK#pcFX zx6Ytkcd$w%$(c0|uFaa;-}=?03b|?Z>5WIK(t4P`86ZZOtCEHvrt!aSuKqo!zl0`z z{<R+n&`8O&M% zG5WS>i#TODh-KeEcEi2@c5Td-pE*6?R*UC5>CY>V zC7=dJ(M2J?I?Z1EY_2_?m6YsM^FMb|woRj(CRtM9<@ z4>eSngTzE!fY3Weuc4Pt{b$y?GqoKqS15 zHvnHAc1m8e2O{y0SZdD|!u>I#sHPjntS3(b2?RnY8<|^OU7aq^r_s2voe#UayQ9Xt zm@b6*&tx%aNjr9au-=UuBNqMH`G`x@&4&w8X5$8+z5!gTO9h4+JXR%tRi{(G&vV6N z^7HdCVL=rQPln;B^?KUuN0o$4T-c+$Yw=5r^ijbdAik@?DB(Wp|X zv>eIXVHe2gxV!7rKFo&~sq^E-S~)ENqv)^o&vzW(EVcatha6rW;p5|zG}V_YDMQ5c zRmH(6^YinQy<9t-QaWXdlVM!aO>IPdy!dPw?Ev~^c^J3y%ACT|gXmgFTEYh~T=Pa- zvtqQLWN-?0;%zjT-z9lEB1tLLoxiXS!XSEq7?F{Y<`x!jdVBNYdpI&GirDt_mnI4f zjYjJXE_Rm$g>law*JD8$JNU|anzBLf4#x~XyAEsXX8mYXU|Dbg-A8VK^dG_pYk-rx zsa(Q>+R_CBlVP-oF?mN`HYk&Up0+pg=pCy=cSRymczvo1{8NiXf@|W`^l(!dKMo>O zLV0E+1fR-;SC{wlaS2lV7~P-Y>VhKau%VoAmk17%DSHsF?61uZdUQ1UdB*xYcR~tf zp?IYqvx{82#p~w`91BV`Z4{!xNc#H=GR^GHzOP2d#m2sPR}rb2su^^5MC_&-Ej9=Q zZp8ugm(Q-R$%d)M#DSFXKN9V+SS+ioto`2J$S&|P*aYr$8dMj#HAG`ZP7ut7iV9q^ ztqvtcHKrMY9h0b54(ea@GX1D>-Q1uUgt$B;yjsQMMNhnC>k6G59iw_HqqRfVO!vig z6%`!3wACle`qgk#dZBz5lvk(>eFtcU@Wewng}K7%P9L9~?9j}N zk}h+CSw)~oX50NWl01b%(a*;@jJDh^`)Ca@zuyNX5oEf+t zntebY!~^d2XOW#R)I4SjMk~CAUI*KowPv;5LOjkOK@lfxe=;URj!?xsCkDQ(QHIC= dTay2>V$}%@(`=sKwvWXS4*Z7zZ;od~+Fzmu{MP^g literal 6634 zcmeHK>r)d~6kpI9#R0S;85N0+qqe1r9jYWE#Ahk>Ich;bL)8+hpfNbzyCLX3F!X#feHsv&EL}7Z9<1Gw8=(qyzz_t@`!#CwhP|hY z47#m%goDM+mV|ZDdmECkN_-aX9$C7(;QfHgXrfoe=2^jgr(zYnAj`#@Gl^bCKgG=B zexWa}#>@}+>FnJBZ_8&Nd3~{zym-pf^HI}hB>5k@c%{4)-d3AH73wIc-r*FcI|l7? zQ}!)zc>o`v>thp5q1XU&qO&1vYSA`mDiFL?9<#9N`%~9rV)~r_|FW_%pH)?^m1qd0 zV+CkW4LfbL$8K0tUAZdg8u@FEJx8eGIE>;VttU{-BbCqH3a<95C!NQ%$WBqCqr63r zN^JM1`P&zn++E^P$LxUle3Ktar;lmVg_Qn$v_>1Jf1YL2g^HRchC@rZ!*_4PmNt^U z)KtW`zq+v#?#(b2doNfsYKg=2R0ia&fH?LJeYkzdnBQd_(tIbX8^~r)4BeJnoW<$A zl=L2ETVNKVR9+%+$T2kbV1unUBcs6|+x;kS)^;68*9CB$7S@vu1l3@E zLWHTos@9LJ!L0Pf$4jITx+}|kkHG4TO;SCLB!wq;RTN*Nx=$PBsGDtSw86DqH0^3z z>jH+-jtHp;aJ?w=%_FP1#aF{mDxomsuCbz%&!WVK+j3>Ef60NtB)?45bjF9=$7A=M zCBR^t5X6_5yLR}F$+8mTN}s5m(5w=KYPN^!J|!k(S^`+gPeMYl$Yk$2Kj6tWbtRJnW zSRTwluw)1rO?HQD0~YD{d^=P}R~5#J>8h0O>cn1a@fSiT190sYTJ4qNGNy>V=4yAlYG(qrb=19;G*t zSJzcmR%&}_8Lkg{Z(+xxnR+u*7AHNf3t+$cfn})eQV%~bL!NB%Ehf@V_Xn|Za&qcj z+>YP2Tid8^CdXERZ^U?C5wmq(NC*qiSpyhE z!KhrD+@)3$gMDNp74`5yPO!U7?~U2gOaG}Ja#z~|tUOR$3EXgp!J(sNSDn(1*=_my z!bYM$tlWbpQY5wQc`M@S;Kq6|J2KPI^X%EPlovHeI1?R0w~BvED^VdrZUi{Wp`nR+2H%%cwTq9fU)&MgkJeN&A2B2A9wB6}`i`kT>x5{PWwGIg@NfqKPQ=xL+v zD_8 Date: Wed, 25 Nov 2020 17:08:11 +0300 Subject: [PATCH 14/29] TEST: Use docker for screenshots --- e2e/detectEnv.js | 21 +++++++++++++ e2e/docker-compose.yml | 6 ++++ e2e/docker.js | 13 ++++++++ e2e/index.ts | 4 ++- e2e/jest.e2e.config.js | 28 +++++++++++++++--- e2e/jest/globalSetup.ts | 8 +++++ e2e/jest/globalTeardown.ts | 5 ++++ package.json | 2 ++ ...-2-e-tsx-checkbox-should-render-1-snap.png | Bin 1621 -> 1444 bytes yarn.lock | 2 +- 10 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 e2e/detectEnv.js create mode 100644 e2e/docker-compose.yml create mode 100644 e2e/docker.js diff --git a/e2e/detectEnv.js b/e2e/detectEnv.js new file mode 100644 index 0000000000..8e89251a5e --- /dev/null +++ b/e2e/detectEnv.js @@ -0,0 +1,21 @@ +const child_process = require('child_process'); + +function checkDocker() { + try { + child_process.execSync('docker stats --no-stream'); + return true; + } catch (err) { + return false; + } +} + +function checkLinux() { + const { platform } = process; + return platform !== 'win32' && platform !== 'darwin'; +} + +const isLinux = checkLinux(); +const useDocker = process.env.E2E_DOCKER === '1' || !isLinux && checkDocker(); +const canRunTests = useDocker || isLinux; + +module.exports = { useDocker, isLinux, canRunTests }; diff --git a/e2e/docker-compose.yml b/e2e/docker-compose.yml new file mode 100644 index 0000000000..ae530f9d91 --- /dev/null +++ b/e2e/docker-compose.yml @@ -0,0 +1,6 @@ +version: "3.8" +services: + vkui-chrome: + image: browserless/chrome:latest + ports: + - "9001:3000" diff --git a/e2e/docker.js b/e2e/docker.js new file mode 100644 index 0000000000..378469edca --- /dev/null +++ b/e2e/docker.js @@ -0,0 +1,13 @@ +const { promisify } = require('util'); +const { exec } = require('child_process'); +const waitPort = require('wait-port'); +const execP = promisify(exec); + +const startDocker = () => Promise.all([ + execP('docker-compose up -d', { cwd: __dirname }), + waitPort({ host: 'localhost', port: 9001, silent: true, timeout: 30000 }), +]); + +const stopDocker = () => execP('docker-compose stop', { cwd: __dirname }); + +module.exports = { startDocker, stopDocker }; diff --git a/e2e/index.ts b/e2e/index.ts index 0056be7267..fffafb90b6 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -1,8 +1,10 @@ import { ReactElement } from 'react'; +import { useDocker } from './detectEnv'; // eslint-disable-next-line @typescript-eslint/no-unused-vars export async function mount(jsx: ReactElement) { - await page.goto('http://localhost:9000'); + const host = useDocker ? 'host.docker.internal' : 'localhost'; + await page.goto(`http://${host}:9000`); const testName = expect.getState().currentTestName; await page.evaluate(({ testName }) => { window['testHandle'].mount(testName); diff --git a/e2e/jest.e2e.config.js b/e2e/jest.e2e.config.js index fa45994186..fc8c213b07 100644 --- a/e2e/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -1,7 +1,22 @@ const base = require('../jest.unit.config') const path = require('path'); +const chalk = require('chalk'); +const { canRunTests, useDocker } = require('./detectEnv'); -module.exports = { +const jestPlaywrightOptions = Object.assign({ + collectCoverage: true, + contextOptions: { + viewport: { + width: 800, + height: 600, + }, + } +}, useDocker ? { + connectOptions: { + wsEndpoint: 'ws://localhost:9001/playwright', + }, +} : {}); +const config = { ...base, displayName: 'e2e', testMatch: ['**/*.e2e.{ts,tsx}'], @@ -16,11 +31,16 @@ module.exports = { testEnvironment: path.join(__dirname, 'jest/jsdomPlaywrightEnv.ts'), testEnvironmentOptions: { ...(base.testEnvironmentOptions || {}), - 'jest-playwright': { - collectCoverage: true - }, + 'jest-playwright': jestPlaywrightOptions, }, moduleNameMapper: { '@react-playwright': path.join(__dirname, 'index.ts'), }, +}; + +if (!canRunTests) { + console.error(chalk.red.bold('E2E tests can only run in linux or docker - please install and start docker. Skipping for now.')); + module.exports = {}; +} else { + module.exports = config; } diff --git a/e2e/jest/globalSetup.ts b/e2e/jest/globalSetup.ts index 5688c41824..99a3f8de30 100644 --- a/e2e/jest/globalSetup.ts +++ b/e2e/jest/globalSetup.ts @@ -2,6 +2,8 @@ import webpack from 'webpack'; import WebpackDevServer from 'webpack-dev-server'; import baseSetup from 'jest-playwright-preset/setup'; import { generateWebpackConfig } from '../generateWebpackConfig'; +import { useDocker } from '../detectEnv'; +import { startDocker } from '../docker'; let devServer: WebpackDevServer; async function setupWebpack() { @@ -27,6 +29,7 @@ async function setupWebpack() { devServer = new WebpackDevServer(compiler, { noInfo: true, stats: 'minimal', + disableHostCheck: true, ...webpackConfig.devServer, }); devServer.listen(9000); @@ -43,5 +46,10 @@ module.exports = async function setup(jestConfig) { } await setupWebpack(); + if (useDocker) { + console.log('Starting dockerized chrome...'); + await startDocker(); + console.log('Running E2E tests in docker'); + } await baseSetup(jestConfig); }; diff --git a/e2e/jest/globalTeardown.ts b/e2e/jest/globalTeardown.ts index 182b82cf5d..7bad952f68 100644 --- a/e2e/jest/globalTeardown.ts +++ b/e2e/jest/globalTeardown.ts @@ -1,9 +1,14 @@ import baseTeardown from 'jest-playwright-preset/teardown'; +import { useDocker } from '../detectEnv'; +import { stopDocker } from '../docker'; module.exports = async function teardown(config) { await baseTeardown(config); // I don't know why, but devServer closes in watch mode, too if (!config.watch && !config.watchAll) { global['__DEV_SERVER__'].close(); + if (useDocker) { + await stopDocker(); + } } }; diff --git a/package.json b/package.json index 8e0668dfc0..80b3b17bcc 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "autoprefixer": "^9.8.0", "babel-jest": "^26.6.3", "babel-loader": "^8.1.0", + "chalk": "^4.1.0", "classnames": "^2.2.6", "clean-webpack-plugin": "^3.0.0", "concurrently": "^4.1.2", @@ -77,6 +78,7 @@ "stylelint-config-standard": "^18.3.0", "ts-loader": "^8.0.9", "typescript": "3.8", + "wait-port": "^0.2.9", "webpack": "^4.44.2", "webpack-cli": "^3.3.10", "webpack-merge": "^4.2.2", diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png index 10d0ff256e0925354b27bcfc832d2bd6b3c9c5f3..6a6723eb5d5dc19f74707201c37999144a30348d 100644 GIT binary patch literal 1444 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 diff --git a/yarn.lock b/yarn.lock index 05119fd4ef..c9bde89d5d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11701,7 +11701,7 @@ wait-on@^5.2.0: minimist "^1.2.5" rxjs "^6.5.5" -wait-port@^0.2.7: +wait-port@^0.2.7, wait-port@^0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/wait-port/-/wait-port-0.2.9.tgz#3905cf271b5dbe37a85c03b85b418b81cb24ee55" integrity sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ== From a46f7eb801b2e5fc198be0873f6ccd02563d3d17 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Wed, 25 Nov 2020 17:57:52 +0300 Subject: [PATCH 15/29] TEST: Fix coverage in test:code --- .github/workflows/pull_request.yml | 1 - e2e/index.ts | 1 + jest.config.js | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 34d2ed211b..d4c6bdd586 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -12,7 +12,6 @@ jobs: node-version: 12 - uses: bahmutov/npm-install@v1 - run: yarn test:ci - - run: yarn test:e2e - name: Create test report if: always() run: yarn danger ci diff --git a/e2e/index.ts b/e2e/index.ts index fffafb90b6..0b6b82b2c2 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -6,6 +6,7 @@ export async function mount(jsx: ReactElement) { const host = useDocker ? 'host.docker.internal' : 'localhost'; await page.goto(`http://${host}:9000`); const testName = expect.getState().currentTestName; + /* istanbul ignore next */ await page.evaluate(({ testName }) => { window['testHandle'].mount(testName); }, { testName }); diff --git a/jest.config.js b/jest.config.js index 788c9cff3c..73fdf5efc1 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,4 @@ module.exports = { projects: ['', '/e2e/jest.e2e.config.js'], + collectCoverage: true, } From f42aa3bf5b9f525e49dd6a2438c11d9b30fa302f Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Tue, 24 Nov 2020 20:05:05 +0300 Subject: [PATCH 16/29] TEST: Use roboto on all platforms for screenshots --- e2e/dist/font/LICENSE.txt | 202 ++++++++++++++++++ e2e/dist/font/Roboto-Bold.ttf | Bin 0 -> 170348 bytes e2e/dist/font/Roboto-Italic.ttf | Bin 0 -> 173516 bytes e2e/dist/font/Roboto-Regular.ttf | Bin 0 -> 171272 bytes e2e/generateWebpackConfig.ts | 4 +- e2e/styles.test.css | 29 +++ ...-2-e-tsx-checkbox-should-render-1-snap.png | Bin 1444 -> 1355 bytes 7 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 e2e/dist/font/LICENSE.txt create mode 100644 e2e/dist/font/Roboto-Bold.ttf create mode 100644 e2e/dist/font/Roboto-Italic.ttf create mode 100644 e2e/dist/font/Roboto-Regular.ttf create mode 100644 e2e/styles.test.css diff --git a/e2e/dist/font/LICENSE.txt b/e2e/dist/font/LICENSE.txt new file mode 100644 index 0000000000..75b52484ea --- /dev/null +++ b/e2e/dist/font/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/e2e/dist/font/Roboto-Bold.ttf b/e2e/dist/font/Roboto-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d998cf5b468413ca1c950096dc9d0f5dfdb1359f GIT binary patch literal 170348 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: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 literal 0 HcmV?d00001 diff --git a/e2e/dist/font/Roboto-Italic.ttf b/e2e/dist/font/Roboto-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5b390ff950e6539bdfd4d84265fdb01e0c35f291 GIT binary patch literal 173516 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/e2e/generateWebpackConfig.ts b/e2e/generateWebpackConfig.ts index a3a5b742af..1167d8f7fb 100644 --- a/e2e/generateWebpackConfig.ts +++ b/e2e/generateWebpackConfig.ts @@ -12,7 +12,7 @@ async function generateWebpackConfig() { ...baseWebpackConfig, entry: { main: [path.resolve(__dirname, 'browser/runtime.ts'), ...testFiles], - vkui: [path.resolve(__dirname, '../src/styles/styles.css')], + vkui: [path.resolve(__dirname, 'styles.test.css')], }, output: { ...output, @@ -37,7 +37,7 @@ async function generateWebpackConfig() { test: /\.css$/i, use: [ { loader: MiniCssExtractPlugin.loader }, - 'css-loader', + { loader: 'css-loader', options: { url: false } }, 'postcss-loader', ], }, diff --git a/e2e/styles.test.css b/e2e/styles.test.css new file mode 100644 index 0000000000..0e71b5267b --- /dev/null +++ b/e2e/styles.test.css @@ -0,0 +1,29 @@ +@import '../src/styles/styles.css'; + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(/font/Roboto-Italic.ttf) format('truetype'); +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(/font/Roboto-Regular.ttf) format('truetype'); +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(/font/Roboto-Bold.ttf) format('truetype'); +} + +#mount { + /* Force use embedded Roboto font for cross-platformity */ + --font-common: 'Roboto'; + font-family: 'Roboto'; + -webkit-font-smoothing: antialiased; +} diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png index 6a6723eb5d5dc19f74707201c37999144a30348d..715eed82659bc1f54e6955c8fe289104fd8a009c 100644 GIT binary patch literal 1355 zcmeAS@N?(olHy`uVBq!ia0y~yU{(OKbvW37b=`M@#7JDI4 zuf_#&K{hT|6qTHIv&^pe@QJO>v1DRR>!FmwgC&ms*1V_ovV!U3ch zk~suG)G+}C5Y?mT0HP$E8$c9HW6#s4DVn!0wjXVo7Jhxp#+^GixBmFcB`z2E@?*!R zBL2#qIv~}*T|h1n7hamtU&s} zj5Qnr*Go-JOqN`_6!i4@^VeTqUatE0=V$oiYuB%r{`*tO+U(fsq*z*3mX(~WoO|Z- za(~fYx2dydug)-8C9WSg;}$4(3m&ApHhlT^?bWef=~pjbUc7Q;%Bj<*uim(^;^xhp zTMGH*YyvD~u5C^~f92l2bq^mV-rZMQ{rk^i_x>xFE-l)%%gWc!Zxzt>U%!5>`u%O~ zOI=WiuuockpYi5;H8r&>SFbMZ7T5QhBfzQzCJ!Lo}8R~`|+$!Fn)&VfqeqXnJic`+s<*FCORoR)wp>*qPGHF7%>VwgX4R@y zmsW?bueV`2+O%ljKD(nyhPt}CCkyAu@6r?D@|-kn`t+|qKc{>CdX`07u3C44_U0=G2;oHS5;B`uh5M)t?_5&&{z^_S}>ky)C!i)J(2_x$N;I zLs1ct7dJL0Yw77-dw96r)ZTvmwr$(q8hU$sbFnqsmkR@pacDd7gF#b6BS1wcu)cmj zQ)7e7@rx%;bO0lHs@Kv>$NKvFS8v`NY-(ycYu>zTd#k^fyuP;ft+mYFy?bB1dNnCE za@ER}fl3oE00Z*sojYq98yn*{+5*je;BfK>!^fXBT}P8%y?7CjoxPfio4fSut5D0n z#XEQI+_EuzUChNphnl3Mq(nGau3WshaNfLmZ$D4hiw!c6xbon^0ycJbQNH%lhlg12 z?y0=|WgF1U24>CUrLot$JJtTzDSQ5UeZK2`kBKoqNapYH&HREzopr03#4tX#fBK literal 1444 zcmb7EX;ji#6bDz*%r*;2lFV|+B`ufKQENnTG|vp8Sy+e|lbXZ04HlXnFiov6%cVlm zX%x4?j7H8VU}h@dq~n%|;!@#~mQWdKMf1nc^QHIU-FxnR_x^tGzISilk0Aj@1~3B< z2xJt9@1CD{%eP#xmmx{65$IN7L8UL>I-6Q)Eo_~yp%xyrGibds-?FB^STUoHY`vW?B*-25wk6pcn7J9~CtLPEkaybcD1Rtf|aMMYbSM3$5f zOM4*HT0uUL?)}N$MT#%6{=oz1xVSh8pW=px4h{@-l-OgTW@a%RRNZZ(D=RAl!^3_A z!rt=oax?Grvf%xl1NQ>JY47K^xVX67Dk({N`!cY?J43uM#M;nV*jwtDS>I#@+$zJ> zz`}R7pV>dg`PoX1<6m^S>qe?+XedY+Z#kYW$o#6#v%9 zP#2b$^{2b9?K&@gn1``NLUXe5sDuRj+rc>kf#B;W={_L3|1?lIn!d3_kl|^#)4_5# zofF+FkLRvOk2o~V3|6pO{RwYAeLi=*beCZMYC=K8nkfJd8fEH1Y+sMO&nG+N6y zKK{Tc`!u05$LO$|8z)Az)!*OW+R>3!T`i}r=U*FRC~@uc76F-y0_{h*_y(U>MO!SV54h2kJ-l82Xz zi_JVzuE0Hi3x-jmqO$e|T>n=lJHA;5gTdU7A9Xl|#rn8&HC18C?S0j1dS;P`SSM2$ zbs>|JVS6D%DO2j5%80A&pD(0(mjLf&8LKB654|tGxd9~jgfB!e)<_7TzsWuuLtvUd z8(b>l!VA~CnBqLP^sqaxCpsPbCAF{3TGK5=HcuDwdHWvK8z20~)dHJbl-G`XUbm+k z97DTv0srA3xy$; Date: Wed, 25 Nov 2020 19:53:13 +0300 Subject: [PATCH 17/29] TEST: Upload failed screens to cloud --- .gitignore | 1 + dangerfile.js | 56 +++++++++++++++++-- package.json | 1 + src/components/Checkbox/Checkbox.e2e.tsx | 2 +- yarn.lock | 70 ++++++++++++++++++++++-- 5 files changed, 118 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index a42925d9cf..8555b774f5 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ docs/ test-results.json lint-results.json .nyc_output +__diff_output__ diff --git a/dangerfile.js b/dangerfile.js index eb516eacfc..d5bbc6d181 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -1,13 +1,18 @@ -import { fail, message, warn } from "danger" +import { fail, message, warn, danger, markdown } from 'danger'; const dangerJest = require('danger-plugin-jest').default; -const fs = require('fs'); +const { readFile } = require('fs').promises; const path = require('path'); +const glob = require('glob'); +const { promisify } = require('util') +const pglob = promisify(glob); +const AWS = require('aws-sdk/global'); +const S3 = require('aws-sdk/clients/s3'); -const readFileP = path => new Promise((ok, fail) => fs.readFile(path, (err, file) => err ? fail(err) : ok(file))) +const { AWS_ACCESS_KEY_ID, AWS_SECRET_KEY, AWS_ENDPOINT } = process.env; const lintPath = path.join(__dirname, 'lint-results.json'); function lint() { - return readFileP(lintPath).then(file => { + return readFile(lintPath).then(file => { const lintReport = JSON.parse(file) for (const { messages, filePath } of lintReport) { const relPath = path.relative(__dirname, filePath) @@ -24,7 +29,7 @@ function lint() { } function coverage() { - return readFileP(path.join(__dirname, 'coverage', 'coverage-summary.json')).then(file => { + return readFile(path.join(__dirname, 'coverage', 'coverage-summary.json')).then(file => { const { total } = JSON.parse(file) const formatCoverage = (kind, { covered, total, pct }) => `${covered} / ${total} ${kind} (${pct}%)` message(`Code coverage: ${ @@ -33,8 +38,47 @@ function coverage() { }) } +const UPLOAD_BUCKET = 'vkui-screenshots'; +const awsHost = `${UPLOAD_BUCKET}.${AWS_ENDPOINT}`; +async function uploadFailedScreenshots() { + const diffDir = '__diff_output__' + const { github } = danger; + const pathPrefix = github ? github.pr.number : 'local'; + + let s3; + try { + s3 = new AWS.S3({ + apiVersion: '2006-03-01', + endpoint: AWS_ENDPOINT, + accessKeyId: AWS_ACCESS_KEY_ID, + secretAccessKey: AWS_SECRET_KEY, + }); + } catch (err) { + warn(`Could not create S3 client - aborting screen test reporter.`); + return; + } + + for (const failedScreen of await pglob(path.join(__dirname, '**', diffDir, '*.png'))) { + const screenName = path.parse(failedScreen).base; + const key = [pathPrefix, screenName].join('/'); + try { + await s3.putObject({ + Body: await readFile(failedScreen), + Bucket: UPLOAD_BUCKET, + Key: key, + ContentType: 'image/png', + ACL: 'public-read', + }).promise(); + markdown(`Screenshot \`${screenName}\` failed\n![](https://${awsHost}/${key})`); + } catch (err) { + warn(`Counls not upload screenshot diff ${screenName}: ${err.message}`); + } + } +} + Promise.all([ dangerJest(), lint(), - coverage() + coverage(), + uploadFailedScreenshots(), ]); diff --git a/package.json b/package.json index 80b3b17bcc..3eddca6234 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@vkontakte/vk-bridge": "^2.1.3", "@vkontakte/vkjs": "0.16.0", "autoprefixer": "^9.8.0", + "aws-sdk": "^2.799.0", "babel-jest": "^26.6.3", "babel-loader": "^8.1.0", "chalk": "^4.1.0", diff --git a/src/components/Checkbox/Checkbox.e2e.tsx b/src/components/Checkbox/Checkbox.e2e.tsx index 16c8b8eda6..76456d5766 100644 --- a/src/components/Checkbox/Checkbox.e2e.tsx +++ b/src/components/Checkbox/Checkbox.e2e.tsx @@ -4,7 +4,7 @@ import { Checkbox } from './Checkbox'; describe('Checkbox', () => { test('should render', async () => { - const screen = await screenshot(label); + const screen = await screenshot(labl); expect(screen).toMatchImageSnapshot(); }); }); diff --git a/yarn.lock b/yarn.lock index c9bde89d5d..b0154cf12c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2657,6 +2657,21 @@ autoprefixer@^9.8.0: postcss "^7.0.32" postcss-value-parser "^4.1.0" +aws-sdk@^2.799.0: + version "2.799.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.799.0.tgz#8b1a64c1a9f8ccf5794eb07bdd8051e4cb6adcfd" + integrity sha512-NYAoiNU+bJXhlJsC0rFqrmD5t5ho7/VxldmziP6HLPYHfOCI9Uvk6UVjfPmhLWPm0mHnIxhsHqmsNGyjhHNYmw== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -3053,7 +3068,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= -buffer@^4.3.0: +buffer@4.9.2, buffer@^4.3.0: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== @@ -4690,6 +4705,11 @@ eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + events@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" @@ -5882,10 +5902,9 @@ icss-utils@^5.0.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ieee754@1.1.13, ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" iferr@^0.1.5: version "0.1.5" @@ -6972,6 +6991,11 @@ jest@^26.6.3: import-local "^3.0.2" jest-cli "^26.6.3" +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + joi@^17.1.1: version "17.3.0" resolved "https://registry.yarnpkg.com/joi/-/joi-17.3.0.tgz#f1be4a6ce29bc1716665819ac361dfa139fff5d2" @@ -10127,6 +10151,16 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + saxes@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -11548,6 +11582,14 @@ url-parse@^1.4.3: querystringify "^2.1.1" requires-port "^1.0.0" +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -11584,6 +11626,11 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -12039,6 +12086,19 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" From 578a16e7f232155e6afcf35a15bc347e8d8e0750 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Fri, 27 Nov 2020 17:31:22 +0300 Subject: [PATCH 18/29] TEST: Add screen fuzz testing helpers & enable LFS --- .gitattributes | 1 + babel.config.js | 2 +- e2e/browser/runtime.ts | 3 + e2e/browser/test-handle.ts | 6 +- e2e/index.ts | 14 ++-- e2e/jest/matchers.ts | 19 ++++- e2e/styles.test.css | 5 ++ log | 10 +++ .../ActionSheet/ActionSheet.e2e.tsx | 22 ++++++ ...ctionsheet-android-bright_light-1-snap.png | 3 + .../actionsheet-android-space_gray-1-snap.png | 3 + .../actionsheet-ios-bright_light-1-snap.png | 3 + .../actionsheet-ios-space_gray-1-snap.png | 3 + .../actionsheet-vkcom-bright_light-1-snap.png | 3 + .../actionsheet-vkcom-space_gray-1-snap.png | 3 + src/components/Button/Button.e2e.tsx | 15 ++++ .../button-android-bright_light-1-snap.png | 3 + .../button-android-space_gray-1-snap.png | 3 + .../button-ios-bright_light-1-snap.png | 3 + .../button-ios-space_gray-1-snap.png | 3 + .../button-vkcom-bright_light-1-snap.png | 3 + .../button-vkcom-space_gray-1-snap.png | 3 + src/components/Checkbox/Checkbox.e2e.tsx | 12 +-- .../checkbox-android-bright_light-1-snap.png | 3 + .../checkbox-android-space_gray-1-snap.png | 3 + ...-2-e-tsx-checkbox-should-render-1-snap.png | Bin 1355 -> 0 bytes .../checkbox-ios-bright_light-1-snap.png | 3 + .../checkbox-ios-space_gray-1-snap.png | 3 + .../checkbox-vkcom-bright_light-1-snap.png | 3 + .../checkbox-vkcom-space_gray-1-snap.png | 3 + src/lib/supportEvents.ts | 3 +- src/lib/testing.ts | 1 + src/testing/e2e/index.ts | 1 + src/testing/e2e/utils.tsx | 72 ++++++++++++++++++ tsconfig.json | 7 +- 35 files changed, 229 insertions(+), 18 deletions(-) create mode 100644 .gitattributes create mode 100644 log create mode 100644 src/components/ActionSheet/ActionSheet.e2e.tsx create mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png create mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png create mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png create mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png create mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png create mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png create mode 100644 src/components/Button/Button.e2e.tsx create mode 100644 src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png create mode 100644 src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png create mode 100644 src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png create mode 100644 src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png create mode 100644 src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png create mode 100644 src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png delete mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png create mode 100644 src/lib/testing.ts create mode 100644 src/testing/e2e/index.ts create mode 100644 src/testing/e2e/utils.tsx diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..9b5aa9023a --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +src/**/__image_snapshots__/*.png filter=lfs diff=lfs merge=lfs -text diff --git a/babel.config.js b/babel.config.js index 532e86378f..da24a18df7 100644 --- a/babel.config.js +++ b/babel.config.js @@ -11,5 +11,5 @@ module.exports = { ], plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-transform-runtime'], ignore: ['./src/vkui.js'].concat( - isProduction ? ['./src/**/*.test.ts', './src/**/*.test.tsx', './src/**/*.spec.ts', './src/**/*.spec.tsx'] : []), + isProduction ? ['./src/**/*.test.ts', './src/**/*.test.tsx', './src/**/*.spec.ts', './src/**/*.spec.tsx', './e2e', './src/testing'] : []), }; diff --git a/e2e/browser/runtime.ts b/e2e/browser/runtime.ts index 9ca6d3fa2f..55c94cb211 100644 --- a/e2e/browser/runtime.ts +++ b/e2e/browser/runtime.ts @@ -1,2 +1,5 @@ import './test-handle'; import './jest-mock'; + +// Как минимум, отключаем анимации +(window as any).__isVkuiTesting = true; diff --git a/e2e/browser/test-handle.ts b/e2e/browser/test-handle.ts index fe96653283..f93f8296a6 100644 --- a/e2e/browser/test-handle.ts +++ b/e2e/browser/test-handle.ts @@ -1,5 +1,5 @@ import { ReactElement } from 'react'; -import { render } from 'react-dom'; +import { render, unmountComponentAtNode } from 'react-dom'; class ComponentHandle { constructor(private readonly mountNode: Element) {} @@ -18,6 +18,10 @@ class ComponentHandle { } render(this.components[name].node, this.mountNode); } + + unmount() { + unmountComponentAtNode(this.mountNode); + } } export const testHandle = new ComponentHandle(document.getElementById('mount')); diff --git a/e2e/index.ts b/e2e/index.ts index 0b6b82b2c2..3fdbe67fcc 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -1,10 +1,7 @@ import { ReactElement } from 'react'; -import { useDocker } from './detectEnv'; // eslint-disable-next-line @typescript-eslint/no-unused-vars export async function mount(jsx: ReactElement) { - const host = useDocker ? 'host.docker.internal' : 'localhost'; - await page.goto(`http://${host}:9000`); const testName = expect.getState().currentTestName; /* istanbul ignore next */ await page.evaluate(({ testName }) => { @@ -14,7 +11,14 @@ export async function mount(jsx: ReactElement) { export async function screenshot(jsx: ReactElement) { await mount(jsx); - const wrapper = await page.$('#mount'); - const { width, height } = await wrapper.boundingBox(); + const { width, height } = await page.evaluate(() => { + const size = { width: 0, height: 0 }; + document.querySelectorAll('#mount > *').forEach((node) => { + const { right, bottom } = node.getBoundingClientRect(); + size.width = Math.max(size.width, right); + size.height = Math.max(size.height, bottom); + }); + return size; + }); return page.screenshot({ fullPage: true, clip: { x: 0, y: 0, width, height } }); } diff --git a/e2e/jest/matchers.ts b/e2e/jest/matchers.ts index 579dbe11f8..8107e54771 100644 --- a/e2e/jest/matchers.ts +++ b/e2e/jest/matchers.ts @@ -1,3 +1,20 @@ -import { toMatchImageSnapshot } from 'jest-image-snapshot'; +import { configureToMatchImageSnapshot } from 'jest-image-snapshot'; +import { useDocker } from '../detectEnv'; + +const toMatchImageSnapshot = configureToMatchImageSnapshot({ + customSnapshotIdentifier: ({ currentTestName, counter }) => { + return `${currentTestName.toLowerCase().replace(/ /g, '-')}-${counter}`; + }, +} as any); + +beforeAll(async () => { + const host = useDocker ? 'host.docker.internal' : 'localhost'; + await page.goto(`http://${host}:9000`); +}); + +afterEach(async () => { + /* istanbul ignore next */ + await page.evaluate(() => window['testHandle'].unmount()); +}); expect.extend({ toMatchImageSnapshot }); diff --git a/e2e/styles.test.css b/e2e/styles.test.css index 0e71b5267b..ef94ec3a66 100644 --- a/e2e/styles.test.css +++ b/e2e/styles.test.css @@ -27,3 +27,8 @@ font-family: 'Roboto'; -webkit-font-smoothing: antialiased; } + +* { + animation: none !important; + transition: none !important; +} \ No newline at end of file diff --git a/log b/log new file mode 100644 index 0000000000..80827a4415 --- /dev/null +++ b/log @@ -0,0 +1,10 @@ +yarn run v1.22.10 +$ jest --config e2e/jest.e2e.config.js --watch + +Building browser bundle... +Build failed + +Building browser bundle... +Build OK + +Done in 85.70s. diff --git a/src/components/ActionSheet/ActionSheet.e2e.tsx b/src/components/ActionSheet/ActionSheet.e2e.tsx new file mode 100644 index 0000000000..a61d50e1b9 --- /dev/null +++ b/src/components/ActionSheet/ActionSheet.e2e.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import ActionSheet, { ActionSheetProps } from './ActionSheet'; +import ActionSheetItem from '../ActionSheetItem/ActionSheetItem'; +import { describeScreenshotFuzz } from '../../testing/e2e/utils'; +import withPlatform from '../../hoc/withPlatform'; + +describe('ActionSheet', () => { + const cancel = Отменить; + describeScreenshotFuzz(withPlatform((props: ActionSheetProps) => ( + + )), [{ + children: [[ + Элемент, + Второй элемент, + ]], + header: [undefined, 'Заголовок'], + }], {}); +}); diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png new file mode 100644 index 0000000000..f0015b85c3 --- /dev/null +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:022b9bb6d9b77950fdd0580ba44fcb9ad3032a83ebf1370b813034392ada6fc8 +size 15902 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png new file mode 100644 index 0000000000..4f52879a00 --- /dev/null +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c81f04a4778bcf25d4f5b71b900d2fae847595177de2334284cf8001e30e724b +size 15639 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png new file mode 100644 index 0000000000..a86bbcaf8b --- /dev/null +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5c1453fc4d88f11fe9a738f747ccdc6ab066e62a62568c69e963a06d91e7940 +size 20873 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png new file mode 100644 index 0000000000..19c6e11b25 --- /dev/null +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e5862c0af423220b44a802c917efb5a8d040dbecd4a3f50b48353372c39b686 +size 20852 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png new file mode 100644 index 0000000000..8d27c0a833 --- /dev/null +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1cdf92300c68ef1bda5a64a2fa00a5093f8f375cdc1c46b112e3f6f6d79426c +size 17506 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png new file mode 100644 index 0000000000..7502f3ba24 --- /dev/null +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebeb956ee1fc62ebd892b82d58d211f2485ca8f3e44cbc127e6a32c7198f26f3 +size 17008 diff --git a/src/components/Button/Button.e2e.tsx b/src/components/Button/Button.e2e.tsx new file mode 100644 index 0000000000..1fb0e75b05 --- /dev/null +++ b/src/components/Button/Button.e2e.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import Button, { ButtonProps } from './Button'; +import { describeScreenshotFuzz } from '../../testing/e2e/utils'; + +describe('Button', () => { + describeScreenshotFuzz((props: ButtonProps) => , [{ + mode: [ + 'primary', 'secondary', 'tertiary', + 'outline', 'commerce', 'destructive', + 'overlay_primary', 'overlay_secondary', 'overlay_outline'], + disabled: [undefined, true], + }, { + size: ['s', 'm', 'l'], + }], {}); +}); diff --git a/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png new file mode 100644 index 0000000000..d0b1a29e59 --- /dev/null +++ b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57ac0d3fde41c852cb6040b911711ad55d568a7490b3a253e0e950432d88669 +size 61952 diff --git a/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png new file mode 100644 index 0000000000..d947dbee15 --- /dev/null +++ b/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bb817827f173e29b9f9b3daadf60f000dcd237eaebf165d56187dd7ee4663a8 +size 70416 diff --git a/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png new file mode 100644 index 0000000000..3fca6467b3 --- /dev/null +++ b/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54be1d2e45849b9d6908dbe84819903d0094cc3cbb630e7a7030cc251ef98fce +size 63421 diff --git a/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png new file mode 100644 index 0000000000..494931a688 --- /dev/null +++ b/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0419a5ce88cd704f2ac7174314c26d646346a6a6719b5cc1718f183098a55e95 +size 71695 diff --git a/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png new file mode 100644 index 0000000000..c7984bbd12 --- /dev/null +++ b/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1506d62c5f805c572e4a4baab5e36d2c66e63ed8286a8fc8c3257bd9dcec1902 +size 59162 diff --git a/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png new file mode 100644 index 0000000000..cfa4f63644 --- /dev/null +++ b/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00d863c828c4dddf213f29f49f59a5f70eb67fba9d5f7754c3896e80976a0b47 +size 65618 diff --git a/src/components/Checkbox/Checkbox.e2e.tsx b/src/components/Checkbox/Checkbox.e2e.tsx index 76456d5766..c2de5e0425 100644 --- a/src/components/Checkbox/Checkbox.e2e.tsx +++ b/src/components/Checkbox/Checkbox.e2e.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { screenshot } from '@react-playwright'; -import { Checkbox } from './Checkbox'; +import { Checkbox, CheckboxProps } from './Checkbox'; +import { describeScreenshotFuzz } from '../../testing/e2e/utils'; describe('Checkbox', () => { - test('should render', async () => { - const screen = await screenshot(labl); - expect(screen).toMatchImageSnapshot(); - }); + describeScreenshotFuzz((props: CheckboxProps) => label, [{ + checked: [false, true], + disabled: [undefined, true], + }], {}); }); diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png new file mode 100644 index 0000000000..96da1dbaac --- /dev/null +++ b/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63fedf09d60e350604c2db9c4a14db8e15204a7a9e024b709bd6d75383889cc0 +size 11000 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png new file mode 100644 index 0000000000..1bde6de901 --- /dev/null +++ b/src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21473d58d7ef7d84c7e5bb198fb7b08d14c498ea95c3c9460ca1acf114be5c13 +size 11261 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-e-2-e-tsx-checkbox-should-render-1-snap.png deleted file mode 100644 index 715eed82659bc1f54e6955c8fe289104fd8a009c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1355 zcmeAS@N?(olHy`uVBq!ia0y~yU{(OKbvW37b=`M@#7JDI4 zuf_#&K{hT|6qTHIv&^pe@QJO>v1DRR>!FmwgC&ms*1V_ovV!U3ch zk~suG)G+}C5Y?mT0HP$E8$c9HW6#s4DVn!0wjXVo7Jhxp#+^GixBmFcB`z2E@?*!R zBL2#qIv~}*T|h1n7hamtU&s} zj5Qnr*Go-JOqN`_6!i4@^VeTqUatE0=V$oiYuB%r{`*tO+U(fsq*z*3mX(~WoO|Z- za(~fYx2dydug)-8C9WSg;}$4(3m&ApHhlT^?bWef=~pjbUc7Q;%Bj<*uim(^;^xhp zTMGH*YyvD~u5C^~f92l2bq^mV-rZMQ{rk^i_x>xFE-l)%%gWc!Zxzt>U%!5>`u%O~ zOI=WiuuockpYi5;H8r&>SFbMZ7T5QhBfzQzCJ!Lo}8R~`|+$!Fn)&VfqeqXnJic`+s<*FCORoR)wp>*qPGHF7%>VwgX4R@y zmsW?bueV`2+O%ljKD(nyhPt}CCkyAu@6r?D@|-kn`t+|qKc{>CdX`07u3C44_U0=G2;oHS5;B`uh5M)t?_5&&{z^_S}>ky)C!i)J(2_x$N;I zLs1ct7dJL0Yw77-dw96r)ZTvmwr$(q8hU$sbFnqsmkR@pacDd7gF#b6BS1wcu)cmj zQ)7e7@rx%;bO0lHs@Kv>$NKvFS8v`NY-(ycYu>zTd#k^fyuP;ft+mYFy?bB1dNnCE za@ER}fl3oE00Z*sojYq98yn*{+5*je;BfK>!^fXBT}P8%y?7CjoxPfio4fSut5D0n z#XEQI+_EuzUChNphnl3Mq(nGau3WshaNfLmZ$D4hiw!c6xbon^0ycJbQNH%lhlg12 z?y0=|WgF1U24>CUrLot$JJtTzDSQ5UeZK2`kBKoqNapYH&HREzopr03#4tX#fBK diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png new file mode 100644 index 0000000000..62d681530d --- /dev/null +++ b/src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76a6fba012e7fb686ab15a9f2addf03d4664917b2252475879c7173b5db60206 +size 11024 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png new file mode 100644 index 0000000000..84d2b6a551 --- /dev/null +++ b/src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8aa4ebbf5da2145d0716fb6d4db602f94726c7905ea309d3da63ddebdeaccc2a +size 11270 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png new file mode 100644 index 0000000000..4ddb182695 --- /dev/null +++ b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c97d45cf70d5afb112dc85e36b19f6c2689f77fc8d3ad94ef69f85f5f93359d3 +size 10102 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png new file mode 100644 index 0000000000..0595bb6201 --- /dev/null +++ b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:909f67afcddbdaa122da172a361541014851cc5e3c4f3c2e8cc3436c44a786f6 +size 10531 diff --git a/src/lib/supportEvents.ts b/src/lib/supportEvents.ts index 797be8a625..b6939e58d0 100644 --- a/src/lib/supportEvents.ts +++ b/src/lib/supportEvents.ts @@ -1,4 +1,5 @@ import { canUseDOM } from './dom'; +import { isTesting } from './testing'; export type VKUISupportEvents = { supported: boolean; @@ -19,7 +20,7 @@ const transitionEvent: VKUISupportEvents = { name: null, }; -if (canUseDOM) { +if (canUseDOM && !isTesting) { if (typeof AnimationEvent !== 'undefined') { animationEvent.supported = true; animationEvent.name = 'animationend'; diff --git a/src/lib/testing.ts b/src/lib/testing.ts new file mode 100644 index 0000000000..aa9452175a --- /dev/null +++ b/src/lib/testing.ts @@ -0,0 +1 @@ +export const isTesting = Boolean(typeof window !== 'undefined' && (window as any).__isVkuiTesting); diff --git a/src/testing/e2e/index.ts b/src/testing/e2e/index.ts new file mode 100644 index 0000000000..04bca77e0d --- /dev/null +++ b/src/testing/e2e/index.ts @@ -0,0 +1 @@ +export * from './utils'; diff --git a/src/testing/e2e/utils.tsx b/src/testing/e2e/utils.tsx new file mode 100644 index 0000000000..47c236d436 --- /dev/null +++ b/src/testing/e2e/utils.tsx @@ -0,0 +1,72 @@ +import React, { ComponentType, Fragment, isValidElement } from 'react'; +import { screenshot } from '@react-playwright'; +import ConfigProvider from '../../components/ConfigProvider/ConfigProvider'; +import Panel from '../../components/Panel/Panel'; +import { Platform } from '../../lib/platform'; +import { Scheme } from '../../components/ConfigProvider/ConfigProviderContext'; + +type PropDesc = { [K in keyof Props]?: Array }; +function cartesian(propDesc: PropDesc): Props[] { + return Object.entries(propDesc).reduce((acc, [prop, values]: [string, any[]]) => { + const res: any[] = []; + acc.forEach((props) => { + values.forEach((value) => { + res.push({ ...props, [prop]: value }); + }); + }); + return res; + }, [{}]); +} + +function multiCartesian(propSets: Array>): Props[] { + if (propSets.length === 0) { + return [{} as any]; + } + return propSets.reduce((acc, ortho) => acc.concat(cartesian(ortho)), []); +} + +function prettyProps(props: any) { + return Object.entries(props).sort(([key1], [key2]) => Number(key1 > key2)).map(([prop, value]) => { + if (value === undefined) { + return ''; + } + if (value === true) { + return prop; + } + if (isValidElement(value) || Array.isArray(value) && value.every((node: any) => isValidElement(node))) { + return `${prop}=`; + } + return `${prop}=${JSON.stringify(value)}`; + }).join(' '); +} + +export function describeScreenshotFuzz( + Component: ComponentType, + propSets: Array> = [], + options = {}, +) { + console.log(options); + Object.values(Platform).forEach((platform) => { + describe(platform, () => { + const width = platform === 'vkcom' ? 'auto' : 320; + [Scheme.BRIGHT_LIGHT, Scheme.SPACE_GRAY].forEach((scheme) => { + it(scheme, async () => { + expect(await screenshot(( + +
+ + {multiCartesian(propSets).map((props, i) => ( + +
{prettyProps(props)}
+ +
+ ))} +
+
+
+ ))).toMatchImageSnapshot(); + }); + }); + }); + }); +}; diff --git a/tsconfig.json b/tsconfig.json index 12d107afd8..39c1158fe5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,9 +21,10 @@ }, "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": [ - "node_modules", - "src/**/*.test.ts", "src/**/*.test.tsx", - "src/**/*.spec.ts", "src/**/*.spec.tsx", + "node_modules", + "src/**/*.test.ts", "src/**/*.test.tsx", + "src/**/*.spec.ts", "src/**/*.spec.tsx", "src/**/*.e2e.ts", "src/**/*.e2e.tsx", + "e2e", "src/testing" ] } From e020d72049ba196baba61bca05282e30f4cea326 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Mon, 30 Nov 2020 18:40:03 +0300 Subject: [PATCH 19/29] TEST: Cleanup testing code & scripts --- .eslintrc.json | 10 +- .github/workflows/pull_request.yml | 6 + babel.config.js | 7 + e2e/detectEnv.d.ts | 3 + e2e/detectEnv.js | 7 +- e2e/docker.js | 13 -- e2e/docker.ts | 11 ++ e2e/generateWebpackConfig.ts | 15 +- e2e/index.ts | 11 +- e2e/jest.e2e.config.js | 2 +- e2e/jest/globalSetup.ts | 8 +- e2e/jest/globalTeardown.ts | 5 +- ...PlaywrightEnv.ts => jsdomPlaywrightEnv.js} | 2 +- e2e/jest/matchers.ts | 4 +- e2e/types.d.ts | 3 + jest.config.js | 5 + jest.unit.config.js | 6 - log | 10 -- package.json | 12 +- src/components/Checkbox/Checkbox.test.tsx | 14 +- src/jest.d.ts | 5 - src/testing/e2e/utils.tsx | 20 ++- tsconfig.dist.json | 13 ++ tsconfig.eslint.json | 5 - tsconfig.json | 11 +- webpack.config.js | 7 +- yarn.lock | 153 +++++++++++++++--- 27 files changed, 252 insertions(+), 116 deletions(-) create mode 100644 e2e/detectEnv.d.ts delete mode 100644 e2e/docker.js create mode 100644 e2e/docker.ts rename e2e/jest/{jsdomPlaywrightEnv.ts => jsdomPlaywrightEnv.js} (77%) create mode 100644 e2e/types.d.ts delete mode 100644 log delete mode 100644 src/jest.d.ts create mode 100644 tsconfig.dist.json delete mode 100644 tsconfig.eslint.json diff --git a/.eslintrc.json b/.eslintrc.json index 8bfc6495b4..12015d814c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,11 +4,11 @@ "plugin:jest-playwright/recommended" ], "parserOptions": { - "project": "./tsconfig.eslint.json", - "ecmaVersion": 2018, - "sourceType": "module", + "project": "./tsconfig.json", + "ecmaVersion": 2018, // Allows for the parsing of modern ECMAScript features + "sourceType": "module", // Allows for the use of imports "ecmaFeatures": { - "jsx": true, + "jsx": true, // Allows for the parsing of JSX "restParams": true, "spread": true } @@ -17,7 +17,7 @@ "Element": true }, "env": { - "es6": true, + "es6": true, // Enable global es6 variables, like Set, Map, etc "browser": true, "node": true, "jest": true diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index d4c6bdd586..7f49b48fd6 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -7,9 +7,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + with: + lfs: true + - name: Checkout LFS objects + run: git lfs checkout - uses: actions/setup-node@v1 with: node-version: 12 + # cached yarn install - uses: bahmutov/npm-install@v1 - run: yarn test:ci - name: Create test report @@ -24,6 +29,7 @@ jobs: - uses: actions/setup-node@v1 with: node-version: 12 + # cached yarn install - uses: bahmutov/npm-install@v1 - run: yarn styleguide:build - name: Uploading styleguide artifact diff --git a/babel.config.js b/babel.config.js index da24a18df7..09cc27b546 100644 --- a/babel.config.js +++ b/babel.config.js @@ -3,6 +3,13 @@ const isProduction = NODE_ENV === 'production'; const isDevelopment = NODE_ENV === 'development'; const useModules = isProduction || isDevelopment; +const testFiles = [ + './src/**/*.test.ts', './src/**/*.test.tsx', + './src/**/*.spec.ts', './src/**/*.spec.tsx', + './src/**/*.e2e.ts', './src/**/*.e2e.tsx', + './e2e/', './src/testing/', +]; + module.exports = { presets: [ ['@babel/preset-env', { modules: useModules ? false : 'commonjs' }], diff --git a/e2e/detectEnv.d.ts b/e2e/detectEnv.d.ts new file mode 100644 index 0000000000..d606d70dff --- /dev/null +++ b/e2e/detectEnv.d.ts @@ -0,0 +1,3 @@ +export const isLinux: boolean; +export const useDocker: boolean; +export const canRunTests: boolean; diff --git a/e2e/detectEnv.js b/e2e/detectEnv.js index 8e89251a5e..5a11b6ce45 100644 --- a/e2e/detectEnv.js +++ b/e2e/detectEnv.js @@ -1,8 +1,9 @@ -const child_process = require('child_process'); +// This file is in JS because it runs in node when generating jest.e2e.config +const { execSync } = require('child_process'); function checkDocker() { try { - child_process.execSync('docker stats --no-stream'); + execSync('docker stats --no-stream'); return true; } catch (err) { return false; @@ -18,4 +19,4 @@ const isLinux = checkLinux(); const useDocker = process.env.E2E_DOCKER === '1' || !isLinux && checkDocker(); const canRunTests = useDocker || isLinux; -module.exports = { useDocker, isLinux, canRunTests }; +module.exports = { isLinux, useDocker, canRunTests }; diff --git a/e2e/docker.js b/e2e/docker.js deleted file mode 100644 index 378469edca..0000000000 --- a/e2e/docker.js +++ /dev/null @@ -1,13 +0,0 @@ -const { promisify } = require('util'); -const { exec } = require('child_process'); -const waitPort = require('wait-port'); -const execP = promisify(exec); - -const startDocker = () => Promise.all([ - execP('docker-compose up -d', { cwd: __dirname }), - waitPort({ host: 'localhost', port: 9001, silent: true, timeout: 30000 }), -]); - -const stopDocker = () => execP('docker-compose stop', { cwd: __dirname }); - -module.exports = { startDocker, stopDocker }; diff --git a/e2e/docker.ts b/e2e/docker.ts new file mode 100644 index 0000000000..048599f5f7 --- /dev/null +++ b/e2e/docker.ts @@ -0,0 +1,11 @@ +import { promisify } from 'util'; +import { exec } from 'child_process'; +import waitPort from 'wait-port'; +const execP = promisify(exec); + +export const startDocker = () => Promise.all([ + execP('docker-compose up -d', { cwd: __dirname }), + waitPort({ host: 'localhost', port: 9001, timeout: 30000 }), +]); + +export const stopDocker = () => execP('docker-compose stop', { cwd: __dirname }); diff --git a/e2e/generateWebpackConfig.ts b/e2e/generateWebpackConfig.ts index 1167d8f7fb..ff42a78f99 100644 --- a/e2e/generateWebpackConfig.ts +++ b/e2e/generateWebpackConfig.ts @@ -1,12 +1,13 @@ -const path = require('path'); -const { promisify } = require('util'); -const glob = promisify(require('glob')); -const webpackConfig = require('../webpack.config.js'); +import * as path from 'path'; +import { promisify } from 'util'; +import cbGlob from 'glob'; const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const webpackConfig = require('../webpack.config.js'); +const glob = promisify(cbGlob); const { externals, plugins = [], devServer, resolve = {}, output = {}, ...baseWebpackConfig } = webpackConfig; -async function generateWebpackConfig() { +export async function generateWebpackConfig() { const testFiles = await glob(path.join(__dirname, '../src/**/*.e2e.{ts,tsx}')); return { ...baseWebpackConfig, @@ -49,7 +50,3 @@ async function generateWebpackConfig() { ], }; }; - -module.exports = { - generateWebpackConfig, -}; diff --git a/e2e/index.ts b/e2e/index.ts index 3fdbe67fcc..e2caa10f83 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -1,16 +1,21 @@ import { ReactElement } from 'react'; -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export async function mount(jsx: ReactElement) { +/** + * Хелперы для тестов jest + playwright. В браузерной сборке подменяются на browser/mount. + */ + +export function mount(jsx: ReactElement): Promise; +export async function mount() { const testName = expect.getState().currentTestName; /* istanbul ignore next */ await page.evaluate(({ testName }) => { - window['testHandle'].mount(testName); + (window as any).testHandle.mount(testName); }, { testName }); } export async function screenshot(jsx: ReactElement) { await mount(jsx); + /* istanbul ignore next */ const { width, height } = await page.evaluate(() => { const size = { width: 0, height: 0 }; document.querySelectorAll('#mount > *').forEach((node) => { diff --git a/e2e/jest.e2e.config.js b/e2e/jest.e2e.config.js index fc8c213b07..0e679ce915 100644 --- a/e2e/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -28,7 +28,7 @@ const config = { ], globalSetup: path.join(__dirname, 'jest/globalSetup.ts'), globalTeardown: path.join(__dirname, 'jest/globalTeardown.ts'), - testEnvironment: path.join(__dirname, 'jest/jsdomPlaywrightEnv.ts'), + testEnvironment: path.join(__dirname, 'jest/jsdomPlaywrightEnv.js'), testEnvironmentOptions: { ...(base.testEnvironmentOptions || {}), 'jest-playwright': jestPlaywrightOptions, diff --git a/e2e/jest/globalSetup.ts b/e2e/jest/globalSetup.ts index 99a3f8de30..36378079e8 100644 --- a/e2e/jest/globalSetup.ts +++ b/e2e/jest/globalSetup.ts @@ -1,5 +1,6 @@ import webpack from 'webpack'; import WebpackDevServer from 'webpack-dev-server'; +import type { Config as JestConfig } from '@jest/types'; import baseSetup from 'jest-playwright-preset/setup'; import { generateWebpackConfig } from '../generateWebpackConfig'; import { useDocker } from '../detectEnv'; @@ -33,16 +34,17 @@ async function setupWebpack() { ...webpackConfig.devServer, }); devServer.listen(9000); - global['__DEV_SERVER__'] = devServer; + (global as any)['__DEV_SERVER__'] = devServer; return compilerDone; } -module.exports = async function setup(jestConfig) { +module.exports = async function setup(jestConfig: JestConfig.GlobalConfig) { // do not re-run webpack in watch mode // https://github.com/facebook/jest/issues/6800 if (devServer) { - return new Promise((ok) => devServer.middleware.waitUntilValid(ok)); + // hack into middleware to wait for build to pass + return new Promise((ok) => (devServer as any).middleware.waitUntilValid(ok)); } await setupWebpack(); diff --git a/e2e/jest/globalTeardown.ts b/e2e/jest/globalTeardown.ts index 7bad952f68..5835849e5d 100644 --- a/e2e/jest/globalTeardown.ts +++ b/e2e/jest/globalTeardown.ts @@ -1,12 +1,13 @@ import baseTeardown from 'jest-playwright-preset/teardown'; +import type { Config as JestConfig } from '@jest/types'; import { useDocker } from '../detectEnv'; import { stopDocker } from '../docker'; -module.exports = async function teardown(config) { +module.exports = async function teardown(config: JestConfig.GlobalConfig) { await baseTeardown(config); // I don't know why, but devServer closes in watch mode, too if (!config.watch && !config.watchAll) { - global['__DEV_SERVER__'].close(); + (global as any)['__DEV_SERVER__'].close(); if (useDocker) { await stopDocker(); } diff --git a/e2e/jest/jsdomPlaywrightEnv.ts b/e2e/jest/jsdomPlaywrightEnv.js similarity index 77% rename from e2e/jest/jsdomPlaywrightEnv.ts rename to e2e/jest/jsdomPlaywrightEnv.js index 76aff20992..db0e71c6e5 100644 --- a/e2e/jest/jsdomPlaywrightEnv.ts +++ b/e2e/jest/jsdomPlaywrightEnv.js @@ -1,3 +1,3 @@ +// Jest test environment must be in JS const { getPlaywrightEnv } = require('jest-playwright-preset/lib/PlaywrightEnvironment'); - module.exports = getPlaywrightEnv('jsdom'); diff --git a/e2e/jest/matchers.ts b/e2e/jest/matchers.ts index 8107e54771..29bf1ebcf6 100644 --- a/e2e/jest/matchers.ts +++ b/e2e/jest/matchers.ts @@ -5,7 +5,7 @@ const toMatchImageSnapshot = configureToMatchImageSnapshot({ customSnapshotIdentifier: ({ currentTestName, counter }) => { return `${currentTestName.toLowerCase().replace(/ /g, '-')}-${counter}`; }, -} as any); +}); beforeAll(async () => { const host = useDocker ? 'host.docker.internal' : 'localhost'; @@ -14,7 +14,7 @@ beforeAll(async () => { afterEach(async () => { /* istanbul ignore next */ - await page.evaluate(() => window['testHandle'].unmount()); + await page.evaluate(() => (window as any).testHandle.unmount()); }); expect.extend({ toMatchImageSnapshot }); diff --git a/e2e/types.d.ts b/e2e/types.d.ts new file mode 100644 index 0000000000..d756db183b --- /dev/null +++ b/e2e/types.d.ts @@ -0,0 +1,3 @@ +declare module 'jest-playwright-preset/setup'; +declare module 'jest-playwright-preset/teardown'; +declare module 'jest-playwright-preset/lib/PlaywrightEnvironment'; diff --git a/jest.config.js b/jest.config.js index 73fdf5efc1..88d579332a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,4 +1,9 @@ module.exports = { projects: ['', '/e2e/jest.e2e.config.js'], collectCoverage: true, + collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], + coveragePathIgnorePatterns: [ + '\\.d\\.ts$', + 'src/types', + ], } diff --git a/jest.unit.config.js b/jest.unit.config.js index 274897c7c2..e50fe0db2c 100644 --- a/jest.unit.config.js +++ b/jest.unit.config.js @@ -2,10 +2,4 @@ const path = require('path'); module.exports = { displayName: 'unit', roots: [path.join(__dirname, 'src')], - collectCoverage: true, - collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], - coveragePathIgnorePatterns: [ - '\\.d\\.ts$', - 'src/types', - ], } diff --git a/log b/log deleted file mode 100644 index 80827a4415..0000000000 --- a/log +++ /dev/null @@ -1,10 +0,0 @@ -yarn run v1.22.10 -$ jest --config e2e/jest.e2e.config.js --watch - -Building browser bundle... -Build failed - -Building browser bundle... -Build OK - -Done in 85.70s. diff --git a/package.json b/package.json index 3eddca6234..0ce15b6162 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,11 @@ "@testing-library/react": "^11.2.1", "@testing-library/user-event": "^12.2.2", "@types/jest": "^26.0.15", + "@types/jest-image-snapshot": "^4.1.3", "@types/node": "^12.7.2", "@types/react": "^16.9.2", "@types/react-dom": "^16.8.5", + "@types/webpack-dev-server": "^3.11.1", "@typescript-eslint/eslint-plugin": "^2.28.0", "@typescript-eslint/parser": "^2.0.0", "@vkontakte/appearance": "https://github.com/VKCOM/Appearance#v9.2.0", @@ -59,6 +61,7 @@ "jest": "^26.6.3", "jest-image-snapshot": "^4.2.0", "jest-playwright-preset": "^1.4.1", + "jest-silent-reporter": "^0.3.0", "mini-css-extract-plugin": "^1.3.1", "playwright": "^1.6.2", "postcss": "8.1.4", @@ -77,7 +80,6 @@ "source-map-loader": "^0.2.4", "stylelint": "^10.1.0", "stylelint-config-standard": "^18.3.0", - "ts-loader": "^8.0.9", "typescript": "3.8", "wait-port": "^0.2.9", "webpack": "^4.44.2", @@ -110,9 +112,10 @@ "postcss": "cross-env NODE_ENV=production postcss src/styles/styles.css --output dist/vkui.css --verbose", "postcss-unstable": "NODE_ENV=production postcss src/styles/unstable.css --output dist/unstable.css --verbose", "babel": "cross-env NODE_ENV=production babel src/ --out-dir dist/ --source-maps --extensions .tsx,.jsx,.ts,.js", - "tsc": "cross-env NODE_ENV=production tsc --emitDeclarationOnly --declaration", + "tsc": "cross-env NODE_ENV=production tsc --emitDeclarationOnly --declaration -p tsconfig.dist.json", "clear": "shx rm -rf dist/*", "test:unit": "jest --config jest.unit.config.js", + "test:unit:quick": "yarn test:unit --silent --reporters='jest-silent-reporter' --onlyChanged", "test:e2e": "jest --config e2e/jest.e2e.config.js", "test:code": "jest", "test:code:ci": "jest --ci --silent --outputFile test-results.json --json --coverageReporters='json-summary'", @@ -120,11 +123,12 @@ "lint:ci": "yarn lint -o lint-results.json -f json", "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", "test:static:ci": "concurrently 'tsc --noEmit' 'yarn lint:ci' 'stylelint \"./src/**/*.css\"'", - "test": "concurrently 'yarn test:unit' 'yarn test:static'", + "test": "concurrently 'yarn test:code' 'yarn test:static'", + "test:quick": "concurrently 'yarn test:unit:quick' 'yarn test:static'", "test:ci": "concurrently 'yarn test:code:ci' 'yarn test:static:ci'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" }, "pre-commit": [ - "test:static" + "test:quick" ] } diff --git a/src/components/Checkbox/Checkbox.test.tsx b/src/components/Checkbox/Checkbox.test.tsx index bd50a1a93d..265e15dca4 100644 --- a/src/components/Checkbox/Checkbox.test.tsx +++ b/src/components/Checkbox/Checkbox.test.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import '@testing-library/jest-dom/extend-expect'; @@ -6,9 +6,15 @@ import { Checkbox } from './Checkbox'; describe('Checkbox', () => { it('handles change', () => { - const onChange = jest.fn(); - render( onChange(e.target.checked)}>check); + const UncontrolledCheckbox = () => { + const [checked, setChecked] = useState(false); + return setChecked(e.target.checked)}>check; + }; + render(); + expect(screen.getByRole('checkbox')).not.toBeChecked(); userEvent.click(screen.getByText('check')); - expect(onChange).toHaveBeenLastCalledWith(false); + expect(screen.getByRole('checkbox')).toBeChecked(); + userEvent.click(screen.getByText('check')); + expect(screen.getByRole('checkbox')).not.toBeChecked(); }); }); diff --git a/src/jest.d.ts b/src/jest.d.ts deleted file mode 100644 index 5e9d95319c..0000000000 --- a/src/jest.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare namespace jest { - interface Matchers { - toMatchImageSnapshot(): R; - } -} diff --git a/src/testing/e2e/utils.tsx b/src/testing/e2e/utils.tsx index 47c236d436..531c69b5a8 100644 --- a/src/testing/e2e/utils.tsx +++ b/src/testing/e2e/utils.tsx @@ -1,4 +1,5 @@ import React, { ComponentType, Fragment, isValidElement } from 'react'; +import { MatchImageSnapshotOptions } from 'jest-image-snapshot'; import { screenshot } from '@react-playwright'; import ConfigProvider from '../../components/ConfigProvider/ConfigProvider'; import Panel from '../../components/Panel/Panel'; @@ -40,16 +41,25 @@ function prettyProps(props: any) { }).join(' '); } +type ScreenshotOptions = { + matchScreenshot?: MatchImageSnapshotOptions; + platforms?: Platform[]; + schemes?: Scheme[]; +}; export function describeScreenshotFuzz( Component: ComponentType, propSets: Array> = [], - options = {}, + options: ScreenshotOptions = {}, ) { - console.log(options); - Object.values(Platform).forEach((platform) => { + const { + matchScreenshot, + platforms = Object.values(Platform), + schemes = [Scheme.BRIGHT_LIGHT, Scheme.SPACE_GRAY], + } = options; + platforms.forEach((platform) => { describe(platform, () => { const width = platform === 'vkcom' ? 'auto' : 320; - [Scheme.BRIGHT_LIGHT, Scheme.SPACE_GRAY].forEach((scheme) => { + schemes.forEach((scheme) => { it(scheme, async () => { expect(await screenshot(( @@ -64,7 +74,7 @@ export function describeScreenshotFuzz( - ))).toMatchImageSnapshot(); + ))).toMatchImageSnapshot(matchScreenshot); }); }); }); diff --git a/tsconfig.dist.json b/tsconfig.dist.json new file mode 100644 index 0000000000..f49614959f --- /dev/null +++ b/tsconfig.dist.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + // only include source, not testing + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": [ + "node_modules", + "src/**/*.test.ts", "src/**/*.test.tsx", + "src/**/*.spec.ts", "src/**/*.spec.tsx", + "src/**/*.e2e.ts", "src/**/*.e2e.tsx", + "src/testing/" + ], + "files": [] +} diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json deleted file mode 100644 index 1081d8afdf..0000000000 --- a/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts", "src/**/*.tsx", "e2e/**/*ts", "e2e/**/*tsx"], - "exclude": [] -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 39c1158fe5..2943e37f5e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,12 +19,9 @@ "@react-playwright": ["../e2e"] } }, - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": [ - "node_modules", - "src/**/*.test.ts", "src/**/*.test.tsx", - "src/**/*.spec.ts", "src/**/*.spec.tsx", - "src/**/*.e2e.ts", "src/**/*.e2e.tsx", - "e2e", "src/testing" + "include": ["src/**/*.ts", "src/**/*.tsx", "e2e/**/*.ts", "e2e/**/*.tsx"], + "files": [ + "node_modules/jest-playwright-preset/types/global.d.ts", + "node_modules/expect-playwright/global.d.ts" ] } diff --git a/webpack.config.js b/webpack.config.js index 41bb2fdd45..028e4ed1c9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -16,15 +16,10 @@ const config = { module: { rules: [ { - test: /\.js?$/, + test: /\.[jt]sx?$/, exclude: /node_modules/, loader: 'babel-loader', }, - { - test: /\.(ts|tsx)?$/, - exclude: /node_modules/, - loader: ['babel-loader', 'ts-loader'], - }, { test: /\.(jpeg|jpg|png|woff|svg|otf)$/, use: { diff --git a/yarn.lock b/yarn.lock index b0154cf12c..5d1c638353 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1831,10 +1831,33 @@ dependencies: "@babel/types" "^7.3.0" +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" +"@types/connect-history-api-fallback@*": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz#4772b79b8b53185f0f4c9deab09236baf76ee3b4" + integrity sha512-7SxFCd+FLlxCfwVwbyPxbR4khL9aNikJhrorw8nUIOqeuooc9gifBuDQOJw5kzN7i6i3vLn9G8Wde/4QDihpYw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.33" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" + integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== + dependencies: + "@types/node" "*" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -1843,6 +1866,25 @@ version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" +"@types/express-serve-static-core@*": + version "4.17.14" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz#cabf91debeeb3cb04b798e2cff908864e89b6106" + integrity sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.9.tgz#f5f2df6add703ff28428add52bdec8a1091b0a78" + integrity sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/glob@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" @@ -1858,6 +1900,22 @@ dependencies: "@types/node" "*" +"@types/http-proxy-middleware@*": + version "0.19.3" + resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" + integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== + dependencies: + "@types/connect" "*" + "@types/http-proxy" "*" + "@types/node" "*" + +"@types/http-proxy@*": + version "1.17.4" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b" + integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -1877,6 +1935,15 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest-image-snapshot@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/jest-image-snapshot/-/jest-image-snapshot-4.1.3.tgz#761df3bdc0348c78e1fac657df053e7d277f836f" + integrity sha512-JqDoqKInxfMhD0aN/iGzli4ZqRSwfjyPpFoE5BrshfGBHpW1BUCIEI3OUu3bwxzfogI/aLo2OLVKkbOyxxDrFg== + dependencies: + "@types/jest" "*" + "@types/pixelmatch" "*" + ssim.js "^3.1.0" + "@types/jest@*", "@types/jest@^26.0.15": version "26.0.15" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.15.tgz#12e02c0372ad0548e07b9f4e19132b834cb1effe" @@ -1894,6 +1961,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@types/mime@*": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" + integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1921,6 +1993,13 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/pixelmatch@*": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@types/pixelmatch/-/pixelmatch-5.2.2.tgz#3403238d4b920bf2255fb6cbf9a098bef796ce62" + integrity sha512-ndpfW/H8+SAiI3wt+f8DlHGgB7OeBdgFgBJ6v/1l3SpJ0MCn9wtXFb4mUccMujN5S4DMmAh7MVy1O3WcXrHUKw== + dependencies: + "@types/node" "*" + "@types/prettier@^2.0.0": version "2.1.5" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" @@ -1930,6 +2009,16 @@ version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" +"@types/qs@*": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + "@types/react-dom@^16.8.5": version "16.9.5" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.5.tgz#5de610b04a35d07ffd8f44edad93a71032d9aaa7" @@ -1943,6 +2032,14 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/serve-static@*": + version "1.13.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.8.tgz#851129d434433c7082148574ffec263d58309c46" + integrity sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA== + dependencies: + "@types/mime" "*" + "@types/node" "*" + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -1992,6 +2089,17 @@ resolved "https://registry.yarnpkg.com/@types/wait-on/-/wait-on-4.0.0.tgz#fb6fa2854b592f7344f1dd9836b5655795510dce" integrity sha512-Cj2jcMOzrdvWMP+Vl+qlz942eQfJk96S9kRnB1ejVMl+w9/9mUn0+pF4J+v0Iv+6zCrmBBODZAXKsRo6Y91Cfw== +"@types/webpack-dev-server@^3.11.1": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#f8f4dac1da226d530bd15a1d5dc34b23ba766ccb" + integrity sha512-rIb+LtUkKnh7+oIJm3WiMJONd71Q0lZuqGLcSqhZ5qjN9gV/CNmZe7Bai+brnBPZ/KVYOsr+4bFLiNZwjBicLw== + dependencies: + "@types/connect-history-api-fallback" "*" + "@types/express" "*" + "@types/http-proxy-middleware" "*" + "@types/serve-static" "*" + "@types/webpack" "*" + "@types/webpack-sources@*": version "0.1.7" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" @@ -2000,6 +2108,18 @@ "@types/source-list-map" "*" source-map "^0.6.1" +"@types/webpack@*": + version "4.41.25" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" + integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + "@types/webpack@^4.4.31": version "4.41.10" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.10.tgz#2e1f6b3508a249854efe3dcc7690905ac5ee10be" @@ -4410,14 +4530,6 @@ enhanced-resolve@4.1.0: memory-fs "^0.4.0" tapable "^1.0.0" -enhanced-resolve@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" @@ -6907,6 +7019,14 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" +jest-silent-reporter@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/jest-silent-reporter/-/jest-silent-reporter-0.3.0.tgz#850b57da29e3929ee617fd40af64df5976afe2e8" + integrity sha512-Mq3STjj4vO+HdzocaXV8dcMa5yRxsmJ/jZy5LCzw5GBY40JAvnH85SaMRRwRlmAMydqJ3GUyEtnyQui8flUnxw== + dependencies: + chalk "^4.0.0" + jest-util "^26.0.0" + jest-snapshot@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" @@ -6929,7 +7049,7 @@ jest-snapshot@^26.6.2: pretty-format "^26.6.2" semver "^7.3.2" -jest-util@^26.6.2: +jest-util@^26.0.0, jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== @@ -7368,7 +7488,7 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" dependencies: @@ -10628,7 +10748,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssim.js@^3.1.1: +ssim.js@^3.1.0, ssim.js@^3.1.1: version "3.5.0" resolved "https://registry.yarnpkg.com/ssim.js/-/ssim.js-3.5.0.tgz#d7276b9ee99b57a5ff0db34035f02f35197e62df" integrity sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g== @@ -11293,17 +11413,6 @@ trough@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" -ts-loader@^8.0.9: - version "8.0.9" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.9.tgz#890fc25f49a99124268f4e738ed22d00f666dc37" - integrity sha512-rQd+iIfz5z4HSVzhhRFP4M2OQ0QmihilWWauYvvowBfnRvr4DW+gqA2om70xp/07EQj1qBkLMWobnXsgmWMbmg== - dependencies: - chalk "^2.3.0" - enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" - micromatch "^4.0.0" - semver "^6.0.0" - tslib@^1.8.1: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" From 614ef2d2f8c6fbfc96a14d90135b4dba5febd39b Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Mon, 30 Nov 2020 22:34:59 +0300 Subject: [PATCH 20/29] TEST: Add docs on testing --- README.md | 11 +++---- TESTING.md | 49 ++++++++++++++++++++++++++++ src/components/Button/Button.e2e.tsx | 2 +- 3 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 TESTING.md diff --git a/README.md b/README.md index 3622b6b178..e29ac1427c 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,11 @@ ReactDOM.render(, document.getElementById('root')); Сейчас библиотека не гарантирует стабильную работу при интеграции в [vk.com](vk.com) и [m.vk.com](m.vk.com). В vk.com есть нерешенные проблемы с элементами ввода типа клавиатуры и мышки. В m.vk.com есть несоответствия в списках поддерживаемых браузеров. ### Десктопный UI -В данный момент ведется [активная разработка](https://github.com/VKCOM/VKUI/pull/665) адаптивного UI, который будет работать на десктопных и планшетных браузерах. Stay tuned. +В данный момент ведется [активная разработка](https://github.com/VKCOM/VKUI/pull/665) адаптивного UI, который будет работать на десктопных и планшетных браузерах. Stay tuned. + +## Тестирование + +Мы работаем над качеством библиотеки и подвозим тесты. `yarn test` запускает все возможные тесты, проверяет типы и линтит. `yarn test:unit` — только быстрые юниты. В интерактивном режиме юниты запускают через `yarn test:unit --watch`. Подробности — в нашем [гайде по тестированию](./TESTING.md). ## Документация В [документации](https://vkcom.github.io/VKUI/) вы сможете найти информацию об использовании компонентов и утилит. @@ -59,8 +63,3 @@ ReactDOM.render(, document.getElementById('root')); ## Contributing Мы очень радуемся, когда пользователи библиотеки работают над её улучшением. Для того, чтобы оставить след в истории, сделайте форк проекта, внесите изменения и отправьте нам [pull request](https://github.com/VKCOM/VKUI/pulls). - - - - - diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000000..74d3974ca8 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,49 @@ +Мы используем три вида тестов: + +__Юнит-тесты__ на jest в файлах `moduleName.test.ts` [пример](./src/helpers/getClassName.test.ts) + +__Компонентные тесты__ на jest + [react-testing-library](https://testing-library.com/docs/react-testing-library/example-intro) + [jest-dom](https://github.com/testing-library/jest-dom#table-of-contents) в `ComponentName.test.tsx` [пример](./src/components/Checkbox/Checkbox.test.tsx) + +__Скриншотные тесты__ на jest + [playwright](https://playwright.dev/#?path=docs/api.md) + [jest-playwright](https://github.com/playwright-community/jest-playwright) в `ComponentName.e2e.tsx` [пример](./src/components/Checkbox/Checkbox.e2e.tsx). + +Чтобы запускать скриншотные тесты локально, нужно установить: +- [git-lfs](https://git-lfs.github.com) — чтобы от эталонных скриншотов не раздувало репозиторий +- [докер](https://www.docker.com/products/docker-desktop) — чтобы платформа не влияла на рендеринг шрифтов. На линуксе докер не нужен. + +## Команды + +- `yarn test:unit` — только быстрые юниты + компонентные; +- `yarn test:unit:quick` — только юниты + компонентные тесты на незакоммиченные изменения; +- `yarn test:e2e` — только браузерные тесты; +- `yarn test:code` — все тесты. + +Все команды работают в интерактивном режиме с опцией `--watch` (`yarn test:unit --watch`). + +Чтобы обновить скриншоты, установите докер и git-lfs и запустите `yarn test:e2e -u`. + +## `describeScreenshotFuzz` + +Функция `describeScreenshotFuzz` из [`/testing/utils`]('./src/testing/utils.ts) помогает быстро заскриншотить все состояния компонента в разных темах и на разных платформах: + +```ts +describe('Button', () => { + describeScreenshotFuzz( + // Можем передать компонент или вот так добавить дефолтные пропы для скриншотов + (props: ButtonProps) => , + // Описание комбинаций пропов — по элементу массива на независимый набор + [ + // mode и disabled влияют на цвет, но не на размер + { mode: ['primary', 'secondary'], disabled: [undefined, true] }, + // size влияет на размер, но не на цвет + { size: ['s', 'm', 'l'] } + ]); + // всего 2 * 2 + 3 = 7 состояний: + // mode="primary" + // mode="primary" disabled + // mode="secondary" + // mode="secondary" disabled + // size="s" + // size="m" + // size="l" +}); +``` diff --git a/src/components/Button/Button.e2e.tsx b/src/components/Button/Button.e2e.tsx index 1fb0e75b05..1f09cdc879 100644 --- a/src/components/Button/Button.e2e.tsx +++ b/src/components/Button/Button.e2e.tsx @@ -11,5 +11,5 @@ describe('Button', () => { disabled: [undefined, true], }, { size: ['s', 'm', 'l'], - }], {}); + }]); }); From 3590e7bc774c8175b859cc42e226156575dc5803 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Tue, 1 Dec 2020 11:11:26 +0300 Subject: [PATCH 21/29] TEST: Wait for fonts to load before screenshot --- dangerfile.js | 7 ++++++- e2e/browser/test-handle.ts | 2 +- e2e/index.ts | 5 ++++- package.json | 1 + .../actionsheet-android-bright_light-1-snap.png | 4 ++-- .../button-android-bright_light-1-snap.png | 4 ++-- .../checkbox-android-bright_light-1-snap.png | 4 ++-- yarn.lock | 5 +++++ 8 files changed, 23 insertions(+), 9 deletions(-) diff --git a/dangerfile.js b/dangerfile.js index d5bbc6d181..99431d7b09 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -69,7 +69,12 @@ async function uploadFailedScreenshots() { ContentType: 'image/png', ACL: 'public-read', }).promise(); - markdown(`Screenshot \`${screenName}\` failed\n![](https://${awsHost}/${key})`); + markdown(` +
+ Screenshot ${screenName} failed + +
+ `.replace(/(^|\n) +/g, '')); } catch (err) { warn(`Counls not upload screenshot diff ${screenName}: ${err.message}`); } diff --git a/e2e/browser/test-handle.ts b/e2e/browser/test-handle.ts index f93f8296a6..ea8e06f944 100644 --- a/e2e/browser/test-handle.ts +++ b/e2e/browser/test-handle.ts @@ -16,7 +16,7 @@ class ComponentHandle { if (!(name in this.components)) { throw new Error(`Test "${name}" does not exist, ${JSON.stringify(Object.keys(this.components))}`); } - render(this.components[name].node, this.mountNode); + return new Promise((ok) => render(this.components[name].node, this.mountNode, () => ok())); } unmount() { diff --git a/e2e/index.ts b/e2e/index.ts index e2caa10f83..37c75ad056 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -9,12 +9,15 @@ export async function mount() { const testName = expect.getState().currentTestName; /* istanbul ignore next */ await page.evaluate(({ testName }) => { - (window as any).testHandle.mount(testName); + return (window as any).testHandle.mount(testName); }, { testName }); } export async function screenshot(jsx: ReactElement) { await mount(jsx); + // font load affects layout + /* istanbul ignore next */ + await page.evaluate(() => document.fonts.ready); /* istanbul ignore next */ const { width, height } = await page.evaluate(() => { const size = { width: 0, height: 0 }; diff --git a/package.json b/package.json index 0ce15b6162..be86a40a83 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@testing-library/jest-dom": "^5.11.6", "@testing-library/react": "^11.2.1", "@testing-library/user-event": "^12.2.2", + "@types/css-font-loading-module": "^0.0.4", "@types/jest": "^26.0.15", "@types/jest-image-snapshot": "^4.1.3", "@types/node": "^12.7.2", diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png index f0015b85c3..12313db8df 100644 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:022b9bb6d9b77950fdd0580ba44fcb9ad3032a83ebf1370b813034392ada6fc8 -size 15902 +oid sha256:9d25daa70da20d2384b76e82dd442c84a3d8c8e140040dd39982cde26c0a9ec8 +size 15964 diff --git a/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png index d0b1a29e59..7d39ddcb38 100644 --- a/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b57ac0d3fde41c852cb6040b911711ad55d568a7490b3a253e0e950432d88669 -size 61952 +oid sha256:7c93e8ac91e4626cd70a4f90c71a95402609c25a0b95ef45f72bd25ff330e57c +size 62502 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png index 96da1dbaac..5cee532acb 100644 --- a/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png +++ b/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63fedf09d60e350604c2db9c4a14db8e15204a7a9e024b709bd6d75383889cc0 -size 11000 +oid sha256:434bc0ed37278d459cf20452f49671b48ce110e7b87ed658d3daa455914528a8 +size 11022 diff --git a/yarn.lock b/yarn.lock index 5d1c638353..10c54f66ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1858,6 +1858,11 @@ dependencies: "@types/node" "*" +"@types/css-font-loading-module@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/css-font-loading-module/-/css-font-loading-module-0.0.4.tgz#94a835e27d1af444c65cba88523533c174463d64" + integrity sha512-ENdXf7MW4m9HeDojB2Ukbi7lYMIuQNBHVf98dbzaiG4EEJREBd6oleVAjrLRCrp7dm6CK1mmdmU9tcgF61acbw== + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" From 52ae212865ad3267265f0a7b6bf2251472da4055 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Tue, 1 Dec 2020 12:58:08 +0300 Subject: [PATCH 22/29] TEST: Force compact vkcom + dont fail on screen test error --- .github/workflows/pull_request.yml | 6 ++++- README.md | 2 +- jest.unit.config.js | 5 ++++ package.json | 6 ++--- .../actionsheet-vkcom-bright_light-1-snap.png | 4 ++-- .../actionsheet-vkcom-space_gray-1-snap.png | 4 ++-- .../button-vkcom-bright_light-1-snap.png | 4 ++-- .../button-vkcom-space_gray-1-snap.png | 4 ++-- .../checkbox-vkcom-bright_light-1-snap.png | 4 ++-- .../checkbox-vkcom-space_gray-1-snap.png | 4 ++-- src/testing/e2e/utils.tsx | 24 ++++++++++++------- 11 files changed, 42 insertions(+), 25 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 7f49b48fd6..4d6ca2255f 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -16,7 +16,11 @@ jobs: node-version: 12 # cached yarn install - uses: bahmutov/npm-install@v1 - - run: yarn test:ci + - name: Run tests + run: yarn test:ci + - name: FYI visual tests + run: yarn test:e2e + continue-on-error: true - name: Create test report if: always() run: yarn danger ci diff --git a/README.md b/README.md index e29ac1427c..c2be1265a6 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ ReactDOM.render(, document.getElementById('root')); ## Тестирование -Мы работаем над качеством библиотеки и подвозим тесты. `yarn test` запускает все возможные тесты, проверяет типы и линтит. `yarn test:unit` — только быстрые юниты. В интерактивном режиме юниты запускают через `yarn test:unit --watch`. Подробности — в нашем [гайде по тестированию](./TESTING.md). +Мы работаем над качеством библиотеки и подвозим тесты. `yarn test` запускает юниты, проверяет типы и линтит. `yarn test:unit` запускает только юниты и поддерживает интерактивный режим с флагом `--watch`. Также мы поддерживаем скриншотные тесты — смотрите наш [гайд по тестированию](./TESTING.md). ## Документация В [документации](https://vkcom.github.io/VKUI/) вы сможете найти информацию об использовании компонентов и утилит. diff --git a/jest.unit.config.js b/jest.unit.config.js index e50fe0db2c..4258094106 100644 --- a/jest.unit.config.js +++ b/jest.unit.config.js @@ -2,4 +2,9 @@ const path = require('path'); module.exports = { displayName: 'unit', roots: [path.join(__dirname, 'src')], + collectCoverageFrom: ['src/*/**/*.{ts,tsx}'], + coveragePathIgnorePatterns: [ + '\\.d\\.ts$', + 'src/types', + ], } diff --git a/package.json b/package.json index be86a40a83..312b2b75ee 100644 --- a/package.json +++ b/package.json @@ -117,16 +117,16 @@ "clear": "shx rm -rf dist/*", "test:unit": "jest --config jest.unit.config.js", "test:unit:quick": "yarn test:unit --silent --reporters='jest-silent-reporter' --onlyChanged", + "test:unit:ci": "yarn test:unit --ci --silent --outputFile test-results.json --json --coverage --coverageReporters='json-summary'", "test:e2e": "jest --config e2e/jest.e2e.config.js", "test:code": "jest", - "test:code:ci": "jest --ci --silent --outputFile test-results.json --json --coverageReporters='json-summary'", "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", "lint:ci": "yarn lint -o lint-results.json -f json", "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", "test:static:ci": "concurrently 'tsc --noEmit' 'yarn lint:ci' 'stylelint \"./src/**/*.css\"'", - "test": "concurrently 'yarn test:code' 'yarn test:static'", + "test": "concurrently 'yarn test:unit' 'yarn test:static'", "test:quick": "concurrently 'yarn test:unit:quick' 'yarn test:static'", - "test:ci": "concurrently 'yarn test:code:ci' 'yarn test:static:ci'", + "test:ci": "concurrently 'yarn test:unit:ci' 'yarn test:static:ci'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" }, "pre-commit": [ diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png index 8d27c0a833..230858f1e5 100644 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1cdf92300c68ef1bda5a64a2fa00a5093f8f375cdc1c46b112e3f6f6d79426c -size 17506 +oid sha256:dc967a584c7e248249c35293715e999b1ba31d742670a2352b18f7718d35fb2e +size 15093 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png index 7502f3ba24..8156a2db7f 100644 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebeb956ee1fc62ebd892b82d58d211f2485ca8f3e44cbc127e6a32c7198f26f3 -size 17008 +oid sha256:7ae34315456328c2c65c5b6b67c5eae40ae2294ebe1358fbf83ab54dcbe4d191 +size 14707 diff --git a/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png index c7984bbd12..222fb55d0d 100644 --- a/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1506d62c5f805c572e4a4baab5e36d2c66e63ed8286a8fc8c3257bd9dcec1902 -size 59162 +oid sha256:4238c70653c363d8ff3a5abbf2e15f461c3b45bb65da157ef6d89b8b908bfd5d +size 56545 diff --git a/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png index cfa4f63644..49f6c2c36a 100644 --- a/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00d863c828c4dddf213f29f49f59a5f70eb67fba9d5f7754c3896e80976a0b47 -size 65618 +oid sha256:f7081a3331d08f7071408c8336534bed3b3d113f5bf988f0e1a7d68510d21d44 +size 62386 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png index 4ddb182695..ec78290ab9 100644 --- a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png +++ b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c97d45cf70d5afb112dc85e36b19f6c2689f77fc8d3ad94ef69f85f5f93359d3 -size 10102 +oid sha256:be920bde955a9630a2057de7ed69101b621313fe5417304341954b3a771c3428 +size 8793 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png index 0595bb6201..01cb4f1b18 100644 --- a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png +++ b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:909f67afcddbdaa122da172a361541014851cc5e3c4f3c2e8cc3436c44a786f6 -size 10531 +oid sha256:3fae19a5cf0002cf15e32bbad0a103cc2124070b1bcb45af203ae16ce1e8630d +size 9357 diff --git a/src/testing/e2e/utils.tsx b/src/testing/e2e/utils.tsx index 531c69b5a8..e182767f13 100644 --- a/src/testing/e2e/utils.tsx +++ b/src/testing/e2e/utils.tsx @@ -5,6 +5,8 @@ import ConfigProvider from '../../components/ConfigProvider/ConfigProvider'; import Panel from '../../components/Panel/Panel'; import { Platform } from '../../lib/platform'; import { Scheme } from '../../components/ConfigProvider/ConfigProviderContext'; +import AdaptivityProvider from '../../components/AdaptivityProvider/AdaptivityProvider'; +import { SizeType } from '../../components/AdaptivityProvider/AdaptivityContext'; type PropDesc = { [K in keyof Props]?: Array }; function cartesian(propDesc: PropDesc): Props[] { @@ -46,6 +48,9 @@ type ScreenshotOptions = { platforms?: Platform[]; schemes?: Scheme[]; }; +const CompactProvider: React.ComponentType = ({ children }) => ( + {children} +); export function describeScreenshotFuzz( Component: ComponentType, propSets: Array> = [], @@ -59,19 +64,22 @@ export function describeScreenshotFuzz( platforms.forEach((platform) => { describe(platform, () => { const width = platform === 'vkcom' ? 'auto' : 320; + const ForceAdaptivity = platform === 'vkcom' ? CompactProvider : Fragment; schemes.forEach((scheme) => { it(scheme, async () => { expect(await screenshot((
- - {multiCartesian(propSets).map((props, i) => ( - -
{prettyProps(props)}
- -
- ))} -
+ + + {multiCartesian(propSets).map((props, i) => ( + +
{prettyProps(props)}
+
+
+ ))} +
+
))).toMatchImageSnapshot(matchScreenshot); From a4655f292a790e506b590c8df18c105f78dfcb0e Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Tue, 1 Dec 2020 13:29:53 +0300 Subject: [PATCH 23/29] TEST: Avoid github caching diff images - append hash --- dangerfile.js | 31 +++++++++++++--- package.json | 1 + src/components/Button/Button.e2e.tsx | 1 + .../button-android-bright_light-1-snap.png | 4 +-- .../button-android-space_gray-1-snap.png | 4 +-- .../button-ios-bright_light-1-snap.png | 4 +-- .../button-ios-space_gray-1-snap.png | 4 +-- src/testing/e2e/utils.tsx | 36 ++++++++++++++----- yarn.lock | 21 ++++++++++- 9 files changed, 84 insertions(+), 22 deletions(-) diff --git a/dangerfile.js b/dangerfile.js index 99431d7b09..26e5c00cd4 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -1,6 +1,7 @@ import { fail, message, warn, danger, markdown } from 'danger'; const dangerJest = require('danger-plugin-jest').default; const { readFile } = require('fs').promises; +const md5 = require('md5'); const path = require('path'); const glob = require('glob'); const { promisify } = require('util') @@ -58,12 +59,19 @@ async function uploadFailedScreenshots() { return; } + try { + await removeDiffs(s3, `${pathPrefix}/`); + } catch (err) { + warn(`Could not purge old screenshots from S3: "${err.message}"`); + } + for (const failedScreen of await pglob(path.join(__dirname, '**', diffDir, '*.png'))) { - const screenName = path.parse(failedScreen).base; - const key = [pathPrefix, screenName].join('/'); + const screenName = path.parse(failedScreen).name; + const fileContents = await readFile(failedScreen); + const key = `${pathPrefix}/${screenName}-${md5(fileContents)}.png`; try { await s3.putObject({ - Body: await readFile(failedScreen), + Body: fileContents, Bucket: UPLOAD_BUCKET, Key: key, ContentType: 'image/png', @@ -76,11 +84,26 @@ async function uploadFailedScreenshots() { `.replace(/(^|\n) +/g, '')); } catch (err) { - warn(`Counls not upload screenshot diff ${screenName}: ${err.message}`); + warn(`Counld not upload screenshot diff ${screenName}: ${err.message}`); } } } +async function removeDiffs(s3, prefix) { + const list = (await s3.listObjects({ + Bucket: UPLOAD_BUCKET, + Prefix: prefix, + }).promise()).Contents; + if (list && list.length !== 0) { + await s3.deleteObjects({ + Bucket: UPLOAD_BUCKET, + Delete: { + Objects: list.map(obj => ({ Key: obj.Key })), + }, + }).promise(); + } +} + Promise.all([ dangerJest(), lint(), diff --git a/package.json b/package.json index 312b2b75ee..cdad8baaf6 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "jest-image-snapshot": "^4.2.0", "jest-playwright-preset": "^1.4.1", "jest-silent-reporter": "^0.3.0", + "md5": "^2.3.0", "mini-css-extract-plugin": "^1.3.1", "playwright": "^1.6.2", "postcss": "8.1.4", diff --git a/src/components/Button/Button.e2e.tsx b/src/components/Button/Button.e2e.tsx index 1f09cdc879..31cb309d97 100644 --- a/src/components/Button/Button.e2e.tsx +++ b/src/components/Button/Button.e2e.tsx @@ -11,5 +11,6 @@ describe('Button', () => { disabled: [undefined, true], }, { size: ['s', 'm', 'l'], + $adaptivity: 'y', }]); }); diff --git a/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png index 7d39ddcb38..75ad8d1e22 100644 --- a/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c93e8ac91e4626cd70a4f90c71a95402609c25a0b95ef45f72bd25ff330e57c -size 62502 +oid sha256:6de789edce86e276e3ab87a1734fa92f6bab564f19aeb9a3773f560392fa304a +size 75941 diff --git a/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png index d947dbee15..459caf5237 100644 --- a/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bb817827f173e29b9f9b3daadf60f000dcd237eaebf165d56187dd7ee4663a8 -size 70416 +oid sha256:7bce2c1c043d58c8ab7ea9bd741a403f25c6f8924577fcd3f65fd19fb879dbcc +size 84125 diff --git a/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png index 3fca6467b3..dbcc86fafc 100644 --- a/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54be1d2e45849b9d6908dbe84819903d0094cc3cbb630e7a7030cc251ef98fce -size 63421 +oid sha256:e67a01450a58bc33f2938dc12b7e16c688f5ad6907892b63cb94265778ae31e0 +size 77137 diff --git a/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png index 494931a688..78a5f7cf24 100644 --- a/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0419a5ce88cd704f2ac7174314c26d646346a6a6719b5cc1718f183098a55e95 -size 71695 +oid sha256:9bce185c18b4e328e45e77091e1fbe436a441a555f4dfbe93ec9ad550f19350b +size 85734 diff --git a/src/testing/e2e/utils.tsx b/src/testing/e2e/utils.tsx index e182767f13..28e2880620 100644 --- a/src/testing/e2e/utils.tsx +++ b/src/testing/e2e/utils.tsx @@ -5,11 +5,28 @@ import ConfigProvider from '../../components/ConfigProvider/ConfigProvider'; import Panel from '../../components/Panel/Panel'; import { Platform } from '../../lib/platform'; import { Scheme } from '../../components/ConfigProvider/ConfigProviderContext'; -import AdaptivityProvider from '../../components/AdaptivityProvider/AdaptivityProvider'; +import AdaptivityProvider, { AdaptivityProviderProps } from '../../components/AdaptivityProvider/AdaptivityProvider'; import { SizeType } from '../../components/AdaptivityProvider/AdaptivityContext'; -type PropDesc = { [K in keyof Props]?: Array }; -function cartesian(propDesc: PropDesc): Props[] { +type AdaptivityFlag = boolean | 'x' | 'y'; +type PropDesc = { [K in keyof Props]?: Array } & { $adaptivity?: AdaptivityFlag }; +type SizeProps = Pick; +type TestProps = Array; +type CartesianOptions = { adaptive: boolean }; + +function getAdaptivity(adaptivity?: AdaptivityFlag) { + const extra: PropDesc = {}; + if (adaptivity && adaptivity !== 'y') { + extra.sizeX = Object.values(SizeType); + } + if (adaptivity && adaptivity !== 'x') { + extra.sizeY = Object.values(SizeType); + } + return extra; +}; + +function cartesian({ $adaptivity, ...propDesc }: PropDesc, ops: CartesianOptions): TestProps { + propDesc = { ...propDesc, ...getAdaptivity(ops.adaptive ? $adaptivity : false) }; return Object.entries(propDesc).reduce((acc, [prop, values]: [string, any[]]) => { const res: any[] = []; acc.forEach((props) => { @@ -21,11 +38,11 @@ function cartesian(propDesc: PropDesc): Props[] { }, [{}]); } -function multiCartesian(propSets: Array>): Props[] { +function multiCartesian(propSets: Array>, ops: CartesianOptions): TestProps { if (propSets.length === 0) { return [{} as any]; } - return propSets.reduce((acc, ortho) => acc.concat(cartesian(ortho)), []); + return propSets.reduce((acc, ortho) => acc.concat(cartesian(ortho, ops)), []); } function prettyProps(props: any) { @@ -63,8 +80,9 @@ export function describeScreenshotFuzz( } = options; platforms.forEach((platform) => { describe(platform, () => { - const width = platform === 'vkcom' ? 'auto' : 320; - const ForceAdaptivity = platform === 'vkcom' ? CompactProvider : Fragment; + const isVkCom = platform === 'vkcom'; + const width = isVkCom ? 'auto' : 320; + const ForceAdaptivity = isVkCom ? CompactProvider : Fragment; schemes.forEach((scheme) => { it(scheme, async () => { expect(await screenshot(( @@ -72,10 +90,10 @@ export function describeScreenshotFuzz(
- {multiCartesian(propSets).map((props, i) => ( + {multiCartesian(propSets, { adaptive: !isVkCom }).map((props, i) => (
{prettyProps(props)}
-
+
))}
diff --git a/yarn.lock b/yarn.lock index 10c54f66ee..bd0d31286b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3411,6 +3411,11 @@ chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + chokidar@^2.0.4, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -3940,6 +3945,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1: shebang-command "^2.0.0" which "^2.0.1" +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -6285,7 +6295,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.5: +is-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -7797,6 +7807,15 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +md5@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + mdast-util-compact@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" From b07df663a85b72b6f8d260003d8c0e3a5f7f0727 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Wed, 2 Dec 2020 14:11:46 +0300 Subject: [PATCH 24/29] TEST: Enable caches for faster pre-commit runs --- .gitignore | 1 + package.json | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 8555b774f5..9bce435ea5 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ test-results.json lint-results.json .nyc_output __diff_output__ +.cache diff --git a/package.json b/package.json index cdad8baaf6..ab183d4fb7 100644 --- a/package.json +++ b/package.json @@ -121,16 +121,20 @@ "test:unit:ci": "yarn test:unit --ci --silent --outputFile test-results.json --json --coverage --coverageReporters='json-summary'", "test:e2e": "jest --config e2e/jest.e2e.config.js", "test:code": "jest", - "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", - "lint:ci": "yarn lint -o lint-results.json -f json", - "test:static": "concurrently 'tsc --noEmit' 'yarn lint' 'stylelint \"./src/**/*.css\"'", - "test:static:ci": "concurrently 'tsc --noEmit' 'yarn lint:ci' 'stylelint \"./src/**/*.css\"'", + + "lint:es": "eslint --ext .jsx,.js,.ts,.tsx src/ --cache --cache-location .cache/.eslintcache", + "lint:es:ci": "yarn lint:es -o lint-results.json -f json", + "lint:style": "stylelint \"./src/**/*.css\" --cache --cache-location .cache/.stylelintcache", + "typecheck": "tsc --incremental --emitDeclarationOnly --declaration --tsBuildInfoFile .cache/.tsbuildinfo --outDir .cache/ts", + "test:static": "concurrently 'yarn typecheck' 'yarn lint:es' 'yarn lint:style'", + "test:static:ci": "concurrently 'yarn typecheck' 'yarn lint:es:ci' 'yarn lint:style'", + "test": "concurrently 'yarn test:unit' 'yarn test:static'", "test:quick": "concurrently 'yarn test:unit:quick' 'yarn test:static'", "test:ci": "concurrently 'yarn test:unit:ci' 'yarn test:static:ci'", "copy-default-scheme": "shx cp ./src/styles/bright_light.css ./dist/default_scheme.css" }, "pre-commit": [ - "test:quick" + "test:static" ] } From 613618db9c8016a84e8231fc1d18cfea6f16531a Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Wed, 9 Dec 2020 13:17:57 +0300 Subject: [PATCH 25/29] TEST: Fix eslint & ban jest globals in non-test files --- .eslintrc.json | 22 +++++++++++++++------- e2e/browser/mount.ts | 8 ++++---- e2e/jest.e2e.config.js | 8 ++++---- package.json | 4 +--- tsconfig.json | 2 +- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 12015d814c..e3a35a2bc1 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,8 +1,5 @@ { - "extends": [ - "@vkontakte/eslint-config/typescript/react", - "plugin:jest-playwright/recommended" - ], + "extends": ["@vkontakte/eslint-config/typescript/react"], "parserOptions": { "project": "./tsconfig.json", "ecmaVersion": 2018, // Allows for the parsing of modern ECMAScript features @@ -19,8 +16,7 @@ "env": { "es6": true, // Enable global es6 variables, like Set, Map, etc "browser": true, - "node": true, - "jest": true + "node": true }, "rules": { "@typescript-eslint/explicit-member-accessibility": "off", @@ -29,5 +25,17 @@ "@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }] - } + }, + "overrides": [ + { + "files": ["src/**/*.{test,spec,e2e}.{ts,tsx}", "e2e/**/*", "src/testing/**/*"], + "env": { + "jest": true + } + }, + { + "files": ["src/**/*.e2e.{ts,tsx}", "e2e/**/*", "src/testing/**/*"], + "extends": ["plugin:jest-playwright/recommended"] + } + ] } diff --git a/e2e/browser/mount.ts b/e2e/browser/mount.ts index 9dc6a88125..3933767df2 100644 --- a/e2e/browser/mount.ts +++ b/e2e/browser/mount.ts @@ -1,9 +1,9 @@ -import { ReactElement } from 'react' -import { currentPath } from './jest-mock' -import { testHandle } from './test-handle' +import { ReactElement } from 'react'; +import { currentPath } from './jest-mock'; +import { testHandle } from './test-handle'; export function mount(jsx: ReactElement) { testHandle.register(currentPath(), jsx); } -export const screenshot = mount; \ No newline at end of file +export const screenshot = mount; diff --git a/e2e/jest.e2e.config.js b/e2e/jest.e2e.config.js index 0e679ce915..7208944480 100644 --- a/e2e/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -1,4 +1,4 @@ -const base = require('../jest.unit.config') +const base = require('../jest.unit.config'); const path = require('path'); const chalk = require('chalk'); const { canRunTests, useDocker } = require('./detectEnv'); @@ -10,7 +10,7 @@ const jestPlaywrightOptions = Object.assign({ width: 800, height: 600, }, - } + }, }, useDocker ? { connectOptions: { wsEndpoint: 'ws://localhost:9001/playwright', @@ -23,14 +23,14 @@ const config = { preset: 'jest-playwright-preset', collectCoverage: false, setupFilesAfterEnv: [ - ...(base.setupFilesAfterEnv || []), + ...base.setupFilesAfterEnv || [], path.join(__dirname, 'jest/matchers.ts'), ], globalSetup: path.join(__dirname, 'jest/globalSetup.ts'), globalTeardown: path.join(__dirname, 'jest/globalTeardown.ts'), testEnvironment: path.join(__dirname, 'jest/jsdomPlaywrightEnv.js'), testEnvironmentOptions: { - ...(base.testEnvironmentOptions || {}), + ...base.testEnvironmentOptions || {}, 'jest-playwright': jestPlaywrightOptions, }, moduleNameMapper: { diff --git a/package.json b/package.json index ab183d4fb7..5783886ef8 100644 --- a/package.json +++ b/package.json @@ -121,14 +121,12 @@ "test:unit:ci": "yarn test:unit --ci --silent --outputFile test-results.json --json --coverage --coverageReporters='json-summary'", "test:e2e": "jest --config e2e/jest.e2e.config.js", "test:code": "jest", - - "lint:es": "eslint --ext .jsx,.js,.ts,.tsx src/ --cache --cache-location .cache/.eslintcache", + "lint:es": "eslint --ext .jsx,.js,.ts,.tsx src/ e2e/ --cache --cache-location .cache/.eslintcache", "lint:es:ci": "yarn lint:es -o lint-results.json -f json", "lint:style": "stylelint \"./src/**/*.css\" --cache --cache-location .cache/.stylelintcache", "typecheck": "tsc --incremental --emitDeclarationOnly --declaration --tsBuildInfoFile .cache/.tsbuildinfo --outDir .cache/ts", "test:static": "concurrently 'yarn typecheck' 'yarn lint:es' 'yarn lint:style'", "test:static:ci": "concurrently 'yarn typecheck' 'yarn lint:es:ci' 'yarn lint:style'", - "test": "concurrently 'yarn test:unit' 'yarn test:static'", "test:quick": "concurrently 'yarn test:unit:quick' 'yarn test:static'", "test:ci": "concurrently 'yarn test:unit:ci' 'yarn test:static:ci'", diff --git a/tsconfig.json b/tsconfig.json index 2943e37f5e..c9dc63c872 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,7 @@ "@react-playwright": ["../e2e"] } }, - "include": ["src/**/*.ts", "src/**/*.tsx", "e2e/**/*.ts", "e2e/**/*.tsx"], + "include": ["src/**/*.ts", "src/**/*.tsx", "e2e/**/*.ts", "e2e/**/*.tsx", "e2e/**/*.js"], "files": [ "node_modules/jest-playwright-preset/types/global.d.ts", "node_modules/expect-playwright/global.d.ts" From 53b4c532a7433252e3d88471e2565708237bf0bf Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Wed, 9 Dec 2020 16:58:03 +0300 Subject: [PATCH 26/29] TEST: Fix screenshot fuzz params --- e2e/index.ts | 2 +- ...ctionsheet-android-bright_light-1-snap.png | 4 +- .../actionsheet-android-space_gray-1-snap.png | 4 +- .../actionsheet-ios-bright_light-1-snap.png | 4 +- .../actionsheet-ios-space_gray-1-snap.png | 4 +- .../actionsheet-vkcom-bright_light-1-snap.png | 3 - .../actionsheet-vkcom-space_gray-1-snap.png | 3 - .../actionsheet-vkcom-vkcom-1-snap.png | 3 + .../button-android-bright_light-1-snap.png | 4 +- .../button-android-space_gray-1-snap.png | 4 +- .../button-ios-bright_light-1-snap.png | 4 +- .../button-ios-space_gray-1-snap.png | 4 +- .../button-vkcom-bright_light-1-snap.png | 3 - .../button-vkcom-space_gray-1-snap.png | 3 - .../button-vkcom-vkcom-1-snap.png | 3 + src/components/Checkbox/Checkbox.test.tsx | 4 +- .../checkbox-android-bright_light-1-snap.png | 4 +- .../checkbox-android-space_gray-1-snap.png | 4 +- .../checkbox-ios-bright_light-1-snap.png | 4 +- .../checkbox-ios-space_gray-1-snap.png | 4 +- .../checkbox-vkcom-bright_light-1-snap.png | 3 - .../checkbox-vkcom-space_gray-1-snap.png | 3 - .../checkbox-vkcom-vkcom-1-snap.png | 3 + src/testing/e2e/utils.tsx | 68 +++++++++++++------ 24 files changed, 84 insertions(+), 65 deletions(-) delete mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png delete mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png create mode 100644 src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-vkcom-1-snap.png delete mode 100644 src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png delete mode 100644 src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png create mode 100644 src/components/Button/__image_snapshots__/button-vkcom-vkcom-1-snap.png delete mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png delete mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png create mode 100644 src/components/Checkbox/__image_snapshots__/checkbox-vkcom-vkcom-1-snap.png diff --git a/e2e/index.ts b/e2e/index.ts index 37c75ad056..c9213b73d1 100644 --- a/e2e/index.ts +++ b/e2e/index.ts @@ -17,7 +17,7 @@ export async function screenshot(jsx: ReactElement) { await mount(jsx); // font load affects layout /* istanbul ignore next */ - await page.evaluate(() => document.fonts.ready); + await page.evaluate(() => (document as any).fonts.ready); /* istanbul ignore next */ const { width, height } = await page.evaluate(() => { const size = { width: 0, height: 0 }; diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png index 12313db8df..d3a2f859e6 100644 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d25daa70da20d2384b76e82dd442c84a3d8c8e140040dd39982cde26c0a9ec8 -size 15964 +oid sha256:ec26cb63fa718f7d4ce7724321c1d5ea008cfb97e763bb15fabcf868a019ed8d +size 16262 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png index 4f52879a00..55878a0642 100644 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-android-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c81f04a4778bcf25d4f5b71b900d2fae847595177de2334284cf8001e30e724b -size 15639 +oid sha256:4ab542426842ce3a252565977088360d51c09db84339374e29b971d373783c67 +size 15762 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png index a86bbcaf8b..d708eb8a5e 100644 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5c1453fc4d88f11fe9a738f747ccdc6ab066e62a62568c69e963a06d91e7940 -size 20873 +oid sha256:f87dc63dd67be2dbe3e5fe606ec661bcad15415c6c3bbcfc47fe60b1955ef6af +size 18397 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png index 19c6e11b25..f2803056b3 100644 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-ios-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e5862c0af423220b44a802c917efb5a8d040dbecd4a3f50b48353372c39b686 -size 20852 +oid sha256:95888d29c9f8b112729684483adbd6d9368b70b086ea772d4601ead5de60af46 +size 18259 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png deleted file mode 100644 index 230858f1e5..0000000000 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-bright_light-1-snap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dc967a584c7e248249c35293715e999b1ba31d742670a2352b18f7718d35fb2e -size 15093 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png deleted file mode 100644 index 8156a2db7f..0000000000 --- a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-space_gray-1-snap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ae34315456328c2c65c5b6b67c5eae40ae2294ebe1358fbf83ab54dcbe4d191 -size 14707 diff --git a/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-vkcom-1-snap.png b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-vkcom-1-snap.png new file mode 100644 index 0000000000..67864708f0 --- /dev/null +++ b/src/components/ActionSheet/__image_snapshots__/actionsheet-vkcom-vkcom-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6748458aa6ddb326649ceeb5353c4cf509c50e4d7b317cc299cefddaa0a8120e +size 15263 diff --git a/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png index 75ad8d1e22..8aa4aca090 100644 --- a/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-android-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6de789edce86e276e3ab87a1734fa92f6bab564f19aeb9a3773f560392fa304a -size 75941 +oid sha256:aec9bfcfe1a8025ce4f323087fea66bf0bfd51810cf7ea6a4bb6faeba651ba5a +size 75379 diff --git a/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png index 459caf5237..33abb80970 100644 --- a/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-android-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bce2c1c043d58c8ab7ea9bd741a403f25c6f8924577fcd3f65fd19fb879dbcc -size 84125 +oid sha256:b4ca26dae783183f2130b26d6aea6b1682b4492e4fc63e7c29004c70ad96e543 +size 82429 diff --git a/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png index dbcc86fafc..9be2a074a0 100644 --- a/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-ios-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e67a01450a58bc33f2938dc12b7e16c688f5ad6907892b63cb94265778ae31e0 -size 77137 +oid sha256:089df24513bc04c9c87b261fdf4e6cc1dec549192c4d60fe0f5833057a5d83a7 +size 76861 diff --git a/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png index 78a5f7cf24..741e2139b7 100644 --- a/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png +++ b/src/components/Button/__image_snapshots__/button-ios-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bce185c18b4e328e45e77091e1fbe436a441a555f4dfbe93ec9ad550f19350b -size 85734 +oid sha256:9e52fc16705f1eadd9878441db8230690cac2deb5952554080376016a270a35a +size 84407 diff --git a/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png b/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png deleted file mode 100644 index 222fb55d0d..0000000000 --- a/src/components/Button/__image_snapshots__/button-vkcom-bright_light-1-snap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4238c70653c363d8ff3a5abbf2e15f461c3b45bb65da157ef6d89b8b908bfd5d -size 56545 diff --git a/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png b/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png deleted file mode 100644 index 49f6c2c36a..0000000000 --- a/src/components/Button/__image_snapshots__/button-vkcom-space_gray-1-snap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7081a3331d08f7071408c8336534bed3b3d113f5bf988f0e1a7d68510d21d44 -size 62386 diff --git a/src/components/Button/__image_snapshots__/button-vkcom-vkcom-1-snap.png b/src/components/Button/__image_snapshots__/button-vkcom-vkcom-1-snap.png new file mode 100644 index 0000000000..fa54c18d64 --- /dev/null +++ b/src/components/Button/__image_snapshots__/button-vkcom-vkcom-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b40735a348fa4f3dbb2a27b48f23c5158f29527ab107548877e0b037397eed5e +size 56809 diff --git a/src/components/Checkbox/Checkbox.test.tsx b/src/components/Checkbox/Checkbox.test.tsx index 265e15dca4..3f9a342620 100644 --- a/src/components/Checkbox/Checkbox.test.tsx +++ b/src/components/Checkbox/Checkbox.test.tsx @@ -6,11 +6,11 @@ import { Checkbox } from './Checkbox'; describe('Checkbox', () => { it('handles change', () => { - const UncontrolledCheckbox = () => { + const CheckboxController = () => { const [checked, setChecked] = useState(false); return setChecked(e.target.checked)}>check; }; - render(); + render(); expect(screen.getByRole('checkbox')).not.toBeChecked(); userEvent.click(screen.getByText('check')); expect(screen.getByRole('checkbox')).toBeChecked(); diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png index 5cee532acb..5180214644 100644 --- a/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png +++ b/src/components/Checkbox/__image_snapshots__/checkbox-android-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:434bc0ed37278d459cf20452f49671b48ce110e7b87ed658d3daa455914528a8 -size 11022 +oid sha256:6c2ba250a108fdbb586d085407c48cc06774548cb242586a482f1f3f7ecf3e9b +size 11905 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png index 1bde6de901..da4dcb3dbb 100644 --- a/src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png +++ b/src/components/Checkbox/__image_snapshots__/checkbox-android-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21473d58d7ef7d84c7e5bb198fb7b08d14c498ea95c3c9460ca1acf114be5c13 -size 11261 +oid sha256:ee912ad36f48fa5c4e3b6a8753f1cd6825a32a8258b8b95b92475fe96c5b070b +size 11965 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png index 62d681530d..a14402013f 100644 --- a/src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png +++ b/src/components/Checkbox/__image_snapshots__/checkbox-ios-bright_light-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76a6fba012e7fb686ab15a9f2addf03d4664917b2252475879c7173b5db60206 -size 11024 +oid sha256:dafabc332c7e847d9e89b40501a8c0ce89bbc380d905312999286cc516c387f2 +size 11913 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png index 84d2b6a551..1aae3be216 100644 --- a/src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png +++ b/src/components/Checkbox/__image_snapshots__/checkbox-ios-space_gray-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8aa4ebbf5da2145d0716fb6d4db602f94726c7905ea309d3da63ddebdeaccc2a -size 11270 +oid sha256:676f452110b7ce64c55f98002ac92ba6d0ce7bbf84b3244b9de3a043532d06ba +size 11975 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png deleted file mode 100644 index ec78290ab9..0000000000 --- a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-bright_light-1-snap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:be920bde955a9630a2057de7ed69101b621313fe5417304341954b3a771c3428 -size 8793 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png deleted file mode 100644 index 01cb4f1b18..0000000000 --- a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-space_gray-1-snap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fae19a5cf0002cf15e32bbad0a103cc2124070b1bcb45af203ae16ce1e8630d -size 9357 diff --git a/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-vkcom-1-snap.png b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-vkcom-1-snap.png new file mode 100644 index 0000000000..ca46f7f426 --- /dev/null +++ b/src/components/Checkbox/__image_snapshots__/checkbox-vkcom-vkcom-1-snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:922fac3422a04bced80f361bfa43a71f389682b91a8d0b2442624466657018cc +size 8816 diff --git a/src/testing/e2e/utils.tsx b/src/testing/e2e/utils.tsx index 28e2880620..af7d933d16 100644 --- a/src/testing/e2e/utils.tsx +++ b/src/testing/e2e/utils.tsx @@ -1,12 +1,22 @@ import React, { ComponentType, Fragment, isValidElement } from 'react'; import { MatchImageSnapshotOptions } from 'jest-image-snapshot'; import { screenshot } from '@react-playwright'; +// Импорты из отдельных модулей помогают jest отслеживать зависимости import ConfigProvider from '../../components/ConfigProvider/ConfigProvider'; import Panel from '../../components/Panel/Panel'; import { Platform } from '../../lib/platform'; import { Scheme } from '../../components/ConfigProvider/ConfigProviderContext'; -import AdaptivityProvider, { AdaptivityProviderProps } from '../../components/AdaptivityProvider/AdaptivityProvider'; -import { SizeType } from '../../components/AdaptivityProvider/AdaptivityContext'; +import AdaptivityProvider, { + AdaptivityProviderProps, + DESKTOP_SIZE, + TABLET_SIZE, + SMALL_TABLET_SIZE, + MOBILE_SIZE, +} from '../../components/AdaptivityProvider/AdaptivityProvider'; +import { SizeType, ViewWidth } from '../../components/AdaptivityProvider/AdaptivityContext'; +import { AdaptivityProps } from '../../hoc/withAdaptivity'; +import View from '../../components/View/View'; +import Group from '../../components/Group/Group'; type AdaptivityFlag = boolean | 'x' | 'y'; type PropDesc = { [K in keyof Props]?: Array } & { $adaptivity?: AdaptivityFlag }; @@ -63,11 +73,20 @@ function prettyProps(props: any) { type ScreenshotOptions = { matchScreenshot?: MatchImageSnapshotOptions; platforms?: Platform[]; - schemes?: Scheme[]; + mobileSchemes?: Scheme[]; + adaptivity?: AdaptivityProps; }; -const CompactProvider: React.ComponentType = ({ children }) => ( - {children} -); + +function getAdaptivePxWidth(viewWidth: ViewWidth) { + switch (viewWidth) { + case ViewWidth.SMALL_MOBILE: return MOBILE_SIZE - 10; + case ViewWidth.MOBILE: return MOBILE_SIZE; + case ViewWidth.SMALL_TABLET: return SMALL_TABLET_SIZE; + case ViewWidth.TABLET: return TABLET_SIZE; + case ViewWidth.DESKTOP: return DESKTOP_SIZE; + } +} + export function describeScreenshotFuzz( Component: ComponentType, propSets: Array> = [], @@ -76,28 +95,37 @@ export function describeScreenshotFuzz( const { matchScreenshot, platforms = Object.values(Platform), - schemes = [Scheme.BRIGHT_LIGHT, Scheme.SPACE_GRAY], + mobileSchemes = [Scheme.BRIGHT_LIGHT, Scheme.SPACE_GRAY], + adaptivity = {}, } = options; platforms.forEach((platform) => { describe(platform, () => { const isVkCom = platform === 'vkcom'; - const width = isVkCom ? 'auto' : 320; - const ForceAdaptivity = isVkCom ? CompactProvider : Fragment; - schemes.forEach((scheme) => { + const width: number | 'auto' = adaptivity.viewWidth + ? getAdaptivePxWidth(adaptivity.viewWidth) + : isVkCom ? 'auto' : 320; + const adaptivityProps = Object.assign( + isVkCom ? { sizeX: SizeType.COMPACT, sizeY: SizeType.COMPACT } : {}, + adaptivity); + (isVkCom ? [Scheme.VKCOM] : mobileSchemes).forEach((scheme) => { it(scheme, async () => { expect(await screenshot((
- - - {multiCartesian(propSets, { adaptive: !isVkCom }).map((props, i) => ( - -
{prettyProps(props)}
-
-
- ))} -
-
+ + + + + {multiCartesian(propSets, { adaptive: !isVkCom }).map((props, i) => ( + +
{prettyProps(props)}
+
+
+ ))} +
+
+
+
))).toMatchImageSnapshot(matchScreenshot); From d2f965d36e01435552c0df5120e4d0bef97faf75 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Fri, 11 Dec 2020 17:29:02 +0300 Subject: [PATCH 27/29] TEST: Add manual workflow for updating screenshots --- .github/workflows/update_screens.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/update_screens.yml diff --git a/.github/workflows/update_screens.yml b/.github/workflows/update_screens.yml new file mode 100644 index 0000000000..b657bee653 --- /dev/null +++ b/.github/workflows/update_screens.yml @@ -0,0 +1,26 @@ +name: 'Update screenshots' + +on: + workflow_dispatch + +jobs: + update_screens: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + lfs: true + - name: Checkout LFS objects + run: git lfs checkout + - uses: actions/setup-node@v1 + with: + node-version: 12 + # cached yarn install + - uses: bahmutov/npm-install@v1 + - name: Update screenshots + run: yarn test:e2e -u + - name: Push updated screenshots + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "CHORE: Update screenshots" + file_pattern: './**/*.png' From cbc4be412aded8111a4c15e8b1e94dae2ac8ff44 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Fri, 11 Dec 2020 18:32:28 +0300 Subject: [PATCH 28/29] TEST: Warn abount failed & modified screenshots in PR --- dangerfile.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/dangerfile.js b/dangerfile.js index 26e5c00cd4..36d42b2e54 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -39,12 +39,18 @@ function coverage() { }) } +const updateScreensActionLink = `https://github.com/VKCOM/VKUI/actions?query=workflow%3A"Update+screenshots"`; const UPLOAD_BUCKET = 'vkui-screenshots'; const awsHost = `${UPLOAD_BUCKET}.${AWS_ENDPOINT}`; async function uploadFailedScreenshots() { const diffDir = '__diff_output__' const { github } = danger; const pathPrefix = github ? github.pr.number : 'local'; + const failedScreens = await pglob(path.join(__dirname, '**', diffDir, '*.png')); + + if (failedScreens.length) { + warn(`${failedScreens.length} changed screenshots found — review & update them via ["Update Screenshots" action](${updateScreensActionLink}) before merging.`); + } let s3; try { @@ -65,7 +71,7 @@ async function uploadFailedScreenshots() { warn(`Could not purge old screenshots from S3: "${err.message}"`); } - for (const failedScreen of await pglob(path.join(__dirname, '**', diffDir, '*.png'))) { + for (const failedScreen of failedScreens) { const screenName = path.parse(failedScreen).name; const fileContents = await readFile(failedScreen); const key = `${pathPrefix}/${screenName}-${md5(fileContents)}.png`; @@ -89,6 +95,12 @@ async function uploadFailedScreenshots() { } } +async function checkUpdatedScreenshots() { + if (danger.git.modified_files.some(file => /__image_snapshots__/.test(file))) { + warn('Some screenshots were modified in this PR'); + } +} + async function removeDiffs(s3, prefix) { const list = (await s3.listObjects({ Bucket: UPLOAD_BUCKET, @@ -109,4 +121,5 @@ Promise.all([ lint(), coverage(), uploadFailedScreenshots(), + checkUpdatedScreenshots(), ]); From 64a2e7fbc597a59907c2189bbae18568629f0b00 Mon Sep 17 00:00:00 2001 From: Vladimir Klepov Date: Mon, 14 Dec 2020 17:47:09 +0300 Subject: [PATCH 29/29] TEST: Silently skip screenshot reporting on missing S3 credentials --- dangerfile.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dangerfile.js b/dangerfile.js index 36d42b2e54..fee2aee095 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -52,6 +52,12 @@ async function uploadFailedScreenshots() { warn(`${failedScreens.length} changed screenshots found — review & update them via ["Update Screenshots" action](${updateScreensActionLink}) before merging.`); } + if (!AWS_ENDPOINT || !AWS_ACCESS_KEY_ID || !AWS_SECRET_KEY) { + // Silently skip screenshot reporting if credentials missing + console.log('AWS credentials missing - skip screenshot reporting'); + return; + } + let s3; try { s3 = new AWS.S3({