diff --git a/.babelrc.js b/.babelrc.js index c2d2fe26..57d75560 100644 --- a/.babelrc.js +++ b/.babelrc.js @@ -1,37 +1,22 @@ const { NODE_ENV } = process.env; -const isDev = String(NODE_ENV) === "development"; -const isProd = String(NODE_ENV) === "production"; const isTest = String(NODE_ENV) === "test"; module.exports = { - presets: ["@babel/preset-react"].concat( - !isDev - ? [ - [ - "@babel/preset-env", - { - modules: isTest ? "commonjs" : false, - targets: { - browsers: [ - "last 2 versions", - "safari >= 7", - "ie > 10", - "not op_mini all", - ], - }, - }, - ], - ] - : [] - ), + presets: [ + "@babel/preset-react", + [ + "@babel/preset-env", + { + modules: isTest ? "commonjs" : false, + targets: { + node: "current", + }, + }, + ], + ], plugins: [ - "@babel/plugin-proposal-object-rest-spread", ["@babel/plugin-proposal-class-properties", { loose: false }], - "babel-plugin-syntax-dynamic-import", - "@babel/plugin-transform-runtime", - isDev ? "babel-plugin-styled-components" : false, - isProd ? "transform-react-remove-prop-types" : false, isTest ? "babel-plugin-dynamic-import-node" : false, ].filter(Boolean), }; diff --git a/.eslintrc.js b/.eslintrc.js index bb6720d1..7a25f7f2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,7 +20,7 @@ module.exports = { modules: true, }, }, - plugins: ["react", "prettier", "react-hooks"], + plugins: ["react", "react-hooks"], settings: { "import/parser": "babel-eslint", "import/resolve": { @@ -28,12 +28,6 @@ module.exports = { }, }, rules: { - "prettier/prettier": [ - "error", - { - trailingComma: "es5", - }, - ], "react/no-unused-prop-types": 2, "no-console": "off", "react/display-name": 0, diff --git a/.huskyrc.json b/.huskyrc.json new file mode 100644 index 00000000..d210fb0c --- /dev/null +++ b/.huskyrc.json @@ -0,0 +1,5 @@ +{ + "hooks": { + "pre-commit": "lint-staged && NODE_ENV=test jest --bail " + } +} diff --git a/.lintstagedrc b/.lintstagedrc index 11f90b2a..47190ca3 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -1,4 +1,5 @@ { - "*.{js,jsx}": ["eslint", "prettier --write", "git add"], - "*.{json}": ["prettier --write", "git add"] + "*.{js,jsx}": ["eslint", "prettier --write", "stylelint --fix"], + "*.{css}": ["stylelint --fix"], + "*.{json}": ["prettier --write"] } diff --git a/.storybook/Provider.jsx b/.storybook/Provider.jsx index 71930ea5..789e92c0 100644 --- a/.storybook/Provider.jsx +++ b/.storybook/Provider.jsx @@ -13,7 +13,7 @@ const ProviderWrapper = ({ children }) => ( ); -export const withProvider = story => ( +export const withProvider = (story) => ( {story()} ); diff --git a/.storybook/config.js b/.storybook/config.js index 155bee41..509103e1 100644 --- a/.storybook/config.js +++ b/.storybook/config.js @@ -6,7 +6,7 @@ import StoryRouter from "storybook-react-router"; function loadStories() { const req = require.context("../src", true, /\.stories\.js$/); - req.keys().forEach(filename => req(filename)); + req.keys().forEach((filename) => req(filename)); } addDecorator(withKnobs); diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 00000000..a5dd554e --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,10 @@ +{ + "extends": [ + "stylelint-config-recommended" + ], + "rules": { + "no-descending-specificity": null, + "property-no-unknown": null, + "no-empty-source": null + } +} diff --git a/README.md b/README.md index 20e41d86..33e85a5c 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ An Identixone UI design language and React implementation. +> **Note**: Identixone UI kit is build on ES6 modules, so your app have to support it as well + ## πŸ“¦ Install ```bash diff --git a/convention.md b/convention.md index 551c8f78..c4107086 100644 --- a/convention.md +++ b/convention.md @@ -78,7 +78,7 @@ import { SomeIcon } from "icons"; import { brandColor } from "colors"; import { brandImage } from "images"; import { isEqual } from "lodash-es"; -import { resources } from "./AwesomeComponent.resources.js" +import { resources } from "./AwesomeComponent.resources.js"; /** дСструктуризация пропсов * Π² API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ `data-testid` ΠΈ `className` пропсы @@ -94,7 +94,7 @@ function AwesomeComponent({ // ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ns - `AwesomeComponent` i18n.addResourceBundle("en", "AwesomeComponent", resources.en); i18n.addResourceBundle("ru", "AwesomeComponent", resources.ru); - + // использованиС hooks const [some, setSome] = useState(false); const prevSome = usePrevious(some); diff --git a/package-lock.json b/package-lock.json index 599e9be3..e766691d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,75 +14,34 @@ } }, "@babel/compat-data": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz", - "integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" - }, - "dependencies": { - "browserslist": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.0.tgz", - "integrity": "sha512-seffIXhwgB84+OCeT/aMjpZnsAsYDiMSC+CEs3UkF8iU64BZGYcu+TZYs/IBpo4nRi0vJywUJWYdbTsOhFTweg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.361", - "node-releases": "^1.1.50" - } - }, - "caniuse-lite": { - "version": "1.0.30001030", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz", - "integrity": "sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.362", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.362.tgz", - "integrity": "sha512-xdU5VCoZyMPMOWtCaMgbr48OwWZHrMLbGnAOlEqibXiIGsb4kiCGWEHK5NOghcVLdBVIbr/BW+yuKxVuGTtzEg==", - "dev": true - }, - "node-releases": { - "version": "1.1.50", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz", - "integrity": "sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - } } }, "@babel/core": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", - "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.4", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -90,40 +49,62 @@ }, "dependencies": { "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", "dev": true }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, + "@babel/types": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -172,79 +153,63 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "dev": true, "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, - "@babel/helper-call-delegate": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", - "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-compilation-targets": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz", - "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz", + "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.4", - "browserslist": "^4.8.5", + "@babel/compat-data": "^7.8.6", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "levenary": "^1.1.1", "semver": "^5.5.0" - }, - "dependencies": { - "browserslist": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.0.tgz", - "integrity": "sha512-seffIXhwgB84+OCeT/aMjpZnsAsYDiMSC+CEs3UkF8iU64BZGYcu+TZYs/IBpo4nRi0vJywUJWYdbTsOhFTweg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.361", - "node-releases": "^1.1.50" - } - }, - "caniuse-lite": { - "version": "1.0.30001030", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz", - "integrity": "sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.362", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.362.tgz", - "integrity": "sha512-xdU5VCoZyMPMOWtCaMgbr48OwWZHrMLbGnAOlEqibXiIGsb4kiCGWEHK5NOghcVLdBVIbr/BW+yuKxVuGTtzEg==", - "dev": true - }, - "node-releases": { - "version": "1.1.50", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz", - "integrity": "sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - } } }, "@babel/helper-create-class-features-plugin": { @@ -262,13 +227,14 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", - "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", "dev": true, "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-regex": "^7.8.3", - "regexpu-core": "^4.6.0" + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { @@ -340,17 +306,95 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", - "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/generator": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", + "dev": true, + "requires": { + "@babel/types": "^7.9.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/parser": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/helper-optimise-call-expression": { @@ -421,6 +465,12 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==", + "dev": true + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -434,51 +484,62 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" }, "dependencies": { "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", "dev": true }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, + "@babel/types": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -525,17 +586,6 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, - "@babel/plugin-proposal-decorators": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", - "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-decorators": "^7.8.3" - } - }, "@babel/plugin-proposal-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", @@ -566,10 +616,20 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -587,9 +647,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -597,12 +657,12 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", - "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-create-regexp-features-plugin": "^7.8.8", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -624,10 +684,10 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-decorators": { + "@babel/plugin-syntax-class-properties": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz", - "integrity": "sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz", + "integrity": "sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -642,15 +702,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, "@babel/plugin-syntax-flow": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz", @@ -678,6 +729,15 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz", + "integrity": "sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -687,6 +747,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -763,19 +832,102 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", - "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", + "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", - "@babel/helper-function-name": "^7.8.3", + "@babel/helper-function-name": "^7.9.5", "@babel/helper-optimise-call-expression": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-split-export-declaration": "^7.8.3", "globals": "^11.1.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", + "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.9.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/parser": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "dev": true + }, + "@babel/traverse": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", + "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.5", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/plugin-transform-computed-properties": { @@ -788,9 +940,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", - "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", + "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -826,9 +978,9 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.8.3.tgz", - "integrity": "sha512-g/6WTWG/xbdd2exBBzMfygjX/zw4eyNC4X8pRaq7aRHRoDUCzAIu3kGYIXviOv8BjCuWm8vDBwjHcjiRNgXrPA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz", + "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -836,9 +988,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz", - "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -873,47 +1025,47 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -946,12 +1098,11 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz", - "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", + "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.8.3", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -966,12 +1117,11 @@ } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.8.3.tgz", - "integrity": "sha512-glrzN2U+egwRfkNFtL34xIBYTxbbUF2qJTP8HD3qETBBqzAWSeNB821X0GjU06+dNpq/UyCIjI72FmGE5NNkQQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.9.0.tgz", + "integrity": "sha512-wXMXsToAUOxJuBBEHajqKLFWcCkOSLshTI2ChCFFj1zDd7od4IOxiwLCOObNUvOpkxLpjIuaIdBMmNt6ocCPAw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -985,20 +1135,32 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", "dev": true, "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -1006,9 +1168,9 @@ } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -1016,12 +1178,12 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", - "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", "dev": true, "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { @@ -1033,18 +1195,6 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, - "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, "@babel/plugin-transform-shorthand-properties": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", @@ -1102,38 +1252,30 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, - "@babel/polyfill": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.8.3.tgz", - "integrity": "sha512-0QEgn2zkCzqGIkSWWAEmvxD7e00Nm9asTtQvi7HdlYvMhjy/J38V/1Y9ode0zEJeIuxAI0uftiAzqc7nVeWUGg==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - } - }, "@babel/preset-env": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", - "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.5.tgz", + "integrity": "sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.4", - "@babel/helper-compilation-targets": "^7.8.4", + "@babel/compat-data": "^7.9.0", + "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-proposal-async-generator-functions": "^7.8.3", "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.5", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -1142,26 +1284,26 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.5", "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.9.5", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.4", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.4", + "@babel/plugin-transform-parameters": "^7.9.5", "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", "@babel/plugin-transform-reserved-words": "^7.8.3", "@babel/plugin-transform-shorthand-properties": "^7.8.3", "@babel/plugin-transform-spread": "^7.8.3", @@ -1169,85 +1311,98 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.3", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.5", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" }, "dependencies": { - "browserslist": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.0.tgz", - "integrity": "sha512-seffIXhwgB84+OCeT/aMjpZnsAsYDiMSC+CEs3UkF8iU64BZGYcu+TZYs/IBpo4nRi0vJywUJWYdbTsOhFTweg==", + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz", + "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.361", - "node-releases": "^1.1.50" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.9.5" } }, - "caniuse-lite": { - "version": "1.0.30001030", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz", - "integrity": "sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.362", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.362.tgz", - "integrity": "sha512-xdU5VCoZyMPMOWtCaMgbr48OwWZHrMLbGnAOlEqibXiIGsb4kiCGWEHK5NOghcVLdBVIbr/BW+yuKxVuGTtzEg==", - "dev": true - }, - "node-releases": { - "version": "1.1.50", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz", - "integrity": "sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ==", + "@babel/types": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", "dev": true, "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" } } } }, "@babel/preset-flow": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.8.3.tgz", - "integrity": "sha512-iCXFk+T4demnq+dNLLvlGOgvYF6sPZ/hS1EmswugOqh1Ysp2vuiqJzpgsnp5rW8+6dLJT/0CXDzye28ZH6BAfQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.9.0.tgz", + "integrity": "sha512-88uSmlshIrlmPkNkEcx3UpSZ6b8n0UGBq0/0ZMZCF/uxAW0XIAUuDHBhIOAh0pvweafH4RxOwi/H3rWhtqOYPA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-flow-strip-types": "^7.8.3" + "@babel/plugin-transform-flow-strip-types": "^7.9.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", + "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { @@ -1295,33 +1450,10 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@chromaui/localtunnel": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@chromaui/localtunnel/-/localtunnel-1.10.1.tgz", - "integrity": "sha512-LXhAogVc9SOQ45+mtk2mhcQxW4bE8aadfx9WbDzuDlBXcDgDMFBaxOmd5VYsPxQYA+cLFkKeuKOpROzsZSEySA==", - "dev": true, - "requires": { - "axios": "0.19.0", - "debug": "^3.0.1", - "openurl": "1.1.1", - "yargs": "6.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", "dev": true, "requires": { "exec-sh": "^0.3.2", @@ -1329,9 +1461,9 @@ } }, "@emotion/cache": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.27.tgz", - "integrity": "sha512-Zp8BEpbMunFsTcqAK4D7YTm3MvCp1SekflSLJH8lze2fCcSZ/yMkXHo8kb3t1/1Tdd3hAqf3Fb7z9VZ+FMiC9w==", + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", "dev": true, "requires": { "@emotion/sheet": "0.9.4", @@ -1341,9 +1473,9 @@ } }, "@emotion/core": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.27.tgz", - "integrity": "sha512-XbD5R36pVbohQMnKfajHv43g8EbN4NHdF6Zh9zg/C0nr0jqwOw3gYnC07Xj3yG43OYSRyrGsoQ5qPwc8ycvLZw==", + "version": "10.0.28", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.28.tgz", + "integrity": "sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA==", "dev": true, "requires": { "@babel/runtime": "^7.5.5", @@ -1366,15 +1498,16 @@ } }, "@emotion/hash": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.4.tgz", - "integrity": "sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", "dev": true }, "@emotion/is-prop-valid": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.6.tgz", - "integrity": "sha512-mnZMho3Sq8BfzkYYRVc8ilQTnc8U02Ytp6J1AwM6taQStZ3AhsEJBX2LzhA/LJirNCwM2VtHL3VFIZ+sNJUgUQ==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dev": true, "requires": { "@emotion/memoize": "0.7.4" } @@ -1385,12 +1518,12 @@ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, "@emotion/serialize": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.15.tgz", - "integrity": "sha512-YE+qnrmGwyR+XB5j7Bi+0GT1JWsdcjM/d4POu+TXkcnrRs4RFCCsi3d/Ebf+wSStHqAlTT2+dfd+b9N9EO2KBg==", + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", "dev": true, "requires": { - "@emotion/hash": "0.7.4", + "@emotion/hash": "0.8.0", "@emotion/memoize": "0.7.4", "@emotion/unitless": "0.7.5", "@emotion/utils": "0.11.3", @@ -1414,13 +1547,13 @@ } }, "@emotion/styled-base": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.27.tgz", - "integrity": "sha512-ufHM/HhE3nr309hJG9jxuFt71r6aHn7p+bwXduFxcwPFEfBIqvmZUMtZ9YxIsY61PVwK3bp4G1XhaCzy9smVvw==", + "version": "10.0.31", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz", + "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==", "dev": true, "requires": { "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.6", + "@emotion/is-prop-valid": "0.8.8", "@emotion/serialize": "^0.11.15", "@emotion/utils": "0.11.3" } @@ -1467,12 +1600,6 @@ "resolve-from": "^5.0.0" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -1516,17 +1643,30 @@ "dev": true }, "@jest/console": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.1.0.tgz", - "integrity": "sha512-3P1DpqAMK/L07ag/Y9/Jup5iDEG9P4pRAuZiMQnU0JB3UOvCyYCjCoxr7sIA80SeyUCUKrr24fKAxVpmBgQonA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.4.0.tgz", + "integrity": "sha512-CfE0erx4hdJ6t7RzAcE1wLG6ZzsHSmybvIBQDoCkDM1QaSeWL9wJMzID/2BbHHa7ll9SsbbK43HjbERbBaFX2A==", "dev": true, "requires": { - "@jest/source-map": "^25.1.0", + "@jest/types": "^25.4.0", "chalk": "^3.0.0", - "jest-util": "^25.1.0", + "jest-message-util": "^25.4.0", + "jest-util": "^25.4.0", "slash": "^3.0.0" }, "dependencies": { + "@jest/types": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + } + }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -1586,45 +1726,45 @@ } }, "@jest/core": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.1.0.tgz", - "integrity": "sha512-iz05+NmwCmZRzMXvMo6KFipW7nzhbpEawrKrkkdJzgytavPse0biEnCNr2wRlyCsp3SmKaEY+SGv7YWYQnIdig==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.4.0.tgz", + "integrity": "sha512-h1x9WSVV0+TKVtATGjyQIMJENs8aF6eUjnCoi4jyRemYZmekLr8EJOGQqTWEX8W6SbZ6Skesy9pGXrKeAolUJw==", "dev": true, "requires": { - "@jest/console": "^25.1.0", - "@jest/reporters": "^25.1.0", - "@jest/test-result": "^25.1.0", - "@jest/transform": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/console": "^25.4.0", + "@jest/reporters": "^25.4.0", + "@jest/test-result": "^25.4.0", + "@jest/transform": "^25.4.0", + "@jest/types": "^25.4.0", "ansi-escapes": "^4.2.1", "chalk": "^3.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.3", - "jest-changed-files": "^25.1.0", - "jest-config": "^25.1.0", - "jest-haste-map": "^25.1.0", - "jest-message-util": "^25.1.0", - "jest-regex-util": "^25.1.0", - "jest-resolve": "^25.1.0", - "jest-resolve-dependencies": "^25.1.0", - "jest-runner": "^25.1.0", - "jest-runtime": "^25.1.0", - "jest-snapshot": "^25.1.0", - "jest-util": "^25.1.0", - "jest-validate": "^25.1.0", - "jest-watcher": "^25.1.0", + "jest-changed-files": "^25.4.0", + "jest-config": "^25.4.0", + "jest-haste-map": "^25.4.0", + "jest-message-util": "^25.4.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.4.0", + "jest-resolve-dependencies": "^25.4.0", + "jest-runner": "^25.4.0", + "jest-runtime": "^25.4.0", + "jest-snapshot": "^25.4.0", + "jest-util": "^25.4.0", + "jest-validate": "^25.4.0", + "jest-watcher": "^25.4.0", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", - "realpath-native": "^1.1.0", + "realpath-native": "^2.0.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1633,15 +1773,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -1690,9 +1821,9 @@ "dev": true }, "rimraf": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.1.tgz", - "integrity": "sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -1725,20 +1856,20 @@ } }, "@jest/environment": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.1.0.tgz", - "integrity": "sha512-cTpUtsjU4cum53VqBDlcW0E4KbQF03Cn0jckGPW/5rrE9tb+porD3+hhLtHAwhthsqfyF+bizyodTlsRA++sHg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.4.0.tgz", + "integrity": "sha512-KDctiak4mu7b4J6BIoN/+LUL3pscBzoUCP+EtSPd2tK9fqyDY5OF+CmkBywkFWezS9tyH5ACOQNtpjtueEDH6Q==", "dev": true, "requires": { - "@jest/fake-timers": "^25.1.0", - "@jest/types": "^25.1.0", - "jest-mock": "^25.1.0" + "@jest/fake-timers": "^25.4.0", + "@jest/types": "^25.4.0", + "jest-mock": "^25.4.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1747,15 +1878,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -1809,22 +1931,22 @@ } }, "@jest/fake-timers": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.1.0.tgz", - "integrity": "sha512-Eu3dysBzSAO1lD7cylZd/CVKdZZ1/43SF35iYBNV1Lvvn2Undp3Grwsv8PrzvbLhqwRzDd4zxrY4gsiHc+wygQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.4.0.tgz", + "integrity": "sha512-lI9z+VOmVX4dPPFzyj0vm+UtaB8dCJJ852lcDnY0uCPRvZAaVGnMwBBc1wxtf+h7Vz6KszoOvKAt4QijDnHDkg==", "dev": true, "requires": { - "@jest/types": "^25.1.0", - "jest-message-util": "^25.1.0", - "jest-mock": "^25.1.0", - "jest-util": "^25.1.0", + "@jest/types": "^25.4.0", + "jest-message-util": "^25.4.0", + "jest-mock": "^25.4.0", + "jest-util": "^25.4.0", "lolex": "^5.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1833,15 +1955,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -1895,17 +2008,16 @@ } }, "@jest/reporters": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.1.0.tgz", - "integrity": "sha512-ORLT7hq2acJQa8N+NKfs68ZtHFnJPxsGqmofxW7v7urVhzJvpKZG9M7FAcgh9Ee1ZbCteMrirHA3m5JfBtAaDg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.4.0.tgz", + "integrity": "sha512-bhx/buYbZgLZm4JWLcRJ/q9Gvmd3oUh7k2V7gA4ZYBx6J28pIuykIouclRdiAC6eGVX1uRZT+GK4CQJLd/PwPg==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.1.0", - "@jest/environment": "^25.1.0", - "@jest/test-result": "^25.1.0", - "@jest/transform": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/console": "^25.4.0", + "@jest/test-result": "^25.4.0", + "@jest/transform": "^25.4.0", + "@jest/types": "^25.4.0", "chalk": "^3.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -1914,24 +2026,23 @@ "istanbul-lib-instrument": "^4.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "jest-haste-map": "^25.1.0", - "jest-resolve": "^25.1.0", - "jest-runtime": "^25.1.0", - "jest-util": "^25.1.0", - "jest-worker": "^25.1.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^25.4.0", + "jest-resolve": "^25.4.0", + "jest-util": "^25.4.0", + "jest-worker": "^25.4.0", "node-notifier": "^6.0.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^3.1.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^4.0.1" + "v8-to-istanbul": "^4.1.3" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1940,15 +2051,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -1991,9 +2093,9 @@ "dev": true }, "jest-worker": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", - "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.4.0.tgz", + "integrity": "sha512-ghAs/1FtfYpMmYQ0AHqxV62XPvKdUDIBBApMZfly+E9JEmYh2K45G0R5dWxx986RN12pRCxsViwQVtGl+N4whw==", "dev": true, "requires": { "merge-stream": "^2.0.0", @@ -2018,9 +2120,9 @@ } }, "@jest/source-map": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.1.0.tgz", - "integrity": "sha512-ohf2iKT0xnLWcIUhL6U6QN+CwFWf9XnrM2a6ybL9NXxJjgYijjLSitkYHIdzkd8wFliH73qj/+epIpTiWjRtAA==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.2.6.tgz", + "integrity": "sha512-VuIRZF8M2zxYFGTEhkNSvQkUKafQro4y+mwUxy5ewRqs5N/ynSFUODYp3fy1zCnbCMy1pz3k+u57uCqx8QRSQQ==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -2029,22 +2131,21 @@ } }, "@jest/test-result": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.1.0.tgz", - "integrity": "sha512-FZzSo36h++U93vNWZ0KgvlNuZ9pnDnztvaM7P/UcTx87aPDotG18bXifkf1Ji44B7k/eIatmMzkBapnAzjkJkg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.4.0.tgz", + "integrity": "sha512-8BAKPaMCHlL941eyfqhWbmp3MebtzywlxzV+qtngQ3FH+RBqnoSAhNEPj4MG7d2NVUrMOVfrwuzGpVIK+QnMAA==", "dev": true, "requires": { - "@jest/console": "^25.1.0", - "@jest/transform": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/console": "^25.4.0", + "@jest/types": "^25.4.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -2053,15 +2154,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -2115,45 +2207,45 @@ } }, "@jest/test-sequencer": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.1.0.tgz", - "integrity": "sha512-WgZLRgVr2b4l/7ED1J1RJQBOharxS11EFhmwDqknpknE0Pm87HLZVS2Asuuw+HQdfQvm2aXL2FvvBLxOD1D0iw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.4.0.tgz", + "integrity": "sha512-240cI+nsM3attx2bMp9uGjjHrwrpvxxrZi8Tyqp/cfOzl98oZXVakXBgxODGyBYAy/UGXPKXLvNc2GaqItrsJg==", "dev": true, "requires": { - "@jest/test-result": "^25.1.0", - "jest-haste-map": "^25.1.0", - "jest-runner": "^25.1.0", - "jest-runtime": "^25.1.0" + "@jest/test-result": "^25.4.0", + "jest-haste-map": "^25.4.0", + "jest-runner": "^25.4.0", + "jest-runtime": "^25.4.0" } }, "@jest/transform": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.1.0.tgz", - "integrity": "sha512-4ktrQ2TPREVeM+KxB4zskAT84SnmG1vaz4S+51aTefyqn3zocZUnliLLm5Fsl85I3p/kFPN4CRp1RElIfXGegQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.4.0.tgz", + "integrity": "sha512-t1w2S6V1sk++1HHsxboWxPEuSpN8pxEvNrZN+Ud/knkROWtf8LeUmz73A4ezE8476a5AM00IZr9a8FO9x1+j3g==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "babel-plugin-istanbul": "^6.0.0", "chalk": "^3.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.3", - "jest-haste-map": "^25.1.0", - "jest-regex-util": "^25.1.0", - "jest-util": "^25.1.0", + "jest-haste-map": "^25.4.0", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.4.0", "micromatch": "^4.0.2", "pirates": "^4.0.1", - "realpath-native": "^1.1.0", + "realpath-native": "^2.0.0", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -2162,15 +2254,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -2230,9 +2313,9 @@ } }, "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.2.3.tgz", + "integrity": "sha512-6oLQwO9mKif3Uph3RX5J1i3S7X7xtDHWBaaaoeKw8hOzV6YUd0qDcYcHZ6QXMHDIzSr7zzrEa51o2Ovlj6AtKQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -2338,9 +2421,9 @@ } }, "@reach/router": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.1.tgz", - "integrity": "sha512-Ov1j1J+pSgXliJHFL7XWhjyREwc6GxeWfgBTa5MMH5eRmYtHbPhaovba4xKo7aTVCg8fxkt2yDMNSpvwfUP+pA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.3.tgz", + "integrity": "sha512-gOIAiFhWdiVGSVjukKeNKkCRBLmnORoTPyBihI/jLunICPgxdP30DroAvPQuf1eVfQbfGJQDJkwhJXsNPMnVWw==", "dev": true, "requires": { "create-react-context": "0.3.0", @@ -2358,40 +2441,27 @@ "any-observable": "^0.3.0" } }, - "@sheerun/mutationobserver-shim": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz", - "integrity": "sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true, - "optional": true - }, "@sinonjs/commons": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz", - "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz", + "integrity": "sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@storybook/addon-actions": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-5.3.14.tgz", - "integrity": "sha512-4lKrTMzw/r6VQiBY24v72WC3jibW7pc9BIJgtPpTmTUQWTxPnkmxDfT81pV4BjS1GFH9VCnU6f5fWK+5lrQlsw==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-5.3.18.tgz", + "integrity": "sha512-jdBVCcfyWin274Lkwg5cL+1fJ651NCuIWxuJVsmHQtIl2xTjf2MyoMoKQZNdt4xtE+W9w+rS4bYt04elrizThg==", "dev": true, "requires": { - "@storybook/addons": "5.3.14", - "@storybook/api": "5.3.14", - "@storybook/client-api": "5.3.14", - "@storybook/components": "5.3.14", - "@storybook/core-events": "5.3.14", - "@storybook/theming": "5.3.14", + "@storybook/addons": "5.3.18", + "@storybook/api": "5.3.18", + "@storybook/client-api": "5.3.18", + "@storybook/components": "5.3.18", + "@storybook/core-events": "5.3.18", + "@storybook/theming": "5.3.18", "core-js": "^3.0.1", "fast-deep-equal": "^2.0.1", "global": "^4.3.2", @@ -2411,17 +2481,17 @@ } }, "@storybook/addon-knobs": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-5.3.14.tgz", - "integrity": "sha512-pBpFOdeCR8n8w6QHK1adABt6YKf+Q4itfX0+AtZRGLvbGum9O+paihvP9EVYPlKiG+0T7Zv2vFCl6q6qFjF/Mw==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-5.3.18.tgz", + "integrity": "sha512-X0WxGKoso3j5mS4c4enM8BvCjbO6Wwfxc++swQTqtANpBZ8k+w0piiEF1fiJf+ssgEAWe5brgIqnQ9kiBGLqKA==", "dev": true, "requires": { - "@storybook/addons": "5.3.14", - "@storybook/api": "5.3.14", - "@storybook/client-api": "5.3.14", - "@storybook/components": "5.3.14", - "@storybook/core-events": "5.3.14", - "@storybook/theming": "5.3.14", + "@storybook/addons": "5.3.18", + "@storybook/api": "5.3.18", + "@storybook/client-api": "5.3.18", + "@storybook/components": "5.3.18", + "@storybook/core-events": "5.3.18", + "@storybook/theming": "5.3.18", "@types/react-color": "^3.0.1", "copy-to-clipboard": "^3.0.8", "core-js": "^3.0.1", @@ -2445,15 +2515,15 @@ } }, "@storybook/addons": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.14.tgz", - "integrity": "sha512-zoN1MYlArdThp93i+Ogil/pihyx8n7nkrdSO0j9HUh6jUsGeFFEluPQZdRFte9NIoY6ZWSWwuEMDgrv2Pw9r2Q==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.3.18.tgz", + "integrity": "sha512-ZQjDgTUDFRLvAiBg2d8FgPgghfQ+9uFyXQbtiGlTBLinrPCeQd7J86qiUES0fcGoohCCw0wWKtvB0WF2z1XNDg==", "dev": true, "requires": { - "@storybook/api": "5.3.14", - "@storybook/channels": "5.3.14", - "@storybook/client-logger": "5.3.14", - "@storybook/core-events": "5.3.14", + "@storybook/api": "5.3.18", + "@storybook/channels": "5.3.18", + "@storybook/client-logger": "5.3.18", + "@storybook/core-events": "5.3.18", "core-js": "^3.0.1", "global": "^4.3.2", "util-deprecate": "^1.0.2" @@ -2468,18 +2538,18 @@ } }, "@storybook/api": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.14.tgz", - "integrity": "sha512-ANWRMTLEoAfu0IsXqbxmbTpxS8xTByZgLj20tH96bxgH1rJo9KAZnJ8A9kGYr+zklU8QnYvVIgmV3HESXII9zg==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.3.18.tgz", + "integrity": "sha512-QXaccNCARHzPWOuxYndiebGWBZmwiUvRgB9ji0XTJBS3y8K0ZPb5QyuqiKPaEWUj8dBA8rzdDtkW3Yt95Namaw==", "dev": true, "requires": { "@reach/router": "^1.2.1", - "@storybook/channels": "5.3.14", - "@storybook/client-logger": "5.3.14", - "@storybook/core-events": "5.3.14", + "@storybook/channels": "5.3.18", + "@storybook/client-logger": "5.3.18", + "@storybook/core-events": "5.3.18", "@storybook/csf": "0.0.1", - "@storybook/router": "5.3.14", - "@storybook/theming": "5.3.14", + "@storybook/router": "5.3.18", + "@storybook/theming": "5.3.18", "@types/reach__router": "^1.2.3", "core-js": "^3.0.1", "fast-deep-equal": "^2.0.1", @@ -2510,13 +2580,13 @@ } }, "@storybook/channel-postmessage": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.3.14.tgz", - "integrity": "sha512-XKHxMSwW3movfTDOashuYlVCX3Hp7+X+amXc/xhDDzbiYjy3/CVm3LlkkM6v451IVEdK6pue4ewqZQWJAYAAEQ==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.3.18.tgz", + "integrity": "sha512-awxBW/aVfNtY9QvYZgsPaMXgUpC2+W3vEyQcl/w4ce0YVH+7yWx3wt3Ku49lQwxZwDrxP3QoC0U+mkPc9hBJwA==", "dev": true, "requires": { - "@storybook/channels": "5.3.14", - "@storybook/client-logger": "5.3.14", + "@storybook/channels": "5.3.18", + "@storybook/client-logger": "5.3.18", "core-js": "^3.0.1", "global": "^4.3.2", "telejson": "^3.2.0" @@ -2531,9 +2601,9 @@ } }, "@storybook/channels": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.14.tgz", - "integrity": "sha512-k9QBf9Kwe+iGmdEK/kW5xprqem2SPfBVwET6LWvJkWOl9UQ9VoMuCHgV55p0tzjcugaqWWKoF9+FRMWxWRfsQg==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.3.18.tgz", + "integrity": "sha512-scP/6td/BJSEOgfN+qaYGDf3E793xye7tIw6W+sYqwg+xdMFO39wVXgVZNpQL6sLEwpJZTaPywCjC6p6ksErqQ==", "dev": true, "requires": { "core-js": "^3.0.1" @@ -2548,16 +2618,16 @@ } }, "@storybook/client-api": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.3.14.tgz", - "integrity": "sha512-1qx1NIwto5F9N24Fb6VzKyDzeaZHtWTZ7afPrg56e1tUu7jbog7rELdRezk8+YAujveyMDJu4MxnOSP01sv7YQ==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.3.18.tgz", + "integrity": "sha512-QiXTDUpjdyW19BlocLw07DrkOnEzVaWGJcRze2nSs29IKKuq1Ncv2LOAZt6ySSq0PmIKsjBou3bmS1/aXmDMdw==", "dev": true, "requires": { - "@storybook/addons": "5.3.14", - "@storybook/channel-postmessage": "5.3.14", - "@storybook/channels": "5.3.14", - "@storybook/client-logger": "5.3.14", - "@storybook/core-events": "5.3.14", + "@storybook/addons": "5.3.18", + "@storybook/channel-postmessage": "5.3.18", + "@storybook/channels": "5.3.18", + "@storybook/client-logger": "5.3.18", + "@storybook/core-events": "5.3.18", "@storybook/csf": "0.0.1", "@types/webpack-env": "^1.15.0", "core-js": "^3.0.1", @@ -2581,9 +2651,9 @@ } }, "@storybook/client-logger": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.14.tgz", - "integrity": "sha512-YCHEsOvo6zPb4udlyAwqr5W0Kv9mAEQmcX73w9IDvAxbjR00T7empW7qmbjvviftKB/5MEgDdiYbj64ccs3aqg==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.3.18.tgz", + "integrity": "sha512-RZjxw4uqZX3Yk27IirbB/pQG+wRsQSSRlKqYa8KQ5bSanm4IrcV9VA1OQbuySW9njE+CexAnakQJ/fENdmurNg==", "dev": true, "requires": { "core-js": "^3.0.1" @@ -2598,14 +2668,14 @@ } }, "@storybook/components": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.3.14.tgz", - "integrity": "sha512-AsjkIFBrrqcBDLxGdmUHiauZo5gOL65eXx8WA7/yJDF8s45VVZX5Z0buOnjFyEhGVus02gwTov8da2irjL862A==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.3.18.tgz", + "integrity": "sha512-LIN4aVCCDY7klOwtuqQhfYz4tHaMADhXEzZpij+3r8N68Inck6IJ1oo9A9umXQPsTioQi8e6FLobH1im90j/2A==", "dev": true, "requires": { - "@storybook/client-logger": "5.3.14", - "@storybook/theming": "5.3.14", - "@types/react-syntax-highlighter": "11.0.2", + "@storybook/client-logger": "5.3.18", + "@storybook/theming": "5.3.18", + "@types/react-syntax-highlighter": "11.0.4", "@types/react-textarea-autosize": "^4.3.3", "core-js": "^3.0.1", "global": "^4.3.2", @@ -2635,9 +2705,9 @@ } }, "@storybook/core": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-5.3.14.tgz", - "integrity": "sha512-Y57cchCRw1vvZe8OhMmgAkaHciGLm2eztdfzZMUmeHH8csBt/0RO5gYzOhWDGgdC2D9HSlaysZEDJ6sH3PChlw==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-5.3.18.tgz", + "integrity": "sha512-XQb/UQb+Ohuaw0GhKKYzvmuuh5Tit93f2cLZD9QCSWUPvDGmLG5g91Y9NbUr4Ap3mANT3NksMNhkAV0GxExEkg==", "dev": true, "requires": { "@babel/plugin-proposal-class-properties": "^7.7.0", @@ -2645,16 +2715,16 @@ "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-transform-react-constant-elements": "^7.2.0", "@babel/preset-env": "^7.4.5", - "@storybook/addons": "5.3.14", - "@storybook/channel-postmessage": "5.3.14", - "@storybook/client-api": "5.3.14", - "@storybook/client-logger": "5.3.14", - "@storybook/core-events": "5.3.14", + "@storybook/addons": "5.3.18", + "@storybook/channel-postmessage": "5.3.18", + "@storybook/client-api": "5.3.18", + "@storybook/client-logger": "5.3.18", + "@storybook/core-events": "5.3.18", "@storybook/csf": "0.0.1", - "@storybook/node-logger": "5.3.14", - "@storybook/router": "5.3.14", - "@storybook/theming": "5.3.14", - "@storybook/ui": "5.3.14", + "@storybook/node-logger": "5.3.18", + "@storybook/router": "5.3.18", + "@storybook/theming": "5.3.18", + "@storybook/ui": "5.3.18", "airbnb-js-shims": "^2.2.1", "ansi-to-html": "^0.6.11", "autoprefixer": "^9.7.2", @@ -2715,6 +2785,18 @@ "webpack-virtual-modules": "^0.2.0" }, "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -2762,6 +2844,12 @@ "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", "dev": true }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, "file-loader": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", @@ -2819,12 +2907,12 @@ "dev": true }, "schema-utils": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz", - "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "dev": true, "requires": { - "ajv": "^6.10.2", + "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } }, @@ -2857,9 +2945,9 @@ } }, "@storybook/core-events": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.14.tgz", - "integrity": "sha512-VCPLKqRugsOSx/smMJiJOvRgAzTrMpsbRuFw48kBGkQMP9TEV82Qe/341dv+f4GllPyBZyANG0p0m5+w7ZCURQ==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.3.18.tgz", + "integrity": "sha512-uQ6NYJ5WODXK8DJ7m8y3yUAtWB3n+6XtYztjY+tdkCsLYvTYDXNS+epV+f5Hu9+gB+/Dm+b5Su4jDD+LZB2QWA==", "dev": true, "requires": { "core-js": "^3.0.1" @@ -2883,9 +2971,9 @@ } }, "@storybook/node-logger": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.3.14.tgz", - "integrity": "sha512-/phRS49/hMZ5SU4EKUxX2kFepm9iw1cJBzggOz0GA1Yj4r9g1TA1H+OD7QvZvVTC3AESf/ZUJyaqnXEh/l+hpg==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.3.18.tgz", + "integrity": "sha512-Go/hdtaPTtjgJP+GYk8VXcOmecrdG7cXm0yyTlatd6s8xXI0txHme1/0MOZmEPows1Ec7KAQ20+NnaCGUPZUUg==", "dev": true, "requires": { "@types/npmlog": "^4.1.2", @@ -2955,17 +3043,17 @@ } }, "@storybook/react": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-5.3.14.tgz", - "integrity": "sha512-8n0oCkaxFMrimngxnISEQFkHGSF5z65Lh1XPypjIndIJ0b/IVWRJcUEh3M3xOaydFatEG+lfQbF/5OznyYEefA==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-5.3.18.tgz", + "integrity": "sha512-6yNg+phcrEqEjC2NOiu0mJuxbTwX7yzbkcusIn0S7N/KTXNO7CGvYjAkdjfw0gTLjfuVDZIjDQfoosslvfsj3w==", "dev": true, "requires": { "@babel/plugin-transform-react-constant-elements": "^7.6.3", "@babel/preset-flow": "^7.0.0", "@babel/preset-react": "^7.0.0", - "@storybook/addons": "5.3.14", - "@storybook/core": "5.3.14", - "@storybook/node-logger": "5.3.14", + "@storybook/addons": "5.3.18", + "@storybook/core": "5.3.18", + "@storybook/node-logger": "5.3.18", "@svgr/webpack": "^4.0.3", "@types/webpack-env": "^1.15.0", "babel-plugin-add-react-displayname": "^0.0.5", @@ -3010,9 +3098,9 @@ } }, "@storybook/router": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.14.tgz", - "integrity": "sha512-O0KwQFncdBeq+O2Aq8UAFBVWjWmP5rtqoacUOFSGkXgObOnyniEraLiPH7rPtq2dAlSpgYI9+srQAZfo52Hz2A==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.3.18.tgz", + "integrity": "sha512-6B2U2C75KTSVaCuYYgcubeJGcCSnwsXuEf50hEd5mGqWgHZfojCtGvB7Ko4X+0h8rEC+eNA4p7YBOhlUv9WNrQ==", "dev": true, "requires": { "@reach/router": "^1.2.1", @@ -3035,14 +3123,14 @@ } }, "@storybook/theming": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.14.tgz", - "integrity": "sha512-raqXC3yJycEt1CrCAfnBYUA6pyJI80E9M26EeQl3UfytJOL6euprOi+D17QvxqBn7jmmf9ZDw5XRkvJhQ17Y7Q==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.3.18.tgz", + "integrity": "sha512-lfFTeLoYwLMKg96N3gn0umghMdAHgJBGuk2OM8Ll84yWtdl9RGnzfiI1Fl7Cr5k95dCF7drLJlJCao1VxUkFSA==", "dev": true, "requires": { "@emotion/core": "^10.0.20", "@emotion/styled": "^10.0.17", - "@storybook/client-logger": "5.3.14", + "@storybook/client-logger": "5.3.18", "core-js": "^3.0.1", "deep-object-diff": "^1.1.0", "emotion-theming": "^10.0.19", @@ -3063,20 +3151,20 @@ } }, "@storybook/ui": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-5.3.14.tgz", - "integrity": "sha512-4zQOxpcvbKqRevmFw3Er6AWr2MeEMQfnuYh4Vm5G5YpiTyM6PU0VTVRzKnkEbNBcgjClD7nwXSbkUJjW6MJ8SA==", + "version": "5.3.18", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-5.3.18.tgz", + "integrity": "sha512-xyXK53fNe9lkGPmXf3Nk+n0gz9gOgXI+fDxetyDLpX79k3DIN/jCKEnv45vXof7OQ45mTmyBvUNTKrNLqKTt5Q==", "dev": true, "requires": { "@emotion/core": "^10.0.20", - "@storybook/addons": "5.3.14", - "@storybook/api": "5.3.14", - "@storybook/channels": "5.3.14", - "@storybook/client-logger": "5.3.14", - "@storybook/components": "5.3.14", - "@storybook/core-events": "5.3.14", - "@storybook/router": "5.3.14", - "@storybook/theming": "5.3.14", + "@storybook/addons": "5.3.18", + "@storybook/api": "5.3.18", + "@storybook/channels": "5.3.18", + "@storybook/client-logger": "5.3.18", + "@storybook/components": "5.3.18", + "@storybook/core-events": "5.3.18", + "@storybook/router": "5.3.18", + "@storybook/theming": "5.3.18", "copy-to-clipboard": "^3.0.8", "core-js": "^3.0.1", "core-js-pure": "^3.0.1", @@ -3119,216 +3207,500 @@ } }, "@styled-icons/boxicons-logos": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/boxicons-logos/-/boxicons-logos-9.4.1.tgz", - "integrity": "sha512-DN6Za9paJeWkoIXI1newSSfDALIR8ecaAsgzP3ZD+NRJHy6idW+1ouC5p3DlRM29+Cp4yJ/z3bH9whBDbd7YXQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/boxicons-logos/-/boxicons-logos-10.0.0.tgz", + "integrity": "sha512-su7cuMcn1rOxUcq9IxqW6LafOGfD20NAzewzJErktUPx/i+d9Hu380lIoKmvLAH1lXEdGggTGlYBgu0vbIRyMw==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/boxicons-regular": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/boxicons-regular/-/boxicons-regular-9.4.1.tgz", - "integrity": "sha512-910zIWCB0JkEgk9I7zIIEdPc8xibg3xrT4Wo7gIu4lGEr4u9OOQT3c0ajJD7F+JlhWcWBVumzjfjOT8A5UjPJw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/boxicons-regular/-/boxicons-regular-10.0.0.tgz", + "integrity": "sha512-/AlI3YTCdHvQDxJJRh6AAL0NaU8lwle3gXJ1I0f1I/MHhPO7N7VAB1jN3fcqj6i3Cwvz88HJ9DC+Mx+wQAUKAg==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/boxicons-solid": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/boxicons-solid/-/boxicons-solid-9.4.1.tgz", - "integrity": "sha512-7FvU6KSnxBprsidta3/0grTkimYWDUnSZCyLscT1OwjmfyFPpnLNmJASQDrEtORF2GPw5Y2gc/q6h2RI4OnYcA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/boxicons-solid/-/boxicons-solid-10.0.0.tgz", + "integrity": "sha512-gz8swxbEpKNPmdoeIwfV3gQuHb1BpesuEpeeJ3fbtvOOltho8JAxvhE7fDX1b5FHXZl5DOsPqI86N/QSo/3dqg==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/crypto": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/crypto/-/crypto-9.4.1.tgz", - "integrity": "sha512-qIjzvaw0kFykDN7PTGD8d3HvFVoX7kW7nwlvvzW/pGhVzpUHE7Mh2Syc04HpoknCgO0fCjAzXaxi9Igu3nS9NA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/crypto/-/crypto-10.0.0.tgz", + "integrity": "sha512-lIqg7wwrt9sP1wDrm9suARojs2e9TS4v/6NCmX7GsBzz+iP+iNbMSwsntTX6SAVxsNIADkMPdf47yF3GLoID1A==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/entypo": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@styled-icons/entypo/-/entypo-9.5.0.tgz", - "integrity": "sha512-gy/CXs45g1o5c61BnSnpd/cb84sXIARPByOa354FkN0aUHqepbF2qtBjZ3Udho6zWpm1nGOOUiawQb53PnG9vg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/entypo/-/entypo-10.0.0.tgz", + "integrity": "sha512-MMQOb/BPKRBIVpUI5DAFKK6dqdTvLkMbm/WttCKRZSIFxgZfBG9CYnjB1yydqlC3bWWhJsmhOdM5PzKTXvxb/w==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/entypo-social": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@styled-icons/entypo-social/-/entypo-social-9.5.0.tgz", - "integrity": "sha512-yEpaJtTUriZSZPT/iqxgNONgxDYr0MHXANvoUW2CB0Ey4zTZst+2x7EJ9KgL2CjdBgA0bs8hnx5etGHUi8BtuA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/entypo-social/-/entypo-social-10.0.0.tgz", + "integrity": "sha512-H1uFWET+J+R5pVtRkRsPUbpGkkNCdDBhsXVDAF5M9nVEUx76Dmcl0mfRFg7+tfMvQjvfi/V30Sj/tacLXoTj+w==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } + } + }, + "@styled-icons/evaicons-outline": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@styled-icons/evaicons-outline/-/evaicons-outline-10.2.0.tgz", + "integrity": "sha512-TOPl//uVmDzbpDueQnNdie2jh7wjf1AwPxdbv/kEIHzxZyLcCZwHJGYC+zQfV6ByLWimaaPnUq7dAr0cD+lUTA==", + "requires": { + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } + } + }, + "@styled-icons/evaicons-solid": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@styled-icons/evaicons-solid/-/evaicons-solid-10.2.0.tgz", + "integrity": "sha512-Yd3F+jvjHkI8iqDnoqhg2sFyGe9+NVxFDfjmUKL3wBH8e59tPFAHzX3ATsCE3dGyFOWtvyaKc5mKf0PculvHSw==", + "requires": { + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/evil": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/evil/-/evil-9.4.1.tgz", - "integrity": "sha512-ejCBH+aXrjtBM+iMJomYlZ/xiJ+NGHVlIfQmkgD6roxtJzMzAmhwXgC5S3p0no2n1EXluUdJiufrI/QtP7iNbA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/evil/-/evil-10.0.0.tgz", + "integrity": "sha512-cVr8I6bF1jphAcUIQOM5ziqa2h3FXhNq+JrBjsizdWO8iK/cXeZ7eTxrqRJ3RnXED15Q5f0Oh55hw8r2MSVACg==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/fa-brands": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/fa-brands/-/fa-brands-9.4.1.tgz", - "integrity": "sha512-zqlS/Y3mQLdBgRhZo1op5+twKYYwfS7OjqL90N+etokIWPqv1b7nwPWzwKoRpqDfCt/gyqmgxXqWufFd0CAx7Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/fa-brands/-/fa-brands-10.0.0.tgz", + "integrity": "sha512-OzTXI7czu2B0XSHeVqS8QqutsYKGxy1FgY6Hq+QX11iktrOnti9wxz2fvb0CyrJT3jHm2eGb6nP6xXIgjA4YUg==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/fa-regular": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/fa-regular/-/fa-regular-9.4.1.tgz", - "integrity": "sha512-tpgLOUPECtWNwVs7G82IaDkb1T13yNyDNZBB85sEO02ldHAZe6tt0Yi5gGCBExtU/p+4/jLTcU+pcoh/mySlVg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/fa-regular/-/fa-regular-10.0.0.tgz", + "integrity": "sha512-LgDxi+sqTF4//LYBQ1rfy4yqCoNyUPuYoPVz9y1EWKwK15I5UDeCI+ycHXGlXLAqlipX0lSTrAkAOJyVAXQ0mw==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/fa-solid": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/fa-solid/-/fa-solid-9.4.1.tgz", - "integrity": "sha512-ZyPxbCFmuuy3XotCI0SgHyUn3gTvQXm+iVnh+8r0gR8Kd88iTTubTqxgtdS0lrefaB4ayl6vEg20Dv9e9PvYVg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/fa-solid/-/fa-solid-10.0.0.tgz", + "integrity": "sha512-ZfRhJNHudVLYoqHANjNt0UifFrmkiWAJi6SkAcPujX9iwxBdC3bDMQm+J9j7Z1XWstVIusZoLJ7Ax3rdywpK/A==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/feather": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/feather/-/feather-9.4.1.tgz", - "integrity": "sha512-ucMOPhvaCp6N4lxL+z/66Kech20jAdMfewER732jhjV8P3FknoAY2+0CXXE+tBvJoJ/SOJZDOsW58Gr7yAWXOQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/feather/-/feather-10.0.0.tgz", + "integrity": "sha512-ubgZH0Irx4L0Q02WJtg7f+IFRBRA8YtNZCOCezFPS9Bqdq3IV76NrYK1/+yP6ZTEyxurxjJdzVot8JMwUhgicA==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/foundation": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@styled-icons/foundation/-/foundation-9.5.0.tgz", - "integrity": "sha512-O4Y62bfZfZjhZDXYtJYd/RsID1vpmMtgLSP54b0KbvY70hjdlFQZ0ZVR2fAzA0YSK90VjbYBbQDCCyqim4v3qA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/foundation/-/foundation-10.0.0.tgz", + "integrity": "sha512-uAaJL16vBg3YG/G3IU0stH/8HVsAttUmJe3u2kiVapol8Tk/mscTlwdS95MhFpoDZ8fWWhivJcWcJ5kaqf08wQ==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/heroicons-outline": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@styled-icons/heroicons-outline/-/heroicons-outline-9.5.0.tgz", - "integrity": "sha512-MMY5NjVVimhTHhk+ADR4/a2KpjIjbmzW+SNPRCKMWgGyqXx1NjBrD72bnvrzApLdMnDvEsM/DYK6DVUW7UZhKw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/heroicons-outline/-/heroicons-outline-10.0.0.tgz", + "integrity": "sha512-N/foqMX0/2RkeREYD5heTbrX61pWlpq25Fvd88L+k1/S63f/uyRQWLrKzh5ydzzjsioKzSzvYtLsuIcJ92wRTg==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/heroicons-solid": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@styled-icons/heroicons-solid/-/heroicons-solid-9.5.0.tgz", - "integrity": "sha512-dYQYdxZ0BkGpl3nGQmkvONF1+Yq+E6I9S7snba1mirCDWQpIdgylGm+Z9CM/OvdIlhr5da00D4oZu+2CiGdCFQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/heroicons-solid/-/heroicons-solid-10.0.0.tgz", + "integrity": "sha512-pzAVHSazKhyBjGBMg6UMX/hwnrWJNvQeW0oS5oSSeQnwjCYSyAP7fd2aqZQKWg/LGymep4f/ZYADVzoxlQwNqA==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/icomoon": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/icomoon/-/icomoon-9.4.1.tgz", - "integrity": "sha512-oEw84P55EahJFdhQPBnUbvQqB08LuJKq75AkwaCSqk6w1DIEDbjY72lb6mbAwZB/AwNYeRVJJhTHaF1MNY103A==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/icomoon/-/icomoon-10.0.0.tgz", + "integrity": "sha512-3gcCl8LO/vkkctCm3TqLftVSqcWZanUuc4n7f2q5oeU5wVeBMsOkCLVmHIh0Z9I7UXYBKAzsFB1YRr7fOxwtWA==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/material": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/material/-/material-9.4.1.tgz", - "integrity": "sha512-7Ucsm7RxCrnznZb+WDptBrGE45ZVBODm6J0e+fy0hvO9sjWAcuoKffYTcQEhDS2pqC1Rcc/nSZHDbqwZrpGJVw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/material/-/material-10.0.0.tgz", + "integrity": "sha512-RNPlB7AUhPWQYLEH1/zNSu8fv7Hpdp7ylFMtMjgEyZNf25jW1NLwBBoGEZmUixc5uyIRmNk7JC/Jj2SoymAtJA==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } + } + }, + "@styled-icons/material-outlined": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/material-outlined/-/material-outlined-10.0.0.tgz", + "integrity": "sha512-QHKP4iCLMZAOEP5CaQ/YS12O7kaE2txIQmqUqaFJTgcX8P10UhkuSfBrafVRFRPiEPGWvoWNLWi6oxkyoiVATg==", + "requires": { + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } + } + }, + "@styled-icons/material-rounded": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/material-rounded/-/material-rounded-10.0.0.tgz", + "integrity": "sha512-f84febrgHalRwlVqJrjLJczW5/gp9chEv9RE0B+N6ks91V90sYNzrg5AcsfQjvZjUjTxSlJD4sZfph/2gs5S0A==", + "requires": { + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } + } + }, + "@styled-icons/material-sharp": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/material-sharp/-/material-sharp-10.0.0.tgz", + "integrity": "sha512-5gUiw0KsFY0BBUl/+Yn2KlbOEtyNh15O4NsrK7egOGC5L52LKWyScfYdzBh25MEjd+qOY3FhR64rufVnl65Xxg==", + "requires": { + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } + } + }, + "@styled-icons/material-twotone": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/material-twotone/-/material-twotone-10.0.0.tgz", + "integrity": "sha512-bAASpDp2pN+XospcBJvlsJHsPVistv8glmN6GpbsXVgKxFUCGqIE6sV5MOGKylJtAlvfv6zge0b+H0w8QmOSXA==", + "requires": { + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/octicons": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/octicons/-/octicons-9.4.1.tgz", - "integrity": "sha512-MHiMMah2agDpmk8JcNLgeZab74TO3elM8CIYIQahrucyVbHfCY7mX1z8OOyXZwrf/hgrBKK4nUM4jf0wxk70+Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@styled-icons/octicons/-/octicons-10.1.0.tgz", + "integrity": "sha512-1ThTFhAZbxz9XEGgasOZY4OGsvkUZm50PaHHjhqsMS448ZxTx99cLQ0O8PLjIuhrasO6i1rP4WCUOUWzb20aRw==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/open-iconic": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@styled-icons/open-iconic/-/open-iconic-9.5.0.tgz", - "integrity": "sha512-mSDnCPDKYXhXY+oNfgNKMj2+ltl63k8QIC6bCDsX18bYXDqkeEwKthfNw0minabyP4Tq+yJe/B03RH+EdQWmDg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/open-iconic/-/open-iconic-10.0.0.tgz", + "integrity": "sha512-dHs+3uLaXAzwPl8wJbE793I7VMcsgxgEIgHo3cff+kbCOPEa29C97qmsYU8lcnuvce7twJYT6ViaUKc3skhYZw==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/remix-fill": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/remix-fill/-/remix-fill-9.4.1.tgz", - "integrity": "sha512-OlxQudeM/u+IAHacSVwwiuSYBDSsQNKA4gr8WSFHpy1CEciLc/hE/aNJP+SLcBETdg/C/kJIj8JNme5B8aYIeg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/remix-fill/-/remix-fill-10.0.0.tgz", + "integrity": "sha512-w1JuoufsEMa3LoLk943mH8KFynqAjywdZjsvdJW7ir4ufPkCw+ZS/4jRBG5qZ3oWSTuEFJzBs/RlBoTbh/X1rg==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/remix-line": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/remix-line/-/remix-line-9.4.1.tgz", - "integrity": "sha512-NAdR8LD7ugeUhmd6W3v+GA5/6OBexe15fjQTt1kFHYclS+2nrLQ7MA4kF5SkwsRQNGPy+3CMN5cQoMy5R8NAtQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/remix-line/-/remix-line-10.0.0.tgz", + "integrity": "sha512-8Q2ch6eGm5lZiPLBGkyrPVJ0UpSM+VEtxhIrRJJFtfJmLOJegJEIfOuu42BMdXmHqS16TFQZPTP7+0BMn0Qtgw==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/styled-icon": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/styled-icon/-/styled-icon-9.4.1.tgz", - "integrity": "sha512-qF0E2QOcyR1e6rh1QkKGsFt9vuayhZBJEKRa8erbHpOYLRNiEmoF1dLEVVMUKjnj5jAzzk0fNd8jSz0su3kpKg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/styled-icon/-/styled-icon-10.0.0.tgz", + "integrity": "sha512-owIKYlIOv+daYscp6vnymOXiOAR6lsDoB2HYI10KrreovX0Ny48qbyqKjirvtxLFyEiHoz8QXSNO6QbanINv9Q==", "requires": { - "@emotion/is-prop-valid": "^0.8.6", - "tslib": "^1.9.3" + "@emotion/is-prop-valid": "^0.8.7", + "tslib": "^1.11.1" + }, + "dependencies": { + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/typicons": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@styled-icons/typicons/-/typicons-9.4.1.tgz", - "integrity": "sha512-gV3W836B7k7FuNjZJt2H7WYcV+wPf7L5RYJQUL99lPdvADeOUhG2hIVIKvmS4F2Tc3XbyYbRmSBPTHtu4Fcftg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/typicons/-/typicons-10.0.0.tgz", + "integrity": "sha512-Laaj996ZQmMpk3zU/F92S2aOfNmNoerqOPogM5I0AjwNXX9TdmrajV68kov5Sa3JnodbYSB/zrhoV9ED2OOX/w==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, "@styled-icons/zondicons": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@styled-icons/zondicons/-/zondicons-9.5.0.tgz", - "integrity": "sha512-26PYTzSr85tf1+P/N1zaqbLuJLG1YP9rp3QN1TsCcM19gT0Y3WzVUmiNHdv15jGO9bH/jpV9b7TjuT+1gkMPCw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@styled-icons/zondicons/-/zondicons-10.0.0.tgz", + "integrity": "sha512-uKr8LQjsj0awENj/8uoapfejAjwsLPuAkjOQxECGRY7qsAggdqV1F0YYo/BaV8oc0eSQ4RJmp7Fv76ecxs7uew==", "requires": { - "@styled-icons/styled-icon": "^9.4.1", - "tslib": "^1.9.3" + "@styled-icons/styled-icon": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } } }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==", + "@stylelint/postcss-css-in-js": { + "version": "0.37.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.1.tgz", + "integrity": "sha512-UMf2Rni3JGKi3ZwYRGMYJ5ipOA5ENJSKMtYA/pE1ZLURwdh7B5+z2r73RmWvub+N0UuH1Lo+TGfCgYwPvqpXNw==", + "dev": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz", + "integrity": "sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw==", + "dev": true, + "requires": { + "remark": "^12.0.0", + "unist-util-find-all-after": "^3.0.1" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==", "dev": true }, "@svgr/babel-plugin-remove-jsx-attribute": { @@ -3400,12 +3772,6 @@ "cosmiconfig": "^5.2.1" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -3535,74 +3901,32 @@ } }, "@testing-library/dom": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.12.2.tgz", - "integrity": "sha512-KCnvHra5fV+wDxg3wJObGvZFxq7v1DJt829GNFLuRDjKxVNc/B5AdsylNF5PMHFbWMXDsHwM26d2NZcZO9KjbQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.2.0.tgz", + "integrity": "sha512-K1Sao38VxsTrjTkFkzeW8m/oCtgCI5lANCE7u9ZaF+TTL3uKuiZ+vazeurxjvRHAsE6PvXjOIl6JFuZfgcWJSQ==", "dev": true, "requires": { - "@babel/runtime": "^7.6.2", - "@sheerun/mutationobserver-shim": "^0.3.2", - "@types/testing-library__dom": "^6.0.0", - "aria-query": "3.0.0", - "pretty-format": "^24.9.0", - "wait-for-expect": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/yargs": { - "version": "13.0.8", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz", - "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - } + "@babel/runtime": "^7.9.2", + "@types/testing-library__dom": "^7.0.0", + "aria-query": "^4.0.2", + "dom-accessibility-api": "^0.4.2", + "pretty-format": "^25.1.0" } }, "@testing-library/jest-dom": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.1.1.tgz", - "integrity": "sha512-7xnmBFcUmmUVAUhFiZ/u3CxFh1e46THAwra4SiiKNCW4By26RedCRwEk0rtleFPZG0wlTSNOKDvJjWYy93dp0w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.5.0.tgz", + "integrity": "sha512-7sWHrpxG4Yd8TmryI7Rtbx8Ff4mbs3ASye3oshQIuHvsCR+QHgr7rTR/PfeXvOmwUwR36wSTTAvrLKsPmr6VEQ==", "dev": true, "requires": { - "@babel/runtime": "^7.8.3", - "@types/testing-library__jest-dom": "^5.0.0", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.0.2", "chalk": "^3.0.0", "css": "^2.2.4", "css.escape": "^1.5.1", "jest-diff": "^25.1.0", "jest-matcher-utils": "^25.1.0", "lodash": "^4.17.15", - "pretty-format": "^25.1.0", "redent": "^3.0.0" }, "dependencies": { @@ -3659,14 +3983,14 @@ } }, "@testing-library/react": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.4.1.tgz", - "integrity": "sha512-sta3ui24HPgW92quHyQj6gpOkNgLNx8BX/QOU4k1bddo43ZdqlGwmzCYwL93bExfhergwiau+IzBGl7TCsSFeA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.0.2.tgz", + "integrity": "sha512-YT6Mw0oJz7R6vlEkmo1FlUD+K15FeXApOB5Ffm9zooFVnrwkt00w18dUJFMOh1yRp9wTdVRonbor7o4PIpFCmA==", "dev": true, "requires": { - "@babel/runtime": "^7.8.3", - "@testing-library/dom": "^6.11.0", - "@types/testing-library__react": "^9.1.2" + "@babel/runtime": "^7.9.2", + "@testing-library/dom": "^7.1.0", + "@types/testing-library__react": "^10.0.0" } }, "@types/anymatch": { @@ -3676,9 +4000,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", - "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", + "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -3708,9 +4032,9 @@ } }, "@types/babel__traverse": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz", - "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.10.tgz", + "integrity": "sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -3722,29 +4046,18 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, "@types/history": { "version": "4.7.5", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.5.tgz", "integrity": "sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw==", "dev": true }, + "@types/html-minifier-terser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.0.0.tgz", + "integrity": "sha512-q95SP4FdkmF0CwO0F2q0H6ZgudsApaY/yCtAQNRn1gduef5fGpyEphzy0YCq/N0UFvDSnLg5V8jFK/YGXlDiCw==", + "dev": true + }, "@types/is-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.0.tgz", @@ -3758,9 +4071,9 @@ "dev": true }, "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" @@ -3777,24 +4090,24 @@ } }, "@types/jest": { - "version": "25.1.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.1.3.tgz", - "integrity": "sha512-jqargqzyJWgWAJCXX96LBGR/Ei7wQcZBvRv0PLEu9ZByMfcs23keUJrKv9FMR6YZf9YCbfqDqgmY+JUBsnqhrg==", + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz", + "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==", "dev": true, "requires": { - "jest-diff": "^25.1.0", - "pretty-format": "^25.1.0" + "jest-diff": "^25.2.1", + "pretty-format": "^25.2.1" } }, "@types/js-cookie": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.5.tgz", - "integrity": "sha512-cpmwBRcHJmmZx0OGU7aPVwGWGbs4iKwVYchk9iuMtxNCA2zorwdaTz4GkLgs2WGxiRZRFKnV1k6tRUHX7tBMxg==" + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.6.tgz", + "integrity": "sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw==" }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", "dev": true }, "@types/node": { @@ -3803,6 +4116,12 @@ "integrity": "sha512-HU0q9GXazqiKwviVxg9SI/+t/nAsGkvLDkIdxz+ObejG2nX6Si00TeLqHMoS+a/1tjH7a8YpKVQwtgHuMQsldg==", "dev": true }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, "@types/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.2.tgz", @@ -3815,6 +4134,12 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", + "dev": true + }, "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", @@ -3828,9 +4153,9 @@ "dev": true }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.2.tgz", + "integrity": "sha512-OTPBURw7aF3q+ejjcBQKjEFsiv4hr0oEFfIgUfdaSQfvnNSSu3I/Cfy1JvoDaTnbt6ZByiFWC5Y9AMhf4x0WOA==", "dev": true, "requires": { "@types/history": "*", @@ -3838,9 +4163,9 @@ } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.31.tgz", + "integrity": "sha512-NpYJpNMWScFXtx3A2BJMeew2G3+9SEslVWMdxNJ6DLvxIuxWjY1bizK9q5Y1ujhln31vtjmhjOAYDr9Xx3k9FQ==", "dev": true, "requires": { "@types/prop-types": "*", @@ -3857,18 +4182,18 @@ } }, "@types/react-dom": { - "version": "16.9.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.5.tgz", - "integrity": "sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==", + "version": "16.9.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.6.tgz", + "integrity": "sha512-S6ihtlPMDotrlCJE9ST1fRmYrQNNwfgL61UB4I1W7M6kPulUKx9fXAleW5zpdIjUQ4fTaaog8uERezjsGUj9HQ==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-syntax-highlighter": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", - "integrity": "sha512-iMNcixH8330f2dq0RY+VOXCP8JFehgmOhLOtnO85Ty+qu0fHXJNEqWx5VuFv8v0aEq0U/N9d/k1yvA+c6PEmPw==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz", + "integrity": "sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg==", "dev": true, "requires": { "@types/react": "*" @@ -3902,71 +4227,32 @@ "dev": true }, "@types/testing-library__dom": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.12.1.tgz", - "integrity": "sha512-cgqnEjxKk31tQt29j4baSWaZPNjQf3bHalj2gcHQTpW5SuHRal76gOpF0vypeEo6o+sS5inOvvNdzLY0B3FB2A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-7.0.0.tgz", + "integrity": "sha512-1TEPWyqQ6IQ7R1hCegZmFSA3KrBQjdzJW7yC9ybpRcFst5XuPOqBGNr0mTAKbxwI/TrTyc1skeyLJrpcvAf93w==", "dev": true, "requires": { - "pretty-format": "^24.3.0" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/yargs": { - "version": "13.0.8", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz", - "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - } + "pretty-format": "^25.1.0" } }, "@types/testing-library__jest-dom": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.0.1.tgz", - "integrity": "sha512-GiPXQBVF9O4DG9cssD2d266vozBJvC5Tnv6aeH5ujgYJgys1DYm9AFCz7YC+STR5ksGxq3zCt+yP8T1wbk2DFg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.0.3.tgz", + "integrity": "sha512-NdbKc6yseg6uq4UJFwimPws0iwsGugVbPoOTP2EH+PJMJKiZsoSg5F2H3XYweOyytftCOuIMuXifBUrF9CSvaQ==", "dev": true, "requires": { "@types/jest": "*" } }, "@types/testing-library__react": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.2.tgz", - "integrity": "sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-10.0.0.tgz", + "integrity": "sha512-aByqRiRn9psCWbgW7a+gfW/LUQY/ChznnuPyWwLipcJm+rXaLNeYM4qL21jWPGn9W1H//oXgLE9aDlpkZSY3CQ==", "dev": true, "requires": { "@types/react-dom": "*", - "@types/testing-library__dom": "*" + "@types/testing-library__dom": "*", + "pretty-format": "^25.1.0" } }, "@types/uglify-js": { @@ -3978,19 +4264,11 @@ "source-map": "^0.6.1" } }, - "@types/webpack": { - "version": "4.41.2", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.2.tgz", - "integrity": "sha512-DNMQOfEvwzWRRyp6Wy9QVCgJ3gkelZsuBE2KUD318dg95s9DKGiT5CszmmV58hq8jk89I9NClre48AEy1MWAJA==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - } + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true }, "@types/webpack-env": { "version": "1.15.1", @@ -4025,185 +4303,184 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, "@xobotyi/scrollbar-width": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.3.tgz", - "integrity": "sha512-15JdCA3BjDktOdJ9xRdxkZcd2ZiHHbb3ycSPtC9JCjwkHzvrPr3n8uZoNw9CYF6UhkIMnW85d+P9mi3eXaKcFg==" + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", + "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" }, "@xtuc/ieee754": { "version": "1.2.0", @@ -4234,9 +4511,9 @@ } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "acorn-globals": { @@ -4247,14 +4524,6 @@ "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", - "dev": true - } } }, "acorn-jsx": { @@ -4342,12 +4611,6 @@ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, "ansi-align": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", @@ -4496,32 +4759,6 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", - "dev": true, - "optional": true - }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "optional": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true, - "optional": true - } - } - }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -4542,13 +4779,13 @@ } }, "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.0.2.tgz", + "integrity": "sha512-S1G1V790fTaigUSM/Gd0NngzEfiMy9uTUfMyHhKhVyy4cH5O/eTuR01ydhGL0z4Za1PXFTRGH3qL8VhUQuEO5w==", "dev": true, "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" + "@babel/runtime": "^7.7.4", + "@babel/runtime-corejs3": "^7.7.4" } }, "arr-diff": { @@ -4575,13 +4812,6 @@ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true, - "optional": true - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -4719,15 +4949,9 @@ "dev": true }, "ast-types": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", - "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==", "dev": true }, "astral-regex": { @@ -4736,36 +4960,12 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "async-retry": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", - "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", - "dev": true, - "requires": { - "retry": "0.12.0" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4779,84 +4979,190 @@ "dev": true }, "attr-accept": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.0.0.tgz", - "integrity": "sha512-I9SDP4Wvh2ItYYoafEg8hFpsBe96pfQ+eabceShXt3sw2fbIP96+Aoj9zZE0vkZNAkXXzHJATVRuWz+h9FxJxQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.1.0.tgz", + "integrity": "sha512-sLzVM3zCCmmDtDNhI0i96k6PUztkotSOXqE4kDGQt/6iDi5M+H0srjeF+QC6jN581l4X/Zq3Zu/tgcErEssavg==" }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "dev": true, "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", - "dev": true, - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "browserslist": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001038", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz", + "integrity": "sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "electron-to-chromium": { + "version": "1.3.392", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.392.tgz", + "integrity": "sha512-/hsgeVdReDsyTBE0aU9FRdh1wnNPrX3xlz3t61F+CJPOT+Umfi9DXHsCX85TEgWZQqlow0Rw44/4/jbU2Sqgkg==", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "locate-path": "^2.0.0" } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "node-releases": { + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", "dev": true }, - "supports-color": { + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "postcss": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", + "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", @@ -4921,24 +5227,24 @@ "dev": true }, "babel-jest": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.1.0.tgz", - "integrity": "sha512-tz0VxUhhOE2y+g8R2oFrO/2VtVjA1lkJeavlhExuRBg3LdNJY9gwQ+Vcvqt9+cqy71MCTJhewvTB7Qtnnr9SWg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.4.0.tgz", + "integrity": "sha512-p+epx4K0ypmHuCnd8BapfyOwWwosNCYhedetQey1awddtfmEX0MmdxctGl956uwUmjwXR5VSS5xJcGX9DvdIog==", "dev": true, "requires": { - "@jest/transform": "^25.1.0", - "@jest/types": "^25.1.0", - "@types/babel__core": "^7.1.0", + "@jest/transform": "^25.4.0", + "@jest/types": "^25.4.0", + "@types/babel__core": "^7.1.7", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.1.0", + "babel-preset-jest": "^25.4.0", "chalk": "^3.0.0", "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -4947,15 +5253,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -5015,17 +5312,42 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "dev": true, "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", @@ -5037,11 +5359,58 @@ "pkg-dir": "^3.0.0" } }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true + }, + "schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } } } }, @@ -5061,15 +5430,15 @@ } }, "babel-plugin-emotion": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.27.tgz", - "integrity": "sha512-SUNYcT4FqhOqvwv0z1oeYhqgheU8qrceLojuHyX17ngo7WtWqN5I9l3IGHzf21Xraj465CVzF4IvOlAF+3ed0A==", + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz", + "integrity": "sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.7.4", + "@emotion/hash": "0.8.0", "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.15", + "@emotion/serialize": "^0.11.16", "babel-plugin-macros": "^2.0.0", "babel-plugin-syntax-jsx": "^6.18.0", "convert-source-map": "^1.5.0", @@ -5100,9 +5469,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.1.0.tgz", - "integrity": "sha512-oIsopO41vW4YFZ9yNYoLQATnnN46lp+MZ6H4VvPKFkcc2/fkl3CfE/NZZSmnEIEsJRmJAgkVEK0R7Zbl50CpTw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.4.0.tgz", + "integrity": "sha512-M3a10JCtTyKevb0MjuH6tU+cP/NVQZ82QPADqI1RQYY1OphztsCeIeQmTsHmF/NS6m0E51Zl4QNsI3odXSQF5w==", "dev": true, "requires": { "@types/babel__traverse": "^7.0.6" @@ -5242,12 +5611,6 @@ "lodash": "^4.17.11" } }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, "babel-plugin-syntax-jsx": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", @@ -5287,12 +5650,6 @@ "esutils": "^2.0.2" } }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", - "dev": true - }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", @@ -5332,15 +5689,32 @@ "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=", "dev": true }, + "babel-preset-current-node-syntax": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz", + "integrity": "sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw==", + "dev": true, + "requires": { + "@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-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-preset-jest": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.1.0.tgz", - "integrity": "sha512-eCGn64olaqwUMaugXsTtGAM2I0QTahjEtnRu0ql8Ie+gDWAc1N6wqN0k2NilnyTunM69Pad7gJY7LOtwLimoFQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.4.0.tgz", + "integrity": "sha512-PwFiEWflHdu3JCeTr0Pb9NcHHE34qWFnPQRVPvqQITx4CsDCzs6o05923I10XvLvn9nNsRHuiVgB72wG/90ZHQ==", "dev": true, "requires": { - "@babel/plugin-syntax-bigint": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^25.1.0" + "babel-plugin-jest-hoist": "^25.4.0", + "babel-preset-current-node-syntax": "^0.1.2" } }, "babel-preset-minify": { @@ -5390,6 +5764,12 @@ } } }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -5491,409 +5871,62 @@ } } }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "bin-build": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", - "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, "optional": true, "requires": { - "decompress": "^4.0.0", - "download": "^6.2.2", - "execa": "^0.7.0", - "p-map-series": "^1.0.0", - "tempfile": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true, - "optional": true - } + "file-uri-to-path": "1.0.0" } }, - "bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, - "optional": true, "requires": { - "execa": "^0.7.0", - "executable": "^4.1.0" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true, - "optional": true - } - } - }, - "bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", - "dev": true, - "optional": true, - "requires": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" - } - }, - "bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", - "dev": true, - "optional": true, - "requires": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" - } - }, - "bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", - "dev": true, - "optional": true, - "requires": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" - }, - "dependencies": { - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "optional": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true - } - } - }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "optional": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true - } - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true - } - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true, - "optional": true - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "optional": true, - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "optional": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "optional": true - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "optional": true, - "requires": { - "prepend-http": "^2.0.0" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -5956,12 +5989,6 @@ "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -6087,9 +6114,9 @@ "integrity": "sha1-JFUm+YH6/sZbjfIb7Cl3H1RsAWA=" }, "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "browser-resolve": { @@ -6181,14 +6208,35 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001043", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001043.tgz", + "integrity": "sha512-MrBDRPJPDBYwACtSQvxg9+fkna5jPXhJlKmuxenl/ml9uf8LHKlDmLpElu+zTW/bEz7lC1m0wTDD7jiIB+hgFg==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.413", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz", + "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==", + "dev": true + }, + "node-releases": { + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", + "dev": true + } } }, "bser": { @@ -6211,38 +6259,6 @@ "isarray": "^1.0.0" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "optional": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true, - "optional": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "optional": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true, - "optional": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -6268,9 +6284,9 @@ "dev": true }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -6288,14 +6304,6 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" - }, - "dependencies": { - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } } }, "cache-base": { @@ -6315,95 +6323,22 @@ "unset-value": "^1.0.0" } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, - "optional": true, "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" + "callsites": "^2.0.0" }, "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true, - "optional": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "optional": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "optional": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "optional": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "optional": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { + "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", @@ -6437,29 +6372,20 @@ } }, "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "optional": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true, - "optional": true - } + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, "camelize": { @@ -6474,18 +6400,6 @@ "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=", "dev": true }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "caniuse-lite": { "version": "1.0.30001021", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz", @@ -6513,18 +6427,11 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "optional": true, - "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - } + "ccount": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", + "dev": true }, "chalk": { "version": "2.4.2", @@ -6543,6 +6450,12 @@ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true + }, "character-entities-legacy": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", @@ -6561,12 +6474,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", - "dev": true - }, "chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", @@ -6661,16 +6568,6 @@ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, "cli-boxes": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", @@ -6755,9 +6652,9 @@ "dev": true }, "clipboard": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", - "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", + "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", "dev": true, "optional": true, "requires": { @@ -6767,14 +6664,54 @@ } }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "clone-deep": { @@ -6790,12 +6727,6 @@ "shallow-clone": "^0.1.2" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -6816,14 +6747,21 @@ } } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, - "optional": true, "requires": { - "mimic-response": "^1.0.0" + "is-regexp": "^2.0.0" + }, + "dependencies": { + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + } } }, "co": { @@ -6849,10 +6787,16 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true + }, "collect-v8-coverage": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz", - "integrity": "sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, "collection-visit": { @@ -6865,16 +6809,6 @@ "object-visit": "^1.0.0" } }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -6890,16 +6824,6 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -6982,17 +6906,6 @@ "typedarray": "^0.0.6" } }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "optional": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -7005,13 +6918,6 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, - "console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", - "dev": true, - "optional": true - }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -7094,12 +7000,12 @@ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" }, "core-js-compat": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", - "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "dev": true, "requires": { - "browserslist": "^4.8.3", + "browserslist": "^4.8.5", "semver": "7.0.0" }, "dependencies": { @@ -7187,7 +7093,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", - "dev": true, "requires": { "gud": "^1.0.0", "warning": "^4.0.3" @@ -7252,22 +7157,6 @@ "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=", "dev": true }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, "css-in-js-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", @@ -7353,12 +7242,6 @@ "source-map": "^0.6.1" } }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, "css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", @@ -7377,123 +7260,6 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, "csso": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", @@ -7522,18 +7288,26 @@ } }, "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.2.0.tgz", + "integrity": "sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA==", "dev": true, "requires": { - "cssom": "0.3.x" + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } } }, "csstype": { @@ -7541,28 +7315,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.8.tgz", "integrity": "sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==" }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "optional": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cwebp-bin": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-5.1.0.tgz", - "integrity": "sha512-BsPKStaNr98zfxwejWWLIGELbPERULJoD2v5ijvpeutSAGsegX7gmABgnkRK7MUucCPROXXfaPqkLAwI509JzA==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.1", - "logalot": "^2.1.0" - } - }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -7587,30 +7339,17 @@ "abab": "^2.0.0", "whatwg-mimetype": "^2.2.0", "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } } }, "date-fns": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", - "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.12.0.tgz", + "integrity": "sha512-qJgn99xxKnFgB1qL4jpxU7Q2t0LOn1p8KMIveef3UZD7kqjT3tpFNNdXJelEHhE+rUgffriXriw/sOSU+cS1Hw==" }, "dayjs": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.21.tgz", - "integrity": "sha512-1kbWK0hziklUHkGgiKr7xm59KwAg/K3Tp7H/8X+f58DnNCwY3pKYjOCJpIlVs125FRBukGVZdKZojC073D0IeQ==" + "version": "1.8.24", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.24.tgz", + "integrity": "sha512-bImQZbBv86zcOWOq6fLg7r4aqMx8fScdmykA7cSh+gH1Yh8AM0Dbw0gHYrsOrza6oBBnkK+/OaR+UAa9UsMrDw==" }, "debug": { "version": "4.1.1", @@ -7627,157 +7366,29 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "dev": true, - "optional": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true - } - } - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "optional": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "optional": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "optional": true - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "optional": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true, - "optional": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, - "optional": true, "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "optional": true + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true } } }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "optional": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "optional": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - } - } + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "dedent": { "version": "0.7.0", @@ -7789,7 +7400,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, "requires": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -7821,7 +7431,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -7867,56 +7476,6 @@ } } }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -7936,12 +7495,6 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -7964,12 +7517,6 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -8010,9 +7557,9 @@ } }, "diff-sequences": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.1.0.tgz", - "integrity": "sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", "dev": true }, "diffie-hellman": { @@ -8062,6 +7609,12 @@ "esutils": "^2.0.2" } }, + "dom-accessibility-api": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.4.3.tgz", + "integrity": "sha512-JZ8iPuEHDQzq6q0k7PKMGbrIdsgBB7TRrtVOUm4nSMCExlg5qQG4KXWTH2k90yggjM4tTumRGwTKJSldMzKyLA==", + "dev": true + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -8158,36 +7711,6 @@ "requires": { "no-case": "^3.0.3", "tslib": "^1.10.0" - }, - "dependencies": { - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dev": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dev": true, - "requires": { - "lower-case": "^2.0.1", - "tslib": "^1.10.0" - } - } - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" } }, "dotenv": { @@ -8220,83 +7743,30 @@ "dotenv-defaults": "^1.0.2" } }, - "download": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", - "dev": true, - "optional": true, + "downshift": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-5.1.1.tgz", + "integrity": "sha512-QlUF0obUybUdvPu2JvKME80d0ecSa90oyq67bcMw4jLmsDkRT3/Dr3SvsEZmEg8pF5wWX+FkHCfIyGicPaQUZQ==", "requires": { - "caw": "^2.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.0.0", - "ext-name": "^5.0.0", - "file-type": "5.2.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^7.0.0", - "make-dir": "^1.0.0", - "p-event": "^1.0.0", - "pify": "^3.0.0" + "@babel/runtime": "^7.9.1", + "compute-scroll-into-view": "^1.0.13", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" }, "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "optional": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, - "downshift": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-5.0.3.tgz", - "integrity": "sha512-J6cfEcv0qbCUuI4yUhdoj08aJ025MxjLe+GkQ53eY5iC1NrjMj+FgjGkA0dGsyHm5JzVuKTJFd5wQNWOvsLP0g==", - "requires": { - "@babel/runtime": "^7.4.5", - "compute-scroll-into-view": "^1.0.9", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" - } - }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true, - "optional": true - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -8434,16 +7904,6 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "env-ci": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-2.6.0.tgz", - "integrity": "sha512-tnOi9qgtDxY3mvf69coXLHbSZtFMNGAJ1s/huirAhJZTx9rs/1qgFjl+6Z5ULQCfpDmlsf34L7wm+eJGwMazYg==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "java-properties": "^0.2.9" - } - }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -8474,7 +7934,6 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.1.tgz", "integrity": "sha512-WmWNHWmm/LDwK8jaeZic/g6sU1ZckM+vvOyCV1qFRhJJ6hzve6DRgthNQB7Lra1ocrw68HexLKYgtdxIPcb3Fg==", - "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -8511,9 +7970,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", @@ -8541,7 +8000,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -8549,9 +8007,9 @@ } }, "es5-shim": { - "version": "4.5.13", - "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.13.tgz", - "integrity": "sha512-xi6hh6gsvDE0MaW4Vp1lgNEBpVcCXRWfPXj5egDvtgLz4L9MEvNwYEMdJH+JJinWkwa8c3c3o5HduV7dB/e1Hw==", + "version": "4.5.14", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.14.tgz", + "integrity": "sha512-7SwlpL+2JpymWTt8sNLuC2zdhhc+wrfe5cMPI2j0o6WsPdfAiPwmFy2f0AocPB4RQVBOZ9kNTgi5YF7TdhkvEg==", "dev": true }, "es6-shim": { @@ -8573,12 +8031,12 @@ "dev": true }, "escodegen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", - "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", "dev": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", @@ -8688,9 +8146,9 @@ } }, "eslint-config-prettier": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz", - "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz", + "integrity": "sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -8724,9 +8182,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "dev": true, "requires": { "debug": "^2.6.9", @@ -8809,9 +8267,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -8962,18 +8420,18 @@ } }, "eslint-plugin-prettier": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", - "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", + "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.18.3.tgz", - "integrity": "sha512-Bt56LNHAQCoou88s8ViKRjMB2+36XRejCQ1VoLj716KI1MoE99HpTVvIThJ0rvFmG4E4Gsq+UgToEjn+j044Bg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", + "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", "dev": true, "requires": { "array-includes": "^3.1.1", @@ -8984,8 +8442,10 @@ "object.fromentries": "^2.0.2", "object.values": "^1.1.1", "prop-types": "^15.7.2", - "resolve": "^1.14.2", - "string.prototype.matchall": "^4.0.2" + "resolve": "^1.15.1", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.2", + "xregexp": "^4.3.0" }, "dependencies": { "doctrine": { @@ -8996,13 +8456,28 @@ "requires": { "esutils": "^2.0.2" } + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "eslint-plugin-react-hooks": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.0.tgz", - "integrity": "sha512-bzvdX47Jx847bgAYf0FPX3u1oxU+mKU8tqrpj4UX9A96SbAmj/HVEefEy6rJUog5u8QIlOPTKZcBpGn5kkKfAQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-3.0.0.tgz", + "integrity": "sha512-EjxTHxjLKIBWFgDJdhKKzLh5q+vjTFrqNZX36uIxWS4OfyXe5DawqPj3U5qeJ1ngLwatjzQnmR0Lz0J0YH3kxw==", "dev": true }, "eslint-scope": { @@ -9042,17 +8517,17 @@ }, "dependencies": { "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true } } }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { @@ -9122,111 +8597,34 @@ "safe-buffer": "^5.1.1" } }, - "exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, - "optional": true, "requires": { - "execa": "^0.7.0", - "p-finally": "^1.0.0", - "pify": "^3.0.0", - "rimraf": "^2.5.4", - "tempfile": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true, - "optional": true - } - } - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" } }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dev": true, - "optional": true, "requires": { - "pify": "^2.2.0" + "clone-regexp": "^2.1.0" } }, "exit": { @@ -9285,33 +8683,24 @@ } } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, "expect": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.1.0.tgz", - "integrity": "sha512-wqHzuoapQkhc3OKPlrpetsfueuEiMf3iWh0R8+duCu9PIjXoP7HgD5aeypwTnXUAjC8aMsiVDaWwlbJ1RlQ38g==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.4.0.tgz", + "integrity": "sha512-7BDIX99BTi12/sNGJXA9KMRcby4iAmu1xccBOhyKCyEhjcVKS3hPmHdA/4nSI9QGIOkUropKqr3vv7WMDM5lvQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "ansi-styles": "^4.0.0", - "jest-get-type": "^25.1.0", - "jest-matcher-utils": "^25.1.0", - "jest-message-util": "^25.1.0", - "jest-regex-util": "^25.1.0" + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.4.0", + "jest-message-util": "^25.4.0", + "jest-regex-util": "^25.2.6" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -9320,21 +8709,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -9370,60 +8744,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "diff-sequences": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.1.0.tgz", - "integrity": "sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-diff": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.1.0.tgz", - "integrity": "sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "diff-sequences": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" - } - }, - "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz", - "integrity": "sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "jest-diff": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" - } - }, - "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", - "dev": true, - "requires": { - "@jest/types": "^25.1.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -9496,27 +8822,6 @@ } } }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "optional": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "optional": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -9640,42 +8945,12 @@ } } }, - "extract-text-webpack-plugin": { - "version": "4.0.0-beta.0", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz", - "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", - "dev": true, - "requires": { - "async": "^2.4.1", - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "fake-tag": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-tag/-/fake-tag-1.0.1.tgz", - "integrity": "sha512-qmewZoBpa71mM+y6oxXYW/d1xOYQmeIvnEXAt1oCmdP0sqcogWYLepR87QL1jQVLSVMVYDq2cjY6ec/Wu8/4pg==", - "dev": true - }, "faker": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", @@ -9731,12 +9006,6 @@ } } }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", - "dev": true - }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -9749,12 +9018,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fast-safe-stringify": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-1.2.3.tgz", - "integrity": "sha512-QJYT/i0QYoiZBQ71ivxdyTqkwKkQ0oxACXHYxH2zYHJEgzi2LsbjgvtzTbLi1SZcF190Db2YP7I7eTsU2egOlw==", - "dev": true - }, "fast-shallow-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", @@ -9766,12 +9029,12 @@ "integrity": "sha1-kSLUBtTJ2YvqZEpraFPVh0uHsCg=" }, "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "dev": true, "requires": { - "reusify": "^1.0.0" + "reusify": "^1.0.4" } }, "fault": { @@ -9801,20 +9064,10 @@ "bser": "2.1.1" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "optional": true, - "requires": { - "pend": "~1.2.0" - } - }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, "figures": { @@ -9835,54 +9088,6 @@ "flat-cache": "^2.0.1" } }, - "file-loader": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-5.1.0.tgz", - "integrity": "sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg==", - "dev": true, - "requires": { - "loader-utils": "^1.4.0", - "schema-utils": "^2.5.0" - }, - "dependencies": { - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz", - "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - } - } - }, "file-selector": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.1.12.tgz", @@ -9914,24 +9119,9 @@ "path-is-absolute": "^1.0.0", "rimraf": "^2.2.8" } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } } } }, - "file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", - "dev": true - }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -9939,25 +9129,6 @@ "dev": true, "optional": true }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true, - "optional": true - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "optional": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -10020,9 +9191,9 @@ } }, "find-cache-dir": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.0.tgz", - "integrity": "sha512-PtXtQb7IrD8O+h6Cq1dbpJH5NzD8+9keN1zZ0YlpDzl1PwXEJEBj6u1Xa92t1Hwluoozd9TNKul5Hi2iqpsWwg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -10097,13 +9268,48 @@ "dev": true }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^2.0.0" + }, + "dependencies": { + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } } }, "find-versions": { @@ -10115,41 +9321,6 @@ "semver-regex": "^2.0.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -10172,12 +9343,6 @@ } } }, - "flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", - "dev": true - }, "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", @@ -10195,9 +9360,9 @@ } }, "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-3.0.0.tgz", + "integrity": "sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==" }, "focus-lock": { "version": "0.6.6", @@ -10205,32 +9370,6 @@ "integrity": "sha512-Dx69IXGCq1qsUExWuG+5wkiMqVM/zGx/reXSJSLogECwp3x6KeNQZ+NAetgxEFpnC41rD8U3+jRCW68+LNzdtw==", "dev": true }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -10309,9 +9448,9 @@ "dev": true }, "formik": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.1.3.tgz", - "integrity": "sha512-twK9sxWt+M2NSXxHBw6TiXNJ72iPVhgUUjeZMD8RYQC+VU7Hrxu6ElCz1xGmbT0q2DbHk4IxoupCkGEPwERzEA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.1.4.tgz", + "integrity": "sha512-oKz8S+yQBzuQVSEoxkqqJrKQS5XJASWGVn6mrs+oTWrBoHgByVwwI1qHiVc9GKDpZBU9vAxXYAKz2BvujlwunA==", "dev": true, "requires": { "deepmerge": "^2.1.1", @@ -10322,6 +9461,18 @@ "scheduler": "^0.18.0", "tiny-warning": "^1.0.2", "tslib": "^1.10.0" + }, + "dependencies": { + "scheduler": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } } }, "forwarded": { @@ -10355,13 +9506,6 @@ "readable-stream": "^2.0.0" } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "optional": true - }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -10371,6 +9515,17 @@ "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" + }, + "dependencies": { + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } } }, "fs-minipass": { @@ -10401,9 +9556,9 @@ "dev": true }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "dev": true, "optional": true, "requires": { @@ -10457,7 +9612,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "dev": true, "optional": true @@ -10629,7 +9784,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "dev": true, "optional": true @@ -10654,12 +9809,12 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -10669,7 +9824,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "dev": true, "optional": true, @@ -10698,7 +9853,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "dev": true, "optional": true, @@ -10723,13 +9878,14 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "dev": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -10809,18 +9965,10 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } } }, "readable-stream": { - "version": "2.3.6", + "version": "2.3.7", "bundled": true, "dev": true, "optional": true, @@ -10961,8 +10109,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.2", @@ -10988,9 +10135,9 @@ "dev": true }, "fuse.js": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.4.6.tgz", - "integrity": "sha512-H6aJY4UpLFwxj1+5nAvufom5b2BT2v45P1MkPvdGIK8fWjQx/7o6tTT1+ALV0yawQvbmvCF0ufl2et8eJ7v7Cg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", "dev": true }, "gauge": { @@ -11016,9 +10163,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-own-enumerable-property-symbols": { @@ -11027,16 +10174,6 @@ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "optional": true, - "requires": { - "npm-conf": "^1.1.0" - } - }, "get-stdin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", @@ -11067,19 +10204,6 @@ "assert-plus": "^1.0.0" } }, - "gifsicle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-4.0.1.tgz", - "integrity": "sha512-A/kiCLfDdV+ERV/UB+2O41mifd+RxH8jlRG8DMxZO84Bma/Fw0htqZ+hY2iaalLRNyUu7tYZQslqUBJxBggxbg==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "execa": "^1.0.0", - "logalot": "^2.0.0" - } - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -11225,6 +10349,21 @@ } } }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -11235,51 +10374,12 @@ "delegate": "^3.1.2" } }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "optional": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - } - } - }, "graceful-fs": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true, - "optional": true - }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -11290,8 +10390,7 @@ "gud": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", - "dev": true + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, "gzip-size": { "version": "5.1.1", @@ -11327,6 +10426,12 @@ "har-schema": "^2.0.0" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "harmony-reflect": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", @@ -11337,7 +10442,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -11357,28 +10461,10 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "optional": true - }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "optional": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, "has-unicode": { "version": "2.0.1", @@ -11445,15 +10531,15 @@ } }, "hast-util-parse-selector": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.3.tgz", - "integrity": "sha512-nxbeqjQNxsvo/uYYAw9kij6td05YVUlf1qti09rVfbWSLT5H6wo3c+USIwX6nzXWk5kFZzXnEqO82856r0aM2Q==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", + "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==", "dev": true }, "hastscript": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.1.tgz", - "integrity": "sha512-xHo1Hkcqd0LlWNuDL3/BxwhgAGp3d7uEvCMgCTrBY+zsOooPPH+8KAvW8PCgl+GB8H3H44nfSaF0A4BQ+4xlYg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", "dev": true, "requires": { "comma-separated-tokens": "^1.0.0", @@ -11468,12 +10554,6 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, "highlight.js": { "version": "9.13.1", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", @@ -11514,45 +10594,12 @@ "react-is": "^16.7.0" } }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, "hosted-git-info": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "html-encoding-sniffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", @@ -11569,15 +10616,15 @@ "dev": true }, "html-escaper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", - "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "html-minifier-terser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.0.4.tgz", - "integrity": "sha512-fHwmKQ+GzhlqdxEtwrqLT7MSuheiA+rif5/dZgbz3GjoMXJzcRzy1L9NXoiiyxrnap+q5guSiv8Tz5lrh9g42g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.0.5.tgz", + "integrity": "sha512-cBSFFghQh/uHcfSiL42KxxIRMF7A144+3E44xdlctIjxEmkEfCvouxNyFH2wysXk1fCGBPwtcr3hDWlGTfkDew==", "dev": true, "requires": { "camel-case": "^4.1.1", @@ -11594,16 +10641,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true - }, - "param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", - "dev": true, - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } } } }, @@ -11615,18 +10652,43 @@ "void-elements": "^2.0.1" } }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, "html-webpack-plugin": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", - "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.3.tgz", + "integrity": "sha512-XCm5MGK6Yv/ey30fbhqjKIGm1r6G1HxmNorJ/xUdL/Zj3mOLtb9ZHEEIw0e4h3VzgyUrp8szCJh3VN9z1LNx7A==", "dev": true, "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", "html-minifier-terser": "^5.0.1", "loader-utils": "^1.2.3", "lodash": "^4.17.15", "pretty-error": "^2.1.1", "tapable": "^1.1.3", "util.promisify": "1.0.0" + }, + "dependencies": { + "@types/webpack": { + "version": "4.41.10", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.10.tgz", + "integrity": "sha512-vIy0qaq8AjOjZLuFPqpo7nAJzcoVXMdw3mvpNN07Uvdy0p1IpJeLNBe3obdRP7FX2jIusDE7z1pZa0A6qYUgnA==", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + } } }, "htmlparser2": { @@ -11656,13 +10718,6 @@ } } }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true, - "optional": true - }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -11714,14 +10769,14 @@ "dev": true }, "husky": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", - "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", + "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", "dev": true, "requires": { - "chalk": "^3.0.0", + "chalk": "^4.0.0", "ci-info": "^2.0.0", - "compare-versions": "^3.5.1", + "compare-versions": "^3.6.0", "cosmiconfig": "^6.0.0", "find-versions": "^3.2.0", "opencollective-postinstall": "^2.0.2", @@ -11742,9 +10797,9 @@ } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -11838,9 +10893,9 @@ "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" }, "i18next": { - "version": "19.3.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.3.2.tgz", - "integrity": "sha512-QDBQ8MqFWi4+L9OQjjZEKVyg9uSTy3NTU3Ri53QHe7nxtV+KD4PyLB8Kxu58gr6b9y5l8cU3mCiNHVeoxPMzAQ==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.4.2.tgz", + "integrity": "sha512-gDctWhIgACc92Uub7vb0GTdtLKZTgiDIiBkGExOSPgqhCSyyPOb8svLxixzzSS3yMjC3fduK/BbkRt95JHwvDw==", "requires": { "@babel/runtime": "^7.3.1" } @@ -11890,275 +10945,117 @@ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, - "image-webpack-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/image-webpack-loader/-/image-webpack-loader-6.0.0.tgz", - "integrity": "sha512-H5qZ+DH88A4mW9CPJpa7VH8B2dxLbzqiMH+BQYtMw8v2jaFwZPQOS/NfkSaJMz76dsi/uw+0LY4uHR1iK6hq8g==", + "immer": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", + "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "imagemin": "^7.0.0", - "imagemin-gifsicle": "^6.0.1", - "imagemin-mozjpeg": "^8.0.0", - "imagemin-optipng": "^7.0.0", - "imagemin-pngquant": "^8.0.0", - "imagemin-svgo": "^7.0.0", - "imagemin-webp": "^5.1.0", - "loader-utils": "^1.2.3", - "object-assign": "^4.1.1" + "import-from": "^2.1.0" } }, - "imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + } + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "path-type": "^4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" + "p-locate": "^4.1.0" } }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "p-limit": "^2.2.0" } }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "semver": "^6.0.0" + "find-up": "^4.0.0" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "imagemin-gifsicle": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz", - "integrity": "sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng==", - "dev": true, - "optional": true, - "requires": { - "exec-buffer": "^3.0.0", - "gifsicle": "^4.0.0", - "is-gif": "^3.0.0" - } - }, - "imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==", - "dev": true, - "optional": true, - "requires": { - "execa": "^1.0.0", - "is-jpg": "^2.0.0", - "mozjpeg": "^6.0.0" - } - }, - "imagemin-optipng": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.1.0.tgz", - "integrity": "sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==", - "dev": true, - "optional": true, - "requires": { - "exec-buffer": "^3.0.0", - "is-png": "^2.0.0", - "optipng-bin": "^6.0.0" - } - }, - "imagemin-pngquant": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-8.0.0.tgz", - "integrity": "sha512-PVq0diOxO+Zyq/zlMCz2Pfu6mVLHgiT1GpW702OwVlnej+NhS6ZQegYi3OFEDW8d7GxouyR5e8R+t53SMciOeg==", - "dev": true, - "optional": true, - "requires": { - "execa": "^1.0.0", - "is-png": "^2.0.0", - "is-stream": "^2.0.0", - "ow": "^0.13.2", - "pngquant-bin": "^5.0.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "optional": true - } - } - }, - "imagemin-svgo": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.0.0.tgz", - "integrity": "sha512-+iGJFaPIMx8TjFW6zN+EkOhlqcemdL7F3N3Y0wODvV2kCUBuUtZK7DRZc1+Zfu4U2W/lTMUyx2G8YMOrZntIWg==", - "dev": true, - "optional": true, - "requires": { - "is-svg": "^3.0.0", - "svgo": "^1.0.5" - } - }, - "imagemin-webp": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-5.1.0.tgz", - "integrity": "sha512-BsPTpobgbDPFBBsI3UflnU/cpIVa15qInEDBcYBw16qI/6XiB4vDF/dGp9l4aM3pfFDDYqR0mANMcKpBD7wbCw==", - "dev": true, - "optional": true, - "requires": { - "cwebp-bin": "^5.0.0", - "exec-buffer": "^3.0.0", - "is-cwebp-readable": "^2.0.1" - } - }, - "immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true } } }, - "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true, - "optional": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -12311,17 +11208,6 @@ "integrity": "sha512-e0/LknJ8wpMMhTiWcjivB+ESwIuvHnBSlBbmP/pSb8CQJldoj1p2qv7xGZ/+BtbTziYRFSz8OsvdbiX45LtYQA==", "dev": true }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "optional": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -12331,12 +11217,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -12350,15 +11230,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, "is-accessor-descriptor": { @@ -12393,6 +11267,12 @@ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, "is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", @@ -12406,8 +11286,7 @@ "is-arguments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" }, "is-arrayish": { "version": "0.2.1", @@ -12425,16 +11304,15 @@ } }, "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" }, "is-ci": { "version": "2.0.0", @@ -12445,39 +11323,6 @@ "ci-info": "^2.0.0" } }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-cwebp-readable": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-2.0.1.tgz", - "integrity": "sha1-r7k7DAq9CiUQEBauM66ort+SbSY=", - "dev": true, - "optional": true, - "requires": { - "file-type": "^4.3.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true, - "optional": true - } - } - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -12507,8 +11352,7 @@ "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" }, "is-decimal": { "version": "1.0.4", @@ -12569,16 +11413,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -12600,25 +11434,6 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, - "is-gif": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", - "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==", - "dev": true, - "optional": true, - "requires": { - "file-type": "^10.4.0" - }, - "dependencies": { - "file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", - "dev": true, - "optional": true - } - } - }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -12634,26 +11449,12 @@ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, - "is-jpg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", - "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=", - "dev": true, - "optional": true - }, "is-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", "dev": true }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true, - "optional": true - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -12701,30 +11502,6 @@ "symbol-observable": "^1.1.0" } }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -12748,13 +11525,6 @@ } } }, - "is-png": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", - "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", - "dev": true, - "optional": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -12765,7 +11535,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -12776,19 +11545,6 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "optional": true - }, "is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", @@ -12813,20 +11569,10 @@ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, "requires": { "has-symbols": "^1.0.1" } @@ -12837,10 +11583,10 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "dev": true }, "is-window": { @@ -12855,6 +11601,12 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true + }, "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", @@ -12891,9 +11643,9 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.0.tgz", - "integrity": "sha512-Nm4wVHdo7ZXSG30KjZ2Wl5SU/Bw7bDx1PdaiIFzEStdjs0H12mOTncn1GVYuqQSaZxpg87VGBRsVRPGD2cD1AQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz", + "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==", "dev": true, "requires": { "@babel/core": "^7.7.5", @@ -12931,9 +11683,9 @@ "dev": true }, "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", + "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", "dev": true, "requires": { "semver": "^6.0.0" @@ -12968,26 +11720,15 @@ } }, "istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "optional": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, "iterate-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", @@ -13004,27 +11745,21 @@ "iterate-iterator": "^1.0.1" } }, - "java-properties": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-0.2.10.tgz", - "integrity": "sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w==", - "dev": true - }, "jest": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.1.0.tgz", - "integrity": "sha512-FV6jEruneBhokkt9MQk0WUFoNTwnF76CLXtwNMfsc0um0TlB/LG2yxUd0KqaFjEJ9laQmVWQWS0sG/t2GsuI0w==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-25.4.0.tgz", + "integrity": "sha512-XWipOheGB4wai5JfCYXd6vwsWNwM/dirjRoZgAa7H2wd8ODWbli2AiKjqG8AYhyx+8+5FBEdpO92VhGlBydzbw==", "dev": true, "requires": { - "@jest/core": "^25.1.0", + "@jest/core": "^25.4.0", "import-local": "^3.0.2", - "jest-cli": "^25.1.0" + "jest-cli": "^25.4.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -13033,21 +11768,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -13058,12 +11778,6 @@ "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -13074,17 +11788,6 @@ "supports-color": "^7.1.0" } }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -13100,137 +11803,31 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, "jest-cli": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.1.0.tgz", - "integrity": "sha512-p+aOfczzzKdo3AsLJlhs8J5EW6ffVidfSZZxXedJ0mHPBOln1DccqFmGCoO8JWd4xRycfmwy1eoQkMsF8oekPg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.4.0.tgz", + "integrity": "sha512-usyrj1lzCJZMRN1r3QEdnn8e6E6yCx/QN7+B1sLoA68V7f3WlsxSSQfy0+BAwRiF4Hz2eHauf11GZG3PIfWTXQ==", "dev": true, "requires": { - "@jest/core": "^25.1.0", - "@jest/test-result": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/core": "^25.4.0", + "@jest/test-result": "^25.4.0", + "@jest/types": "^25.4.0", "chalk": "^3.0.0", "exit": "^0.1.2", "import-local": "^3.0.2", "is-ci": "^2.0.0", - "jest-config": "^25.1.0", - "jest-util": "^25.1.0", - "jest-validate": "^25.1.0", + "jest-config": "^25.4.0", + "jest-util": "^25.4.0", + "jest-validate": "^25.4.0", "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^15.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" + "realpath-native": "^2.0.0", + "yargs": "^15.3.1" } }, "supports-color": { @@ -13241,76 +11838,24 @@ "requires": { "has-flag": "^4.0.0" } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz", - "integrity": "sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^16.1.0" - } - }, - "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, "jest-changed-files": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.1.0.tgz", - "integrity": "sha512-bdL1aHjIVy3HaBO3eEQeemGttsq1BDlHgWcOjEOIAcga7OOEGWHD2WSu8HhL7I1F0mFFyci8VKU4tRNk+qtwDA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.4.0.tgz", + "integrity": "sha512-VR/rfJsEs4BVMkwOTuStRyS630fidFVekdw/lBaBQjx9KK3VZFOZ2c0fsom2fRp8pMCrCTP6LGna00o/DXGlqA==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "execa": "^3.2.0", "throat": "^5.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -13319,15 +11864,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -13364,9 +11900,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -13470,34 +12006,35 @@ } }, "jest-config": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.1.0.tgz", - "integrity": "sha512-tLmsg4SZ5H7tuhBC5bOja0HEblM0coS3Wy5LTCb2C8ZV6eWLewHyK+3qSq9Bi29zmWQ7ojdCd3pxpx4l4d2uGw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.4.0.tgz", + "integrity": "sha512-egT9aKYxMyMSQV1aqTgam0SkI5/I2P9qrKexN5r2uuM2+68ypnc+zPGmfUxK7p1UhE7dYH9SLBS7yb+TtmT1AA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.1.0", - "@jest/types": "^25.1.0", - "babel-jest": "^25.1.0", + "@jest/test-sequencer": "^25.4.0", + "@jest/types": "^25.4.0", + "babel-jest": "^25.4.0", "chalk": "^3.0.0", + "deepmerge": "^4.2.2", "glob": "^7.1.1", - "jest-environment-jsdom": "^25.1.0", - "jest-environment-node": "^25.1.0", - "jest-get-type": "^25.1.0", - "jest-jasmine2": "^25.1.0", - "jest-regex-util": "^25.1.0", - "jest-resolve": "^25.1.0", - "jest-util": "^25.1.0", - "jest-validate": "^25.1.0", + "jest-environment-jsdom": "^25.4.0", + "jest-environment-node": "^25.4.0", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.4.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.4.0", + "jest-util": "^25.4.0", + "jest-validate": "^25.4.0", "micromatch": "^4.0.2", - "pretty-format": "^25.1.0", - "realpath-native": "^1.1.0" + "pretty-format": "^25.4.0", + "realpath-native": "^2.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -13506,15 +12043,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -13556,25 +12084,25 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", - "dev": true - }, "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" @@ -13592,17 +12120,35 @@ } }, "jest-diff": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.1.0.tgz", - "integrity": "sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.4.0.tgz", + "integrity": "sha512-kklLbJVXW0y8UKOWOdYhI6TH5MG6QAxrWiBMgQaPIuhj3dNFGirKCd+/xfplBXICQ7fI+3QcqHm9p9lWu1N6ug==", "dev": true, "requires": { "chalk": "^3.0.0", - "diff-sequences": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.4.0" }, "dependencies": { + "@jest/types": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -13644,6 +12190,18 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "pretty-format": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", + "dev": true, + "requires": { + "@jest/types": "^25.4.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -13656,31 +12214,31 @@ } }, "jest-docblock": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.1.0.tgz", - "integrity": "sha512-370P/mh1wzoef6hUKiaMcsPtIapY25suP6JqM70V9RJvdKLrV4GaGbfUseUVk4FZJw4oTZ1qSCJNdrClKt5JQA==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", + "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.1.0.tgz", - "integrity": "sha512-R9EL8xWzoPySJ5wa0DXFTj7NrzKpRD40Jy+zQDp3Qr/2QmevJgkN9GqioCGtAJ2bW9P/MQRznQHQQhoeAyra7A==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.4.0.tgz", + "integrity": "sha512-lwRIJ8/vQU/6vq3nnSSUw1Y3nz5tkYSFIywGCZpUBd6WcRgpn8NmJoQICojbpZmsJOJNHm0BKdyuJ6Xdx+eDQQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "chalk": "^3.0.0", - "jest-get-type": "^25.1.0", - "jest-util": "^25.1.0", - "pretty-format": "^25.1.0" + "jest-get-type": "^25.2.6", + "jest-util": "^25.4.0", + "pretty-format": "^25.4.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -13689,15 +12247,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -13745,19 +12294,13 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", - "dev": true - }, "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" @@ -13775,23 +12318,23 @@ } }, "jest-environment-jsdom": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.1.0.tgz", - "integrity": "sha512-ILb4wdrwPAOHX6W82GGDUiaXSSOE274ciuov0lztOIymTChKFtC02ddyicRRCdZlB5YSrv3vzr1Z5xjpEe1OHQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.4.0.tgz", + "integrity": "sha512-KTitVGMDrn2+pt7aZ8/yUTuS333w3pWt1Mf88vMntw7ZSBNDkRS6/4XLbFpWXYfWfp1FjcjQTOKzbK20oIehWQ==", "dev": true, "requires": { - "@jest/environment": "^25.1.0", - "@jest/fake-timers": "^25.1.0", - "@jest/types": "^25.1.0", - "jest-mock": "^25.1.0", - "jest-util": "^25.1.0", - "jsdom": "^15.1.1" + "@jest/environment": "^25.4.0", + "@jest/fake-timers": "^25.4.0", + "@jest/types": "^25.4.0", + "jest-mock": "^25.4.0", + "jest-util": "^25.4.0", + "jsdom": "^15.2.1" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -13800,21 +12343,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", - "dev": true - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -13850,75 +12378,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.2.0.tgz", - "integrity": "sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -13927,60 +12392,33 @@ "requires": { "has-flag": "^4.0.0" } - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", - "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==", - "dev": true } } }, "jest-environment-jsdom-global": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.2.1.tgz", - "integrity": "sha512-XK/ddDfv8rURHoyfZwmhePv1mof3XFlPvkGfywIYU5Ype4/S/SRA0KNAdma9CuLV/KI+1jQh5BrGM3AqpJ/jRA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-global/-/jest-environment-jsdom-global-2.0.2.tgz", + "integrity": "sha512-2jNQq5ytKmMHB8sxn/jktP9ldcLMT+scjvJPljqjaH3sw9exTxqINhH8qvROgTwn9CJGVEb3pfa//nVT+yQBnA==", "dev": true }, "jest-environment-node": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.1.0.tgz", - "integrity": "sha512-U9kFWTtAPvhgYY5upnH9rq8qZkj6mYLup5l1caAjjx9uNnkLHN2xgZy5mo4SyLdmrh/EtB9UPpKFShvfQHD0Iw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.4.0.tgz", + "integrity": "sha512-wryZ18vsxEAKFH7Z74zi/y/SyI1j6UkVZ6QsllBuT/bWlahNfQjLNwFsgh/5u7O957dYFoXj4yfma4n4X6kU9A==", "dev": true, "requires": { - "@jest/environment": "^25.1.0", - "@jest/fake-timers": "^25.1.0", - "@jest/types": "^25.1.0", - "jest-mock": "^25.1.0", - "jest-util": "^25.1.0" + "@jest/environment": "^25.4.0", + "@jest/fake-timers": "^25.4.0", + "@jest/types": "^25.4.0", + "jest-mock": "^25.4.0", + "jest-util": "^25.4.0", + "semver": "^6.3.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -13989,15 +12427,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14039,6 +12468,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -14051,34 +12486,35 @@ } }, "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", "dev": true }, "jest-haste-map": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.1.0.tgz", - "integrity": "sha512-/2oYINIdnQZAqyWSn1GTku571aAfs8NxzSErGek65Iu5o8JYb+113bZysRMcC/pjE5v9w0Yz+ldbj9NxrFyPyw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.4.0.tgz", + "integrity": "sha512-5EoCe1gXfGC7jmXbKzqxESrgRcaO3SzWXGCnvp9BcT0CFMyrB1Q6LIsjl9RmvmJGQgW297TCfrdgiy574Rl9HQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.1.2", "graceful-fs": "^4.2.3", - "jest-serializer": "^25.1.0", - "jest-util": "^25.1.0", - "jest-worker": "^25.1.0", + "jest-serializer": "^25.2.6", + "jest-util": "^25.4.0", + "jest-worker": "^25.4.0", "micromatch": "^4.0.2", "sane": "^4.0.3", - "walker": "^1.0.7" + "walker": "^1.0.7", + "which": "^2.0.2" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14087,15 +12523,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14155,9 +12582,9 @@ "dev": true }, "jest-worker": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", - "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.4.0.tgz", + "integrity": "sha512-ghAs/1FtfYpMmYQ0AHqxV62XPvKdUDIBBApMZfly+E9JEmYh2K45G0R5dWxx986RN12pRCxsViwQVtGl+N4whw==", "dev": true, "requires": { "merge-stream": "^2.0.0", @@ -14172,38 +12599,47 @@ "requires": { "has-flag": "^4.0.0" } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, "jest-jasmine2": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.1.0.tgz", - "integrity": "sha512-GdncRq7jJ7sNIQ+dnXvpKO2MyP6j3naNK41DTTjEAhLEdpImaDA9zSAZwDhijjSF/D7cf4O5fdyUApGBZleaEg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.4.0.tgz", + "integrity": "sha512-QccxnozujVKYNEhMQ1vREiz859fPN/XklOzfQjm2j9IGytAkUbSwjFRBtQbHaNZ88cItMpw02JnHGsIdfdpwxQ==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.1.0", - "@jest/source-map": "^25.1.0", - "@jest/test-result": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/environment": "^25.4.0", + "@jest/source-map": "^25.2.6", + "@jest/test-result": "^25.4.0", + "@jest/types": "^25.4.0", "chalk": "^3.0.0", "co": "^4.6.0", - "expect": "^25.1.0", + "expect": "^25.4.0", "is-generator-fn": "^2.0.0", - "jest-each": "^25.1.0", - "jest-matcher-utils": "^25.1.0", - "jest-message-util": "^25.1.0", - "jest-runtime": "^25.1.0", - "jest-snapshot": "^25.1.0", - "jest-util": "^25.1.0", - "pretty-format": "^25.1.0", + "jest-each": "^25.4.0", + "jest-matcher-utils": "^25.4.0", + "jest-message-util": "^25.4.0", + "jest-runtime": "^25.4.0", + "jest-snapshot": "^25.4.0", + "jest-util": "^25.4.0", + "pretty-format": "^25.4.0", "throat": "^5.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14212,15 +12648,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -14262,58 +12689,22 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "diff-sequences": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.1.0.tgz", - "integrity": "sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-diff": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.1.0.tgz", - "integrity": "sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw==", + "pretty-format": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", "dev": true, "requires": { - "chalk": "^3.0.0", - "diff-sequences": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" - } - }, - "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz", - "integrity": "sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "jest-diff": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" - } - }, - "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", - "dev": true, - "requires": { - "@jest/types": "^25.1.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" + "@jest/types": "^25.4.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" } }, "supports-color": { @@ -14328,19 +12719,19 @@ } }, "jest-leak-detector": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.1.0.tgz", - "integrity": "sha512-3xRI264dnhGaMHRvkFyEKpDeaRzcEBhyNrOG5oT8xPxOyUAblIAQnpiR3QXu4wDor47MDTiHbiFcbypdLcLW5w==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.4.0.tgz", + "integrity": "sha512-7Y6Bqfv2xWsB+7w44dvZuLs5SQ//fzhETgOGG7Gq3TTGFdYvAgXGwV8z159RFZ6fXiCPm/szQ90CyfVos9JIFQ==", "dev": true, "requires": { - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" + "jest-get-type": "^25.2.6", + "pretty-format": "^25.4.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14349,15 +12740,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -14405,19 +12787,13 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", - "dev": true - }, "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" @@ -14435,17 +12811,35 @@ } }, "jest-matcher-utils": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz", - "integrity": "sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.4.0.tgz", + "integrity": "sha512-yPMdtj7YDgXhnGbc66bowk8AkQ0YwClbbwk3Kzhn5GVDrciiCr27U4NJRbrqXbTdtxjImONITg2LiRIw650k5A==", "dev": true, "requires": { "chalk": "^3.0.0", - "jest-diff": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" + "jest-diff": "^25.4.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.4.0" }, "dependencies": { + "@jest/types": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14487,6 +12881,18 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "pretty-format": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", + "dev": true, + "requires": { + "@jest/types": "^25.4.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -14499,14 +12905,13 @@ } }, "jest-message-util": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.1.0.tgz", - "integrity": "sha512-Nr/Iwar2COfN22aCqX0kCVbXgn8IBm9nWf4xwGr5Olv/KZh0CZ32RKgZWMVDXGdOahicM10/fgjdimGNX/ttCQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.4.0.tgz", + "integrity": "sha512-LYY9hRcVGgMeMwmdfh9tTjeux1OjZHMusq/E5f3tJN+dAoVVkJtq5ZUEPIcB7bpxDUt2zjUsrwg0EGgPQ+OhXQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "@types/stack-utils": "^1.0.1", "chalk": "^3.0.0", "micromatch": "^4.0.2", @@ -14515,9 +12920,9 @@ }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14526,15 +12931,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14594,18 +12990,18 @@ } }, "jest-mock": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.1.0.tgz", - "integrity": "sha512-28/u0sqS+42vIfcd1mlcg4ZVDmSUYuNvImP4X2lX5hRMLW+CN0BeiKVD4p+ujKKbSPKd3rg/zuhCF+QBLJ4vag==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.4.0.tgz", + "integrity": "sha512-MdazSfcYAUjJjuVTTnusLPzE0pE4VXpOUzWdj8sbM+q6abUjm3bATVPXFqTXrxSieR8ocpvQ9v/QaQCftioQFg==", "dev": true, "requires": { - "@jest/types": "^25.1.0" + "@jest/types": "^25.4.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14614,15 +13010,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14682,28 +13069,31 @@ "dev": true }, "jest-regex-util": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.1.0.tgz", - "integrity": "sha512-9lShaDmDpqwg+xAd73zHydKrBbbrIi08Kk9YryBEBybQFg/lBWR/2BDjjiSE7KIppM9C5+c03XiDaZ+m4Pgs1w==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", "dev": true }, "jest-resolve": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.1.0.tgz", - "integrity": "sha512-XkBQaU1SRCHj2Evz2Lu4Czs+uIgJXWypfO57L7JYccmAXv4slXA6hzNblmcRmf7P3cQ1mE7fL3ABV6jAwk4foQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.4.0.tgz", + "integrity": "sha512-wOsKqVDFWUiv8BtLMCC6uAJ/pHZkfFgoBTgPtmYlsprAjkxrr2U++ZnB3l5ykBMd2O24lXvf30SMAjJIW6k2aA==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "browser-resolve": "^1.11.3", "chalk": "^3.0.0", "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" + "read-pkg-up": "^7.0.1", + "realpath-native": "^2.0.0", + "resolve": "^1.15.1", + "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14712,15 +13102,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14762,6 +13143,21 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "resolve": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", + "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -14774,20 +13170,20 @@ } }, "jest-resolve-dependencies": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.1.0.tgz", - "integrity": "sha512-Cu/Je38GSsccNy4I2vL12ZnBlD170x2Oh1devzuM9TLH5rrnLW1x51lN8kpZLYTvzx9j+77Y5pqBaTqfdzVzrw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.4.0.tgz", + "integrity": "sha512-A0eoZXx6kLiuG1Ui7wITQPl04HwjLErKIJTt8GR3c7UoDAtzW84JtCrgrJ6Tkw6c6MwHEyAaLk7dEPml5pf48A==", "dev": true, "requires": { - "@jest/types": "^25.1.0", - "jest-regex-util": "^25.1.0", - "jest-snapshot": "^25.1.0" + "@jest/types": "^25.4.0", + "jest-regex-util": "^25.2.6", + "jest-snapshot": "^25.4.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14796,15 +13192,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14858,36 +13245,36 @@ } }, "jest-runner": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.1.0.tgz", - "integrity": "sha512-su3O5fy0ehwgt+e8Wy7A8CaxxAOCMzL4gUBftSs0Ip32S0epxyZPDov9Znvkl1nhVOJNf4UwAsnqfc3plfQH9w==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.4.0.tgz", + "integrity": "sha512-wWQSbVgj2e/1chFdMRKZdvlmA6p1IPujhpLT7TKNtCSl1B0PGBGvJjCaiBal/twaU2yfk8VKezHWexM8IliBfA==", "dev": true, "requires": { - "@jest/console": "^25.1.0", - "@jest/environment": "^25.1.0", - "@jest/test-result": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/console": "^25.4.0", + "@jest/environment": "^25.4.0", + "@jest/test-result": "^25.4.0", + "@jest/types": "^25.4.0", "chalk": "^3.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.3", - "jest-config": "^25.1.0", - "jest-docblock": "^25.1.0", - "jest-haste-map": "^25.1.0", - "jest-jasmine2": "^25.1.0", - "jest-leak-detector": "^25.1.0", - "jest-message-util": "^25.1.0", - "jest-resolve": "^25.1.0", - "jest-runtime": "^25.1.0", - "jest-util": "^25.1.0", - "jest-worker": "^25.1.0", + "jest-config": "^25.4.0", + "jest-docblock": "^25.3.0", + "jest-haste-map": "^25.4.0", + "jest-jasmine2": "^25.4.0", + "jest-leak-detector": "^25.4.0", + "jest-message-util": "^25.4.0", + "jest-resolve": "^25.4.0", + "jest-runtime": "^25.4.0", + "jest-util": "^25.4.0", + "jest-worker": "^25.4.0", "source-map-support": "^0.5.6", "throat": "^5.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14896,15 +13283,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -14947,9 +13325,9 @@ "dev": true }, "jest-worker": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", - "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.4.0.tgz", + "integrity": "sha512-ghAs/1FtfYpMmYQ0AHqxV62XPvKdUDIBBApMZfly+E9JEmYh2K45G0R5dWxx986RN12pRCxsViwQVtGl+N4whw==", "dev": true, "requires": { "merge-stream": "^2.0.0", @@ -14968,42 +13346,42 @@ } }, "jest-runtime": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.1.0.tgz", - "integrity": "sha512-mpPYYEdbExKBIBB16ryF6FLZTc1Rbk9Nx0ryIpIMiDDkOeGa0jQOKVI/QeGvVGlunKKm62ywcioeFVzIbK03bA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.4.0.tgz", + "integrity": "sha512-lgNJlCDULtXu9FumnwCyWlOub8iytijwsPNa30BKrSNtgoT6NUMXOPrZvsH06U6v0wgD/Igwz13nKA2wEKU2VA==", "dev": true, "requires": { - "@jest/console": "^25.1.0", - "@jest/environment": "^25.1.0", - "@jest/source-map": "^25.1.0", - "@jest/test-result": "^25.1.0", - "@jest/transform": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/console": "^25.4.0", + "@jest/environment": "^25.4.0", + "@jest/source-map": "^25.2.6", + "@jest/test-result": "^25.4.0", + "@jest/transform": "^25.4.0", + "@jest/types": "^25.4.0", "@types/yargs": "^15.0.0", "chalk": "^3.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.3", - "jest-config": "^25.1.0", - "jest-haste-map": "^25.1.0", - "jest-message-util": "^25.1.0", - "jest-mock": "^25.1.0", - "jest-regex-util": "^25.1.0", - "jest-resolve": "^25.1.0", - "jest-snapshot": "^25.1.0", - "jest-util": "^25.1.0", - "jest-validate": "^25.1.0", - "realpath-native": "^1.1.0", + "jest-config": "^25.4.0", + "jest-haste-map": "^25.4.0", + "jest-message-util": "^25.4.0", + "jest-mock": "^25.4.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.4.0", + "jest-snapshot": "^25.4.0", + "jest-util": "^25.4.0", + "jest-validate": "^25.4.0", + "realpath-native": "^2.0.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", - "yargs": "^15.0.0" + "yargs": "^15.3.1" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -15012,21 +13390,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -15037,12 +13400,6 @@ "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -15053,17 +13410,6 @@ "supports-color": "^7.1.0" } }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -15079,102 +13425,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -15183,92 +13445,41 @@ "requires": { "has-flag": "^4.0.0" } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz", - "integrity": "sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^16.1.0" - } - }, - "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, "jest-serializer": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.1.0.tgz", - "integrity": "sha512-20Wkq5j7o84kssBwvyuJ7Xhn7hdPeTXndnwIblKDR2/sy1SUm6rWWiG9kSCgJPIfkDScJCIsTtOKdlzfIHOfKA==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.2.6.tgz", + "integrity": "sha512-RMVCfZsezQS2Ww4kB5HJTMaMJ0asmC0BHlnobQC6yEtxiFKIxohFA4QSXSabKwSggaNkqxn6Z2VwdFCjhUWuiQ==", "dev": true }, "jest-snapshot": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.1.0.tgz", - "integrity": "sha512-xZ73dFYN8b/+X2hKLXz4VpBZGIAn7muD/DAg+pXtDzDGw3iIV10jM7WiHqhCcpDZfGiKEj7/2HXAEPtHTj0P2A==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.4.0.tgz", + "integrity": "sha512-J4CJ0X2SaGheYRZdLz9CRHn9jUknVmlks4UBeu270hPAvdsauFXOhx9SQP2JtRzhnR3cvro/9N9KP83/uvFfRg==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", + "@types/prettier": "^1.19.0", "chalk": "^3.0.0", - "expect": "^25.1.0", - "jest-diff": "^25.1.0", - "jest-get-type": "^25.1.0", - "jest-matcher-utils": "^25.1.0", - "jest-message-util": "^25.1.0", - "jest-resolve": "^25.1.0", - "mkdirp": "^0.5.1", + "expect": "^25.4.0", + "jest-diff": "^25.4.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.4.0", + "jest-message-util": "^25.4.0", + "jest-resolve": "^25.4.0", + "make-dir": "^3.0.0", "natural-compare": "^1.4.0", - "pretty-format": "^25.1.0", - "semver": "^7.1.1" + "pretty-format": "^25.4.0", + "semver": "^6.3.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -15277,15 +13488,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -15327,64 +13529,37 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "diff-sequences": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.1.0.tgz", - "integrity": "sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-diff": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.1.0.tgz", - "integrity": "sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "diff-sequences": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" - } - }, - "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz", - "integrity": "sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ==", + "make-dir": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", + "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", "dev": true, "requires": { - "chalk": "^3.0.0", - "jest-diff": "^25.1.0", - "jest-get-type": "^25.1.0", - "pretty-format": "^25.1.0" + "semver": "^6.0.0" } }, "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" } }, "semver": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", - "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "supports-color": { @@ -15399,30 +13574,30 @@ } }, "jest-styled-components": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jest-styled-components/-/jest-styled-components-7.0.0.tgz", - "integrity": "sha512-A1nl8q1ptZj1t5wd0x/UYjnqfld1GhZwRDPS9w0eD5P5R8G+Q4uHaBAbUjf+Arjexqh2BxfrGkTc3tDuhtdifg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/jest-styled-components/-/jest-styled-components-7.0.2.tgz", + "integrity": "sha512-i1Qke8Jfgx0Why31q74ohVj9S2FmMLUE8bNRSoK4DgiurKkXG6HC4NPhcOLAz6VpVd9wXkPn81hOt4aAQedqsA==", "dev": true, "requires": { "css": "^2.2.4" } }, "jest-util": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.1.0.tgz", - "integrity": "sha512-7did6pLQ++87Qsj26Fs/TIwZMUFBXQ+4XXSodRNy3luch2DnRXsSnmpVtxxQ0Yd6WTipGpbhh2IFP1mq6/fQGw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.4.0.tgz", + "integrity": "sha512-WSZD59sBtAUjLv1hMeKbNZXmMcrLRWcYqpO8Dz8b4CeCTZpfNQw2q9uwrYAD+BbJoLJlu4ezVPwtAmM/9/SlZA==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "chalk": "^3.0.0", "is-ci": "^2.0.0", - "mkdirp": "^0.5.1" + "make-dir": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -15431,15 +13606,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -15481,6 +13647,21 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "make-dir": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", + "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -15493,23 +13674,23 @@ } }, "jest-validate": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.1.0.tgz", - "integrity": "sha512-kGbZq1f02/zVO2+t1KQGSVoCTERc5XeObLwITqC6BTRH3Adv7NZdYqCpKIZLUgpLXf2yISzQ465qOZpul8abXA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.4.0.tgz", + "integrity": "sha512-hvjmes/EFVJSoeP1yOl8qR8mAtMR3ToBkZeXrD/ZS9VxRyWDqQ/E1C5ucMTeSmEOGLipvdlyipiGbHJ+R1MQ0g==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "camelcase": "^5.3.1", "chalk": "^3.0.0", - "jest-get-type": "^25.1.0", + "jest-get-type": "^25.2.6", "leven": "^3.1.0", - "pretty-format": "^25.1.0" + "pretty-format": "^25.4.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -15518,15 +13699,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -15543,12 +13715,6 @@ "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -15580,19 +13746,13 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-get-type": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", - "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==", - "dev": true - }, "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", + "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.4.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" @@ -15610,23 +13770,23 @@ } }, "jest-watcher": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.1.0.tgz", - "integrity": "sha512-Q9eZ7pyaIr6xfU24OeTg4z1fUqBF/4MP6J801lyQfg7CsnZ/TCzAPvCfckKdL5dlBBEKBeHV0AdyjFZ5eWj4ig==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.4.0.tgz", + "integrity": "sha512-36IUfOSRELsKLB7k25j/wutx0aVuHFN6wO94gPNjQtQqFPa2rkOymmx9rM5EzbF3XBZZ2oqD9xbRVoYa2w86gw==", "dev": true, "requires": { - "@jest/test-result": "^25.1.0", - "@jest/types": "^25.1.0", + "@jest/test-result": "^25.4.0", + "@jest/types": "^25.4.0", "ansi-escapes": "^4.2.1", "chalk": "^3.0.0", - "jest-util": "^25.1.0", + "jest-util": "^25.4.0", "string-length": "^3.1.0" }, "dependencies": { "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", + "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -15635,15 +13795,6 @@ "chalk": "^3.0.0" } }, - "@types/yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -15697,9 +13848,9 @@ } }, "jest-worker": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", - "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.2.1.tgz", + "integrity": "sha512-IHnpekk8H/hCUbBlfeaPZzU6v75bqwJp3n4dUrQuQOAgOneI4tx3jV2o8pvlXnDfcRsfkFIUD//HWXpCmR+evQ==", "dev": true, "requires": { "merge-stream": "^2.0.0", @@ -15758,37 +13909,45 @@ "dev": true }, "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", "dev": true, "requires": { "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", "domexception": "^1.0.1", - "escodegen": "^1.9.1", + "escodegen": "^1.11.1", "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", + "tough-cookie": "^3.0.1", "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + } } }, "jsesc": { @@ -15797,13 +13956,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true, - "optional": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -15841,18 +13993,26 @@ "dev": true }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz", + "integrity": "sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -15885,26 +14045,10 @@ "resolved": "https://registry.npmjs.org/jump.js/-/jump.js-1.0.2.tgz", "integrity": "sha1-4GQbR/QKOPITnCX9oFAL8o5DAVo=" }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "optional": true, - "requires": { - "json-buffer": "3.0.0" - } - }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "klaw": { @@ -15922,15 +14066,11 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } + "known-css-properties": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.18.0.tgz", + "integrity": "sha512-69AgJ1rQa7VvUsd2kpvVq+VeObDuo3zrj0CzM5Slmf6yduQFAI2kXPDQJR2IE/u6MSAUOJrwSzjg5vlz8qcMiw==", + "dev": true }, "lazy-cache": { "version": "1.0.4", @@ -15965,21 +14105,6 @@ } } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -16012,17 +14137,17 @@ "dev": true }, "lint-staged": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.8.tgz", - "integrity": "sha512-Oa9eS4DJqvQMVdywXfEor6F4vP+21fPHF8LUXgBbVWUSWBddjqsvO6Bv1LwMChmgQZZqwUvgJSHlu8HFHAPZmA==", + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.1.6.tgz", + "integrity": "sha512-45zaGxf4XZuwdUk87yRFE/1b4vTZmH2UnYmUPmindsgdAljOFpWWb0yEjxngmqERUS/MGauJexFF6BjLVg9VMA==", "dev": true, "requires": { - "chalk": "^3.0.0", - "commander": "^4.0.1", + "chalk": "^4.0.0", + "commander": "^5.0.0", "cosmiconfig": "^6.0.0", "debug": "^4.1.1", "dedent": "^0.7.0", - "execa": "^3.4.0", + "execa": "^4.0.0", "listr": "^0.14.3", "log-symbols": "^3.0.0", "micromatch": "^4.0.2", @@ -16043,9 +14168,9 @@ } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -16068,15 +14193,15 @@ "dev": true }, "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.0.0.tgz", + "integrity": "sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ==", "dev": true }, "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -16085,9 +14210,9 @@ } }, "execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.0.tgz", + "integrity": "sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -16097,7 +14222,6 @@ "merge-stream": "^2.0.0", "npm-run-path": "^4.0.0", "onetime": "^5.1.0", - "p-finally": "^2.0.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" } @@ -16132,12 +14256,6 @@ "path-key": "^3.0.0" } }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -16341,30 +14459,6 @@ } } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - } - } - }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -16445,12 +14539,6 @@ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", "dev": true }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, "log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", @@ -16554,30 +14642,6 @@ } } }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", - "dev": true, - "optional": true, - "requires": { - "figures": "^1.3.5", - "squeak": "^1.0.0" - }, - "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - } - } - }, "lolex": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", @@ -16587,12 +14651,11 @@ "@sinonjs/commons": "^1.7.0" } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true, - "optional": true + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true }, "loose-envify": { "version": "1.4.0", @@ -16602,30 +14665,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "lower-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", + "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", "dev": true, - "optional": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "tslib": "^1.10.0" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "optional": true - }, "lowlight": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz", @@ -16636,38 +14684,6 @@ "highlight.js": "~9.13.0" } }, - "lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "^4.0.1", - "indent-string": "^2.1.0", - "longest": "^1.0.0", - "meow": "^3.3.0" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "optional": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "optional": true, - "requires": { - "repeating": "^2.0.0" - } - } - } - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -16704,21 +14720,6 @@ "tmpl": "1.0.x" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -16726,11 +14727,10 @@ "dev": true }, "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "optional": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true }, "map-or-similar": { "version": "1.5.0", @@ -16747,6 +14747,21 @@ "object-visit": "^1.0.0" } }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, "markdown-to-jsx": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.0.tgz", @@ -16758,11 +14773,11 @@ } }, "match-sorter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-4.0.2.tgz", - "integrity": "sha512-5EcCLEmPgfvq2hg1DAgAG7zqqS9bnZmRXzLR3md0xRi3Q1oGnnze6HuY+4bDRtm+X2lTsVZL8oG9FOkALFT4vw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-4.1.0.tgz", + "integrity": "sha512-DCzT9JVO2FWVOTfsKqIqVhu/skFa3bK0lQom70j6Co9yKX9bPn2gRtn9BFD9ykkM8F/USjTQeId+nlFfTVvz+w==", "requires": { - "@babel/runtime": "^7.5.5", + "@babel/runtime": "^7.9.2", "remove-accents": "0.4.2" } }, @@ -16772,6 +14787,12 @@ "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", "dev": true }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -16783,6 +14804,15 @@ "safe-buffer": "^5.1.2" } }, + "mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, "mdn-data": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", @@ -16794,25 +14824,6 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - } - } - }, "memoize-one": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", @@ -16839,62 +14850,22 @@ } }, "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "optional": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "optional": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "optional": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "optional": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "^4.0.1" - } - } + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.0.tgz", + "integrity": "sha512-iIAoeI01v6pmSfObAAWFoITAA4GgiT45m4SmJgoxtZfvI0fyZwhV4d0lTwiUXvAKIPlma05Feb2Xngl52Mj5Cg==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.1.1", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.0.0", + "minimist-options": "^4.0.1", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.0", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.8.1", + "yargs-parser": "^18.1.1" } }, "merge-deep": { @@ -16908,12 +14879,6 @@ "kind-of": "^3.0.2" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -17037,13 +15002,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "optional": true - }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -17070,18 +15028,6 @@ "tiny-warning": "^1.0.2" } }, - "mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -17104,11 +15050,21 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minimist-options": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.0.2.tgz", + "integrity": "sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, "minipass": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", @@ -17220,26 +15176,19 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.5" } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "mockdate": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-2.0.5.tgz", + "integrity": "sha512-ST0PnThzWKcgSLyc+ugLVql45PvESt3Ul/wrdV/OPc/6Pr8dbLAIJsN1cIp41FLzbN+srVTNIRn+5Cju0nyV6A==", + "dev": true }, "move-concurrently": { "version": "1.0.1", @@ -17255,18 +15204,6 @@ "run-queue": "^1.0.3" } }, - "mozjpeg": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz", - "integrity": "sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.1.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -17345,20 +15282,15 @@ "dev": true }, "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", + "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "lower-case": "^2.0.1", + "tslib": "^1.10.0" } }, - "node-ask": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/node-ask/-/node-ask-1.0.1.tgz", - "integrity": "sha1-yqoQdsxY4DZCZ6CQPj6t+sFYOWs=", - "dev": true - }, "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -17419,17 +15351,6 @@ } } }, - "node-loggly-bulk": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/node-loggly-bulk/-/node-loggly-bulk-2.2.4.tgz", - "integrity": "sha512-DfhtsDfkSBU6Dp1zvK+H1MgHRcA2yb4z07ctyA6uo+bNwKtv1exhohN910zcWNkdSYq1TImCq+O+3bOTuYHvmQ==", - "dev": true, - "requires": { - "json-stringify-safe": "5.0.x", - "moment": "^2.18.1", - "request": ">=2.76.0 <3.0.0" - } - }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", @@ -17507,6 +15428,12 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, "normalize-url": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", @@ -17520,9 +15447,9 @@ } }, "nouislider": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-14.1.1.tgz", - "integrity": "sha512-3/+Z/pTBoWoJf2YXSEWRmS27LW2XxOBmGEzkPyRzB/J6QvL+0mS3QwcQp0SmWhgO5CMzbSxPmb1lDDD4HP12bg==" + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-14.2.0.tgz", + "integrity": "sha512-IeDy8kA3uEtQIS35izyWg9tF0ycNTXvXPxB1SpEAxGGty2MqOIqkyMpOjCqT7Oag99fPRGRGuzHuuemU9+hCmw==" }, "nouislider-react": { "version": "3.3.7", @@ -17532,26 +15459,6 @@ "nouislider": "^14.1.1" } }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "optional": true, - "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true - } - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -17651,20 +15558,17 @@ "object-inspect": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" }, "object-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -17679,7 +15583,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -17770,9 +15673,9 @@ } }, "open": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.2.tgz", - "integrity": "sha512-70E/pFTPr7nZ9nLDPNTcj3IVqnNvKuP4VsBmoKV9YGTnChe0mlS3C4qM7qKarhZ8rGaHKLfo+vBTHXDp6ZSyLQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", + "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -17793,28 +15696,6 @@ "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", "dev": true }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "openurl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", - "dev": true - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", - "dev": true, - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - } - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -17829,18 +15710,6 @@ "word-wrap": "~1.2.3" } }, - "optipng-bin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-6.0.0.tgz", - "integrity": "sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.0.0" - } - }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -17856,92 +15725,24 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "optional": true, - "requires": { - "arch": "^2.1.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "ow": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.13.2.tgz", - "integrity": "sha512-9wvr+q+ZTDRvXDjL6eDOdFe5WUl/wa5sntf9kAolxqSpkBqaIObwLgFCGXSJASFw+YciXnOVtDWpxXa9cqV94A==", - "dev": true, - "optional": true, - "requires": { - "type-fest": "^0.5.1" - }, - "dependencies": { - "type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", - "dev": true, - "optional": true - } - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "optional": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-each-series": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", "dev": true }, - "p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", - "dev": true, - "optional": true, - "requires": { - "p-timeout": "^1.1.1" - } - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true, - "optional": true - }, "p-limit": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", @@ -17969,39 +15770,6 @@ "aggregate-error": "^3.0.0" } }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", - "dev": true, - "optional": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-pipe": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.0.0.tgz", - "integrity": "sha512-gwwdRFmaxsT3IU+Tl3vYKVRdjfhg8Bbdjw7B+E0y6F7Yz6l+eaQLn0BRmGMXIhcPDONPtOkMoNwx1etZh4zPJA==", - "dev": true - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true, - "optional": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, - "optional": true, - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -18026,12 +15794,13 @@ } }, "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", + "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", "dev": true, "requires": { - "no-case": "^2.2.0" + "dot-case": "^3.0.3", + "tslib": "^1.10.0" } }, "parent-module": { @@ -18083,16 +15852,10 @@ "lines-and-columns": "^1.1.6" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", "dev": true }, "parseurl": { @@ -18109,27 +15872,6 @@ "requires": { "no-case": "^3.0.3", "tslib": "^1.10.0" - }, - "dependencies": { - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dev": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dev": true, - "requires": { - "lower-case": "^2.0.1", - "tslib": "^1.10.0" - } - } } }, "pascalcase": { @@ -18151,13 +15893,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -18165,12 +15904,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -18208,13 +15941,6 @@ "sha.js": "^2.4.8" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true, - "optional": true - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -18232,48 +15958,6 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pino": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/pino/-/pino-4.10.2.tgz", - "integrity": "sha512-hNNDgOju2UvK4iKqXR3ZwEutoOujBRN9jfQgty/X4B3q1QOqpWqvmVn+GT/a20o8Jw5Wd7VkGJAdgFQg55a+mw==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "fast-json-parse": "^1.0.0", - "fast-safe-stringify": "^1.2.1", - "flatstr": "^1.0.4", - "pump": "^1.0.3", - "quick-format-unescaped": "^1.1.1", - "split2": "^2.2.0" - }, - "dependencies": { - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -18310,57 +15994,6 @@ "dev": true, "requires": { "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } } }, "please-upgrade-node": { @@ -18378,44 +16011,6 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, - "pngquant-bin": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.2.tgz", - "integrity": "sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.1", - "execa": "^0.10.0", - "logalot": "^2.0.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - } - } - }, "pnp-webpack-plugin": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", @@ -18426,19 +16021,18 @@ } }, "polished": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/polished/-/polished-3.4.4.tgz", - "integrity": "sha512-x9PKeExyI9AhWrJP3Q57I1k7GInujjiVBJMPFmycj9hX1yCOo/X9eu9eZwxgOziiXge3WbFQ5XOmkzunOntBSA==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-3.5.1.tgz", + "integrity": "sha512-GVbvskpBiDV5TknurGL6OyFfLHsCknxbU8w5iMppT8rW0tLEoQHrIRfrPNPqGXNj3HGhkjRvhmg59Fy7HSnCAw==", "dev": true, "requires": { - "@babel/runtime": "^7.6.3" + "@babel/runtime": "^7.8.7" } }, "popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "dev": true + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "posix-character-classes": { "version": "0.1.1", @@ -18468,125 +16062,31 @@ } } }, - "postcss-calc": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "postcss-flexbugs-fixes": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.0.tgz", + "integrity": "sha512-QRE0n3hpkxxS/OGvzOa+PDuy4mh/Jg4o9ui22/ko5iGYOG3M5dfJabjnAZjTdh2G9F85c7Hv8hWcEDEKW/xceQ==", "dev": true, "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" + "postcss": "^7.0.26" } }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", "dev": true, "requires": { - "postcss": "^7.0.0" + "htmlparser2": "^3.10.0" } }, - "postcss-flexbugs-fixes": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.0.tgz", - "integrity": "sha512-QRE0n3hpkxxS/OGvzOa+PDuy4mh/Jg4o9ui22/ko5iGYOG3M5dfJabjnAZjTdh2G9F85c7Hv8hWcEDEKW/xceQ==", + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", "dev": true, "requires": { - "postcss": "^7.0.26" + "postcss": "^7.0.14" } }, "postcss-load-config": { @@ -18651,137 +16151,11 @@ "schema-utils": "^1.0.0" } }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true }, "postcss-modules-extract-imports": { "version": "2.0.0", @@ -18824,226 +16198,63 @@ "postcss": "^7.0.6" } }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } } } }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true }, - "postcss-normalize-whitespace": { + "postcss-safe-parser": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss": "^7.0.26" } }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" } }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "postcss-scss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz", + "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", "postcss": "^7.0.0" } }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, "postcss-selector-parser": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", @@ -19055,36 +16266,11 @@ "uniq": "^1.0.1" } }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true }, "postcss-value-parser": { "version": "4.0.2", @@ -19105,9 +16291,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz", + "integrity": "sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==", "dev": true }, "prettier-linter-helpers": { @@ -19130,12 +16316,12 @@ } }, "pretty-format": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", - "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.2.3.tgz", + "integrity": "sha512-IP4+5UOAVGoyqC/DiomOeHBUKN6q00gfyT2qpAsRH64tgOKB2yF7FHJXC18OCiU0/YFierACup/zdCOWw0F/0w==", "dev": true, "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.2.3", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" @@ -19213,16 +16399,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "progress-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", - "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", - "dev": true, - "requires": { - "speedometer": "~1.0.0", - "through2": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -19254,13 +16430,13 @@ } }, "prompts": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", - "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "dev": true, "requires": { "kleur": "^3.0.3", - "sisteransi": "^1.0.3" + "sisteransi": "^1.0.4" } }, "prop-types": { @@ -19274,9 +16450,9 @@ } }, "property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.2.tgz", + "integrity": "sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g==" }, "property-information": { "version": "5.4.0", @@ -19287,21 +16463,14 @@ "xtend": "^4.0.0" } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true, - "optional": true - }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "prr": { @@ -19310,17 +16479,10 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true, - "optional": true - }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "public-encrypt": { @@ -19388,9 +16550,9 @@ "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=" }, "qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==", + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", "dev": true }, "query-string": { @@ -19421,14 +16583,11 @@ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, - "quick-format-unescaped": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-1.1.2.tgz", - "integrity": "sha1-DKWB3jF0vs7yWsPC6JVjQjgdtpg=", - "dev": true, - "requires": { - "fast-safe-stringify": "^1.0.8" - } + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true }, "raf": { "version": "3.4.1", @@ -19491,13 +16650,31 @@ "schema-utils": "^2.0.1" }, "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, "schema-utils": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz", - "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "dev": true, "requires": { - "ajv": "^6.10.2", + "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } } @@ -19541,9 +16718,9 @@ } }, "react": { - "version": "16.13.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.0.tgz", - "integrity": "sha512-TSavZz2iSLkq5/oiE7gnFzmURKZMltmi193rm5HEoUDAXpzT9Kzw6oNZnGoai/4+fUnm7FqS5dwgUL34TujcWQ==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", "dev": true, "requires": { "loose-envify": "^1.1.0", @@ -19574,6 +16751,18 @@ "tinycolor2": "^1.4.1" } }, + "react-datepicker": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-2.14.1.tgz", + "integrity": "sha512-8eWHvrjXfKVkt5rERXC6/c/eEdcE2stIsl+QmTO5Efgpacf8MOCyVpBisJLVLDYjVlENczhOcRlIzvraODHKxA==", + "requires": { + "classnames": "^2.2.6", + "date-fns": "^2.0.1", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.9.0", + "react-popper": "^1.3.4" + } + }, "react-dev-utils": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.1.0.tgz", @@ -19748,6 +16937,66 @@ "is-wsl": "^1.1.0" } }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + } + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -19815,27 +17064,15 @@ } }, "react-dom": { - "version": "16.13.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.0.tgz", - "integrity": "sha512-y09d2c4cG220DzdlFkPTnVvGTszVvNpC73v+AaLGLHbkpy3SSgvYq8x0rNwPJ/Rk/CicTNgk0hbHNw1gMEZAXg==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.19.0" - }, - "dependencies": { - "scheduler": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.0.tgz", - "integrity": "sha512-xowbVaTPe9r7y7RUejcK73/j8tt2jfiyTednOvHbA8JoClvMYCp+r8QegLwK/n8zWQAtZb1fFnER4XLBZXrCxA==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } + "scheduler": "^0.19.1" } }, "react-draggable": { @@ -19849,9 +17086,9 @@ } }, "react-dropzone": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-10.2.1.tgz", - "integrity": "sha512-Me5nOu8hK9/Xyg5easpdfJ6SajwUquqYR/2YTdMotsCUgJ1pHIIwNsv0n+qcIno0tWR2V2rVQtj2r/hXYs2TnQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-10.2.2.tgz", + "integrity": "sha512-U5EKckXVt6IrEyhMMsgmHQiWTGLudhajPPG77KFSvgsMqNEHSyGpqWvOMc5+DhEah/vH4E1n+J5weBNLd5VtyA==", "requires": { "attr-accept": "^2.0.0", "file-selector": "^0.1.12", @@ -19859,9 +17096,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==", "dev": true }, "react-fast-compare": { @@ -19907,9 +17144,9 @@ } }, "react-i18next": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.3.3.tgz", - "integrity": "sha512-sGnPwJ0Kf8qTRLTnTRk030KiU6WYEZ49rP9ILPvCnsmgEKyucQfTxab+klSYnCSKYija+CWL+yo+c9va9BmJeg==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.3.5.tgz", + "integrity": "sha512-x1dgM7UU/jKQ72/q3p9kkYz0C8fqAfMlUlx+SxqBUcRMTs/09HfnOUZFry1+GBpUcDHAg8R/vmPqL9rRzFO0UQ==", "requires": { "@babel/runtime": "^7.3.1", "html-parse-stringify2": "2.0.1" @@ -19925,15 +17162,14 @@ } }, "react-inspector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-4.0.0.tgz", - "integrity": "sha512-heh4THBeJg0HLYO/3VBAOaFPkdEHoTZq9VFgP4rOzGw/jyqdVd5spfXSl3LNB1fwrwaWef75Q1hCuwlY4GaKjQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-4.0.1.tgz", + "integrity": "sha512-xSiM6CE79JBqSj8Fzd9dWBHv57tLTH7OM57GP3VrE5crzVF3D5Khce9w1Xcw75OAbvrA0Mi2vBneR1OajKmXFg==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", + "@babel/runtime": "^7.6.3", "is-dom": "^1.0.9", - "prop-types": "^15.6.1", - "storybook-chromatic": "^2.2.2" + "prop-types": "^15.6.1" } }, "react-is": { @@ -19946,11 +17182,15 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "react-onclickoutside": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.9.0.tgz", + "integrity": "sha512-8ltIY3bC7oGhj2nPAvWOGi+xGFybPNhJM0V1H8hY/whNcXgmDeaeoCMPPd8VatrpTsUWjb/vGzrmu6SrXVty3A==" + }, "react-popper": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.7.tgz", "integrity": "sha512-nmqYTx7QVjCm3WUZLeuOomna138R1luC4EqkW3hxJUrAe+3eNz3oFCLYdnPwILfn0mX1Ew2c3wctrjlUMYYUww==", - "dev": true, "requires": { "@babel/runtime": "^7.1.2", "create-react-context": "^0.3.0", @@ -19962,19 +17202,19 @@ } }, "react-popper-tooltip": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-2.10.1.tgz", - "integrity": "sha512-cib8bKiyYcrIlHo9zXx81G0XvARfL8Jt+xum709MFCgQa3HTqTi4au3iJ9tm7vi7WU7ngnqbpWkMinBOtwo+IQ==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-2.11.0.tgz", + "integrity": "sha512-Xxe08mAW990/NKYTEcZmdqchmB70hxQEPT7q7BMLGy3IkeNJI6ZaLODnzadTx1b7FGka8CLXyV/3g8EPaFJaig==", "dev": true, "requires": { - "@babel/runtime": "^7.7.4", - "react-popper": "^1.3.6" + "@babel/runtime": "^7.9.2", + "react-popper": "^1.3.7" } }, "react-qr-svg": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-qr-svg/-/react-qr-svg-2.2.1.tgz", - "integrity": "sha512-rLDCZI9pIqD5lbBIatrqUMhP1gqQ7glqubXO/m/X87ikEPhXuY0hMLhYMuKoH4834G36ap8Az0HI4bXEJUN//w==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-qr-svg/-/react-qr-svg-2.2.2.tgz", + "integrity": "sha512-uUsleAZBsQ0DmN88hBXkUfzxdKzMgQMZxMfIrIj3SXyLM5iqVrGBkMWw57tiknmdet0vu/lvmljgROdLN8KzEA==", "requires": { "prop-types": "^15.5.8", "qr.js": "0.0.0" @@ -20031,9 +17271,9 @@ } }, "react-select": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.0.8.tgz", - "integrity": "sha512-v9LpOhckLlRmXN5A6/mGGEft4FMrfaBFTGAnuPHcUgVId7Je42kTq9y0Z+Ye5z8/j0XDT3zUqza8gaRaI1PZIg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.1.0.tgz", + "integrity": "sha512-wBFVblBH1iuCBprtpyGtd1dGMadsG36W5/t2Aj8OE6WbByDg5jIFyT7X5gT+l0qmT5TqWhxX+VsKJvCEl2uL9g==", "dev": true, "requires": { "@babel/runtime": "^7.4.4", @@ -20043,30 +17283,7 @@ "memoize-one": "^5.0.0", "prop-types": "^15.6.0", "react-input-autosize": "^2.2.2", - "react-transition-group": "^2.2.1" - }, - "dependencies": { - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dev": true, - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - } + "react-transition-group": "^4.3.0" } }, "react-sizeme": { @@ -20081,6 +17298,15 @@ "throttle-debounce": "^2.1.0" } }, + "react-sticky-box": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/react-sticky-box/-/react-sticky-box-0.9.3.tgz", + "integrity": "sha512-Y/qO7vTqAvXuRR6G6ZCW4fX2Bz0GZRwiiLTVeZN5CVz9wzs37ev0Xj3KSKF/PzF0jifwATivI4t24qXG8rSz4Q==", + "requires": { + "@babel/runtime": "^7.1.5", + "resize-observer-polyfill": "^1.5.1" + } + }, "react-syntax-highlighter": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz", @@ -20116,12 +17342,12 @@ } }, "react-use": { - "version": "13.26.3", - "resolved": "https://registry.npmjs.org/react-use/-/react-use-13.26.3.tgz", - "integrity": "sha512-81I+p1F7LFxdkGM3qiLjF9NUi2mTupvaiN76IAWL5JMY7BHTGSk6PFdzByqJrxnTJ/RBrbIVttmqvYKHOz/9Tw==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/react-use/-/react-use-14.1.1.tgz", + "integrity": "sha512-3BVJJg+OrbgWG3aiyVhCgJuhx91T7juIr75QvFlMS+pesRZUd+PQNqoDhI+9pXwrc9FjCptvTHzl/YFpul3HHA==", "requires": { - "@types/js-cookie": "2.2.5", - "@xobotyi/scrollbar-width": "1.9.3", + "@types/js-cookie": "2.2.6", + "@xobotyi/scrollbar-width": "1.9.5", "copy-to-clipboard": "^3.2.0", "fast-deep-equal": "^3.1.1", "fast-shallow-equal": "^1.0.0", @@ -20160,39 +17386,72 @@ } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true } } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -20243,13 +17502,10 @@ } }, "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", + "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", + "dev": true }, "recast": { "version": "0.14.7", @@ -20268,12 +17524,6 @@ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true } } }, @@ -20334,26 +17584,27 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" } }, "regex-not": { @@ -20370,7 +17621,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" @@ -20383,17 +17633,17 @@ "dev": true }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { @@ -20403,9 +17653,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.3.tgz", - "integrity": "sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -20425,6 +17675,95 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, + "remark": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.0.tgz", + "integrity": "sha512-oX4lMIS0csgk8AEbzY0h2jdR0ngiCHOpwwpxjmRa5TqAkeknY+tkhjRJGZqnCmvyuWh55/0SW5WY3R3nn3PH9A==", + "dev": true, + "requires": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + } + }, + "remark-parse": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.1.tgz", + "integrity": "sha512-Ye/5W57tdQZWsfkuVyRq9SUWRgECHnDsMuyUMzdSKpTbNPkZeGtoYfsrkeSi4+Xyl0mhcPPddHITXPcCPHrl3w==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + } + } + }, + "remark-stringify": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.0.0.tgz", + "integrity": "sha512-cABVYVloFH+2ZI5bdqzoOmemcz/ZuhQSH6W6ZNYnLojAUUn3xtX7u+6BpnYp35qHoGr2NFBsERV14t4vCIeW8w==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "dependencies": { + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + } + } + }, "remove-accents": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", @@ -20461,16 +17800,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "optional": true, - "requires": { - "is-finite": "^1.0.0" - } - }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -20478,9 +17807,9 @@ "dev": true }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -20490,7 +17819,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -20500,17 +17829,11 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -20518,13 +17841,13 @@ "dev": true }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" } } } @@ -20547,6 +17870,18 @@ "request-promise-core": "1.1.3", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } } }, "require-directory": { @@ -20556,9 +17891,9 @@ "dev": true }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requires-port": { @@ -20582,56 +17917,12 @@ } }, "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - } + "resolve-from": "^5.0.0" } }, "resolve-from": { @@ -20652,16 +17943,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "optional": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -20678,30 +17959,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -20845,9 +18108,9 @@ } }, "scheduler": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", - "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "dev": true, "requires": { "loose-envify": "^1.1.0", @@ -20870,28 +18133,6 @@ "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.0.2.tgz", "integrity": "sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ==" }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "optional": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - } - } - }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -20917,16 +18158,6 @@ "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", "dev": true }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "optional": true, - "requires": { - "semver": "^5.3.0" - } - }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -21095,12 +18326,6 @@ "mixin-object": "^2.0.1" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "kind-of": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", @@ -21192,23 +18417,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, "simplebar": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-4.2.3.tgz", @@ -21242,9 +18450,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "slash": { @@ -21440,16 +18648,6 @@ "is-plain-obj": "^1.0.0" } }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, - "optional": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -21522,89 +18720,38 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "speedometer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", - "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "requires": { - "through2": "^2.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", - "dev": true, - "optional": true, - "requires": { - "chalk": "^1.0.0", - "console-stream": "^0.1.1", - "lpad-align": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - } + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -21682,6 +18829,12 @@ "stacktrace-gps": "^3.0.4" } }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -21716,59 +18869,11 @@ "dev": true }, "store2": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.10.0.tgz", - "integrity": "sha512-tWEpK0snS2RPUq1i3R6OahfJNjWCQYNxq0+by1amCSuw0mXtymJpzmZIeYpA1UAa+7B0grCpNYIbDcd7AgTbFg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.11.0.tgz", + "integrity": "sha512-WeIZ5+c/KzBSutSqOjUCAkk1qTLVBcYUuvrhNx8ndjLZKdZRfP6Vv7AOxlynuL6tVU/6zt6e2CTHwWI5KE+fKg==", "dev": true }, - "storybook-chromatic": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/storybook-chromatic/-/storybook-chromatic-2.2.2.tgz", - "integrity": "sha512-n79eX0MQEHzDCnXqgOjvDOQ1xfBOTyQHy1RNxEMQvZolfAle8YVS0NnRpcW0xh/Ye621Iote3dwFI3uQmlcqPw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "@chromaui/localtunnel": "1.10.1", - "async-retry": "^1.1.4", - "commander": "^2.9.0", - "debug": "^3.0.1", - "denodeify": "^1.2.1", - "env-ci": "^2.1.0", - "fake-tag": "^1.0.0", - "jsdom": "^11.5.1", - "jsonfile": "^4.0.0", - "minimatch": "^3.0.4", - "node-ask": "^1.0.1", - "node-fetch": "^2.6.0", - "node-loggly-bulk": "^2.2.4", - "param-case": "^2.1.1", - "pino": "4.10.2", - "progress": "^2.0.3", - "progress-stream": "^2.0.0", - "semver": "^6.2.0", - "strip-color": "^0.1.0", - "tmp": "^0.1.0", - "tree-kill": "^1.1.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, "storybook-react-router": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/storybook-react-router/-/storybook-react-router-1.0.8.tgz", @@ -21905,7 +19010,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" @@ -21915,7 +19019,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" @@ -21930,6 +19033,19 @@ "safe-buffer": "~5.1.0" } }, + "stringify-entities": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.0.0.tgz", + "integrity": "sha512-h7NJJIssprqlyjHT2eQt2W1F+MCcNmwPGlKb0bWEdET/3N44QN3QbUF/ueKCgAssyKRZ3Br9rQ7FcXjHr0qLHw==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.2", + "is-hexadecimal": "^1.0.0" + } + }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -21951,30 +19067,11 @@ } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-color": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", - "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "optional": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -22002,16 +19099,6 @@ "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, "style-loader": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz", @@ -22028,100 +19115,418 @@ "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", "dev": true, "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "styled-components": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.1.0.tgz", + "integrity": "sha512-0Qs2wEkFBXHFlysz6CV831VG6HedcrFUwChjnWylNivsx14MtmqQsohi21rMHZxzuTba063dEyoe/SR6VGJI7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.8", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + } + }, + "styled-icons": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/styled-icons/-/styled-icons-10.2.1.tgz", + "integrity": "sha512-QzAJYhDpw+ouTUi1HU6cOwfBitWf5FhvBBZ8i2wGTdl6WnlOJOTaZpVpsyruhoyJyagbLg7snDMby8B7n74j2A==", + "requires": { + "@styled-icons/boxicons-logos": "^10.0.0", + "@styled-icons/boxicons-regular": "^10.0.0", + "@styled-icons/boxicons-solid": "^10.0.0", + "@styled-icons/crypto": "^10.0.0", + "@styled-icons/entypo": "^10.0.0", + "@styled-icons/entypo-social": "^10.0.0", + "@styled-icons/evaicons-outline": "^10.2.0", + "@styled-icons/evaicons-solid": "^10.2.0", + "@styled-icons/evil": "^10.0.0", + "@styled-icons/fa-brands": "^10.0.0", + "@styled-icons/fa-regular": "^10.0.0", + "@styled-icons/fa-solid": "^10.0.0", + "@styled-icons/feather": "^10.0.0", + "@styled-icons/foundation": "^10.0.0", + "@styled-icons/heroicons-outline": "^10.0.0", + "@styled-icons/heroicons-solid": "^10.0.0", + "@styled-icons/icomoon": "^10.0.0", + "@styled-icons/material": "^10.0.0", + "@styled-icons/material-outlined": "^10.0.0", + "@styled-icons/material-rounded": "^10.0.0", + "@styled-icons/material-sharp": "^10.0.0", + "@styled-icons/material-twotone": "^10.0.0", + "@styled-icons/octicons": "^10.1.0", + "@styled-icons/open-iconic": "^10.0.0", + "@styled-icons/remix-fill": "^10.0.0", + "@styled-icons/remix-line": "^10.0.0", + "@styled-icons/styled-icon": "^10.0.0", + "@styled-icons/typicons": "^10.0.0", + "@styled-icons/zondicons": "^10.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + } + } + }, + "styled-normalize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/styled-normalize/-/styled-normalize-8.0.7.tgz", + "integrity": "sha512-qQV4O7B9g7ZUnStCwGde7Dc/mcFF/pz0Ha/LL7+j/r6uopf6kJCmmR7jCPQMCBrDkYiQ4xvw1hUoceVJkdaMuQ==" + }, + "styled-theming": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/styled-theming/-/styled-theming-2.2.0.tgz", + "integrity": "sha1-MITkPUDqq0vBHrr9PeBONiL+434=" + }, + "stylelint": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.3.3.tgz", + "integrity": "sha512-j8Oio2T1YNiJc6iXDaPYd74Jg4zOa1bByNm/g9/Nvnq4tDPsIjMi46jhRZyPPktGPwjJ5FwcmCqIRlH6PVP8mA==", + "dev": true, + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.1", + "@stylelint/postcss-markdown": "^0.36.1", + "autoprefixer": "^9.7.6", + "balanced-match": "^1.0.0", + "chalk": "^4.0.0", + "cosmiconfig": "^6.0.0", + "debug": "^4.1.1", + "execall": "^2.0.0", + "file-entry-cache": "^5.0.1", + "get-stdin": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.0", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.18.0", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "log-symbols": "^3.0.0", + "mathml-tag-names": "^2.1.3", + "meow": "^6.1.0", + "micromatch": "^4.0.2", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.27", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.1", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.4.6", + "v8-compile-cache": "^2.1.0", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "autoprefixer": { + "version": "9.7.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.6.tgz", + "integrity": "sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ==", + "dev": true, + "requires": { + "browserslist": "^4.11.1", + "caniuse-lite": "^1.0.30001039", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "caniuse-lite": { + "version": "1.0.30001045", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001045.tgz", + "integrity": "sha512-Y8o2Iz1KPcD6FjySbk1sPpvJqchgxk/iow0DABpGyzA1UeQAuxh63Xh0Enj5/BrsYbXtCN32JmR4ZxQTCQ6E6A==", + "dev": true + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "fast-glob": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", + "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "postcss": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } - } - } - }, - "styled-components": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.0.0.tgz", - "integrity": "sha512-F7VhIXIbUXJ8KO3pU9wap2Hxdtqa6PZ1uHrx+YXTgRjyxGlwvBHb8LULXPabmDA+uEliTXRJM5WcZntJnKNn3g==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^0.8.3", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - } - }, - "styled-icons": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/styled-icons/-/styled-icons-9.5.0.tgz", - "integrity": "sha512-nby51U6+SRY5010P15XogBZubrqblqXTV50+lA/xBkC1QrTap1BIgCvoJwH9FF5kYI+LKFl/xeco/drwqIR2Pw==", - "requires": { - "@styled-icons/boxicons-logos": "^9.4.1", - "@styled-icons/boxicons-regular": "^9.4.1", - "@styled-icons/boxicons-solid": "^9.4.1", - "@styled-icons/crypto": "^9.4.1", - "@styled-icons/entypo": "^9.5.0", - "@styled-icons/entypo-social": "^9.5.0", - "@styled-icons/evil": "^9.4.1", - "@styled-icons/fa-brands": "^9.4.1", - "@styled-icons/fa-regular": "^9.4.1", - "@styled-icons/fa-solid": "^9.4.1", - "@styled-icons/feather": "^9.4.1", - "@styled-icons/foundation": "^9.5.0", - "@styled-icons/heroicons-outline": "^9.5.0", - "@styled-icons/heroicons-solid": "^9.5.0", - "@styled-icons/icomoon": "^9.4.1", - "@styled-icons/material": "^9.4.1", - "@styled-icons/octicons": "^9.4.1", - "@styled-icons/open-iconic": "^9.5.0", - "@styled-icons/remix-fill": "^9.4.1", - "@styled-icons/remix-line": "^9.4.1", - "@styled-icons/styled-icon": "^9.4.1", - "@styled-icons/typicons": "^9.4.1", - "@styled-icons/zondicons": "^9.5.0", - "tslib": "^1.9.3" - } - }, - "styled-normalize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/styled-normalize/-/styled-normalize-8.0.7.tgz", - "integrity": "sha512-qQV4O7B9g7ZUnStCwGde7Dc/mcFF/pz0Ha/LL7+j/r6uopf6kJCmmR7jCPQMCBrDkYiQ4xvw1hUoceVJkdaMuQ==" - }, - "styled-theming": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/styled-theming/-/styled-theming-2.2.0.tgz", - "integrity": "sha1-MITkPUDqq0vBHrr9PeBONiL+434=" - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + }, + "postcss-value-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", + "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "ansi-regex": "^5.0.0" } } } }, + "stylelint-config-recommended": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", + "dev": true + }, "stylis": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz", "integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw==" }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -22132,9 +19537,9 @@ } }, "supports-hyperlinks": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.0.0.tgz", - "integrity": "sha512-bFhn0MQ8qefLyJ3K7PpHiPUTuTVPWw6RXfaMeV6xgJLXtBbszyboz1bvGTVv4R0YpQm2DqlXXn0fFHhxUHVE5w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -22159,9 +19564,15 @@ } }, "svg-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.3.tgz", - "integrity": "sha512-fnCWiifNhK8i2Z7b9R5tbNahpxrRdAaQbnoxKlT2KrSCj9Kq/yBSgulCRgBJRhy1dPnSY5slg5ehPUnzpEcHlg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", "dev": true }, "svgo": { @@ -22310,22 +19721,6 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "optional": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, "telejson": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/telejson/-/telejson-3.3.0.tgz", @@ -22350,24 +19745,6 @@ } } }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true, - "optional": true - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", - "dev": true, - "optional": true, - "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - } - }, "term-size": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", @@ -22385,9 +19762,9 @@ } }, "terser": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.4.tgz", - "integrity": "sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w==", + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.7.tgz", + "integrity": "sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g==", "dev": true, "requires": { "commander": "^2.20.0", @@ -22412,6 +19789,18 @@ "webpack-sources": "^1.4.3" }, "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "cacache": { "version": "13.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", @@ -22438,13 +19827,19 @@ "unique-filename": "^1.1.1" } }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, "schema-utils": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz", - "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "dev": true, "requires": { - "ajv": "^6.10.2", + "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } }, @@ -22513,13 +19908,6 @@ "xtend": "~4.0.1" } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true, - "optional": true - }, "timers-browserify": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", @@ -22529,12 +19917,6 @@ "setimmediate": "^1.0.4" } }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, "tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", @@ -22560,15 +19942,6 @@ "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", "dev": true }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "requires": { - "rimraf": "^2.6.3" - } - }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -22581,13 +19954,6 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true, - "optional": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -22659,11 +20025,12 @@ "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, "requires": { + "ip-regex": "^2.1.0", "psl": "^1.1.28", "punycode": "^2.1.1" } @@ -22677,33 +20044,28 @@ "punycode": "^2.1.0" } }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", "dev": true }, "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true, - "optional": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } + "trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "dev": true }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, "ts-dedent": { @@ -22718,9 +20080,9 @@ "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", "dev": true }, "tslib": { @@ -22783,8 +20145,7 @@ "typed-styles": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==", - "dev": true + "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" }, "typedarray": { "version": "0.0.6", @@ -22801,36 +20162,22 @@ "is-typedarray": "^1.0.0" } }, - "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - }, - "dependencies": { - "buffer": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", - "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - } - } - }, "unfetch": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.1.0.tgz", "integrity": "sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg==", "dev": true }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -22848,17 +20195,45 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, + "unified": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.0.0.tgz", + "integrity": "sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -22877,12 +20252,6 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -22901,6 +20270,60 @@ "imurmurhash": "^0.1.4" } }, + "unist-util-find-all-after": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", + "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "dev": true + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", + "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", + "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -22992,38 +20415,9 @@ "dependencies": { "punycode": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-3.0.0.tgz", - "integrity": "sha512-a84JJbIA5xTFTWyjjcPdnsu+41o/SNE8SpXMdUvXs6Q+LuhCD9E2+0VCiuDWqgo3GGXVlFHzArDmBpj9PgWn4A==", - "dev": true, - "requires": { - "loader-utils": "^1.2.3", - "mime": "^2.4.4", - "schema-utils": "^2.5.0" - }, - "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true - }, - "schema-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.2.tgz", - "integrity": "sha512-sazKNMBX/jwrXRkOI7N6dtiTVYqzSckzol8SGuHt0lE/v3xSW6cUkOqzu6Bq2tW+dlUzq3CWIqHU3ZKauliqdg==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } } } }, @@ -23037,23 +20431,6 @@ "requires-port": "^1.0.0" } }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "optional": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true, - "optional": true - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -23144,9 +20521,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.0.1.tgz", - "integrity": "sha512-x0yZvZAkjJwdD3fPiJzYP37aod0ati4LlmD2RmpKjqewjKAov/u/ytZ8ViIZb07cN4cePKzl9ijiUi7C1LQ8hQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz", + "integrity": "sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -23184,12 +20561,6 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "vendors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", - "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -23201,6 +20572,43 @@ "extsprintf": "^1.2.0" } }, + "vfile": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", + "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + } + } + }, + "vfile-location": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", + "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -23213,12 +20621,12 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "requires": { - "browser-process-hrtime": "^0.1.2" + "browser-process-hrtime": "^1.0.0" } }, "w3c-xmlserializer": { @@ -23232,12 +20640,6 @@ "xml-name-validator": "^3.0.0" } }, - "wait-for-expect": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", - "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==", - "dev": true - }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -23251,351 +20653,120 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, "requires": { "loose-envify": "^1.0.0" } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", - "dev": true - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", - "dev": true, - "requires": { - "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", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz", - "integrity": "sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-walk": "^6.1.1", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.15", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-cli": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", - "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "dev": true, - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "chokidar": "^2.1.8", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "dev": true, + "requires": { + "@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", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" + "minimist": "^1.2.5" } }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "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", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" } } } @@ -23706,9 +20877,9 @@ "dev": true }, "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -23726,9 +20897,9 @@ } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "which-pm-runs": { @@ -23820,13 +20991,79 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "wrappy": { @@ -23845,9 +21082,9 @@ } }, "write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -23857,13 +21094,10 @@ } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", + "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", + "dev": true }, "xml-name-validator": { "version": "3.0.0", @@ -23877,6 +21111,15 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "xregexp": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz", + "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==", + "dev": true, + "requires": { + "@babel/runtime-corejs3": "^7.8.3" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -23884,9 +21127,9 @@ "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { @@ -23905,57 +21148,119 @@ } }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "camelcase": "^3.0.0" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "optional": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "yup": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.28.1.tgz", - "integrity": "sha512-xSHMZA7UyecSG/CCTDCtnYZMjBrYDR/C7hu0fMsZ6UcS/ngko4qCVFbw+CAmNtHlbItKkvQ3YXITODeTj/dUkw==", + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.28.3.tgz", + "integrity": "sha512-amVkCgFWe5bGjrrUiODkbIzrSwtB8JpZrQYSrfj2YsbRdrV+tn9LquWdZDlfOx2HXyfEA8FGnlwidE/bFDxO7Q==", "requires": { - "@babel/runtime": "^7.0.0", - "fn-name": "~2.0.1", - "lodash": "^4.17.11", + "@babel/runtime": "^7.8.7", + "fn-name": "~3.0.0", + "lodash": "^4.17.15", "lodash-es": "^4.17.11", - "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", + "property-expr": "^2.0.0", + "synchronous-promise": "^2.0.10", "toposort": "^2.0.2" } } diff --git a/package.json b/package.json index 5ac9ec22..52f1e9dc 100644 --- a/package.json +++ b/package.json @@ -11,17 +11,16 @@ "!/**/__tests__" ], "scripts": { - "build": "better-npm-run build", "test": "better-npm-run test", "test:watch": "better-npm-run test:watch", "test:coverage": "better-npm-run test:coverage", "lint": "eslint src", "prettier": "prettier \"**/*.+(js|jsx|json)\"", - "format": "npm run prettier -- --write", + "stylelint": "stylelint \"src/**/*.+(js|jsx|css)\"", + "format": "npm run prettier -- --write && npm run stylelint -- --fix", "validate": "npm run lint && npm run test && npm run prettier -- --list-different", "storybook": "start-storybook", - "build-storybook": "build-storybook -c .storybook -o docs", - "precommit": "lint-staged" + "build-storybook": "build-storybook -c .storybook -o docs" }, "betterScripts": { "test": { @@ -41,12 +40,6 @@ "env": { "NODE_ENV": "test" } - }, - "build": { - "command": "webpack --config ./webpack.config.js", - "env": { - "NODE_ENV": "production" - } } }, "peerDependencies": { @@ -58,87 +51,71 @@ "styled-components": ">=5.0" }, "dependencies": { - "@babel/runtime": "^7.8.4", + "@babel/runtime": "^7.9.2", "browser-cookie-lite": "^1.0.4", - "date-fns": "^2.11.1", - "dayjs": "^1.8.21", - "downshift": "^5.0.3", - "i18next": "^19.3.2", + "date-fns": "^2.12.0", + "dayjs": "^1.8.24", + "downshift": "^5.1.1", + "i18next": "^19.4.2", "jump.js": "^1.0.2", "lodash-es": "^4.17.15", - "match-sorter": "^4.0.2", - "moment": "^2.24.0", - "nouislider": "^14.1.1", + "match-sorter": "^4.1.0", + "nouislider": "^14.2.0", "nouislider-react": "^3.3.7", "rc-notification": "^4.0.0", - "react-dropzone": "^10.2.1", - "react-i18next": "^11.3.3", - "react-qr-svg": "^2.2.1", + "react-datepicker": "^2.14.1", + "react-dropzone": "^10.2.2", + "react-i18next": "^11.3.5", + "react-qr-svg": "^2.2.2", + "react-sticky-box": "^0.9.3", "react-transition-group": "^4.3.0", - "react-use": "^13.26.3", + "react-use": "^14.1.1", "react-useportal": "^1.0.13", - "styled-icons": "^9.5.0", + "styled-icons": "^10.2.1", "styled-normalize": "^8.0.7", "styled-theming": "^2.2.0", "uuid-validate": "0.0.3", - "yup": "^0.28.1" + "yup": "^0.28.3" }, "devDependencies": { - "@babel/core": "^7.8.4", + "@babel/core": "^7.9.0", "@babel/plugin-proposal-class-properties": "^7.8.3", - "@babel/plugin-proposal-decorators": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.8.3", - "@babel/polyfill": "^7.8.3", - "@babel/preset-env": "^7.8.4", - "@babel/preset-react": "^7.8.3", - "@storybook/addon-actions": "^5.3.14", - "@storybook/addon-knobs": "^5.3.14", - "@storybook/react": "^5.3.14", - "@testing-library/jest-dom": "^5.1.1", - "@testing-library/react": "^9.4.1", + "@babel/preset-env": "^7.9.5", + "@babel/preset-react": "^7.9.4", + "@storybook/addon-actions": "^5.3.18", + "@storybook/addon-knobs": "^5.3.18", + "@storybook/react": "^5.3.18", + "@testing-library/jest-dom": "^5.5.0", + "@testing-library/react": "^10.0.2", "babel-eslint": "^10.1.0", - "babel-jest": "^25.1.0", - "babel-loader": "^8.0.6", + "babel-jest": "^25.4.0", + "babel-loader": "^8.1.0", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-styled-components": "^1.10.7", - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "better-npm-run": "^0.1.1", - "clean-webpack-plugin": "^3.0.0", - "css-loader": "^3.4.2", "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.0", - "eslint-plugin-import": "^2.20.1", - "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-react": "^7.18.3", - "eslint-plugin-react-hooks": "^2.5.0", - "extract-text-webpack-plugin": "^4.0.0-beta.0", - "file-loader": "^5.1.0", - "formik": "^2.1.3", - "husky": "^4.2.3", + "eslint-config-prettier": "^6.10.1", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-prettier": "^3.1.3", + "eslint-plugin-react": "^7.19.0", + "eslint-plugin-react-hooks": "^3.0.0", + "formik": "^2.1.4", + "husky": "^4.2.5", "identity-obj-proxy": "^3.0.0", - "image-webpack-loader": "^6.0.0", - "jest": "^25.1.0", - "jest-environment-jsdom": "^25.1.0", - "jest-environment-jsdom-global": "^1.2.1", - "jest-styled-components": "^7.0.0", - "lint-staged": "^10.0.8", - "mini-css-extract-plugin": "^0.9.0", - "optimize-css-assets-webpack-plugin": "^5.0.3", - "prettier": "^1.19.1", + "jest": "^25.4.0", + "jest-environment-jsdom": "^25.4.0", + "jest-environment-jsdom-global": "^2.0.2", + "jest-styled-components": "^7.0.2", + "lint-staged": "^10.1.6", + "mockdate": "^2.0.5", + "prettier": "^2.0.4", "prop-types": "^15.7.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", + "react": "^16.13.1", + "react-dom": "^16.13.1", "react-router-dom": "^5.1.2", "storybook-react-router": "^1.0.8", - "style-loader": "^1.1.3", - "styled-components": "^5.0.0", - "test-data-bot": "^0.8.0", - "url-loader": "^3.0.0", - "webpack": "^4.41.6", - "webpack-bundle-analyzer": "^3.6.0", - "webpack-cli": "^3.3.11" + "styled-components": "^5.1.0", + "stylelint": "^13.3.3", + "stylelint-config-recommended": "^3.0.0", + "test-data-bot": "^0.8.0" } } diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js deleted file mode 100644 index 53865b37..00000000 --- a/src/assets/icons/index.js +++ /dev/null @@ -1,50 +0,0 @@ -export { - Bolt, - Eye, - EyeSlash, - Camera, - Check, - Video, - VideoSlash, - User, - UserPlus, - UserTimes, - Times, - Plus, - Exclamation, - Play, - Search, - ArrowUp, - ArrowRight, - AngleRight, - ArrowDown, - ArrowLeft, - InfoCircle, - Clone, - CalendarAlt, - Qrcode, - Ban, - Trash, -} from "styled-icons/fa-solid"; - -export { - RightArrow as BoxRightArrow, - LeftArrow as BoxLeftArrow, - Pencil as BoxPencil, -} from "styled-icons/boxicons-solid"; - -export { - TimesCircle, - ArrowAltCircleDown, - ArrowAltCircleRight, -} from "styled-icons/fa-regular"; - -export { - KeyboardArrowRight, - KeyboardArrowLeft, - PlaylistAdd, - PlaylistAddCheck, -} from "styled-icons/material"; - -export { default as Sync } from "./Sync"; -export { default as Asterisk } from "./Asterisk"; diff --git a/src/assets/index.js b/src/assets/index.js index a56162d3..cbe718aa 100644 --- a/src/assets/index.js +++ b/src/assets/index.js @@ -1,5 +1,3 @@ -import * as animations from "./animations"; -import * as icons from "./icons"; import * as images from "./images"; -export { images, icons, animations }; +export { images }; diff --git a/src/components/Breadcrumbs/Breadcrumbs.stories.js b/src/components/Breadcrumbs/Breadcrumbs.stories.js new file mode 100644 index 00000000..bc161a62 --- /dev/null +++ b/src/components/Breadcrumbs/Breadcrumbs.stories.js @@ -0,0 +1,38 @@ +import React from "react"; +import { storiesOf } from "@storybook/react"; + +import { useState } from "react"; + +import { Breadcrumbs } from "./index.jsx"; + +storiesOf("Navigation|Breadcrumbs", module).add("default", () => { + const [active, setActive] = useState("first"); + return ( + + { + setActive("first"); + }} + > + First + + { + setActive("second"); + }} + > + Second + + { + setActive("thrid"); + }} + > + Thrid + + + ); +}); diff --git a/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItemIcon.jsx b/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItemIcon.jsx new file mode 100644 index 00000000..ee01194c --- /dev/null +++ b/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItemIcon.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +import { ArrowRight } from "../../icons"; + +const BreadcrumbsItemIcon = styled(ArrowRight)``; + +export { BreadcrumbsItemIcon }; diff --git a/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItemText.jsx b/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItemText.jsx new file mode 100644 index 00000000..5c8fe432 --- /dev/null +++ b/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItemText.jsx @@ -0,0 +1,12 @@ +import styled from "styled-components"; + +import { colors } from "../../../style"; + +const BreadcrumbsItemText = styled.span` + font-size: 16px; + line-height: 26px; + font-weight: 300; + color: ${colors.darkBlack}; +`; + +export { BreadcrumbsItemText }; diff --git a/src/components/Breadcrumbs/BreadcrumbsItem/StyledBreadcrumbsItem.jsx b/src/components/Breadcrumbs/BreadcrumbsItem/StyledBreadcrumbsItem.jsx new file mode 100644 index 00000000..44f69d21 --- /dev/null +++ b/src/components/Breadcrumbs/BreadcrumbsItem/StyledBreadcrumbsItem.jsx @@ -0,0 +1,34 @@ +import styled, { css } from "styled-components"; + +import { BreadcrumbsItemText } from "./BreadcrumbsItemText"; +import { BreadcrumbsItemIcon } from "./BreadcrumbsItemIcon"; + +function getStyles({ isActive, isDisabled }) { + return css` + ${BreadcrumbsItemText} { + opacity: ${isDisabled ? 0.4 : 1}; + font-weight: ${isActive ? 700 : 300}; + cursor: ${isDisabled ? "not-allowed" : isActive ? "default" : "pointer"}; + } + `; +} + +const StyledBreadcrumbsItem = styled.li` + display: flex; + align-items: center; + ${getStyles} + + &:last-child { + ${BreadcrumbsItemIcon} { + display: none; + } + } + + &:not(:last-child) { + ${BreadcrumbsItemText} { + margin-right: 14px; + } + } +`; + +export { StyledBreadcrumbsItem }; diff --git a/src/components/Breadcrumbs/BreadcrumbsItem/index.jsx b/src/components/Breadcrumbs/BreadcrumbsItem/index.jsx new file mode 100644 index 00000000..42cd5bce --- /dev/null +++ b/src/components/Breadcrumbs/BreadcrumbsItem/index.jsx @@ -0,0 +1,37 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { StyledBreadcrumbsItem } from "./StyledBreadcrumbsItem"; +import { BreadcrumbsItemText } from "./BreadcrumbsItemText"; +import { BreadcrumbsItemIcon } from "./BreadcrumbsItemIcon"; + +function BreadcrumbsItem({ + children, + isDisabled, + onClick, + isActive, + ...restProps +}) { + const onClickAllowed = !isDisabled && !isActive; + + return ( + + {children} + + + ); +} + +BreadcrumbsItem.propTypes = { + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), + isDisabled: PropTypes.bool, + isActive: PropTypes.bool, + onClick: PropTypes.func, +}; + +export { BreadcrumbsItem, StyledBreadcrumbsItem }; diff --git a/src/components/Breadcrumbs/index.jsx b/src/components/Breadcrumbs/index.jsx new file mode 100644 index 00000000..1695425c --- /dev/null +++ b/src/components/Breadcrumbs/index.jsx @@ -0,0 +1,20 @@ +import styled from "styled-components"; + +import { StyledBreadcrumbsItem, BreadcrumbsItem } from "./BreadcrumbsItem"; + +const Breadcrumbs = styled.ul` + padding-left: 0; + margin: 0; + list-style-type: none; + display: flex; + + ${StyledBreadcrumbsItem} { + &:not(:last-child) { + margin-right: 12px; + } + } +`; + +Breadcrumbs.Item = BreadcrumbsItem; + +export { Breadcrumbs, BreadcrumbsItem }; diff --git a/src/components/Button/Button.stories.js b/src/components/Button/Button.stories.js index 07fbec6f..ee9d2b73 100644 --- a/src/components/Button/Button.stories.js +++ b/src/components/Button/Button.stories.js @@ -3,42 +3,27 @@ import { storiesOf } from "@storybook/react"; import { text, select, boolean } from "@storybook/addon-knobs"; import { action } from "@storybook/addon-actions"; -import Button from "./index.jsx"; +import { Button } from "./index.jsx"; -storiesOf("Button", module).add("default", () => { +storiesOf("Controls|Button", module).add("default", () => { const buttonText = text("Button text", "Arunoda"); - const buttonTheme = select( + const theme = select( "Button theme", - [ - "light", - "light-gray", - "dark", - "blue", - "warning", - "ghost", - "ghost-dark", - "active", - "warning", - "reset", - "lighter", - "disabled", - ], + ["light", "dark", "green", "blue"], "light" ); const buttonSize = select("Button size", ["medium", "large"], "medium"); const buttonFit = select("Button fit", ["rect", "square", "circle"], "rect"); const isButtonDisabled = boolean("Is disabled", false); - const isButtonRounded = boolean("Is rounded", true); return ( diff --git a/src/components/Button/ButtonFits.jsx b/src/components/Button/ButtonFits.jsx index a65ec269..44a7b524 100644 --- a/src/components/Button/ButtonFits.jsx +++ b/src/components/Button/ButtonFits.jsx @@ -1,11 +1,27 @@ import { css } from "styled-components"; -const rectFit = css``; +const rectFit = css` + border-radius: 4px; -const squareFit = css``; + &:after { + border-radius: 4px; + } +`; + +const squareFit = css` + border-radius: 5px; + + &:after { + border-radius: 5px; + } +`; const circleFit = css` border-radius: 50%; + + &:after { + border-radius: 50%; + } `; export default { diff --git a/src/components/Button/ButtonSizes.jsx b/src/components/Button/ButtonSizes.jsx index a12c806d..5f497017 100644 --- a/src/components/Button/ButtonSizes.jsx +++ b/src/components/Button/ButtonSizes.jsx @@ -1,7 +1,7 @@ import { css } from "styled-components"; function getSize(height, paddnig) { - return function({ fit }) { + return function ({ fit }) { if (fit === "square" || fit === "circle") { return css` width: ${height}px; @@ -18,17 +18,11 @@ function getSize(height, paddnig) { const mediumSize = css` font-size: 16px; - font-weight: 600; - letter-spacing: 0.013px; - ${getSize(30, 12)} `; const largeSize = css` font-size: 18px; - font-weight: 600; - letter-spacing: 0.013px; - ${getSize(40, 30)} `; diff --git a/src/components/Button/ButtonThemes.jsx b/src/components/Button/ButtonThemes.jsx index f5fe46fa..631c07cf 100644 --- a/src/components/Button/ButtonThemes.jsx +++ b/src/components/Button/ButtonThemes.jsx @@ -1,8 +1,8 @@ import { css } from "styled-components"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; -function getPseudoForShadow({ isRounded, fit, disabled }) { +function getPseudoForShadow() { return css` position: relative; @@ -14,18 +14,13 @@ function getPseudoForShadow({ isRounded, fit, disabled }) { z-index: -1; width: 100%; height: 100%; - border-radius: ${fit === "circle" ? "50%" : isRounded ? "3px" : "0px"}; opacity: 0; transition: opacity 0.3s ease-in-out; + box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.2); } &:hover:after { - ${!disabled && - css` - { - opacity: 1; - } - `} + opacity: 1; } `; } @@ -35,153 +30,59 @@ const resetTheme = css` `; const disabledTheme = css` - color: #aaa; - background-color: #f3f3f3; + color: ${colors.whiteSimple}; + background-color: ${colors.grayWhite}; `; const lightTheme = css` - color: ${colors.slate}; - background-color: #e4e9eb; - - ${getPseudoForShadow} - - &:after { - box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.2); + color: ${colors.darkBlack}; + background-color: ${colors.blueWhite}; + &:hover { + background-color: ${colors.slate}; + color: ${colors.whiteSimple}; } - ${({ disabled }) => { - return disabled - ? disabledTheme - : css` - &:hover { - background-color: #3b4b5a; - color: #fff; - } - `; - }} -`; - -const lighterTheme = css` - color: #3b4b5a; - background-color: #f3f3f3; -`; - -const lighterGrayTheme = css` - color: #3b4b5a; - background-color: #9fa7ae; + ${getPseudoForShadow} `; const darkTheme = css` - color: #fff; - background-color: #3b4b5a; - + color: ${colors.whiteSimple}; + background-color: ${colors.slate}; ${getPseudoForShadow} - - &:after { - box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.2); - } `; const blueTheme = css` - color: #fff; - background-color: #167097; - + color: ${colors.whiteSimple}; + background-color: #1a5d7b; ${getPseudoForShadow} - - &:after { - box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.2); - } - - ${({ disabled }) => - !disabled && - css` - &:hover { - background-color: #167097; - } - `} `; -const ghostTheme = css` - color: #fff; - background-color: #ccc; -`; - -const ghostDarkTheme = css` - color: #3b4b5a; - background-color: #f3f3f3; -`; - -const activeTheme = css` - background-color: #3b4b5a; - color: #fff; - box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.15); -`; - -const warningTheme = css` - color: #fff; - background-color: #ac3d03; +const greenTheme = css` + color: ${colors.whiteSimple}; + background-color: ${colors.lightGreen}; + ${getPseudoForShadow} `; const outlineTheme = css` color: ${colors.slate}; border: 1px solid ${colors.slate}; - - ${getPseudoForShadow} - - ${({ disabled }) => - !disabled - ? css` - &:hover { - color: #fff; - background-color: #3b4b5a; - } - ` - : css` - opacity: 0.4; - `} - - - &:after { - box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.2); + &:hover { + color: ${colors.whiteSimple}; + background-color: ${colors.slate}; } -`; - -const outlineAccentTheme = css` - color: ${colors.bloodOrange}; - border: 1px solid ${colors.bloodOrange}; ${getPseudoForShadow} - - ${({ disabled }) => - !disabled - ? css` - &:hover { - color: #fff; - background-color: ${colors.bloodOrange}; - } - ` - : css` - opacity: 0.4; - `} - - &:after { box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.2); } `; export default { - light: lightTheme, - dark: darkTheme, - blue: blueTheme, - ghost: ghostTheme, - "ghost-dark": ghostDarkTheme, - active: activeTheme, - warning: warningTheme, reset: resetTheme, - lighter: lighterTheme, disabled: disabledTheme, - "light-gray": lighterGrayTheme, + light: lightTheme, + dark: darkTheme, outline: outlineTheme, - "outline-accent": outlineAccentTheme, + green: greenTheme, + blue: blueTheme, }; diff --git a/src/components/Button/StyledButton.jsx b/src/components/Button/StyledButton.jsx index 270c29b7..2b71cbde 100644 --- a/src/components/Button/StyledButton.jsx +++ b/src/components/Button/StyledButton.jsx @@ -6,21 +6,18 @@ import ButtonFits from "./ButtonFits"; const StyledButton = styled.button` display: inline-block; - cursor: ${({ disabled }) => (disabled ? "not-allowed" : "pointer")}; + box-sizing: border-box; + padding: 0; + border: none; outline: ${({ isHardOutline }) => isHardOutline ? "none !important" : "none"}; - border: none; - padding: 0; - box-sizing: border-box; + cursor: ${({ disabled }) => (disabled ? "not-allowed" : "pointer")}; + font-weight: 600; transition: background-color 100ms, border-color 100ms, box-shadow 100ms, color 100ms, opacity 100ms; - - border-radius: ${({ isRounded }) => (isRounded ? "3px" : "0px")}; - - ${({ buttonTheme }) => ButtonThemes[buttonTheme]}; - ${({ size }) => ButtonSizes[size]}; - ${({ fit }) => ButtonFits[fit]}; - + ${({ theme, disabled }) => ButtonThemes[disabled ? "disabled" : theme]} + ${({ size }) => ButtonSizes[size]} + ${({ fit }) => ButtonFits[fit]} ${({ isFullWidth }) => isFullWidth && css` @@ -28,4 +25,4 @@ const StyledButton = styled.button` `} `; -export default StyledButton; +export { StyledButton }; diff --git a/src/components/Button/index.jsx b/src/components/Button/index.jsx index e9da5bb7..ccc59395 100644 --- a/src/components/Button/index.jsx +++ b/src/components/Button/index.jsx @@ -1,87 +1,95 @@ import React from "react"; import PropTypes from "prop-types"; -import StyledButton from "./StyledButton"; +import { StyledButton } from "./StyledButton"; + +const Button = React.forwardRef((props, ref) => { + const { + onClick, + onMouseEnter, + onMouseLeave, + onKeyPress, + onKeyUp, + onKeyDown, + onFocus, + onBlur, + children, + isDisabled, + type, + size, + theme, + fit, + isFullWidth, + isHardOutline, + style, + className, + disabled, + "data-testid": testId, + } = props; -function Button({ - onClick, - onMouseLeave, - children, - isDisabled, - type, - size, - buttonTheme, - fit, - className, - isRounded, - isFullWidth, - ...restProps -}) { return ( {children} ); -} +}); Button.propTypes = { className: PropTypes.string, - // Кнопка ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ submit, ΠΈ этот ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ + "data-testid": PropTypes.string, onClick: PropTypes.func, + onMouseEnter: PropTypes.func, onMouseLeave: PropTypes.func, - children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), + onKeyPress: PropTypes.func, + onKeyUp: PropTypes.func, + onKeyDown: PropTypes.func, + onFocus: PropTypes.func, + onBlur: PropTypes.func, + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]).isRequired, + /* TODO: ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ isDisabled */ isDisabled: PropTypes.bool, - isRounded: PropTypes.bool, + disabled: PropTypes.bool, isFullWidth: PropTypes.bool, type: PropTypes.oneOf(["button", "submit"]), - size: PropTypes.oneOf(["small", "medium", "large"]), - fit: PropTypes.oneOf(["rect", "square", "circle"]), - // Названо Ρ‚Π°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚ с props.theme ΠΈΠ· styled-theming - buttonTheme: PropTypes.oneOf([ - "light", - "light-gray", - "dark", - "blue", - "warning", - "ghost", - "ghost-dark", - "active", - "warning", - "reset", - "lighter", - "disabled", - "outline", - "outline-accent", - ]), - + size: PropTypes.oneOf(["medium", "large"]).isRequired, + fit: PropTypes.oneOf(["rect", "square", "circle"]).isRequired, + theme: PropTypes.oneOf(["light", "dark", "reset", "outline", "green", "blue"]) + .isRequired, // ΠŸΡ€ΠΎΠΏΠ΅Ρ€Ρ‚ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² FF Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°ΡƒΡ‚Π»Π°ΠΉΠ½ (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· !important) // Но ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² false, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π°Ρ‚ΡŒ свой Π°ΡƒΡ‚Π»Π°ΠΉΠ½ isHardOutline: PropTypes.bool, + style: PropTypes.object, }; Button.defaultProps = { - isDisabled: false, - isRounded: true, - isFullWidth: false, type: "button", size: "medium", - buttonTheme: "light", + theme: "reset", fit: "rect", + isDisabled: false, + isFullWidth: false, isHardOutline: true, + "data-testid": "button", }; export { Button, StyledButton }; - -export default Button; diff --git a/src/components/ButtonLink.jsx b/src/components/ButtonLink.jsx index 829e509a..32c73b38 100644 --- a/src/components/ButtonLink.jsx +++ b/src/components/ButtonLink.jsx @@ -3,21 +3,16 @@ import React from "react"; import PropTypes from "prop-types"; import styled from "styled-components"; -import StyledButton from "./Button/StyledButton"; +import { StyledButton } from "./Button"; import { Link } from "react-router-dom"; -const LinkWithOmittedProps = ({ - isRounded, - size, - buttonTheme, - fit, - ...restProps -}) => ; +const LinkWithOmittedProps = ({ size, theme, fit, ...restProps }) => ( + +); LinkWithOmittedProps.propTypes = { - isRounded: PropTypes.bool, size: PropTypes.string, - buttonTheme: PropTypes.string, + theme: PropTypes.string, fit: PropTypes.string, }; @@ -29,8 +24,7 @@ export const ButtonLink = styled(StyledButton).attrs(() => ({ `; ButtonLink.defaultProps = { - isRounded: true, size: "medium", - buttonTheme: "light", + theme: "reset", fit: "rect", }; diff --git a/src/components/CardSmall/CardSmall.stories.js b/src/components/CardSmall/CardSmall.stories.js index 948090e1..6ee01cbc 100644 --- a/src/components/CardSmall/CardSmall.stories.js +++ b/src/components/CardSmall/CardSmall.stories.js @@ -7,10 +7,10 @@ import { action } from "@storybook/addon-actions"; import { CardSmall } from "./index"; import { personMock } from "../../../test/__mocks__"; -import { PlaylistAdd } from "../../assets/icons"; -import { colors } from "../../themes/index"; +import { PlaylistAdd } from "../icons"; +import { colors } from "../../style"; -storiesOf("Basic UI|CardSmall", module) +storiesOf("Data display|CardSmall", module) .add("default", () => { function CardSmallWrapper() { const [isSelected, setIsSelected] = useState(false); diff --git a/src/components/CardSmall/CardSmallButton.jsx b/src/components/CardSmall/CardSmallButton.jsx index 1f3cdb58..b66cff6a 100644 --- a/src/components/CardSmall/CardSmallButton.jsx +++ b/src/components/CardSmall/CardSmallButton.jsx @@ -2,9 +2,7 @@ import styled from "styled-components"; import { Button } from "../Button"; -const CardSmallButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` +const CardSmallButton = styled(Button)` width: 24px; height: 24px; position: absolute; @@ -16,7 +14,7 @@ const CardSmallButton = styled(Button).attrs(() => ({ justify-content: center; opacity: ${({ isHidden }) => { - return isHidden ? 0 : 1; + return isHidden ? "0" : "1"; }}; `; diff --git a/src/components/CardSmall/CardSmallCheckbox/StyledCardSmallCheckbox.jsx b/src/components/CardSmall/CardSmallCheckbox/StyledCardSmallCheckbox.jsx index 092a2d56..38be44f2 100644 --- a/src/components/CardSmall/CardSmallCheckbox/StyledCardSmallCheckbox.jsx +++ b/src/components/CardSmall/CardSmallCheckbox/StyledCardSmallCheckbox.jsx @@ -2,13 +2,13 @@ import styled from "styled-components"; const StyledCardSmallCheckbox = styled.label` position: absolute; - left: 5px; - top: 5px; + left: 6px; + top: 6px; transition: opacity 120ms ease-in-out; z-index: 1; opacity: ${({ isHidden }) => { - return isHidden ? 0 : 1; + return isHidden ? "0" : "1"; }}; `; diff --git a/src/components/CardSmall/CardSmallCheckbox/index.jsx b/src/components/CardSmall/CardSmallCheckbox/index.jsx index 0bffbbf6..491606e8 100644 --- a/src/components/CardSmall/CardSmallCheckbox/index.jsx +++ b/src/components/CardSmall/CardSmallCheckbox/index.jsx @@ -9,18 +9,12 @@ function CardSmallCheckbox({ name, onChange, checked, isHidden }) { return ( { + onClick={(e) => { e.stopPropagation(); }} isHidden={isHidden} > - + ); } diff --git a/src/components/CardSmall/CardSmallData/CardSmallDataItem.jsx b/src/components/CardSmall/CardSmallData/CardSmallDataItem.jsx index e3b691f7..836a94b9 100644 --- a/src/components/CardSmall/CardSmallData/CardSmallDataItem.jsx +++ b/src/components/CardSmall/CardSmallData/CardSmallDataItem.jsx @@ -1,20 +1,20 @@ import styled from "styled-components"; const CardSmallDataItem = styled.p` - font-size: 13px; margin-top: 0; margin-bottom: 0; white-space: nowrap; /* Π—Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ пСрСнос строк */ overflow: hidden; /* ΠžΠ±Ρ€Π΅Π·Π°Π΅ΠΌ всС, Ρ‡Ρ‚ΠΎ Π½Π΅ помСщаСтся Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ */ text-overflow: ellipsis; /* ДобавляСм ΠΌΠ½ΠΎΠ³ΠΎΡ‚ΠΎΡ‡ΠΈΠ΅ */ - line-height: 1.38; + font-weight: 300; + font-size: 14px; + line-height: 18px; &:not(:last-child) { - margin-bottom: 10px; + margin-bottom: 6px; } b { - font-size: 14px; font-weight: 600; } `; diff --git a/src/components/CardSmall/CardSmallData/index.jsx b/src/components/CardSmall/CardSmallData/index.jsx index e709810f..1679d674 100644 --- a/src/components/CardSmall/CardSmallData/index.jsx +++ b/src/components/CardSmall/CardSmallData/index.jsx @@ -2,7 +2,7 @@ import styled from "styled-components"; const CardSmallData = styled.div` box-sizing: border-box; - padding: 15px 5px 15px 15px; + padding: 16px 5px 16px 16px; width: 100%; `; diff --git a/src/components/CardSmall/CardSmallTitle.jsx b/src/components/CardSmall/CardSmallTitle.jsx index 3dde59d5..055c3c2b 100644 --- a/src/components/CardSmall/CardSmallTitle.jsx +++ b/src/components/CardSmall/CardSmallTitle.jsx @@ -3,10 +3,10 @@ import styled from "styled-components"; const CardSmallTitle = styled.p` margin: 0; font-size: 12px; - font-weight: 600; + line-height: 11px; &:not(:last-child) { - margin-bottom: 9px; + margin-bottom: 12px; } `; diff --git a/src/components/CardSmall/StyledCardSmall.jsx b/src/components/CardSmall/StyledCardSmall.jsx index 2e9ca856..abb18257 100644 --- a/src/components/CardSmall/StyledCardSmall.jsx +++ b/src/components/CardSmall/StyledCardSmall.jsx @@ -1,12 +1,12 @@ import styled, { css } from "styled-components"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; import { CardSmallData } from "./index"; const themes = { light: { - backgroundColor: colors.iceBlue, - textColor: colors.brownGray, + backgroundColor: colors.whiteGrayLight, + textColor: colors.darkBlack, }, dark: { backgroundColor: colors.slate, diff --git a/src/components/CardSmall/index.jsx b/src/components/CardSmall/index.jsx index a3fce84e..6bde6616 100644 --- a/src/components/CardSmall/index.jsx +++ b/src/components/CardSmall/index.jsx @@ -9,6 +9,8 @@ import { CardSmallButton } from "./CardSmallButton"; import { CardSmallCheckbox } from "./CardSmallCheckbox"; import { CardSmallTitle } from "./CardSmallTitle"; +import { hasProperty } from "../../utils/helpers"; + function CardSmall(props) { const { theme, @@ -20,7 +22,7 @@ function CardSmall(props) { className, } = props; - const hasPhoto = Object.prototype.hasOwnProperty.call(props, "img"); + const hasPhoto = hasProperty(props, "img"); return ( diff --git a/src/components/CopyItem.js b/src/components/CopyItem.js deleted file mode 100644 index eb3f9e62..00000000 --- a/src/components/CopyItem.js +++ /dev/null @@ -1,58 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -const isCopyAvailible = - document.queryCommandSupported && document.queryCommandSupported("copy"); - -/** - * Deprecated - * (useCopyToClipboard) - */ -export class CopyItem extends React.Component { - static propTypes = { - render: PropTypes.func.isRequired, - }; - - copyItemRef = React.createRef(); - - state = { - isCopySuccess: false, - isError: false, - }; - - copyToClipboard = () => { - this.setState({ isCopySuccess: false }, () => { - /** - * На случай копирования ΠΈΠ· скрытых элСмСнтов - * добавляСтся Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт, ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΊΠΎΡ‚Ρ€ΠΎΠ³ΠΎ - * это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ html исходного элСмСнта - */ - try { - const sourceEl = this.copyItemRef.current; - const el = document.createElement("textarea"); - - el.value = sourceEl.value || sourceEl.innerHTML; - el.setAttribute("readonly", ""); - el.style.position = "absolute"; - el.style.left = "-9999px"; - document.body.appendChild(el); - el.select(); - document.execCommand("copy"); - document.body.removeChild(el); - - this.setState({ isCopySuccess: true }); - } catch (error) { - console.log(error); - this.setState({ isError: true }); - } - }); - }; - - render() { - return this.props.render({ - isCopyAvailible, - copyItemRef: this.copyItemRef, - copyData: this.copyToClipboard, - }); - } -} diff --git a/src/components/CopyItem/CopyItem.stories.js b/src/components/CopyItem/CopyItem.stories.js new file mode 100644 index 00000000..62fecb3d --- /dev/null +++ b/src/components/CopyItem/CopyItem.stories.js @@ -0,0 +1,12 @@ +import React from "react"; +import { storiesOf } from "@storybook/react"; +import { text } from "@storybook/addon-knobs"; +import { action } from "@storybook/addon-actions"; + +import { CopyItem } from "./index.jsx"; + +storiesOf("Controls|CopyItem", module).add("default", () => { + const textToCopy = text("text to copy", "Copy me!"); + + return {textToCopy}; +}); diff --git a/src/components/CopyItem/CopyItemIcon.jsx b/src/components/CopyItem/CopyItemIcon.jsx new file mode 100644 index 00000000..c7d020b1 --- /dev/null +++ b/src/components/CopyItem/CopyItemIcon.jsx @@ -0,0 +1,13 @@ +import styled from "styled-components"; + +import { Clone } from "../icons"; + +import { colors } from "../../style"; + +const CopyItemIcon = styled(Clone)` + color: ${colors.grayMedium}; + margin-left: 4px; + align-self: flex-start; +`; + +export { CopyItemIcon }; diff --git a/src/components/CopyItem/StyledCopyItem.jsx b/src/components/CopyItem/StyledCopyItem.jsx new file mode 100644 index 00000000..2263c9ea --- /dev/null +++ b/src/components/CopyItem/StyledCopyItem.jsx @@ -0,0 +1,15 @@ +import styled from "styled-components"; + +import { Flash } from "../Flash"; + +import { colors } from "../../style"; + +const StyledCopyItem = styled(Flash)` + cursor: pointer; + font-size: 16px; + line-height: 26px; + color: ${colors.darkBlack}; + display: flex; +`; + +export { StyledCopyItem }; diff --git a/src/components/CopyItem/index.jsx b/src/components/CopyItem/index.jsx new file mode 100644 index 00000000..05c3fae4 --- /dev/null +++ b/src/components/CopyItem/index.jsx @@ -0,0 +1,61 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { useEffect } from "react"; +import { useCopyToClipboard } from "../../hooks"; +import { useFlash } from "../Flash"; + +import { StyledCopyItem } from "./StyledCopyItem"; +import { CopyItemIcon } from "./CopyItemIcon"; + +function CopyItem({ + children, + value, + onCopy, + className, + "data-testid": testId, +}) { + const { flash, isFlashing } = useFlash(); + const [{ isCopyAvailable, isCopied }, copyToClipboard] = useCopyToClipboard(); + + function handleCopyClick(ev) { + const valueToCopy = value || children; + ev.stopPropagation(); + copyToClipboard(valueToCopy); + } + + useEffect(() => { + if (isCopied) { + flash(); + if (onCopy) { + onCopy(); + } + } + }, [isCopied]); + + return ( + + {children} + {isCopyAvailable && } + + ); +} + +CopyItem.propTypes = { + children: PropTypes.string.isRequired, + value: PropTypes.string, + onCopy: PropTypes.func, + className: PropTypes.string, + "data-testid": PropTypes.string, +}; + +CopyItem.defaultProps = { + "data-testid": "copy-item", +}; + +export { CopyItem, StyledCopyItem }; diff --git a/src/components/DatePicker/DatePicker.stories.js b/src/components/DatePicker/DatePicker.stories.js new file mode 100644 index 00000000..8ff52713 --- /dev/null +++ b/src/components/DatePicker/DatePicker.stories.js @@ -0,0 +1,15 @@ +import React, { useState } from "react"; + +import { storiesOf } from "@storybook/react"; + +import { DatePicker } from "./index"; + +storiesOf("Controls|DatePicker", module).add("default", () => { + function DatePickerWrapper() { + const [value, setValue] = useState([null, null]); + + return ; + } + + return ; +}); diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/EntriesDateTimeFilterDateTimeInputInput.jsx b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/DatePickerDateTimeInputInput.jsx similarity index 67% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/EntriesDateTimeFilterDateTimeInputInput.jsx rename to src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/DatePickerDateTimeInputInput.jsx index 91fcad86..9c0433df 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/EntriesDateTimeFilterDateTimeInputInput.jsx +++ b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/DatePickerDateTimeInputInput.jsx @@ -1,8 +1,8 @@ import styled from "styled-components"; -import { colors } from "@identixone/ui-kit/src/themes/colors"; +import { colors } from "../../../../style"; -const EntriesDateTimeFilterDateTimeInputInput = styled.input` +const DatePickerDateTimeInputInput = styled.input` background-color: ${colors.grayLight}; height: 30px; width: ${({ width }) => (width ? width + "px" : "auto")}; @@ -19,4 +19,4 @@ const EntriesDateTimeFilterDateTimeInputInput = styled.input` } `; -export { EntriesDateTimeFilterDateTimeInputInput }; +export { DatePickerDateTimeInputInput }; diff --git a/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/DatePickerDateTimeInputLabel.jsx b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/DatePickerDateTimeInputLabel.jsx new file mode 100644 index 00000000..3a36319c --- /dev/null +++ b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/DatePickerDateTimeInputLabel.jsx @@ -0,0 +1,14 @@ +import styled from "styled-components"; + +import { colors } from "../../../../style"; + +const DatePickerDateTimeInputLabel = styled.label` + display: inline-block; + font-size: 14px; + font-weight: 300; + line-height: 1.29; + width: 42px; + color: ${colors.darkBlack}; +`; + +export { DatePickerDateTimeInputLabel }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/StyledEntriesDateTimeFilterDateTimeInput.jsx b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/StyledDatePickerDateTimeInput.jsx similarity index 54% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/StyledEntriesDateTimeFilterDateTimeInput.jsx rename to src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/StyledDatePickerDateTimeInput.jsx index f0e5ba31..f50de6ba 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/StyledEntriesDateTimeFilterDateTimeInput.jsx +++ b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/StyledDatePickerDateTimeInput.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -const StyledEntriesDateTimeFilterDateTimeInput = styled.div` +const StyledDatePickerDateTimeInput = styled.div` display: flex; align-items: center; @@ -9,4 +9,4 @@ const StyledEntriesDateTimeFilterDateTimeInput = styled.div` } `; -export { StyledEntriesDateTimeFilterDateTimeInput }; +export { StyledDatePickerDateTimeInput }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/index.jsx b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/index.jsx similarity index 74% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/index.jsx rename to src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/index.jsx index 0098796c..d85e1489 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/index.jsx +++ b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInput/index.jsx @@ -5,12 +5,12 @@ import dayjs from "dayjs"; import { useState, useEffect } from "react"; import { usePrevious, useUpdateEffect } from "react-use"; -import { StyledEntriesDateTimeFilterDateTimeInput } from "./StyledEntriesDateTimeFilterDateTimeInput"; -import { EntriesDateTimeFilterDateTimeInputLabel } from "./EntriesDateTimeFilterDateTimeInputLabel"; -import { EntriesDateTimeFilterDateTimeInputInput } from "./EntriesDateTimeFilterDateTimeInputInput"; +import { StyledDatePickerDateTimeInput } from "./StyledDatePickerDateTimeInput"; +import { DatePickerDateTimeInputLabel } from "./DatePickerDateTimeInputLabel"; +import { DatePickerDateTimeInputInput } from "./DatePickerDateTimeInputInput"; import { isEqual } from "lodash-es"; -import { isValidDate } from "../../../../../utils/helpers"; +import { isValidDate } from "../../../../utils/helpers"; function getDateFromDateTime(value) { return value ? dayjs(value).format("YYYY/MM/DD") : ""; @@ -20,7 +20,7 @@ function getTimeFromDateTime(value) { return value ? dayjs(value).format("HH:mm:ss") : ""; } -function EntriesDateTimeFilterDateTimeInput({ +function DatePickerDateTimeInput({ value, onChange, onFocus, @@ -65,13 +65,13 @@ function EntriesDateTimeFilterDateTimeInput({ }, [value]); return ( - + {label && ( - + {label} - + )} - { setDateValue(value); @@ -87,7 +87,7 @@ function EntriesDateTimeFilterDateTimeInput({ data-testid={`${testId}-date`} width={107} /> - { setTimeValue(value); @@ -107,16 +107,16 @@ function EntriesDateTimeFilterDateTimeInput({ data-testid={`${testId}-time`} width={88} /> - + ); } -EntriesDateTimeFilterDateTimeInput.propTypes = { +DatePickerDateTimeInput.propTypes = { label: PropTypes.string, - value: PropTypes.object.isRequired, - onChange: PropTypes.func.isRequied, - onFocus: PropTypes.func.isRequied, + value: PropTypes.object, + onChange: PropTypes.func.isRequired, + onFocus: PropTypes.func.isRequired, "data-testid": PropTypes.string, }; -export { EntriesDateTimeFilterDateTimeInput }; +export { DatePickerDateTimeInput }; diff --git a/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInputs.jsx b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInputs.jsx new file mode 100644 index 00000000..be752c78 --- /dev/null +++ b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimeInputs.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +const DatePickerDateTimeInputs = styled.div` + padding-top: 16px; +`; + +export { DatePickerDateTimeInputs }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimePicker/index.jsx b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimePicker/index.jsx similarity index 67% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimePicker/index.jsx rename to src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimePicker/index.jsx index 510b111f..e5098fb2 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimePicker/index.jsx +++ b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimePicker/index.jsx @@ -4,26 +4,27 @@ import PropTypes from "prop-types"; import { useState, useEffect, useContext } from "react"; import DatePicker from "react-datepicker"; -import { EntriesDateTimeFilterDateTimeInputs } from "../EntriesDateTimeFilterDateTimeInputs"; -import { EntriesDateTimeFilterDateTimeInput } from "../EntriesDateTimeFilterDateTimeInput"; -import { EntriesDateTimeFilterContext } from "../../index"; +import { DatePickerDateTimeInputs } from "../DatePickerDateTimeInputs"; +import { DatePickerDateTimeInput } from "../DatePickerDateTimeInput"; +import { DatePickerContext } from "../../index"; -import { isSameDate } from "../../../../../utils/helpers"; import dayjs from "dayjs"; import isSameOrAfter from "dayjs/plugin/isSameOrAfter"; +import isToday from "dayjs/plugin/isToday"; import { registerLocale } from "react-datepicker"; import enGb from "date-fns/locale/en-GB"; import "./styles.css"; registerLocale("en-GB", enGb); dayjs.extend(isSameOrAfter); +dayjs.extend(isToday); -function EntriesDateTimeFilterDateTimePicker({ value, onChange }) { +function DatePickerDateTimePicker({ value, onChange }) { const [selectionComplete, toggleSelectionComplete] = useState( value[0] && value[1] ); - const { setError, initialDateFrom, initialDateTo } = useContext( - EntriesDateTimeFilterContext + const { setError, initialDateFrom, initialDateTo, testId } = useContext( + DatePickerContext ); useEffect(() => { @@ -50,10 +51,14 @@ function EntriesDateTimeFilterDateTimePicker({ value, onChange }) { return; } - if (value[1] && dayjs(value[1]).isAfter()) { + if (value[1] && initialDateTo && dayjs(value[1]).isAfter(initialDateTo)) { onChange([value[0], dayjs(currentDate).toDate()]); - setError("Dates after today are not supported."); + setError( + `Dates after ${ + dayjs(initialDateTo).isToday() ? "today" : initialDateTo + } are not supported.` + ); return; } @@ -68,7 +73,7 @@ function EntriesDateTimeFilterDateTimePicker({ value, onChange }) { } }, [value, selectionComplete]); - const handleDateChange = date => { + const handleDateChange = (date) => { setError(null); if (!selectionComplete && !value[0]) { @@ -79,6 +84,11 @@ function EntriesDateTimeFilterDateTimePicker({ value, onChange }) { } if (!selectionComplete && value[0] && !value[1]) { + if (dayjs(value[0]).isAfter(date)) { + onChange([date, value[0]]); + return; + } + onChange([value[0], date]); return; } @@ -92,16 +102,23 @@ function EntriesDateTimeFilterDateTimePicker({ value, onChange }) { } }; - const handleSelect = date => { + const handleSelect = (date) => { if ( !selectionComplete && value[0] && !value[1] && sameDay(date, value[0]) ) { - date.setHours(23, 59, 59, 999); - - handleDateChange(date); + if ( + initialDateTo && + dayjs(initialDateTo).isToday() && + dayjs(date).isToday() + ) { + handleDateChange(new Date()); + } else { + date.setHours(23, 59, 59, 999); + handleDateChange(date); + } } }; @@ -129,41 +146,41 @@ function EntriesDateTimeFilterDateTimePicker({ value, onChange }) { minDate={initialDateFrom ? new Date(initialDateFrom) : undefined} maxDate={initialDateTo ? new Date(initialDateTo) : undefined} /> - - + { + value={value[0]} + onChange={(date) => { onChange([date, value[1]]); }} onFocus={() => { setError(null); }} - data-testid="entries-date-time-from" + data-testid={`${testId}-from`} /> - { + onChange={(date) => { onChange([value[0], date]); }} onFocus={() => { setError(null); }} - data-testid="entries-date-time-to" + data-testid={`${testId}-to`} /> - + ); } -EntriesDateTimeFilterDateTimePicker.defaultProps = { +DatePickerDateTimePicker.defaultProps = { value: [], }; -EntriesDateTimeFilterDateTimePicker.propTypes = { +DatePickerDateTimePicker.propTypes = { value: PropTypes.array.isRequired, onChange: PropTypes.func.isRequired, }; -export { EntriesDateTimeFilterDateTimePicker }; +export { DatePickerDateTimePicker }; diff --git a/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimePicker/styles.css b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimePicker/styles.css new file mode 100644 index 00000000..50ab147b --- /dev/null +++ b/src/components/DatePicker/DatePickerAbsolute/DatePickerDateTimePicker/styles.css @@ -0,0 +1,238 @@ +.react-datepicker { + width: 100%; + height: 260px; + position: relative; + font-family: "Open Sans", Arial, Helvetica, sans-serif; + padding-bottom: 10px; + border-bottom: solid 1px rgba(34, 34, 34, 0.12); +} + +.react-datepicker__month { + width: 100%; + border-radius: 4px; + overflow: hidden; +} + +.react-datepicker__current-month { + font-size: 14px; + line-height: 1.29; + text-align: center; + color: #222222; + margin-bottom: 16px; +} + +.react-datepicker__navigation { + background: none; + text-align: center; + cursor: pointer; + position: absolute; + top: 4px; + padding: 0; + border: 5px solid transparent; + z-index: 1; + height: 10px; + width: 10px; + text-indent: -999em; + overflow: hidden; + outline: none; +} + +.react-datepicker__navigation--previous { + left: 10px; + border-right-color: #222222; +} + +.react-datepicker__navigation--next { + right: 10px; + border-left-color: #222222; +} + +.react-datepicker__day-names { + margin-bottom: 9px; +} + +.react-datepicker__day-name, +.react-datepicker__day { + display: inline-block; + width: 44px; + font-size: 12px; + font-weight: 600; + text-align: center; + color: #222222; +} + +.react-datepicker__day-name { + text-transform: uppercase; + height: 16px; + line-height: 16px; +} + +.react-datepicker__day { + position: relative; + cursor: pointer; + outline: none; + height: 32px; + line-height: 32px; + /* transition: color 100ms ease-in, background-color 100ms ease-in; */ +} + +.react-datepicker__day--today { + position: relative; +} + +.react-datepicker__day--today:after { + content: "."; + position: absolute; + bottom: -6px; + left: 50%; + font-weight: bold; + transform: translateX(-50%); +} + +.react-datepicker__day--outside-month, +.react-datepicker__day--disabled { + color: #a8b3be; +} + +.react-datepicker__day--outside-month.react-datepicker__day--in-range, +.react-datepicker__day--disabled.react-datepicker__day--in-range, +.react-datepicker__day--outside-month.react-datepicker__day--in-selecting-range, +.react-datepicker__day--disabled.react-datepicker__day--in-selecting-range { + color: #e4e9eb; +} + +.react-datepicker__day--in-selecting-range, +.react-datepicker__day--in-range { + background-color: #a8b3be; + color: #222222; +} + +/* Π’Ρ‹Π±Ρ€Π°Π½ 1 дСнь (ΠΏΠΎ навСдСнию, ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ) */ +.react-datepicker__day--range-start.react-datepicker__day--range-end:not(.react-datepicker__day--in-selecting-range), +.react-datepicker__day--range-start.react-datepicker__day--range-end:hover { + border-radius: 4px !important; +} + +/* Π”Π΅Π½ΡŒ - Π½Π°Ρ‡Π°Π»ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° (ΠΏΠΎ навСдСнию) */ +.react-datepicker__day:not(.react-datepicker__day--in-selecting-range) + + .react-datepicker__day--selecting-range-start, +.react-datepicker__day:not(.react-datepicker__day--in-selecting-range) + + .react-datepicker__day--selected { + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +/* Π”Π΅Π½ΡŒ - ΠΊΠΎΠ½Π΅Ρ† Π²Ρ‹Π±ΠΎΡ€Π° (ΠΏΠΎ навСдСнию) */ +.react-datepicker__day--in-selecting-range + + .react-datepicker__day--selecting-range-end, +.react-datepicker__day--in-selecting-range + .react-datepicker__day--selected { + border-radius: 0; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +/* ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ дСнь Π½Π΅Π΄Π΅Π»ΠΈ (Ρ‚ΡƒΡ‚ Π½Π΅ удаСтся ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π½Π°Ρ‡Π°Π»ΠΎ это Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ†) */ +.react-datepicker__day--range-start.react-datepicker__day--selecting-range-end:first-child { + border-radius: 0px; +} + +/* Π”Π΅Π½ΡŒ - Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° (ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ) */ +.react-datepicker__day--range-start { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +/* Π”Π΅Π½ΡŒ - ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° (ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ) */ +.react-datepicker__day--range-end { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.react-datepicker__day:not(.react-datepicker__day--in-range):not(.react-datepicker__day--in-selecting-range) { + background-color: #ffffff; + z-index: 3; +} + +/* ПослСдний дСнь ΠΏΠ΅Ρ€Π²ΠΎΠΉ/послСднСй ΠΏΠΎΠ»Π½ΠΎΠΉ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π½Π΅Π΄Π΅Π»ΠΈ */ +.react-datepicker__day--in-range:last-child, +.react-datepicker__day--in-selecting-range:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.react-datepicker__day--in-range + ~ .react-datepicker__day--in-range:last-child::before, +.react-datepicker__day--in-selecting-range + ~ .react-datepicker__day--in-selecting-range:last-child::before { + content: ""; + position: absolute; + width: 100%; + height: 3px; + top: -3px; + background-color: #a8b3be; +} +.react-datepicker__day--in-range + ~ .react-datepicker__day--in-range:last-child::after, +.react-datepicker__day--in-selecting-range + ~ .react-datepicker__day--in-selecting-range:last-child::after { + content: ""; + position: absolute; + width: 100%; + height: 3px; + top: 100%; + background-color: #a8b3be; +} + +/* ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ дСнь ΠΏΠ΅Ρ€Π²ΠΎΠΉ/послСднСй ΠΏΠΎΠ»Π½ΠΎΠΉ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π½Π΅Π΄Π΅Π»ΠΈ */ +.react-datepicker__day--in-range:not(.react-datepicker__day--range-start):first-child, +.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--range-start):first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.react-datepicker__day--in-range:not(.react-datepicker__day--range-start):first-child:before, +.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--range-start):first-child:before { + content: ""; + position: absolute; + width: 100%; + height: 3px; + top: -3px; + left: 0; + background-color: #a8b3be; +} +.react-datepicker__day--in-range:not(.react-datepicker__day--range-start):first-child:after, +.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--range-start):first-child:after { + content: ""; + position: absolute; + width: 100%; + height: 3px; + top: 100%; + left: 0; + background-color: #a8b3be; +} + +.react-datepicker__day--range-start.react-datepicker__day--in-selecting-range:first-child { + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.react-datepicker__day--selected, +.react-datepicker__day--range-start, +.react-datepicker__day--range-start:hover, +.react-datepicker__day--range-end, +.react-datepicker__day--range-end:hover, +.react-datepicker__day--in-range:hover, +.react-datepicker__day--in-selecting-range:hover { + color: #ffffff; + background-color: #3b4b5a; + z-index: 2; +} + +.react-datepicker__day--range-start, +.react-datepicker__day--range-start:hover, +.react-datepicker__day--range-end, +.react-datepicker__day--range-end:hover { + z-index: 3; +} + +.react-datepicker__day--in-range:not(.react-datepicker__day--range-start):not(.react-datepicker__day--range-end):hover { + border-radius: 0; +} diff --git a/src/components/DatePicker/DatePickerAbsolute/index.jsx b/src/components/DatePicker/DatePickerAbsolute/index.jsx new file mode 100644 index 00000000..5b5d0987 --- /dev/null +++ b/src/components/DatePicker/DatePickerAbsolute/index.jsx @@ -0,0 +1,14 @@ +import React from "react"; + +import { useContext } from "react"; +import { DatePickerContext } from "../index"; + +import { DatePickerDateTimePicker } from "./DatePickerDateTimePicker"; + +function DatePickerAbsolute() { + const { value, onChange } = useContext(DatePickerContext); + + return ; +} + +export { DatePickerAbsolute }; diff --git a/src/components/DatePicker/DatePickerBottom.jsx b/src/components/DatePicker/DatePickerBottom.jsx new file mode 100644 index 00000000..652d7667 --- /dev/null +++ b/src/components/DatePicker/DatePickerBottom.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +const DatePickerBottom = styled.div` + padding-top: 19px; +`; + +export { DatePickerBottom }; diff --git a/src/components/DatePicker/DatePickerControl/index.jsx b/src/components/DatePicker/DatePickerControl/index.jsx new file mode 100644 index 00000000..465a5d5e --- /dev/null +++ b/src/components/DatePicker/DatePickerControl/index.jsx @@ -0,0 +1,9 @@ +import styled from "styled-components"; + +import { FormDropdownControl } from "../../form/components/FormDropdown/FormDropdownControl"; + +const DatePickerControl = styled(FormDropdownControl)` + min-width: 127px; +`; + +export { DatePickerControl }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterError/StyledEntriesDateTimeFilterError.jsx b/src/components/DatePicker/DatePickerError/StyledDatePickerError.jsx similarity index 51% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterError/StyledEntriesDateTimeFilterError.jsx rename to src/components/DatePicker/DatePickerError/StyledDatePickerError.jsx index d820d68f..ef1e250d 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterError/StyledEntriesDateTimeFilterError.jsx +++ b/src/components/DatePicker/DatePickerError/StyledDatePickerError.jsx @@ -1,8 +1,8 @@ import styled from "styled-components"; -import { colors } from "@identixone/ui-kit/src/themes/colors"; +import { colors } from "../../../style"; -const StyledEntriesDateTimeFilterError = styled.p` +const StyledDatePickerError = styled.p` font-size: 14px; line-height: 18px; text-align: center; @@ -11,4 +11,4 @@ const StyledEntriesDateTimeFilterError = styled.p` margin-bottom: 6px; `; -export { StyledEntriesDateTimeFilterError }; +export { StyledDatePickerError }; diff --git a/src/components/DatePicker/DatePickerError/index.jsx b/src/components/DatePicker/DatePickerError/index.jsx new file mode 100644 index 00000000..e32c4e19 --- /dev/null +++ b/src/components/DatePicker/DatePickerError/index.jsx @@ -0,0 +1,13 @@ +import React from "react"; +import { useContext } from "react"; +import { DatePickerContext } from "../index"; + +import { StyledDatePickerError } from "./StyledDatePickerError"; + +function DatePickerError() { + const { error } = useContext(DatePickerContext); + + return error ? {error} : null; +} + +export { DatePickerError }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterPopup.jsx b/src/components/DatePicker/DatePickerPopup.jsx similarity index 50% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterPopup.jsx rename to src/components/DatePicker/DatePickerPopup.jsx index c07673c0..112b5e7b 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterPopup.jsx +++ b/src/components/DatePicker/DatePickerPopup.jsx @@ -1,9 +1,9 @@ import styled from "styled-components"; -import { colors } from "@identixone/ui-kit/src/themes/colors"; -import { PopupContainer } from "@identixone/ui-kit/src/components/PopupContainer"; +import { colors } from "../../style"; +import { PopupContainer } from "../PopupContainer"; -const EntriesDateTimeFilterPopup = styled(PopupContainer)` +const DatePickerPopup = styled(PopupContainer)` background-color: ${colors.whiteSimple}; width: 356px; min-height: 490px; @@ -14,4 +14,4 @@ const EntriesDateTimeFilterPopup = styled(PopupContainer)` z-index: 11; `; -export { EntriesDateTimeFilterPopup }; +export { DatePickerPopup }; diff --git a/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/DatePickerRelativePickerSelectLabel.jsx b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/DatePickerRelativePickerSelectLabel.jsx new file mode 100644 index 00000000..41a1eb91 --- /dev/null +++ b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/DatePickerRelativePickerSelectLabel.jsx @@ -0,0 +1,12 @@ +import styled from "styled-components"; + +import { colors } from "../../../../../style"; + +const DatePickerRelativePickerSelectLabel = styled.label` + width: 64px; + font-size: 12px; + font-weight: 600; + color: ${colors.darkBlack}; +`; + +export { DatePickerRelativePickerSelectLabel }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/EntriesDateTimeFilterRelativePickerSelectOption.jsx b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/DatePickerRelativePickerSelectOption.jsx similarity index 58% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/EntriesDateTimeFilterRelativePickerSelectOption.jsx rename to src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/DatePickerRelativePickerSelectOption.jsx index 454d4229..82b03a49 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/EntriesDateTimeFilterRelativePickerSelectOption.jsx +++ b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/DatePickerRelativePickerSelectOption.jsx @@ -1,11 +1,9 @@ import styled, { css } from "styled-components"; -import { Button } from "@identixone/ui-kit/src/components/Button"; -import { colors } from "@identixone/ui-kit/src/themes/colors"; +import { Button } from "../../../../Button"; +import { colors } from "../../../../../style"; -const EntriesDateTimeFilterRelativePickerSelectOption = styled( - Button -).attrs(() => ({ buttonTheme: "reset" }))` +const DatePickerRelativePickerSelectOption = styled(Button)` font-size: 12px; font-weight: 600; height: 32px; @@ -22,11 +20,11 @@ const EntriesDateTimeFilterRelativePickerSelectOption = styled( : css` background-color: ${colors.whiteGrayLight}; color: #a8b3be; - `}; + `} &:not(:last-child) { margin-right: 12px; } `; -export { EntriesDateTimeFilterRelativePickerSelectOption }; +export { DatePickerRelativePickerSelectOption }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/StyledEntriesDateTimeFilterRelativePickerSelect.jsx b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/StyledDatePickerRelativePickerSelect.jsx similarity index 51% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/StyledEntriesDateTimeFilterRelativePickerSelect.jsx rename to src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/StyledDatePickerRelativePickerSelect.jsx index 2edd1d98..733ae48e 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/StyledEntriesDateTimeFilterRelativePickerSelect.jsx +++ b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/StyledDatePickerRelativePickerSelect.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -const StyledEntriesDateTimeFilterRelativePickerSelect = styled.div` +const StyledDatePickerRelativePickerSelect = styled.div` display: flex; align-items: center; @@ -9,4 +9,4 @@ const StyledEntriesDateTimeFilterRelativePickerSelect = styled.div` } `; -export { StyledEntriesDateTimeFilterRelativePickerSelect }; +export { StyledDatePickerRelativePickerSelect }; diff --git a/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/index.jsx b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/index.jsx new file mode 100644 index 00000000..02205116 --- /dev/null +++ b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/DatePickerRelativePickerSelect/index.jsx @@ -0,0 +1,51 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { StyledDatePickerRelativePickerSelect } from "./StyledDatePickerRelativePickerSelect"; +import { DatePickerRelativePickerSelectLabel } from "./DatePickerRelativePickerSelectLabel"; +import { DatePickerRelativePickerSelectOption } from "./DatePickerRelativePickerSelectOption"; + +function DatePickerRelativePickerSelect({ + label, + range, + value, + onChange, + "data-testid": testId, +}) { + return ( + + {label && ( + + {label} + + )} + {range.map((option) => ( + onChange(option)} + data-testid={`${testId}-option-${option}`} + > + {option} + + ))} + + ); +} + +DatePickerRelativePickerSelect.defaultProps = { + range: [], +}; + +DatePickerRelativePickerSelect.propTypes = { + label: PropTypes.string, + range: PropTypes.array.isRequired, + value: PropTypes.number, + onChange: PropTypes.func.isRequired, + "data-testid": PropTypes.string, +}; + +export { DatePickerRelativePickerSelect }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/index.jsx b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/index.jsx similarity index 74% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/index.jsx rename to src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/index.jsx index 997fc09f..2a2da63a 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/index.jsx +++ b/src/components/DatePicker/DatePickerRelative/DatePickerRelativePicker/index.jsx @@ -1,10 +1,11 @@ import React from "react"; import PropTypes from "prop-types"; -import { useState } from "react"; +import { useState, useContext } from "react"; +import { DatePickerContext } from "../../index"; import { useUpdateEffect } from "react-use"; -import { EntriesDateTimeFilterRelativePickerSelect } from "./EntriesDateTimeFilterRelativePickerSelect"; +import { DatePickerRelativePickerSelect } from "./DatePickerRelativePickerSelect"; import dayjs from "dayjs"; @@ -88,13 +89,14 @@ function getInitialSelected(value, currentDate) { return {}; } -function EntriesDateTimeFilterRelativePicker({ value, onChange, currentDate }) { +function DatePickerRelativePicker({ value, onChange }) { + const { initialDateTo: currentDate, testId } = useContext(DatePickerContext); const [selected, setSelected] = useState( getInitialSelected(value, currentDate) ); useUpdateEffect(() => { - const currentDateObj = dayjs(currentDate); + const currentDateObj = currentDate ? dayjs(currentDate) : dayjs(); onChange([ currentDateObj.subtract(selected.value, selected.type).toDate(), @@ -103,7 +105,7 @@ function EntriesDateTimeFilterRelativePicker({ value, onChange, currentDate }) { }, [selected]); function handleSelectChange(type) { - return function(value) { + return function (value) { setSelected({ type, value, @@ -113,56 +115,55 @@ function EntriesDateTimeFilterRelativePicker({ value, onChange, currentDate }) { return ( <> - - - - - - ); } -EntriesDateTimeFilterRelativePicker.propTypes = { +DatePickerRelativePicker.propTypes = { value: PropTypes.array.isRequired, onChange: PropTypes.func.isRequired, - currentDate: PropTypes.string.isRequired, }; -export { EntriesDateTimeFilterRelativePicker }; +export { DatePickerRelativePicker }; diff --git a/src/components/DatePicker/DatePickerRelative/index.jsx b/src/components/DatePicker/DatePickerRelative/index.jsx new file mode 100644 index 00000000..99b26e20 --- /dev/null +++ b/src/components/DatePicker/DatePickerRelative/index.jsx @@ -0,0 +1,14 @@ +import React from "react"; + +import { useContext } from "react"; +import { DatePickerContext } from "../index"; + +import { DatePickerRelativePicker } from "./DatePickerRelativePicker"; + +function DatePickerRelative() { + const { value, onChange } = useContext(DatePickerContext); + + return ; +} + +export { DatePickerRelative }; diff --git a/src/components/DatePicker/DatePickerResetButton.jsx b/src/components/DatePicker/DatePickerResetButton.jsx new file mode 100644 index 00000000..e25ac98f --- /dev/null +++ b/src/components/DatePicker/DatePickerResetButton.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +import { FormDropdownResetButton } from "../form/components/FormDropdown/FormDropdownResetButton"; + +const DatePickerResetButton = styled(FormDropdownResetButton)``; + +export { DatePickerResetButton }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsInner.jsx b/src/components/DatePicker/DatePickerTabs/DatePickerTabsInner.jsx similarity index 63% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsInner.jsx rename to src/components/DatePicker/DatePickerTabs/DatePickerTabsInner.jsx index 7bfd85a5..62e079bb 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsInner.jsx +++ b/src/components/DatePicker/DatePickerTabs/DatePickerTabsInner.jsx @@ -1,10 +1,10 @@ import styled from "styled-components"; -const EntriesDateTimeFilterTabsInner = styled.div` +const DatePickerTabsInner = styled.div` height: 375px; box-sizing: border-box; padding-bottom: 16px; border-bottom: solid 1px rgba(34, 34, 34, 0.12); `; -export { EntriesDateTimeFilterTabsInner }; +export { DatePickerTabsInner }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/EntriesDateTimeFilterTabsTabbarButton.jsx b/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/DatePickerTabsTabbarButton.jsx similarity index 53% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/EntriesDateTimeFilterTabsTabbarButton.jsx rename to src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/DatePickerTabsTabbarButton.jsx index 2ddc2a69..18a9234e 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/EntriesDateTimeFilterTabsTabbarButton.jsx +++ b/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/DatePickerTabsTabbarButton.jsx @@ -1,11 +1,9 @@ import styled, { css } from "styled-components"; -import { Button } from "@identixone/ui-kit/src/components/Button"; -import { colors } from "@identixone/ui-kit/src/themes/colors"; +import { Button } from "../../../Button"; +import { colors } from "../../../../style"; -const EntriesDateTimeFilterTabsTabbarButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` +const DatePickerTabsTabbarButton = styled(Button)` padding: 0; font-size: 13px; font-weight: bold; @@ -25,4 +23,4 @@ const EntriesDateTimeFilterTabsTabbarButton = styled(Button).attrs(() => ({ } `; -export { EntriesDateTimeFilterTabsTabbarButton }; +export { DatePickerTabsTabbarButton }; diff --git a/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/StyledDatePickerTabsTabbar.jsx b/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/StyledDatePickerTabsTabbar.jsx new file mode 100644 index 00000000..461e1254 --- /dev/null +++ b/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/StyledDatePickerTabsTabbar.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +const StyledDatePickerTabsTabbar = styled.div` + margin-bottom: 24px; +`; + +export { StyledDatePickerTabsTabbar }; diff --git a/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/index.jsx b/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/index.jsx new file mode 100644 index 00000000..6e251601 --- /dev/null +++ b/src/components/DatePicker/DatePickerTabs/DatePickerTabsTabbar/index.jsx @@ -0,0 +1,38 @@ +import React from "react"; + +import { useContext } from "react"; +import { TabsContext } from "../../../../components/Tabs"; +import { DatePickerContext } from "../../index"; + +import { StyledDatePickerTabsTabbar } from "./StyledDatePickerTabsTabbar"; +import { DatePickerTabsTabbarButton } from "./DatePickerTabsTabbarButton"; + +function DatePickerTabsTabbar() { + const { openTab, activeTab } = useContext(TabsContext); + const { testId } = useContext(DatePickerContext); + + return ( + + { + openTab("absolute"); + }} + > + Absolute + + { + openTab("relative"); + }} + > + Relative + + + ); +} + +export { DatePickerTabsTabbar }; diff --git a/src/components/DatePicker/DatePickerTabs/StyledDatePickerTabs.jsx b/src/components/DatePicker/DatePickerTabs/StyledDatePickerTabs.jsx new file mode 100644 index 00000000..a0990984 --- /dev/null +++ b/src/components/DatePicker/DatePickerTabs/StyledDatePickerTabs.jsx @@ -0,0 +1,5 @@ +import styled from "styled-components"; + +const StyledDatePickerTabs = styled.div``; + +export { StyledDatePickerTabs }; diff --git a/src/components/DatePicker/DatePickerTabs/index.jsx b/src/components/DatePicker/DatePickerTabs/index.jsx new file mode 100644 index 00000000..70a8dd5a --- /dev/null +++ b/src/components/DatePicker/DatePickerTabs/index.jsx @@ -0,0 +1,40 @@ +import React from "react"; + +import { Tabs } from "../../Tabs"; +import { DatePickerTabsTabbar } from "./DatePickerTabsTabbar"; +import { DatePickerTabsInner } from "./DatePickerTabsInner"; +import { DatePickerAbsolute } from "../DatePickerAbsolute"; +import { DatePickerRelative } from "../DatePickerRelative"; +import { StyledDatePickerTabs } from "./StyledDatePickerTabs"; + +const { TabPanes, TabPane } = Tabs; + +function DatePickerTabs() { + return ( + + + + + + + // eslint-disable-next-line react/prop-types + props.isActive && + } + /> + + // eslint-disable-next-line react/prop-types + props.isActive && + } + /> + + + + + ); +} + +export { DatePickerTabs }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTotalTime/StyledEntriesDateTimeFilterTotalTime.jsx b/src/components/DatePicker/DatePickerTotalTime/StyledDatePickerTotalTime.jsx similarity index 50% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTotalTime/StyledEntriesDateTimeFilterTotalTime.jsx rename to src/components/DatePicker/DatePickerTotalTime/StyledDatePickerTotalTime.jsx index 662636c3..cf44f88c 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTotalTime/StyledEntriesDateTimeFilterTotalTime.jsx +++ b/src/components/DatePicker/DatePickerTotalTime/StyledDatePickerTotalTime.jsx @@ -1,17 +1,17 @@ import styled from "styled-components"; -import { colors } from "@identixone/ui-kit/src/themes/colors"; +import { colors } from "../../../style"; -const StyledEntriesDateTimeFilterTotalTime = styled.p` +const StyledDatePickerTotalTime = styled.p` margin: 0; text-align: center; font-size: 14px; line-height: 1.29; color: ${colors.darkBlack}; - bold { + b { font-weight: 700; } `; -export { StyledEntriesDateTimeFilterTotalTime }; +export { StyledDatePickerTotalTime }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTotalTime/index.jsx b/src/components/DatePicker/DatePickerTotalTime/index.jsx similarity index 79% rename from src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTotalTime/index.jsx rename to src/components/DatePicker/DatePickerTotalTime/index.jsx index ee56875e..665a8761 100644 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTotalTime/index.jsx +++ b/src/components/DatePicker/DatePickerTotalTime/index.jsx @@ -2,14 +2,14 @@ import React from "react"; import { useContext } from "react"; -import { StyledEntriesDateTimeFilterTotalTime } from "./StyledEntriesDateTimeFilterTotalTime"; -import { EntriesDateTimeFilterContext } from "../index"; +import { StyledDatePickerTotalTime } from "./StyledDatePickerTotalTime"; +import { DatePickerContext } from "../index"; import dayjs from "dayjs"; -function EntriesDateTimeFilterTotalTime() { +function DatePickerTotalTime() { const { value, initialDateFrom, initialDateTo } = useContext( - EntriesDateTimeFilterContext + DatePickerContext ); const isDateToInitial = @@ -44,22 +44,22 @@ function EntriesDateTimeFilterTotalTime() { .diff(value[0], "second"); return ( - + Total time selected:{" "} {isDateToInitial && isDateFromInitial ? ( - all + all ) : ( - + {diffYear ? diffYear + "y " : null} {diffMonth ? diffMonth + "m " : null} {diffDay ? diffDay + "d " : null} {diffHour ? diffHour + "h " : null} {diffMinute ? diffMinute + "m " : null} {diffSecond ? diffSecond + "s" : null} - + )} - + ); } -export { EntriesDateTimeFilterTotalTime }; +export { DatePickerTotalTime }; diff --git a/src/components/DatePicker/StyledDatePicker.jsx b/src/components/DatePicker/StyledDatePicker.jsx new file mode 100644 index 00000000..4b3c9f9e --- /dev/null +++ b/src/components/DatePicker/StyledDatePicker.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +const StyledDatePicker = styled.div` + position: relative; +`; + +export { StyledDatePicker }; diff --git a/src/components/DatePicker/__tests__/DatePicker.js b/src/components/DatePicker/__tests__/DatePicker.js new file mode 100644 index 00000000..eee00915 --- /dev/null +++ b/src/components/DatePicker/__tests__/DatePicker.js @@ -0,0 +1,173 @@ +import React from "react"; + +import { useState } from "react"; + +import { render } from "../../../../test/utils"; +import { fireEvent } from "@testing-library/react"; + +import { DatePicker } from "../index.jsx"; + +import MockDate from "mockdate"; + +describe("DatePicker tests", () => { + const onChangeMock = jest.fn(); + const onResetMock = jest.fn(); + const onStateChangeMock = jest.fn(); + + beforeAll(() => { + MockDate.set("2001-09-04"); + }); + afterEach(() => { + onChangeMock.mockClear(); + onResetMock.mockClear(); + onStateChangeMock.mockClear(); + }); + afterAll(() => { + onChangeMock.mockReset(); + onResetMock.mockReset(); + onStateChangeMock.mockReset(); + MockDate.reset(); + }); + + const testId = "date-picker"; + function getComponentTestId(component) { + return `${testId}-${component}`; + } + + function DatePickerConsumer(props) { + const [value, setValue] = useState([null, null]); + + const defaultProps = { + valuesOnReset: [null, null], + onReset: onResetMock, + onStateChange: onStateChangeMock, + initialDateFrom: null, + initialDateTo: null, + "data-testid": testId, + value, + onChange: (value) => { + setValue(value); + onChangeMock(value); + }, + }; + + return ; + } + + function getDefaultDatePicker(props) { + return render(); + } + + function renderDatePicker(props) { + return getDefaultDatePicker(props); + } + + test("DatePicker should open and close popup correctly", () => { + const { getByTestId } = renderDatePicker(); + + expect(getByTestId(getComponentTestId("popup"))).not.toBeVisible(); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + expect(getByTestId(getComponentTestId("popup"))).toBeVisible(); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + expect(getByTestId(getComponentTestId("popup"))).not.toBeVisible(); + }); + + describe("DatePicker absolute", () => { + function getDateToCompare(date) { + /* + * Ρ…Π°ΠΊ Π½ΡƒΠΆΠ΅Π½ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ react-datepicker Π½Π΅ позволяСт Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ utcOffset + * (ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏ) + */ + const utcOffset = new Date().getTimezoneOffset(); + return new Date(new Date(date).getTime() + utcOffset * 60000); + } + + test("DatePicker should call onChange correctly if last date is after first date", () => { + const firstDate = getDateToCompare("2001-09-13T00:00:00.000Z"); + const lastDate = getDateToCompare("2001-09-18T00:00:00.000Z"); + const firstDateDay = "13"; + const lastDateDay = "18"; + const { getByText, getByTestId } = renderDatePicker(); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + fireEvent.click(getByText(firstDateDay)); + fireEvent.click(getByText(lastDateDay)); + fireEvent.click(getByTestId(getComponentTestId("control"))); + + expect(onChangeMock.mock.calls).toEqual([ + [[firstDate, null]], + [[firstDate, lastDate]], + ]); + }); + + test("DatePicker should call onChange correctly if last date is before first date", () => { + const firstDate = getDateToCompare("2001-09-18T00:00:00.000Z"); + const lastDate = getDateToCompare("2001-09-13T00:00:00.000Z"); + const firstDateDay = "18"; + const lastDateDay = "13"; + const { getByText, getByTestId } = renderDatePicker(); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + fireEvent.click(getByText(firstDateDay)); + fireEvent.click(getByText(lastDateDay)); + fireEvent.click(getByTestId(getComponentTestId("control"))); + + expect(onChangeMock.mock.calls).toEqual([ + [[firstDate, null]], + [[lastDate, firstDate]], + ]); + }); + + test("DatePicker should set dateTo to next day after dateFrom after closing, if only dateFrom selected", () => { + const dateFrom = getDateToCompare("2001-09-13T00:00:00.000Z"); + const dateTo = getDateToCompare("2001-09-14T00:00:00.000Z"); + const dateFromDay = "13"; + const { getByText, getByTestId } = renderDatePicker(); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + fireEvent.click(getByText(dateFromDay)); + onChangeMock.mockClear(); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + + expect(onChangeMock.mock.calls).toEqual([[[dateFrom, dateTo]]]); + }); + + test("DatePicker should reset value to resetValues on reset click", () => { + const valuesOnReset = [ + getDateToCompare("2001-09-13T00:00:00.000Z"), + getDateToCompare("2001-09-14T00:00:00.000Z"), + ]; + const dateFromDay = "15"; + const dateToDay = "18"; + const { getByText, getByTestId } = renderDatePicker({ valuesOnReset }); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + fireEvent.click(getByText(dateFromDay)); + fireEvent.click(getByText(dateToDay)); + onChangeMock.mockClear(); + + fireEvent.click(getByTestId(getComponentTestId("reset"))); + + expect(onChangeMock.mock.calls).toEqual([[valuesOnReset]]); + }); + }); + + describe("DatePicker relative", () => { + test("DatePicker should call onChange correctly on relative select change", () => { + const expectedValue = [ + new Date("2001-09-01T00:00:00.000Z"), + new Date("2001-09-04T00:00:00.000Z"), + ]; + const { getByTestId } = renderDatePicker(); + + fireEvent.click(getByTestId(getComponentTestId("control"))); + fireEvent.click(getByTestId(getComponentTestId("relative"))); + fireEvent.click(getByTestId(getComponentTestId("relative-day-option-3"))); + + expect(onChangeMock.mock.calls).toEqual([[expectedValue]]); + }); + }); +}); diff --git a/src/components/DatePicker/index.jsx b/src/components/DatePicker/index.jsx new file mode 100644 index 00000000..bc61b4ca --- /dev/null +++ b/src/components/DatePicker/index.jsx @@ -0,0 +1,186 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { useState, useRef, useMemo } from "react"; +import { useUpdateEffect } from "react-use"; +import { usePositionPopup } from "../../hooks"; + +import { StyledDatePicker } from "./StyledDatePicker"; +import { DatePickerPopup } from "./DatePickerPopup"; +import { DatePickerTabs } from "./DatePickerTabs"; +import { DatePickerBottom } from "./DatePickerBottom"; +import { DatePickerControl } from "./DatePickerControl"; +import { DatePickerError } from "./DatePickerError"; +import { DatePickerTotalTime } from "./DatePickerTotalTime"; +import { DatePickerResetButton } from "./DatePickerResetButton"; +import { Times } from "../icons"; + +import { identity, isEqual } from "lodash-es"; +import { isEqual as isDatesEqual } from "date-fns"; +import dayjs from "dayjs"; + +const DatePickerContext = React.createContext({ + value: [], + onChange: identity, + error: null, + setError: identity, + initialDateFrom: null, + initialDateTo: null, +}); + +export function formatDateTime(value) { + return dayjs(value).format("YYYY/MM/DD (HH:mm:ss)"); +} + +function DatePicker({ + value, + onChange, + valuesOnReset, + onReset, + onStateChange, + initialDateFrom, + initialDateTo, + className, + "data-testid": testId, +}) { + const [error, setError] = useState(null); + const popupTrigger = useRef(null); + const filterWrapper = useRef(null); + const { + Portal, + bind, + // coords, + popupInner, + togglePortal, + closePortal, + isOpen, + // targetParams, + } = usePositionPopup({ + pupupTrigger: popupTrigger, + position: "bottom", + bindTo: filterWrapper.current, + }); + + // function getPopupLeftCoord() { + // if (popupInner.current) { + // if (targetParams.width > popupInner.current.offsetWidth) { + // return ( + // coords.left + targetParams.width - popupInner.current.offsetWidth + // ); + // } + + // return coords.left; + // } + // } + + useUpdateEffect(() => { + if (!isOpen) { + if (!value[0] && value[1]) { + const dayBefore = dayjs(value[1]).subtract(1, "day").toDate(); + onChange([dayBefore, value[1]]); + } + + if (value[0] && !value[1]) { + const dayAfter = dayjs(value[0]).add(1, "day").toDate(); + onChange([value[0], dayAfter]); + } + } + + if (onStateChange) { + onStateChange({ isOpen }); + } + }, [isOpen]); + + function getValueRender(value) { + if (!value[0] && !value[1]) return "All dates"; + if (value[0] && !value[1]) return `From ${formatDateTime(value[0])}`; + if (!value[0] && value[1]) return `To ${formatDateTime(value[1])}`; + + if (isDatesEqual(value[0], initialDateFrom)) { + return `All to ${formatDateTime(value[1])}`; + } + + return formatDateTime(value[0]) + " - " + formatDateTime(value[1]); + } + + const store = useMemo( + () => ({ + value, + onChange, + error, + setError, + initialDateFrom, + initialDateTo, + testId, + }), + [value, error, initialDateFrom, initialDateTo, testId] + ); + + return ( + + + + {getValueRender(value)} + {(value[0] || value[1]) && ( + { + e.stopPropagation(); + if (!isEqual(value, valuesOnReset)) { + onChange(valuesOnReset); + } + + if (onReset) { + onReset(value, valuesOnReset); + } + + closePortal(); + }} + > + + + )} + + + + {/* БбрасываСм всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ состояния ΠΏΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ */} + + + + + + + + + + ); +} + +DatePicker.propTypes = { + value: PropTypes.array.isRequired, + onChange: PropTypes.func.isRequired, + onStateChange: PropTypes.func, + initialDateFrom: PropTypes.string, + initialDateTo: PropTypes.string, + valuesOnReset: PropTypes.array.isRequired, + onReset: PropTypes.func, + className: PropTypes.string, + "data-testid": PropTypes.string, +}; + +DatePicker.defaultProps = { + value: [null, null], + valuesOnReset: [null, null], + "data-testid": "date-picker", +}; + +export { DatePicker, DatePickerContext }; diff --git a/src/components/DeleteSure/index.jsx b/src/components/DeleteSure/index.jsx deleted file mode 100644 index 54966463..00000000 --- a/src/components/DeleteSure/index.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -export class DeleteSure extends React.Component { - static propTypes = { - onDelete: PropTypes.func.isRequired, - children: PropTypes.func.isRequired, - }; - - handleClick = e => { - e.stopPropagation(); - - if (this.state.isSure) { - this.props.onDelete(); - } - - this.setState({ isSure: true }); - }; - - handleMouseLeave = () => { - if (this.state.isSure) { - this.setState({ isSure: false }); - } - }; - - state = { - isSure: false, - handleClick: this.handleClick, - handleMouseLeave: this.handleMouseLeave, - }; - - render() { - const { children } = this.props; - - return children(this.state); - } -} diff --git a/src/components/DeleteSureButton/DeleteSureButton.stories.js b/src/components/DeleteSureButton/DeleteSureButton.stories.js new file mode 100644 index 00000000..7c5e9755 --- /dev/null +++ b/src/components/DeleteSureButton/DeleteSureButton.stories.js @@ -0,0 +1,17 @@ +import React from "react"; +import { storiesOf } from "@storybook/react"; +import { text, boolean } from "@storybook/addon-knobs"; +import { action } from "@storybook/addon-actions"; + +import { DeleteSureButton } from "./index.jsx"; + +storiesOf("Controls|DeleteSureButton", module).add("default", () => { + return ( + + ); +}); diff --git a/src/components/DeleteSureButton/DeleteSurePseudoButton.jsx b/src/components/DeleteSureButton/DeleteSurePseudoButton.jsx new file mode 100644 index 00000000..1f568a83 --- /dev/null +++ b/src/components/DeleteSureButton/DeleteSurePseudoButton.jsx @@ -0,0 +1,13 @@ +import styled from "styled-components"; +import { StyledDeleteSureButton } from "./index"; + +/** + * Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, + * Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ½ΠΎΠΏΠΊΠΈ + */ +const DeleteSurePseudoButton = styled(StyledDeleteSureButton)` + position: absolute; + visibility: hidden; +`; + +export { DeleteSurePseudoButton }; diff --git a/src/components/DeleteSureButton/StyledDeleteSureButton.jsx b/src/components/DeleteSureButton/StyledDeleteSureButton.jsx index a47332a9..21e0ce16 100644 --- a/src/components/DeleteSureButton/StyledDeleteSureButton.jsx +++ b/src/components/DeleteSureButton/StyledDeleteSureButton.jsx @@ -1,28 +1,41 @@ import styled, { css } from "styled-components"; -import Button from "../Button"; +import { Button } from "../Button"; -import colors from "../../themes/colors"; +import { colors } from "../../style"; function getHoverStyles({ isDisabled }) { - return !isDisabled - ? css` - background-color: ${({ deleteColor }) => deleteColor}; - color: ${colors.whiteSimple}; - ` - : ``; + return ( + !isDisabled && + css` + background-color: ${({ deleteColor }) => deleteColor}; + color: ${colors.whiteSimple}; + ` + ); } -const DeleteSureButton = styled(Button).attrs(() => ({ buttonTheme: "reset" }))` - background-color: ${props => props.color}; - min-width: 105px; +function getSureStyles({ isSure, deleteColor }) { + return ( + isSure && + css` + background-color: ${deleteColor}; + color: ${colors.whiteSimple}; + ` + ); +} + +const StyledDeleteSureButton = styled(Button)` + background-color: ${(props) => props.color}; + color: ${colors.slate}; + ${getSureStyles} - ${({ isSure, deleteColor }) => - isSure && `background-color: ${deleteColor}; color: ${colors.whiteSimple};`} + width: ${({ width }) => { + return width && `${width}px`; + }}; &:hover { - ${getHoverStyles}; + ${getHoverStyles} } `; -export default DeleteSureButton; +export { StyledDeleteSureButton }; diff --git a/src/components/DeleteSureButton/__tests__/DeleteSureButton.js b/src/components/DeleteSureButton/__tests__/DeleteSureButton.js new file mode 100644 index 00000000..91c95bbd --- /dev/null +++ b/src/components/DeleteSureButton/__tests__/DeleteSureButton.js @@ -0,0 +1,63 @@ +import React from "react"; +import { fireEvent } from "@testing-library/react"; + +import { render } from "../../../../test/utils"; +import { DeleteSureButton } from "../index.jsx"; + +describe("DeleteSureButton tests", () => { + const onDeleteMock = jest.fn(); + + afterEach(() => { + onDeleteMock.mockClear(); + }); + afterAll(() => { + onDeleteMock.mockReset(); + }); + + const defaultProps = { + onDelete: onDeleteMock, + isDisabled: false, + }; + + function getDefaultDeleteSureButton(props) { + return render(); + } + + function renderDeleteSureButton(props) { + return getDefaultDeleteSureButton(props); + } + + test("DeleteSureButton renders inside text correctly", () => { + const deleteText = "some delete text"; + const sureText = "some sure text"; + + const { getByTestId } = renderDeleteSureButton({ + deleteText, + sureText, + }); + + expect(getByTestId("delete-button")).toHaveTextContent(deleteText); + + fireEvent.mouseEnter(getByTestId("delete-button")); + expect(getByTestId("delete-button")).toHaveTextContent(deleteText); + + fireEvent.click(getByTestId("delete-button")); + expect(getByTestId("delete-button")).toHaveTextContent(sureText); + + fireEvent.mouseLeave(getByTestId("delete-button")); + expect(getByTestId("delete-button")).toHaveTextContent(deleteText); + + fireEvent.click(getByTestId("delete-button")); + fireEvent.click(getByTestId("delete-button")); + expect(getByTestId("delete-button")).toHaveTextContent(deleteText); + }); + + test("DeleteSureButton calls onDelete callback correctly", () => { + const { getByTestId } = renderDeleteSureButton(); + + fireEvent.click(getByTestId("delete-button")); + fireEvent.click(getByTestId("delete-button")); + + expect(onDeleteMock).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/components/DeleteSureButton/index.jsx b/src/components/DeleteSureButton/index.jsx index eb388dc9..5ec25b61 100644 --- a/src/components/DeleteSureButton/index.jsx +++ b/src/components/DeleteSureButton/index.jsx @@ -1,73 +1,99 @@ import React from "react"; import PropTypes from "prop-types"; +import { useState, useRef, useEffect } from "react"; import { useTranslation } from "../../hooks"; +import usePortal from "react-useportal"; -import StyledDeleteSureButton from "./StyledDeleteSureButton"; -import { colors } from "../../themes/colors"; - -import { DeleteSure } from "../DeleteSure"; +import { StyledDeleteSureButton } from "./StyledDeleteSureButton"; +import { DeleteSurePseudoButton } from "./DeleteSurePseudoButton"; import { resources } from "./DeleteSureButton.resources.js"; import { isUndefined } from "lodash-es"; +import { colors } from "../../style"; function DeleteSureButton({ onDelete, deleteColor, size, isDisabled, - className, deleteText, sureText, color, + className, + "data-testid": testId, }) { - const { t, i18n } = useTranslation(); + const [isSure, setIsSure] = useState(false); + const { Portal } = usePortal(); + const { t, i18n } = useTranslation("DeleteSureButton"); i18n.addResourceBundle("en", "DeleteSureButton", resources.en); i18n.addResourceBundle("ru", "DeleteSureButton", resources.ru); + const textSure = isUndefined(sureText) ? t("Sure") : sureText; + const textDelete = isUndefined(deleteText) ? t("Delete") : deleteText; - const textSure = isUndefined(sureText) - ? t("DeleteSureButton:Sure") - : sureText; - const textDelete = isUndefined(deleteText) - ? t("DeleteSureButton:Delete") - : deleteText; + const pseudoButtonRef = useRef(null); + const [buttonWidth, setButtonWidth] = useState(null); + useEffect(() => { + if (pseudoButtonRef.current) { + setButtonWidth(pseudoButtonRef.current.getBoundingClientRect().width); + } + }, [deleteText]); return ( - - {({ isSure, handleClick, handleMouseLeave }) => ( - + { + ev.stopPropagation(); + if (isSure) { + onDelete(); + } + + setIsSure((isSure) => !isSure); + }} + onMouseLeave={() => { + setIsSure(false); + }} + size={size} + isDisabled={isDisabled} + data-testid={testId} + width={buttonWidth} + > + {isSure ? textSure : textDelete} + + + - {isSure ? textSure : textDelete} - - )} - + {textDelete} + + + ); } DeleteSureButton.defaultProps = { deleteColor: colors.brownSimple, color: colors.blueWhite, + "data-testid": "delete-button", }; DeleteSureButton.propTypes = { onDelete: PropTypes.func.isRequired, - color: colors.string, + color: PropTypes.string, size: PropTypes.string, isDisabled: PropTypes.bool, deleteColor: PropTypes.string, - className: PropTypes.string, deleteText: PropTypes.string, sureText: PropTypes.string, + className: PropTypes.string, + "data-testid": PropTypes.string, }; export { DeleteSureButton, StyledDeleteSureButton }; diff --git a/src/components/DynamicList/DynamicListItem/DynamicListItemAdditional.jsx b/src/components/DynamicList/DynamicListItem/DynamicListItemAdditional.jsx deleted file mode 100644 index 80dae036..00000000 --- a/src/components/DynamicList/DynamicListItem/DynamicListItemAdditional.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import styled from "styled-components"; - -const DynamicListItemAdditional = styled.span``; - -export default DynamicListItemAdditional; diff --git a/src/components/DynamicList/DynamicListItem/DynamicListItemLink.jsx b/src/components/DynamicList/DynamicListItem/DynamicListItemLink.jsx deleted file mode 100644 index 2d8e9abc..00000000 --- a/src/components/DynamicList/DynamicListItem/DynamicListItemLink.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import { NavLink } from "react-router-dom"; - -import styled from "styled-components"; - -const DynamicListItemLink = styled(NavLink)` - display: block; - width: 100%; - box-sizing: border-box; - text-decoration: none; - height: 33px; - - &:not(:last-child) { - border-bottom: 1px solid #dadada; - } -`; - -export default DynamicListItemLink; diff --git a/src/components/DynamicList/DynamicListItem/DynamicListItemTitle.jsx b/src/components/DynamicList/DynamicListItem/DynamicListItemTitle.jsx deleted file mode 100644 index 79314f45..00000000 --- a/src/components/DynamicList/DynamicListItem/DynamicListItemTitle.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import styled from "styled-components"; - -const DynamicListItemTitle = styled.p` - margin: 0; - font-size: 16px; - font-weight: 600; - line-height: normal; -`; - -export default DynamicListItemTitle; diff --git a/src/components/DynamicList/DynamicListItem/StyledDynamicListItem.jsx b/src/components/DynamicList/DynamicListItem/StyledDynamicListItem.jsx deleted file mode 100644 index f74650fe..00000000 --- a/src/components/DynamicList/DynamicListItem/StyledDynamicListItem.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import styled from "styled-components"; - -const StyledDynamicListItem = styled.li` - display: flex; - justify-content: space-between; - align-items: center; - cursor: pointer; - padding-left: 10px; - padding-right: 25px; - box-sizing: border-box; - position: relative; - height: 100%; - - background-color: ${props => { - if (props.isSelected) { - return "#3b4b5a"; - } - - return "#fff"; - }}; - - color: ${props => { - if (props.isSelected) { - return "#fff"; - } - - return "#263238"; - }}; - - &:hover { - background-color: #6b7d86; - color: #fff; - - * { - color: #fff; - } - } -`; - -export default StyledDynamicListItem; diff --git a/src/components/DynamicList/DynamicListItem/index.jsx b/src/components/DynamicList/DynamicListItem/index.jsx deleted file mode 100644 index 2c4dbd39..00000000 --- a/src/components/DynamicList/DynamicListItem/index.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import StyledDynamicListItem from "./StyledDynamicListItem"; - -import DynamicListItemTitle from "./DynamicListItemTitle"; -import DynamicListItemAdditional from "./DynamicListItemAdditional"; -import DynamicListItemLink from "./DynamicListItemLink"; - -export function DynamicListItem({ - title, - additional, - isSelected, - onClick, - innerRef, - children, - className, -}) { - return ( - - {children ? ( - children - ) : ( - - {title} - {additional} - - )} - - ); -} - -DynamicListItem.propTypes = { - title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - children: PropTypes.oneOfType([PropTypes.array, PropTypes.node]), - additional: PropTypes.node, - onClick: PropTypes.func, - isSelected: PropTypes.bool, - innerRef: PropTypes.object, - className: PropTypes.string, -}; - -export { DynamicListItemTitle, DynamicListItemAdditional, DynamicListItemLink }; diff --git a/src/components/DynamicList/DynamicListWrapper.jsx b/src/components/DynamicList/DynamicListWrapper.jsx deleted file mode 100644 index a64568c4..00000000 --- a/src/components/DynamicList/DynamicListWrapper.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import styled from "styled-components"; - -const DynamicListWrapper = styled.div``; - -export default DynamicListWrapper; diff --git a/src/components/DynamicList/StyledDynamicList.jsx b/src/components/DynamicList/StyledDynamicList.jsx deleted file mode 100644 index e8a5a1aa..00000000 --- a/src/components/DynamicList/StyledDynamicList.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -const StyledDynamicList = styled.ul` - list-style-type: none; - padding-left: 0; - margin: 0; - position: relative; - overflow: hidden; -`; - -export default StyledDynamicList; diff --git a/src/components/DynamicList/index.jsx b/src/components/DynamicList/index.jsx deleted file mode 100644 index e719752e..00000000 --- a/src/components/DynamicList/index.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import StyledDynamicList from "./StyledDynamicList"; - -function DynamicList({ children, isLoading, innerRef }) { - return ( - - {children} - - ); -} - -DynamicList.propTypes = { - children: PropTypes.array.isRequired, - isLoading: PropTypes.bool.isRequired, - innerRef: PropTypes.object, -}; - -export { DynamicList, StyledDynamicList }; -export { - DynamicListItem, - DynamicListItemLink, - DynamicListItemTitle, - DynamicListItemAdditional, -} from "./DynamicListItem"; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/EntriesDateTimeFilterDateTimeInputLabel.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/EntriesDateTimeFilterDateTimeInputLabel.jsx deleted file mode 100644 index 85928cd1..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInput/EntriesDateTimeFilterDateTimeInputLabel.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import styled from "styled-components"; - -import { colors } from "@identixone/ui-kit/src/themes/colors"; - -const EntriesDateTimeFilterDateTimeInputLabel = styled.label` - display: inline-block; - font-size: 14px; - font-weight: 300; - line-height: 1.29; - width: 42px; - color: ${colors.darkBlack}; -`; - -export { EntriesDateTimeFilterDateTimeInputLabel }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInputs.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInputs.jsx deleted file mode 100644 index e781fb7b..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimeInputs.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -const EntriesDateTimeFilterDateTimeInputs = styled.div` - padding-top: 16px; -`; - -export { EntriesDateTimeFilterDateTimeInputs }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimePicker/styles.css b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimePicker/styles.css deleted file mode 100644 index 6fa1d14c..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/EntriesDateTimeFilterDateTimePicker/styles.css +++ /dev/null @@ -1,133 +0,0 @@ -.react-datepicker { - width: 100%; - height: 260px; - position: relative; - font-family: "Open Sans"; - padding-bottom: 10px; - border-bottom: solid 1px rgba(34, 34, 34, 0.12); -} - -.react-datepicker__month { - width: 100%; - border-radius: 4px; - overflow: hidden; -} - -.react-datepicker__current-month { - font-size: 14px; - line-height: 1.29; - text-align: center; - color: #222222; - margin-bottom: 16px; -} - -.react-datepicker__navigation { - background: none; - text-align: center; - cursor: pointer; - position: absolute; - top: 4px; - width: 0; - padding: 0; - border: 5px solid transparent; - z-index: 1; - height: 10px; - width: 10px; - text-indent: -999em; - overflow: hidden; - outline: none; -} - -.react-datepicker__navigation--previous { - left: 10px; - border-right-color: #222222; -} - -.react-datepicker__navigation--next { - right: 10px; - border-left-color: #222222; -} - -.react-datepicker__day-names { - margin-bottom: 9px; -} - -.react-datepicker__day-name, -.react-datepicker__day { - display: inline-block; - width: 44px; - font-size: 12px; - font-weight: 600; - text-align: center; - color: #222222; -} - -.react-datepicker__day-name { - text-transform: uppercase; - height: 16px; - line-height: 16px; -} - -.react-datepicker__day { - cursor: pointer; - outline: none; - height: 32px; - line-height: 32px; - transition: color 100ms ease-in, background-color 100ms ease-in; -} - -.react-datepicker__day--today { - position: relative; -} - -.react-datepicker__day--today:after { - content: "."; - position: absolute; - bottom: -6px; - left: 50%; - font-weight: bold; - transform: translateX(-50%); -} - -.react-datepicker__day--outside-month, -.react-datepicker__day--disabled { - color: #a8b3be; -} - -.react-datepicker__day--outside-month.react-datepicker__day--in-range, -.react-datepicker__day--disabled.react-datepicker__day--in-range, -.react-datepicker__day--outside-month.react-datepicker__day--in-selecting-range, -.react-datepicker__day--disabled.react-datepicker__day--in-selecting-range { - color: #e4e9eb; -} - -.react-datepicker__day--in-selecting-range, -.react-datepicker__day--in-range { - background-color: #a8b3be; - color: #222222; -} - -.react-datepicker__day--selected:not(.react-datepicker__day--range-start) { - border-radius: 4px; -} - -.react-datepicker__day--range-start { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.react-datepicker__day--range-end { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.react-datepicker__day--selected, -.react-datepicker__day--range-start, -.react-datepicker__day--range-end, -.react-datepicker__day--range-start:hover, -.react-datepicker__day--range-end:hover, -.react-datepicker__day--in-range:hover, -.react-datepicker__day--in-selecting-range:hover { - color: #ffffff; - background-color: #3b4b5a; -} diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/index.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/index.jsx deleted file mode 100644 index c90103d3..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterAbsolute/index.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; - -import { useContext } from "react"; -import { EntriesDateTimeFilterContext } from "../index"; - -import { EntriesDateTimeFilterDateTimePicker } from "./EntriesDateTimeFilterDateTimePicker"; - -function EntriesDateTimeFilterAbsolute() { - const { value, onChange } = useContext(EntriesDateTimeFilterContext); - - return ( - - ); -} - -export { EntriesDateTimeFilterAbsolute }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterBottom.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterBottom.jsx deleted file mode 100644 index e850557c..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterBottom.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -const EntriesDateTimeFilterBottom = styled.div` - padding-top: 19px; -`; - -export { EntriesDateTimeFilterBottom }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterControl/index.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterControl/index.jsx deleted file mode 100644 index 89f9233e..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterControl/index.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import styled from "styled-components"; - -import { FormDropdownControl } from "@identixone/ui-kit/src/components/form/components/FormDropdown/FormDropdownControl"; - -const EntriesDateTimeFilterControl = styled(FormDropdownControl)` - min-width: 127px; -`; - -export { EntriesDateTimeFilterControl }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterError/index.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterError/index.jsx deleted file mode 100644 index 7f794852..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterError/index.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from "react"; -import { useContext } from "react"; -import { EntriesDateTimeFilterContext } from "../index"; - -import { StyledEntriesDateTimeFilterError } from "./StyledEntriesDateTimeFilterError"; - -function EntriesDateTimeFilterError() { - const { error } = useContext(EntriesDateTimeFilterContext); - - return error ? ( - {error} - ) : null; -} - -export { EntriesDateTimeFilterError }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/EntriesDateTimeFilterRelativePickerSelectLabel.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/EntriesDateTimeFilterRelativePickerSelectLabel.jsx deleted file mode 100644 index f9028030..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/EntriesDateTimeFilterRelativePickerSelectLabel.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import styled from "styled-components"; - -import { colors } from "@identixone/ui-kit/src/themes/colors"; - -const EntriesDateTimeFilterRelativePickerSelectLabel = styled.label` - width: 64px; - font-size: 12px; - font-weight: 600; - color: ${colors.darkBlack}; -`; - -export { EntriesDateTimeFilterRelativePickerSelectLabel }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/index.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/index.jsx deleted file mode 100644 index a31c4758..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/EntriesDateTimeFilterRelativePicker/EntriesDateTimeFilterRelativePickerSelect/index.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { StyledEntriesDateTimeFilterRelativePickerSelect } from "./StyledEntriesDateTimeFilterRelativePickerSelect"; -import { EntriesDateTimeFilterRelativePickerSelectLabel } from "./EntriesDateTimeFilterRelativePickerSelectLabel"; -import { EntriesDateTimeFilterRelativePickerSelectOption } from "./EntriesDateTimeFilterRelativePickerSelectOption"; - -function EntriesDateTimeFilterRelativePickerSelect({ - label, - range, - value, - onChange, - "data-testid": testId, -}) { - return ( - - {label && ( - - {label} - - )} - {range.map(option => ( - onChange(option)} - data-testid={`${testId}-option-${option}`} - > - {option} - - ))} - - ); -} - -EntriesDateTimeFilterRelativePickerSelect.defaultProps = { - range: [], -}; - -EntriesDateTimeFilterRelativePickerSelect.propTypes = { - label: PropTypes.string, - range: PropTypes.array.isRequired, - value: PropTypes.number.isRequired, - onChange: PropTypes.func.isRequired, - "data-testid": PropTypes.string, -}; - -export { EntriesDateTimeFilterRelativePickerSelect }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/index.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/index.jsx deleted file mode 100644 index 6c6a2a9a..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterRelative/index.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; - -import { useContext } from "react"; -import { EntriesDateTimeFilterContext } from "../index"; - -import { EntriesDateTimeFilterRelativePicker } from "./EntriesDateTimeFilterRelativePicker"; - -function EntriesDateTimeFilterRelative() { - const { value, onChange } = useContext(EntriesDateTimeFilterContext); - - return ( - - ); -} - -export { EntriesDateTimeFilterRelative }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterResetButton.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterResetButton.jsx deleted file mode 100644 index 778893ce..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterResetButton.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -import { FormDropdownResetButton } from "@identixone/ui-kit/src/components/form/components/FormDropdown/FormDropdownResetButton"; - -const EntriesDateTimeFilterResetButton = styled(FormDropdownResetButton)``; - -export { EntriesDateTimeFilterResetButton }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/StyledEntriesDateTimeFilterTabsTabbar.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/StyledEntriesDateTimeFilterTabsTabbar.jsx deleted file mode 100644 index d312dc4d..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/StyledEntriesDateTimeFilterTabsTabbar.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -const StyledEntriesDateTimeFilterTabsTabbar = styled.div` - margin-bottom: 24px; -`; - -export { StyledEntriesDateTimeFilterTabsTabbar }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/index.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/index.jsx deleted file mode 100644 index 2a84fd59..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/EntriesDateTimeFilterTabsTabbar/index.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; - -import { useContext } from "react"; - -import { TabsContext } from "@identixone/ui-kit/src/components/Tabs"; - -import { StyledEntriesDateTimeFilterTabsTabbar } from "./StyledEntriesDateTimeFilterTabsTabbar"; -import { EntriesDateTimeFilterTabsTabbarButton } from "./EntriesDateTimeFilterTabsTabbarButton"; - -function EntriesDateTimeFilterTabsTabbar() { - const { openTab, activeTab } = useContext(TabsContext); - - return ( - - { - openTab("absolute"); - }} - > - Absolute - - { - openTab("relative"); - }} - > - Relative - - - ); -} - -export { EntriesDateTimeFilterTabsTabbar }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/StyledEntriesDateTimeFilterTabs.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/StyledEntriesDateTimeFilterTabs.jsx deleted file mode 100644 index b9338501..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/StyledEntriesDateTimeFilterTabs.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import styled from "styled-components"; - -const StyledEntriesDateTimeFilterTabs = styled.div``; - -export { StyledEntriesDateTimeFilterTabs }; diff --git a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/index.jsx b/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/index.jsx deleted file mode 100644 index 8c6c56aa..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/EntriesDateTimeFilterTabs/index.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from "react"; - -import { Tabs } from "@identixone/ui-kit/src/components/Tabs"; -import { EntriesDateTimeFilterTabsTabbar } from "./EntriesDateTimeFilterTabsTabbar"; -import { EntriesDateTimeFilterTabsInner } from "./EntriesDateTimeFilterTabsInner"; -import { EntriesDateTimeFilterAbsolute } from "../EntriesDateTimeFilterAbsolute"; -import { EntriesDateTimeFilterRelative } from "../EntriesDateTimeFilterRelative"; -import { StyledEntriesDateTimeFilterTabs } from "./StyledEntriesDateTimeFilterTabs"; - -const { TabPanes, TabPane } = Tabs; - -function EntriesDateTimeFilterTabs() { - return ( - - - - - - - // eslint-disable-next-line react/prop-types - props.isActive && - } - /> - - // eslint-disable-next-line react/prop-types - props.isActive && - } - /> - - - - - ); -} - -export { EntriesDateTimeFilterTabs }; diff --git a/src/components/Entries/EntriesDateTimeFilter/index.jsx b/src/components/Entries/EntriesDateTimeFilter/index.jsx deleted file mode 100644 index a641c37d..00000000 --- a/src/components/Entries/EntriesDateTimeFilter/index.jsx +++ /dev/null @@ -1,167 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { useState, useRef, useMemo } from "react"; -import { useUpdateEffect } from "react-use"; -import { usePositionPopup } from "@identixone/ui-kit/src/hooks"; - -import { EntriesDateTimeFilterPopup } from "./EntriesDateTimeFilterPopup"; -import { EntriesDateTimeFilterTabs } from "./EntriesDateTimeFilterTabs"; -import { EntriesDateTimeFilterBottom } from "./EntriesDateTimeFilterBottom"; -import { EntriesDateTimeFilterControl } from "./EntriesDateTimeFilterControl"; -import { EntriesDateTimeFilterError } from "./EntriesDateTimeFilterError"; -import { EntriesDateTimeFilterTotalTime } from "./EntriesDateTimeFilterTotalTime"; -import { EntriesDateTimeFilterResetButton } from "./EntriesDateTimeFilterResetButton"; -import { Times } from "@identixone/ui-kit/src/assets/icons"; - -import { identity } from "lodash-es"; -import dayjs from "dayjs"; -import { isSameDate } from "../../../utils/helpers"; - -const EntriesDateTimeFilterContext = React.createContext({ - value: [], - onChange: identity, - error: null, - setError: identity, - initialDateFrom: null, - initialDateTo: null, -}); - -export function formatDateTime(value) { - return dayjs(value).format("YYYY/MM/DD (HH:mm:ss)"); -} - -function EntriesDateTimeFilter({ - value, - onChange, - onStateChange, - initialDateFrom, - initialDateTo, -}) { - const [error, setError] = useState(null); - const popupTrigger = useRef(null); - const { - Portal, - bind, - coords, - popupInner, - togglePortal, - closePortal, - isOpen, - targetParams, - } = usePositionPopup({ - pupupTrigger: popupTrigger, - position: "bottom", - }); - - function getPopupLeftCoord() { - if (popupInner.current) { - if (targetParams.width > popupInner.current.offsetWidth) { - return ( - coords.left + targetParams.width - popupInner.current.offsetWidth - ); - } - - return coords.left; - } - } - - useUpdateEffect(() => { - if (!isOpen) { - if (!value[0] && value[1]) { - const dayBefore = dayjs(value[1]) - .subtract(1, "day") - .toDate(); - - onChange([dayBefore, value[1]]); - } - - if (value[0] && !value[1]) { - const dayAfter = dayjs(value[0]) - .add(1, "day") - .toDate(); - - onChange([value[0], dayAfter]); - } - } - - onStateChange({ isOpen }); - }, [isOpen]); - - function getValueRender(value) { - if (!value[0] && !value[1]) return "All dates"; - if (value[0] && !value[1]) return `From ${formatDateTime(value[0])}`; - if (!value[0] && value[1]) return `To ${formatDateTime(value[1])}`; - - if (isSameDate(value[0], initialDateFrom)) { - return `All to ${formatDateTime(value[1])}`; - } - - return formatDateTime(value[0]) + " - " + formatDateTime(value[1]); - } - - const store = useMemo( - () => ({ - value, - onChange, - error, - setError, - initialDateFrom, - initialDateTo, - }), - [value, error, initialDateFrom, initialDateTo] - ); - - return ( - - - {getValueRender(value)} - {(value[0] || value[1]) && ( - { - e.stopPropagation(); - onChange([null, null]); - closePortal(); - }} - > - - - )} - - - - {/* БбрасываСм всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ состояния ΠΏΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ */} - - - - - - - - - ); -} - -EntriesDateTimeFilter.propTypes = { - value: PropTypes.array.isRequired, - onChange: PropTypes.func.isRequired, - onStateChange: PropTypes.func.isRequired, - initialDateFrom: PropTypes.string.isRequired, - initialDateTo: PropTypes.string.isRequired, -}; - -export { EntriesDateTimeFilter, EntriesDateTimeFilterContext }; diff --git a/src/components/Entries/EntryCard/StyledEntryCard.jsx b/src/components/Entries/EntryCard/StyledEntryCard.jsx index bc1d7fd6..a7e22234 100644 --- a/src/components/Entries/EntryCard/StyledEntryCard.jsx +++ b/src/components/Entries/EntryCard/StyledEntryCard.jsx @@ -6,9 +6,9 @@ import { StyledEntryCardPhoto, EntryCardInfoColumn, EntryCardInfoItemLabel, - EntryCardPhotoFaceSize, StyledEntryCardLiveness, } from "../components"; +import { EntryCardPhotoBadges } from "../components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoBadges"; const StyledEntryCard = styled(EntryCardContainer)` height: 114px; @@ -44,7 +44,7 @@ const StyledEntryCard = styled(EntryCardContainer)` } } - ${EntryCardPhotoFaceSize} { + ${EntryCardPhotoBadges} { top: -4px; } diff --git a/src/components/Entries/EntryPersonCard/StyledEntryPersonCard.jsx b/src/components/Entries/EntryPersonCard/StyledEntryPersonCard.jsx index 8c2bcee4..00063c41 100644 --- a/src/components/Entries/EntryPersonCard/StyledEntryPersonCard.jsx +++ b/src/components/Entries/EntryPersonCard/StyledEntryPersonCard.jsx @@ -8,7 +8,7 @@ import { EntryCardActions, } from "../components"; -import { colors } from "../../../themes/index"; +import { colors } from "../../../style"; const themes = { light: { diff --git a/src/components/Entries/PersonEntriesCard/PersonEntriesCard.stories.js b/src/components/Entries/PersonEntriesCard/PersonEntriesCard.stories.js index 435c6025..ecaa72b5 100644 --- a/src/components/Entries/PersonEntriesCard/PersonEntriesCard.stories.js +++ b/src/components/Entries/PersonEntriesCard/PersonEntriesCard.stories.js @@ -18,7 +18,7 @@ storiesOf("Entries|PersonEntriesCard", module).add("default", () => { actions={ close - + lists 0; - return ( 0} /> - {hasReinit && ( - - RE - - )} - diff --git a/src/components/Entries/components/EntryCardActions/EntryCardActionsButton/index.jsx b/src/components/Entries/components/EntryCardActions/EntryCardActionsButton/index.jsx index f0607af6..dd48b1d2 100644 --- a/src/components/Entries/components/EntryCardActions/EntryCardActionsButton/index.jsx +++ b/src/components/Entries/components/EntryCardActions/EntryCardActionsButton/index.jsx @@ -1,9 +1,9 @@ import styled from "styled-components"; -import Button from "../../../../Button"; +import { Button } from "../../../../Button"; import { ButtonLink } from "../../../../ButtonLink"; -import colors from "../../../../../themes/colors"; +import { colors } from "../../../../../style"; const EntryCardActionsButton = styled(Button).attrs(({ to, as }) => ({ as: as || to ? ButtonLink : Button, diff --git a/src/components/Entries/components/EntryCardContainer/StyledEntryCardContainer.jsx b/src/components/Entries/components/EntryCardContainer/StyledEntryCardContainer.jsx index 395b5b29..83108060 100644 --- a/src/components/Entries/components/EntryCardContainer/StyledEntryCardContainer.jsx +++ b/src/components/Entries/components/EntryCardContainer/StyledEntryCardContainer.jsx @@ -6,7 +6,7 @@ import { StyledEntryCardEntryType } from "../EntryCardEntryType"; import { StyledEntryCardInfoItem } from "../EntryCardInfoItem"; import { StyledEntryCardLiveness } from "../EntryCardLiveness"; -import { colors } from "../../../../themes/index"; +import { colors } from "../../../../style"; const themes = { light: { diff --git a/src/components/Entries/components/EntryCardEntryType/StyledEntryCardEntryType.jsx b/src/components/Entries/components/EntryCardEntryType/StyledEntryCardEntryType.jsx index c328e8f5..768bfa6e 100644 --- a/src/components/Entries/components/EntryCardEntryType/StyledEntryCardEntryType.jsx +++ b/src/components/Entries/components/EntryCardEntryType/StyledEntryCardEntryType.jsx @@ -3,7 +3,7 @@ import theme from "styled-theming"; import { UIBadge } from "../../../UIBadge"; -import colors from "../../../../themes/colors"; +import { colors } from "../../../../style"; const color = theme("mode", { new: colors.navyBlue, diff --git a/src/components/Entries/components/EntryCardInfoItem/EntryCardInfoItemValue.jsx b/src/components/Entries/components/EntryCardInfoItem/EntryCardInfoItemValue.jsx index 7c109c27..0f8bb494 100644 --- a/src/components/Entries/components/EntryCardInfoItem/EntryCardInfoItemValue.jsx +++ b/src/components/Entries/components/EntryCardInfoItem/EntryCardInfoItemValue.jsx @@ -1,11 +1,19 @@ import styled from "styled-components"; import { ValueSpan } from "../../../ValueSpan"; +import { StyledCopyItem } from "../../../CopyItem"; const EntryCardInfoItemValue = styled(ValueSpan)` font-size: 14px; line-height: 18px; font-weight: 300; + + ${StyledCopyItem} { + font-size: 14px; + line-height: 18px; + font-weight: 300; + display: inline; + } `; export { EntryCardInfoItemValue }; diff --git a/src/components/Entries/components/EntryCardInfoItem/index.jsx b/src/components/Entries/components/EntryCardInfoItem/index.jsx index 76486e38..c03a90b1 100644 --- a/src/components/Entries/components/EntryCardInfoItem/index.jsx +++ b/src/components/Entries/components/EntryCardInfoItem/index.jsx @@ -12,7 +12,7 @@ const StyledEntryCardInfoItem = styled.div` ${textTrimStyles} `; -function EntryCardInfoItem({ children, label, isZeroEmpty, className }) { +function EntryCardInfoItem({ children, label, value, isZeroEmpty, className }) { return ( {!label ? ( @@ -20,9 +20,15 @@ function EntryCardInfoItem({ children, label, isZeroEmpty, className }) { ) : ( {label}: - - {children} - + {value !== undefined ? ( + + {children} + + ) : ( + + {children} + + )} )} @@ -31,6 +37,7 @@ function EntryCardInfoItem({ children, label, isZeroEmpty, className }) { EntryCardInfoItem.propTypes = { label: PropTypes.string, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), isZeroEmpty: PropTypes.bool, className: PropTypes.string, diff --git a/src/components/Entries/components/EntryCardLiveness/StyledEntryCardLiveness.jsx b/src/components/Entries/components/EntryCardLiveness/StyledEntryCardLiveness.jsx index 4d3f2fac..50076d8d 100644 --- a/src/components/Entries/components/EntryCardLiveness/StyledEntryCardLiveness.jsx +++ b/src/components/Entries/components/EntryCardLiveness/StyledEntryCardLiveness.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -import { colors } from "../../../../themes/colors"; +import { colors } from "../../../../style"; const StyledEntryCardLiveness = styled.p` margin: 0; diff --git a/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoBadge.jsx b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoBadge.jsx new file mode 100644 index 00000000..2ee4abc5 --- /dev/null +++ b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoBadge.jsx @@ -0,0 +1,17 @@ +import styled from "styled-components"; + +import { colors } from "../../../../../style"; + +const EntryCardPhotoBadge = styled.span` + display: inline-block; + padding-left: 4px; + padding-right: 4px; + height: 18px; + font-size: 12px; + font-weight: 600; + text-align: center; + color: ${colors.whiteSimple}; + border-radius: 4px; +`; + +export { EntryCardPhotoBadge }; diff --git a/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoBadges.jsx b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoBadges.jsx new file mode 100644 index 00000000..136c1580 --- /dev/null +++ b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoBadges.jsx @@ -0,0 +1,16 @@ +import styled from "styled-components"; + +import { EntryCardPhotoBadge } from "./EntryCardPhotoBadge"; + +const EntryCardPhotoBadges = styled.div` + position: absolute; + top: 0; + left: 0; + display: flex; + + ${EntryCardPhotoBadge}:not(:last-child) { + margin-right: 4px; + } +`; + +export { EntryCardPhotoBadges }; diff --git a/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoFaceSize.jsx b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoFaceSize.jsx index 1671cbdf..8535d0b2 100644 --- a/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoFaceSize.jsx +++ b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoFaceSize.jsx @@ -1,10 +1,10 @@ import styled from "styled-components"; -import { FaceSize } from "../../../../FaceSize"; +import { EntryCardPhotoBadge } from "./EntryCardPhotoBadge"; -import { colors } from "../../../../../themes/index"; +import { colors } from "../../../../../style"; -const EntryCardPhotoFaceSize = styled(FaceSize)` +const EntryCardPhotoFaceSize = styled(EntryCardPhotoBadge)` background-color: ${colors.bluish}; `; diff --git a/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoReinit.jsx b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoReinit.jsx new file mode 100644 index 00000000..476b78f9 --- /dev/null +++ b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/EntryCardPhotoReinit.jsx @@ -0,0 +1,11 @@ +import styled from "styled-components"; + +import { EntryCardPhotoBadge } from "./EntryCardPhotoBadge"; + +import { colors } from "../../../../../style"; + +const EntryCardPhotoReinit = styled(EntryCardPhotoBadge)` + background-color: ${colors.slate}; +`; + +export { EntryCardPhotoReinit }; diff --git a/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/index.jsx b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/index.jsx index 27d05397..8e90442a 100644 --- a/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/index.jsx +++ b/src/components/Entries/components/EntryCardPhotos/EntryCardPhoto/index.jsx @@ -6,11 +6,14 @@ import { EntryCardPhotoImgContainer } from "./EntryCardPhotoImgContainer"; import { EntryCardPhotoImg } from "./EntryCardPhotoImg"; import { EntryCardPhotoTitle } from "./EntryCardPhotoTitle"; import { EntryCardPhotoFaceSize } from "./EntryCardPhotoFaceSize"; +import { EntryCardPhotoReinit } from "./EntryCardPhotoReinit"; +import { EntryCardPhotoBadges } from "./EntryCardPhotoBadges"; import noimage from "../../../../../assets/images/noimage.png"; function EntryCardPhoto({ facesize, + hasReinit, src, title, className, @@ -31,11 +34,16 @@ function EntryCardPhoto({ - {facesize && ( - - {facesize} - - )} + + {facesize && ( + {facesize} + )} + {hasReinit && ( + + RE + + )} + ); @@ -43,6 +51,7 @@ function EntryCardPhoto({ EntryCardPhoto.propTypes = { facesize: PropTypes.string, + hasReinit: PropTypes.bool, title: PropTypes.string, src: PropTypes.string, hidden: PropTypes.bool, diff --git a/src/components/ErrorPageBoundary/index.jsx b/src/components/ErrorPageBoundary/index.jsx index 448b83a2..1d941e65 100644 --- a/src/components/ErrorPageBoundary/index.jsx +++ b/src/components/ErrorPageBoundary/index.jsx @@ -27,7 +27,7 @@ RedirectToError.propTypes = { error: PropTypes.object.isRequired, }; -export const withErrorPageBoundary = Component => { +export const withErrorPageBoundary = (Component) => { const WithErrorPageBoundary = ({ onError, ...restProps }) => { return ( diff --git a/src/components/FaceSize.jsx b/src/components/FaceSize.jsx deleted file mode 100644 index 515c470a..00000000 --- a/src/components/FaceSize.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import styled from "styled-components"; -import colors from "../themes/colors"; - -export const FaceSize = styled.div` - position: absolute; - top: 0px; - width: 36px; - height: 18px; - font-size: 11px; - font-weight: 600; - text-align: center; - color: ${colors.whiteSimple}; - background-color: ${colors.blueGray}; - border-radius: 4px; - box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.15); -`; diff --git a/src/components/Footer/FooterCredits.jsx b/src/components/Footer/FooterCredits.jsx index b247e85f..53882ccb 100644 --- a/src/components/Footer/FooterCredits.jsx +++ b/src/components/Footer/FooterCredits.jsx @@ -8,4 +8,4 @@ const FooterCredits = styled.div` margin-left: auto; `; -export default FooterCredits; +export { FooterCredits }; diff --git a/src/components/Footer/FooterDisclaimer.jsx b/src/components/Footer/FooterDisclaimer.jsx index 2dd07e43..742de43f 100644 --- a/src/components/Footer/FooterDisclaimer.jsx +++ b/src/components/Footer/FooterDisclaimer.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -const Disclaimer = styled.div` +const FooterDisclaimer = styled.div` font-size: 13px; line-height: 18px; font-weight: 300; @@ -17,4 +17,4 @@ const Disclaimer = styled.div` } `; -export default Disclaimer; +export { FooterDisclaimer }; diff --git a/src/components/Footer/FooterInner.jsx b/src/components/Footer/FooterInner.jsx index dd09eef6..da6ff358 100644 --- a/src/components/Footer/FooterInner.jsx +++ b/src/components/Footer/FooterInner.jsx @@ -5,4 +5,4 @@ const FooterInner = styled.div` margin: 0 auto; `; -export default FooterInner; +export { FooterInner }; diff --git a/src/components/Footer/FooterText.jsx b/src/components/Footer/FooterText.jsx index 8713cbaa..24214269 100644 --- a/src/components/Footer/FooterText.jsx +++ b/src/components/Footer/FooterText.jsx @@ -6,4 +6,4 @@ const FooterText = styled.div` align-items: flex-start; `; -export default FooterText; +export { FooterText }; diff --git a/src/components/Footer/StyledFooter.jsx b/src/components/Footer/StyledFooter.jsx index ab5d5fb9..bda4e88a 100644 --- a/src/components/Footer/StyledFooter.jsx +++ b/src/components/Footer/StyledFooter.jsx @@ -12,4 +12,4 @@ const StyledFooter = styled.footer` box-sizing: border-box; `; -export default StyledFooter; +export { StyledFooter }; diff --git a/src/components/Footer/index.jsx b/src/components/Footer/index.jsx index 15590cde..935c9956 100644 --- a/src/components/Footer/index.jsx +++ b/src/components/Footer/index.jsx @@ -1,13 +1,13 @@ import React from "react"; import PropTypes from "prop-types"; -import StyledFooter from "./StyledFooter"; -import FooterInner from "./FooterInner"; -import FooterText from "./FooterText"; -import FooterCredits from "./FooterCredits"; -import FooterDisclaimer from "./FooterDisclaimer"; +import { StyledFooter } from "./StyledFooter"; +import { FooterInner } from "./FooterInner"; +import { FooterText } from "./FooterText"; +import { FooterCredits } from "./FooterCredits"; +import { FooterDisclaimer } from "./FooterDisclaimer"; -export function Footer({ Disclamer, Credits }) { +function Footer({ Disclamer, Credits }) { return ( @@ -24,3 +24,5 @@ Footer.propTypes = { Disclamer: PropTypes.oneOfType([PropTypes.array, PropTypes.node]), Credits: PropTypes.oneOfType([PropTypes.array, PropTypes.node]), }; + +export { Footer }; diff --git a/src/components/GlobalStyles.jsx b/src/components/GlobalStyles.jsx index 7514a3ff..b8ee4705 100644 --- a/src/components/GlobalStyles.jsx +++ b/src/components/GlobalStyles.jsx @@ -1,25 +1,21 @@ import { createGlobalStyle } from "styled-components"; -import "../resources/styles/fonts.css"; +import "../style/font/fonts.css"; +import { colors } from "../style"; export const GlobalStyles = createGlobalStyle` - html { + html, body, #app-container { height: 100%; } body { font-family: Open Sans, Helvetica Neue, sans-serif; font-weight: 400; - color: #000; + color: ${colors.darkBlack}; user-select: none; - height: 100%; } input, textarea, button { font-family: Open Sans, Helvetica Neue, sans-serif; } - - #app-container { - height: 100%; - } `; diff --git a/src/components/Header/Header.stories.js b/src/components/Header/Header.stories.js index 672c9eb7..b635be9e 100644 --- a/src/components/Header/Header.stories.js +++ b/src/components/Header/Header.stories.js @@ -6,7 +6,7 @@ import { action } from "@storybook/addon-actions"; import { Header, HeaderTopMenu, HeaderAppMenu } from "./index.jsx"; import { HeaderTopMenuLinks, HeaderTopMenuUser } from "./HeaderTopMenu"; -storiesOf("Header", module).add("default", () => { +storiesOf("Navigation|Header", module).add("default", () => { const username = text("Username", "Arunoda Susiripala"); const topLinks = object("Top links", [ diff --git a/src/components/Header/HeaderAppMenu/StyledHeaderAppMenu.jsx b/src/components/Header/HeaderAppMenu/StyledHeaderAppMenu.jsx index 11a48c02..82f1f21a 100644 --- a/src/components/Header/HeaderAppMenu/StyledHeaderAppMenu.jsx +++ b/src/components/Header/HeaderAppMenu/StyledHeaderAppMenu.jsx @@ -2,6 +2,5 @@ import styled from "styled-components"; export const StyledHeaderAppMenu = styled.nav` display: flex; - justify-content: flex-end; - padding-right: 12px; + justify-content: space-between; `; diff --git a/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/HeaderTopMenuLinksLink.jsx b/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/HeaderTopMenuLinksLink.jsx index 273b8900..74c290be 100644 --- a/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/HeaderTopMenuLinksLink.jsx +++ b/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/HeaderTopMenuLinksLink.jsx @@ -1,9 +1,11 @@ import styled from "styled-components"; +import { colors } from "../../../../style/color"; + export const HeaderTopMenuLinksLink = styled.a.attrs(() => ({ target: "_blank", }))` - color: #000; + color: ${colors.darkBlack}; text-decoration: none; font-size: 13px; line-height: 18px; @@ -13,7 +15,7 @@ export const HeaderTopMenuLinksLink = styled.a.attrs(() => ({ text-transform: lowercase; &:not(:last-child) { - margin-right: 50px; + margin-right: 32px; } &:hover { diff --git a/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/StyledHeaderTopMenuLinks.jsx b/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/StyledHeaderTopMenuLinks.jsx index 8db5d3ff..bca6704e 100644 --- a/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/StyledHeaderTopMenuLinks.jsx +++ b/src/components/Header/HeaderTopMenu/HeaderTopMenuLinks/StyledHeaderTopMenuLinks.jsx @@ -1,5 +1,5 @@ import styled from "styled-components"; export const StyledHeaderTopMenuLinks = styled.nav` - margin-right: 50px; + margin-right: 32px; `; diff --git a/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsername/index.jsx b/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsername/index.jsx index b46c5abe..69cf6dca 100644 --- a/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsername/index.jsx +++ b/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsername/index.jsx @@ -3,7 +3,7 @@ import PropTypes from "prop-types"; import { StyledHeaderTopMenuUserUsername } from "./StyledHeaderTopMenuUserUsername"; import { HeaderTopMenuUserUsernameIcon } from "./HeaderTopMenuUserUsernameIcon"; -import { User } from "../../../../../assets/icons"; +import { User } from "../../../../icons"; function HeaderTopMenuUserUsername({ username }) { return ( diff --git a/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsernameLogout.jsx b/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsernameLogout.jsx index 4390dc07..38e4c44c 100644 --- a/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsernameLogout.jsx +++ b/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/HeaderTopMenuUserUsernameLogout.jsx @@ -1,10 +1,8 @@ import styled from "styled-components"; -import Button from "../../../Button"; +import { Button } from "../../../Button"; -export const HeaderTopMenuUserUsernameLogout = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` +export const HeaderTopMenuUserUsernameLogout = styled(Button)` font-size: 15px; line-height: 15px; color: #222; diff --git a/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/index.jsx b/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/index.jsx index 6c4022d3..d8e2782f 100644 --- a/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/index.jsx +++ b/src/components/Header/HeaderTopMenu/HeaderTopMenuUser/index.jsx @@ -4,7 +4,7 @@ import PropTypes from "prop-types"; import { StyledHeaderTopMenuUser } from "./StyledHeaderTopMenuUser"; import { HeaderTopMenuUserUsername } from "./HeaderTopMenuUserUsername"; import { HeaderTopMenuUserUsernameLogout } from "./HeaderTopMenuUserUsernameLogout"; -import { ArrowAltCircleRight } from "../../../../assets/icons"; +import { ArrowAltCircleRight } from "../../../icons"; function HeaderTopMenuUser({ username, onLogout }) { return ( diff --git a/src/components/I18nProvider.js b/src/components/I18nProvider.js index f7cee71c..10a56067 100644 --- a/src/components/I18nProvider.js +++ b/src/components/I18nProvider.js @@ -4,11 +4,10 @@ import PropTypes from "prop-types"; import i18n from "i18next"; import { I18nextProvider } from "react-i18next"; -import locales from "../locales"; - function I18nProvider({ children, i18n }) { i18n.init({ - resources: locales, + resources: {}, + lng: "en", fallbackLng: "en", defaultNS: "translation", interpolation: { diff --git a/src/components/IdCopy/IdCopyIcon.jsx b/src/components/IdCopy/IdCopyIcon.jsx deleted file mode 100644 index 4d69f5f0..00000000 --- a/src/components/IdCopy/IdCopyIcon.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import styled from "styled-components"; - -import { Clone } from "../../assets/icons"; -import { colors } from "../../themes"; - -export const IdCopyIcon = styled(Clone)` - color: ${colors.darkBlack}; - opacity: 0.08; - margin-left: 6px; -`; diff --git a/src/components/IdCopy/StyledIdCopy.jsx b/src/components/IdCopy/StyledIdCopy.jsx deleted file mode 100644 index 85d38414..00000000 --- a/src/components/IdCopy/StyledIdCopy.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -import { Flash } from "../Flash"; - -export const StyledIdCopy = styled(Flash)` - cursor: pointer; -`; diff --git a/src/components/IdCopy/index.jsx b/src/components/IdCopy/index.jsx index aa17bae8..2cbc5fb0 100644 --- a/src/components/IdCopy/index.jsx +++ b/src/components/IdCopy/index.jsx @@ -1,48 +1,18 @@ import React from "react"; -import PropTypes from "prop-types"; -import { useCopyToClipboard } from "../../hooks"; -import { useFlash } from "../Flash"; -import { useEffect } from "react"; +import { useLocalId } from "../IdFormat/hooks"; -import { StyledIdCopy } from "./StyledIdCopy"; -import { IdCopyIcon } from "./IdCopyIcon"; +import { CopyItem } from "../CopyItem"; import { Value } from "../Value"; -const getShortId = id => id.split("-")[4]; - -export function IdCopy(props) { - const hasIdInProps = Object.prototype.hasOwnProperty.call(props, "id"); - - const { children, id } = props; - - const localId = hasIdInProps ? id : children; - - const { flash, isFlashing } = useFlash(); - const [{ isCopyAvailable, isCopied }, copyToClipboard] = useCopyToClipboard(); - - function handleCopyClick(ev) { - ev.stopPropagation(); - copyToClipboard(localId); - } - - useEffect(() => { - if (isCopied) { - flash(); - } - }, [isCopied]); +function IdCopy(props) { + const { localId, shortLocalId } = useLocalId(props); return ( - - - {getShortId(localId)} - {isCopyAvailable && } - + + {shortLocalId} ); } -IdCopy.propTypes = { - id: PropTypes.string, - children: PropTypes.string, -}; +export { IdCopy }; diff --git a/src/components/IdFormat/IdFormat.stories.js b/src/components/IdFormat/IdFormat.stories.js new file mode 100644 index 00000000..d3151a21 --- /dev/null +++ b/src/components/IdFormat/IdFormat.stories.js @@ -0,0 +1,12 @@ +import React from "react"; +import { storiesOf } from "@storybook/react"; +import { text } from "@storybook/addon-knobs"; + +import { IdFormat } from "./index.jsx"; +import { personMock } from "../../../test/__mocks__"; + +storiesOf("IdFormat", module).add("default", () => { + const idxid = text("IdFormat text", personMock.idxid); + + return {idxid}; +}); diff --git a/src/components/IdFormat/hooks/index.js b/src/components/IdFormat/hooks/index.js new file mode 100644 index 00000000..38c0a9d4 --- /dev/null +++ b/src/components/IdFormat/hooks/index.js @@ -0,0 +1 @@ +export * from "./use-local-id"; diff --git a/src/components/IdFormat/hooks/use-local-id.js b/src/components/IdFormat/hooks/use-local-id.js new file mode 100644 index 00000000..c39dbad6 --- /dev/null +++ b/src/components/IdFormat/hooks/use-local-id.js @@ -0,0 +1,13 @@ +import { hasProperty } from "../../../utils/helpers"; + +const getShortId = (id) => id.split("-")[4]; + +function useLocalId(props) { + const { id, children } = props; + const hasIdInProps = hasProperty(props, "id"); + const localId = hasIdInProps ? id : children; + + return { localId, shortLocalId: getShortId(localId) }; +} + +export { useLocalId }; diff --git a/src/components/IdFormat/index.jsx b/src/components/IdFormat/index.jsx index b9fc5596..899e71e4 100644 --- a/src/components/IdFormat/index.jsx +++ b/src/components/IdFormat/index.jsx @@ -1,24 +1,17 @@ import React from "react"; -import PropTypes from "prop-types"; -import { Value } from "../Value"; - -const getShortId = id => id.split("-")[4]; +import { useLocalId } from "./hooks"; -export function IdFormat(props) { - const hasIdInProps = Object.prototype.hasOwnProperty.call(props, "id"); +import { Value } from "../Value"; - const { id, children } = props; - const idToCompare = hasIdInProps ? id : children; +function IdFormat(props) { + const { localId, shortLocalId } = useLocalId(props); return ( - - {idToCompare ? getShortId(idToCompare) : null} + + {shortLocalId} ); } -IdFormat.propTypes = { - id: PropTypes.string, - children: PropTypes.oneOfType([PropTypes.array, PropTypes.node]), -}; +export { IdFormat }; diff --git a/src/components/InfiniteDropdown/InfiniteDropdown.stories.js b/src/components/InfiniteDropdown/InfiniteDropdown.stories.js index 484c0bcf..df55e72d 100644 --- a/src/components/InfiniteDropdown/InfiniteDropdown.stories.js +++ b/src/components/InfiniteDropdown/InfiniteDropdown.stories.js @@ -5,6 +5,7 @@ import { boolean } from "@storybook/addon-knobs"; import { action } from "@storybook/addon-actions"; import { InfiniteDropdown } from "./index.jsx"; + import { generateSourcesStats } from "../../../test/generate"; function isEven(n) { @@ -12,9 +13,9 @@ function isEven(n) { return n === 0 || !!(n && !(n % 2)); } -storiesOf("Basic UI|InfiniteDropdown", module) +storiesOf("Controls|InfiniteDropdown", module) .add("default", () => { - const options = generateSourcesStats(10).map(option => ({ + const options = generateSourcesStats(10).map((option) => ({ label: option.name, value: option.id, })); @@ -32,7 +33,7 @@ storiesOf("Basic UI|InfiniteDropdown", module) ); }) .add("with custom item render", () => { - const options = generateSourcesStats(10).map(option => ({ + const options = generateSourcesStats(10).map((option) => ({ label: option.name, value: option.id, })); @@ -46,7 +47,7 @@ storiesOf("Basic UI|InfiniteDropdown", module) placeholder={isFetching ? "Loading..." : "Select value..."} width={240} withSearch={boolean("with search", false)} - renderItem={item => ( + renderItem={(item) => ( {`${isEven(item.value) ? "🍎" : "🍌"} ${item.label}`} )} /> diff --git a/src/components/InfiniteDropdown/index.jsx b/src/components/InfiniteDropdown/index.jsx index e2367308..651e93eb 100644 --- a/src/components/InfiniteDropdown/index.jsx +++ b/src/components/InfiniteDropdown/index.jsx @@ -1,8 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; -import { useState, useEffect } from "react"; -import { useListFetch } from "../../hooks"; +import { useInfiniteMenu } from "../../hooks"; import { InfiniteScroll } from "../index"; import { FormDropdown } from "../form/components"; @@ -13,7 +12,8 @@ function InfiniteDropdown({ options, fetchOptions, isFetching, - totalCount, + disabled, + hasNext, limit, placeholder, "data-testid": testId, @@ -26,35 +26,15 @@ function InfiniteDropdown({ onStateChange, renderSelected, }) { - const [isListEnds, setIsListEnds] = useState(false); - - const { pagination, setPagination, setFetchParams } = useListFetch({ - fetchList: params => { - fetchOptions({ ...params, meta: { clearList: params.offset === 0 } }); - }, - pagination: { limit, offset: 0 }, + const { searchOptions, fetchNext } = useInfiniteMenu({ + limit, + hasNext, + isFetching, + fetchOptions, }); - useEffect(() => { - setIsListEnds(pagination.offset + pagination.limit > totalCount); - }, [options]); - - function handleSearch(value) { - setFetchParams({ - q: value, - offset: 0, - }); - } - return ( - { - if (!isListEnds) { - setPagination({ offset: pagination.offset + pagination.limit }); - } - }} - isFetching={isFetching} - > + {({ scrollerRef }) => ( )} @@ -87,8 +69,9 @@ InfiniteDropdown.propTypes = { fetchOptions: PropTypes.func.isRequired, options: PropTypes.array.isRequired, isFetching: PropTypes.bool.isRequired, + disabled: PropTypes.bool, placeholder: PropTypes.string, - totalCount: PropTypes.number.isRequired, + hasNext: PropTypes.bool.isRequired, limit: PropTypes.number.isRequired, "data-testid": PropTypes.string, name: PropTypes.string, @@ -104,7 +87,6 @@ InfiniteDropdown.propTypes = { InfiniteDropdown.defaultProps = { multiple: false, limit: 10, - "data-testid": "infinite-dropdown", }; export { InfiniteDropdown }; diff --git a/src/components/InfiniteMultiSelect/InfiniteMultiselect.stories.js b/src/components/InfiniteMultiSelect/InfiniteMultiselect.stories.js new file mode 100644 index 00000000..1d4b0542 --- /dev/null +++ b/src/components/InfiniteMultiSelect/InfiniteMultiselect.stories.js @@ -0,0 +1,36 @@ +import React from "react"; + +import { useState } from "react"; + +import { storiesOf } from "@storybook/react"; +import { boolean } from "@storybook/addon-knobs"; +import { action } from "@storybook/addon-actions"; + +import { InfiniteMultiSelect } from "./index.jsx"; + +import { generateSourcesStats } from "../../../test/generate"; + +storiesOf("Controls|InfiniteMultiSelect", module).add("default", () => { + const options = generateSourcesStats(10).map((option) => ({ + label: option.name, + value: option.id, + })); + const isFetching = boolean("is fetching", false); + + function InfiniteMultiSelectConsumer() { + const [value, setValue] = useState([]); + + return ( + + ); + } + + return ; +}); diff --git a/src/components/InfiniteMultiSelect/index.jsx b/src/components/InfiniteMultiSelect/index.jsx new file mode 100644 index 00000000..119d180d --- /dev/null +++ b/src/components/InfiniteMultiSelect/index.jsx @@ -0,0 +1,70 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { useInfiniteMenu } from "../../hooks"; + +import { InfiniteScroll } from "../InfiniteScroll"; +import { FormMultiSelect } from "../form/components"; + +function InfiniteMultiSelect({ + name, + placeholder, + options, + fetchOptions, + isFetching, + limit, + hasNext, + value, + onChange, + className, + "data-testid": testId, +}) { + const { searchOptions, fetchNext } = useInfiniteMenu({ + limit, + hasNext, + isFetching, + fetchOptions, + }); + + return ( + + {({ scrollerRef }) => ( + + )} + + ); +} + +InfiniteMultiSelect.Option = FormMultiSelect.Option; +InfiniteMultiSelect.Menu = FormMultiSelect.Menu; + +InfiniteMultiSelect.propTypes = { + value: PropTypes.array.isRequired, + onChange: PropTypes.func.isRequired, + fetchOptions: PropTypes.func.isRequired, + options: PropTypes.array.isRequired, + isFetching: PropTypes.bool.isRequired, + placeholder: PropTypes.string, + limit: PropTypes.number.isRequired, + "data-testid": PropTypes.string, + name: PropTypes.string, + className: PropTypes.string, + hasNext: PropTypes.bool.isRequired, +}; + +InfiniteMultiSelect.defaultProps = { + limit: 10, +}; + +export { InfiniteMultiSelect }; diff --git a/src/components/InfinitePageList/index.jsx b/src/components/InfinitePageList/index.jsx new file mode 100644 index 00000000..7b25a13c --- /dev/null +++ b/src/components/InfinitePageList/index.jsx @@ -0,0 +1,53 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { useRef, useState, useEffect } from "react"; + +import { InfiniteScroll } from "../InfiniteScroll"; + +function InfinitePageList({ + children, + hasNext, + lockScroll, + changeOffset, + offset, + limit, + isFetching, + pageRef, +}) { + const [isListEnds, setIsListEnds] = useState(!hasNext); + useEffect(() => { + setIsListEnds(!hasNext); + }, [hasNext]); + + const windowRef = useRef(window); + + function fetchNext() { + if (!isListEnds && !lockScroll) { + changeOffset(offset + limit); + } + } + + return ( + + {children} + + ); +} + +InfinitePageList.propTypes = { + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]).isRequired, + hasNext: PropTypes.bool.isRequired, + lockScroll: PropTypes.bool, + changeOffset: PropTypes.func.isRequired, + offset: PropTypes.number.isRequired, + limit: PropTypes.number.isRequired, + isFetching: PropTypes.bool.isRequired, + pageRef: PropTypes.object, +}; + +export { InfinitePageList }; diff --git a/src/components/InfiniteScroll/index.jsx b/src/components/InfiniteScroll/index.jsx index 708ad233..ed1ea488 100644 --- a/src/components/InfiniteScroll/index.jsx +++ b/src/components/InfiniteScroll/index.jsx @@ -66,7 +66,7 @@ export class InfiniteScroll extends React.Component { leading: false, }); - componentDidMount = () => { + componentDidMount() { if (!this.scrollerRef.current) { console.warn("You dont specify scrollerRef node"); return; @@ -76,7 +76,16 @@ export class InfiniteScroll extends React.Component { "scroll", this.throttledMenuScrollHandler ); - }; + } + + componentWillUnmount() { + if (this.scrollerRef.current) { + this.scrollerRef.current.removeEventListener( + "scroll", + this.throttledMenuScrollHandler + ); + } + } render() { const { children } = this.props; diff --git a/src/components/InfoCard/InfoCardAside/InfoCardAsideItem.jsx b/src/components/InfoCard/InfoCardAside/InfoCardAsideItem.jsx new file mode 100644 index 00000000..ead6c00a --- /dev/null +++ b/src/components/InfoCard/InfoCardAside/InfoCardAsideItem.jsx @@ -0,0 +1,10 @@ +import styled from "styled-components"; + +const InfoCardAsideItem = styled.p` + margin: 0; + font-size: 16px; + line-height: 26px; + color: #a8b3be; +`; + +export { InfoCardAsideItem }; diff --git a/src/components/InfoCard/InfoCardAside/index.jsx b/src/components/InfoCard/InfoCardAside/index.jsx new file mode 100644 index 00000000..65719732 --- /dev/null +++ b/src/components/InfoCard/InfoCardAside/index.jsx @@ -0,0 +1,13 @@ +import styled from "styled-components"; + +import { InfoCardAsideItem } from "./InfoCardAsideItem"; + +const InfoCardAside = styled.div` + ${InfoCardAsideItem}:not(:last-child) { + margin-bottom: 4px; + } +`; + +InfoCardAside.Item = InfoCardAsideItem; + +export { InfoCardAside, InfoCardAsideItem }; diff --git a/src/components/InfoCard/InfoCardData.jsx b/src/components/InfoCard/InfoCardData.jsx new file mode 100644 index 00000000..30bd8b11 --- /dev/null +++ b/src/components/InfoCard/InfoCardData.jsx @@ -0,0 +1,11 @@ +import styled from "styled-components"; + +import { StyledInfoCardField } from "./InfoCardField"; + +const InfoCardData = styled.div` + ${StyledInfoCardField}:not(:last-child) { + margin-bottom: 24px; + } +`; + +export { InfoCardData }; diff --git a/src/components/InfoCard/InfoCardField/InfoCardFieldLabel.jsx b/src/components/InfoCard/InfoCardField/InfoCardFieldLabel.jsx new file mode 100644 index 00000000..886ba36d --- /dev/null +++ b/src/components/InfoCard/InfoCardField/InfoCardFieldLabel.jsx @@ -0,0 +1,13 @@ +import styled from "styled-components"; + +import { colors } from "../../../style"; + +const InfoCardFieldLabel = styled.span` + font-weight: 600; + font-size: 12px; + line-height: 16px; + color: ${colors.darkBlack}; + margin-right: 8px; +`; + +export { InfoCardFieldLabel }; diff --git a/src/components/InfoCard/InfoCardField/StyledInfoCardField.jsx b/src/components/InfoCard/InfoCardField/StyledInfoCardField.jsx new file mode 100644 index 00000000..c3ef1bbf --- /dev/null +++ b/src/components/InfoCard/InfoCardField/StyledInfoCardField.jsx @@ -0,0 +1,25 @@ +import styled, { css } from "styled-components"; + +import { InfoCardFieldLabel } from "./InfoCardFieldLabel"; + +function getStyles({ direction }) { + return direction === "row" + ? css` + align-items: center; + ` + : css` + flex-direction: column; + + ${InfoCardFieldLabel} { + margin-bottom: 6px; + } + `; +} + +const StyledInfoCardField = styled.label` + display: ${({ inline }) => (inline ? "inline-flex" : "flex")}; + + ${getStyles} +`; + +export { StyledInfoCardField }; diff --git a/src/components/InfoCard/InfoCardField/index.jsx b/src/components/InfoCard/InfoCardField/index.jsx new file mode 100644 index 00000000..48363bdd --- /dev/null +++ b/src/components/InfoCard/InfoCardField/index.jsx @@ -0,0 +1,32 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { StyledInfoCardField } from "./StyledInfoCardField"; +import { InfoCardFieldLabel } from "./InfoCardFieldLabel"; + +function InfoCardField({ label, direction, inline, render, className }) { + return ( + + {label && {label}:} + {render && render()} + + ); +} + +InfoCardField.propTypes = { + label: PropTypes.string, + render: PropTypes.func.isRequired, + direction: PropTypes.oneOf(["row", "column"]).isRequired, + inline: PropTypes.bool, + className: PropTypes.string, +}; + +InfoCardField.defaultProps = { + direction: "row", +}; + +export { InfoCardField, StyledInfoCardField }; diff --git a/src/components/InfoCard/InfoCardSelect/InfoCardSelectTag.jsx b/src/components/InfoCard/InfoCardSelect/InfoCardSelectTag.jsx new file mode 100644 index 00000000..7fa0f1d3 --- /dev/null +++ b/src/components/InfoCard/InfoCardSelect/InfoCardSelectTag.jsx @@ -0,0 +1,24 @@ +import styled from "styled-components"; + +import { textTrimStyles } from "../../Text/TextTrim"; +import { colors } from "../../../style"; + +const InfoCardSelectTag = styled.li` + background-color: ${colors.grayLight}; + padding: 4px 6px; + font-size: 12px; + line-height: 11px; + text-align: center; + color: ${colors.darkBlack}; + box-sizing: border-box; + border-radius: 2px; + height: 20px; + max-width: 180px; + ${textTrimStyles} + + &:not(:last-child) { + margin-right: 6px; + } +`; + +export { InfoCardSelectTag }; diff --git a/src/components/InfoCard/InfoCardSelect/StyledInfoCardSelect.jsx b/src/components/InfoCard/InfoCardSelect/StyledInfoCardSelect.jsx new file mode 100644 index 00000000..08f037b1 --- /dev/null +++ b/src/components/InfoCard/InfoCardSelect/StyledInfoCardSelect.jsx @@ -0,0 +1,11 @@ +import styled from "styled-components"; + +const StyledInfoCardSelect = styled.div` + padding: 0; + margin: 0; + display: flex; + flex-wrap: wrap; + list-style-type: none; +`; + +export { StyledInfoCardSelect }; diff --git a/src/components/InfoCard/InfoCardSelect/index.jsx b/src/components/InfoCard/InfoCardSelect/index.jsx new file mode 100644 index 00000000..c5c83d59 --- /dev/null +++ b/src/components/InfoCard/InfoCardSelect/index.jsx @@ -0,0 +1,42 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { StyledInfoCardSelect } from "./StyledInfoCardSelect"; +import { InfoCardSelectTag } from "./InfoCardSelectTag"; + +import { isArray } from "lodash-es"; + +function getItemAsAText(item) { + return item.label || String(item); +} + +function InfoCardSelect({ value }) { + return isArray(value) ? ( + + {value.map((tag) => ( + + {getItemAsAText(tag)} + + ))} + + ) : ( + + {value && {getItemAsAText(value)}} + + ); +} + +InfoCardSelect.propTypes = { + value: PropTypes.oneOfType([ + PropTypes.array, + PropTypes.object, + PropTypes.string, + PropTypes.number, + ]), +}; + +InfoCardSelect.defaultProps = { + value: "", +}; + +export { InfoCardSelect }; diff --git a/src/components/InfoCard/InfoCardTitle.jsx b/src/components/InfoCard/InfoCardTitle.jsx new file mode 100644 index 00000000..fcca4c81 --- /dev/null +++ b/src/components/InfoCard/InfoCardTitle.jsx @@ -0,0 +1,14 @@ +import styled from "styled-components"; + +import { colors } from "../../style"; + +const InfoCardTitle = styled.h1` + font-weight: bold; + font-size: 16px; + line-height: 26px; + color: ${colors.darkBlack}; + margin: 0; + margin-bottom: 10px; +`; + +export { InfoCardTitle }; diff --git a/src/components/InfoCard/index.jsx b/src/components/InfoCard/index.jsx new file mode 100644 index 00000000..78374864 --- /dev/null +++ b/src/components/InfoCard/index.jsx @@ -0,0 +1,19 @@ +import styled from "styled-components"; + +import { InfoCardTitle } from "./InfoCardTitle"; +import { InfoCardData } from "./InfoCardData"; +import { InfoCardAside } from "./InfoCardAside"; +import { InfoCardField } from "./InfoCardField"; + +const InfoCard = styled.div` + display: flex; + flex-direction: row; + justify-content: space-between; +`; + +InfoCard.Title = InfoCardTitle; +InfoCard.Data = InfoCardData; +InfoCard.Aside = InfoCardAside; +InfoCard.Field = InfoCardField; + +export { InfoCard, InfoCardData, InfoCardAside, InfoCardTitle, InfoCardField }; diff --git a/src/components/LazyImage/StyledLazyImage.jsx b/src/components/LazyImage/StyledLazyImage.jsx index 6f5c2023..8818d0e6 100644 --- a/src/components/LazyImage/StyledLazyImage.jsx +++ b/src/components/LazyImage/StyledLazyImage.jsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; -import colors from "../../themes/colors"; +import { colors } from "../../style"; function getStyles({ isImageLoaded }) { return !isImageLoaded @@ -16,6 +16,7 @@ function getStyles({ isImageLoaded }) { `; } -export const StyledLazyImage = styled.div` +export const StyledLazyImage = styled.span` + display: block; ${getStyles} `; diff --git a/src/components/ListItemPopup/ListItemPopup.stories.js b/src/components/ListItemPopup/ListItemPopup.stories.js index da168afa..9530f02a 100644 --- a/src/components/ListItemPopup/ListItemPopup.stories.js +++ b/src/components/ListItemPopup/ListItemPopup.stories.js @@ -4,8 +4,6 @@ import { text } from "@storybook/addon-knobs"; import { ListItemPopup } from "./index.jsx"; -import { Qrcode as QRCodeIcon } from "../../assets/icons"; - import styled from "styled-components"; const StyledContentExample = styled.div` @@ -23,24 +21,14 @@ storiesOf("ListItemPopup", module).add("default", () => { return ( ( - + )} > {({ closePortal }) => ( - + {contentExample} )} diff --git a/src/components/ListItemPopup/ListItemPopupInner.jsx b/src/components/ListItemPopup/ListItemPopupInner.jsx index e6753c5d..affb0f54 100644 --- a/src/components/ListItemPopup/ListItemPopupInner.jsx +++ b/src/components/ListItemPopup/ListItemPopupInner.jsx @@ -1,12 +1,12 @@ import styled from "styled-components"; +import { colors } from "../../style"; + const ListItemPopupInner = styled.div` - height: 100%; - width: 573px; - padding: 5px 5px; - background-color: #fff; - box-shadow: 0px 0px 10px 0px rgba(162, 182, 189, 0.3); - border-radius: 3px; + padding: 2px; + background-color: ${colors.whiteSimple}; + box-shadow: 0px 0px 80px rgba(162, 182, 189, 0.2); + border-radius: 4px; position: relative; `; diff --git a/src/components/ListItemPopup/__tests__/ListItemPopup.js b/src/components/ListItemPopup/__tests__/ListItemPopup.js index 2d1a9ad1..4f0c67d5 100644 --- a/src/components/ListItemPopup/__tests__/ListItemPopup.js +++ b/src/components/ListItemPopup/__tests__/ListItemPopup.js @@ -3,7 +3,6 @@ import { fireEvent } from "@testing-library/react"; import { render } from "../../../../test/utils"; import { ListItemPopup } from "../index.jsx"; -import { Qrcode as QRCodeIcon } from "../../../assets/icons"; describe("ListItemPopup tests", () => { const onChangeMock = jest.fn(); @@ -19,24 +18,16 @@ describe("ListItemPopup tests", () => { return render( ( - + )} > {({ closePortal }) => ( - + Popup content example @@ -52,9 +43,11 @@ describe("ListItemPopup tests", () => { test("ListItemPopup trigger open and close popup", () => { const { getByTestId } = renderListItemPopup(); - fireEvent.click(getByTestId("qr-code-icon")); + + fireEvent.click(getByTestId("button-open")); expect(getByTestId("list-item-popup-content")).toBeVisible(); - fireEvent.click(getByTestId("qr-code-icon-inside")); + + fireEvent.click(getByTestId("button-close")); expect(getByTestId("list-item-popup-content")).not.toBeVisible(); }); }); diff --git a/src/components/ListItemPopup/index.jsx b/src/components/ListItemPopup/index.jsx index 5e18a336..fa6b8b78 100644 --- a/src/components/ListItemPopup/index.jsx +++ b/src/components/ListItemPopup/index.jsx @@ -26,7 +26,7 @@ function ListItemPopup({ }); const triggerProps = { ref, openPortal, togglePortal, closePortal }; - const childrenProps = { closePortal }; + const childrenProps = { closePortal, isOpen }; return ( @@ -63,4 +63,4 @@ ListItemPopup.defaultProps = { "data-testid": "list-item-popup", }; -export { ListItemPopup, StyledListItemPopup }; +export { ListItemPopup, StyledListItemPopup, ListItemPopupInner }; diff --git a/src/components/ListLayout/ListLayout.stories.js b/src/components/ListLayout/ListLayout.stories.js index 435e74c2..c2897048 100644 --- a/src/components/ListLayout/ListLayout.stories.js +++ b/src/components/ListLayout/ListLayout.stories.js @@ -4,9 +4,9 @@ import { storiesOf } from "@storybook/react"; import { number, boolean } from "@storybook/addon-knobs"; import { action } from "@storybook/addon-actions"; -import { useListFetch } from "../../hooks"; +import { useListFetch, useSelectableList } from "../../hooks"; -import { ListLayout, ListLayoutList } from "./index.jsx"; +import { ListLayout, ListLayoutList, ListLayoutActions } from "./index.jsx"; import { PersonsGroupListPerson, @@ -17,10 +17,9 @@ import { import { Search } from "../Search"; import { Button } from "../Button"; -import { SelectableList } from "../SelectableList"; import { UIBadge } from "../UIBadge"; -import { Sync } from "../../assets/icons"; +import { Sync } from "../icons"; import { property as prop } from "lodash-es"; import { personMock } from "../../../test/__mocks__"; @@ -132,6 +131,14 @@ storiesOf("List Layout", module) } = useListFetch({ fetchList: action("Fetch list"), }); + const { + selected, + onCheckboxChange, + selectAll, + deselectAll, + isAllSelected, + isAllDeselected, + } = useSelectableList({ options }); const [searchType, setSearchType] = useState(personsGroupsSearchTypes[0]); @@ -148,7 +155,7 @@ storiesOf("List Layout", module) title="Some title" buttons={ - + } + > + {selected.length !== 0 && `${selected.length} items selected`} + + } content={ - - {({ - selected, - handleCheckboxChange, - options, - selectAll, - deselectAll, - isAllSelected, - }) => ( - - {selected.length !== 0 && - `Items selected: ${selected.length}`} - - } - renderItem={item => ( - included} - > - {item} - - )} + totalCount={optionsCount} /> + } + isLoading={isLoading} + actions={ + + {selected.length !== 0 && + `Items selected: ${selected.length}`} + + } + renderItem={(item) => ( + included} + > + {item} + )} - + /> - + } + > + {selected.length !== 0 && `${selected.length} items selected`} + + } content={ - - {({ - selected, - handleCheckboxChange, - options, - selectAll, - deselectAll, - isAllSelected, - }) => ( - + } + columns={2} + actions={ + - {selected.length !== 0 && - `Items selected: ${selected.length}`} - + Remove selected + } - renderItem={item => ( - included} - > - {item} - - )} - /> + > + {selected.length !== 0 && + `${selected.length} items selected`} + + } + renderItem={(item) => ( + included} + > + {item} + )} - + /> ; }) .add("list of persons", () => { - const persons = (count => + const persons = ((count) => [...new Array(count)].map((_, id) => ({ ...personMock, idxid: "732e7919-508d-4cc2-b5a5-3e1b863c7d33" + id, @@ -345,6 +390,14 @@ storiesOf("List Layout", module) } = useListFetch({ fetchList: action("Fetch list"), }); + const { + selected, + onCheckboxChange, + selectAll, + deselectAll, + isAllDeselected, + isAllSelected, + } = useSelectableList({ options: persons.map(prop("idxid")) }); const [detailed, setDetailed] = useState(null); @@ -353,71 +406,62 @@ storiesOf("List Layout", module) } return ( - - {({ - selected, - handleCheckboxChange, - selectAll, - deselectAll, - isAllSelected, - isAllDeselected, - }) => ( - - } - actions={ - - Remove selected - - } + + } + actions={ + - {selected.length !== 0 - ? `${selected.length} persons selected` - : "No person selected"} - + Remove selected + } - content={ - - + {selected.length !== 0 && `${selected.length} items selected`} + + } + content={ + + ( - - )} + totalCount={optionsCount} /> - - person.idxid === detailed)} + } + columns={2} + renderItem={(person) => ( + - - } - /> - )} - + )} + /> + + person.idxid === detailed)} + /> + + } + /> ); } diff --git a/src/components/ListLayout/ListLayoutActions/ListLayoutActionsAdditional.jsx b/src/components/ListLayout/ListLayoutActions/ListLayoutActionsAdditional.jsx new file mode 100644 index 00000000..acc86da1 --- /dev/null +++ b/src/components/ListLayout/ListLayoutActions/ListLayoutActionsAdditional.jsx @@ -0,0 +1,5 @@ +import styled from "styled-components"; + +export const ListLayoutActionsAdditional = styled.span` + margin-left: auto; +`; diff --git a/src/components/ListLayout/ListLayoutActions/ListLayoutActionsText.jsx b/src/components/ListLayout/ListLayoutActions/ListLayoutActionsText.jsx new file mode 100644 index 00000000..784c1d87 --- /dev/null +++ b/src/components/ListLayout/ListLayoutActions/ListLayoutActionsText.jsx @@ -0,0 +1,10 @@ +import styled from "styled-components"; + +import { colors } from "../../../style"; + +export const ListLayoutActionsText = styled.span` + font-weight: 300; + font-size: 16px; + line-height: 26px; + color: ${colors.darkBlack}; +`; diff --git a/src/components/ListLayout/ListLayoutActions/StyledListLayoutActions.jsx b/src/components/ListLayout/ListLayoutActions/StyledListLayoutActions.jsx new file mode 100644 index 00000000..467a6117 --- /dev/null +++ b/src/components/ListLayout/ListLayoutActions/StyledListLayoutActions.jsx @@ -0,0 +1,16 @@ +import styled from "styled-components"; + +import { StyledFormCheckbox } from "../../form/components/FormCheckbox/index"; + +const StyledListLayoutActions = styled.div` + display: flex; + align-items: center; + margin-bottom: 18px; + height: 30px; + + ${StyledFormCheckbox}:not(:last-child) { + margin-right: 24px; + } +`; + +export { StyledListLayoutActions }; diff --git a/src/components/ListLayout/ListLayoutActions/index.jsx b/src/components/ListLayout/ListLayoutActions/index.jsx new file mode 100644 index 00000000..40fe0da7 --- /dev/null +++ b/src/components/ListLayout/ListLayoutActions/index.jsx @@ -0,0 +1,46 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { StyledListLayoutActions } from "./StyledListLayoutActions"; +import { ListLayoutActionsText } from "./ListLayoutActionsText"; +import { ListLayoutActionsAdditional } from "./ListLayoutActionsAdditional"; + +import { FormCheckbox } from "../../form/components/FormCheckbox/index"; + +export function ListLayoutActions({ + children, + additional, + isSelectionDisabled, + selectAll, + deselectAll, + isAllSelected, +}) { + return ( + + { + !isAllSelected ? selectAll() : deselectAll(); + }} + data-testid="list-layout-toggle-select-all" + /> + {/* ListLayoutActionsText Π½ΡƒΠΆΠ΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€Ρ‹Π³Π°Π»ΠΎ + ΠΏΡ€ΠΈ исчСзновСнии children + */} + {children} + {additional && ( + {additional} + )} + + ); +} + +ListLayoutActions.propTypes = { + isSelectionDisabled: PropTypes.bool.isRequried, + selectAll: PropTypes.func.isRequried, + deselectAll: PropTypes.func.isRequried, + isAllSelected: PropTypes.bool.isRequried, + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), + additional: PropTypes.element, +}; diff --git a/src/components/ListLayout/ListLayoutDetailed/ListLayoutDetailedInner.jsx b/src/components/ListLayout/ListLayoutDetailed/ListLayoutDetailedInner.jsx new file mode 100644 index 00000000..7e7ac204 --- /dev/null +++ b/src/components/ListLayout/ListLayoutDetailed/ListLayoutDetailedInner.jsx @@ -0,0 +1,11 @@ +import styled from "styled-components"; + +const ListLayoutDetailedInner = styled.div` + display: flex; + flex-direction: column; + position: relative; + box-sizing: border-box; + flex: 100%; +`; + +export { ListLayoutDetailedInner }; diff --git a/src/components/ListLayout/ListLayoutDetailed/StyledListLayoutDetailed.jsx b/src/components/ListLayout/ListLayoutDetailed/StyledListLayoutDetailed.jsx new file mode 100644 index 00000000..5ed2ccd0 --- /dev/null +++ b/src/components/ListLayout/ListLayoutDetailed/StyledListLayoutDetailed.jsx @@ -0,0 +1,17 @@ +import styled from "styled-components"; + +import StickyBox from "react-sticky-box"; + +const StyledListLayoutDetailed = styled(StickyBox)` + display: flex; + flex-direction: column; + border-radius: 4px; + box-shadow: rgba(162, 182, 189, 0.2) 0px 0px 80px 0px; + flex: 334px 0 0; + transition: transform 120ms ease-in; + padding: 20px; + box-sizing: border-box; + min-height: 214px; +`; + +export { StyledListLayoutDetailed }; diff --git a/src/components/ListLayout/ListLayoutDetailed/index.jsx b/src/components/ListLayout/ListLayoutDetailed/index.jsx index 9afc4cab..8c90b7b6 100644 --- a/src/components/ListLayout/ListLayoutDetailed/index.jsx +++ b/src/components/ListLayout/ListLayoutDetailed/index.jsx @@ -1,13 +1,44 @@ -import styled from "styled-components"; - -export const ListLayoutDetailed = styled.div` - position: relative; - box-sizing: border-box; - border-radius: 4px; - box-shadow: rgba(162, 182, 189, 0.2) 0px 0px 80px 0px; - flex: 334px 0 0; - padding: 20px; - display: flex; - flex-direction: column; - min-height: 220px; -`; +import React from "react"; +import PropTypes from "prop-types"; + +import { useContext } from "react"; + +import { StyledListLayoutDetailed } from "./StyledListLayoutDetailed"; +import { ListLayoutDetailedInner } from "./ListLayoutDetailedInner"; +import { ListLayoutContext } from "../index"; + +function ListLayoutDetailed({ + offsetTop, + children, + "data-testid": testId, + className, +}) { + const { appHeaderOffset } = useContext(ListLayoutContext); + + return ( + + + {children} + + + ); +} + +ListLayoutDetailed.propTypes = { + offsetTop: PropTypes.number.isRequired, + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), + "data-testid": PropTypes.string, + className: PropTypes.string, +}; + +ListLayoutDetailed.defaultProps = { + offsetTop: 120, +}; + +export { ListLayoutDetailed }; diff --git a/src/components/ListLayout/ListLayoutHeader.jsx b/src/components/ListLayout/ListLayoutHeader.jsx index dac8dc36..a2e8df1f 100644 --- a/src/components/ListLayout/ListLayoutHeader.jsx +++ b/src/components/ListLayout/ListLayoutHeader.jsx @@ -6,6 +6,6 @@ export const ListLayoutHeader = styled.header` align-items: center; &:not(:last-child) { - margin-bottom: 13px; + margin-bottom: 24px; } `; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActions.resources.js b/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActions.resources.js deleted file mode 100644 index ffdd2e54..00000000 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActions.resources.js +++ /dev/null @@ -1,10 +0,0 @@ -export const resources = { - ru: { - SelectAll: "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС", - DeselectAll: "Π‘Π½ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€", - }, - en: { - SelectAll: "Select all", - DeselectAll: "Deselect all", - }, -}; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsAdditional.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsAdditional.jsx deleted file mode 100644 index d37bd8f7..00000000 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsAdditional.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import styled from "styled-components"; - -import { StyledButton } from "../../../Button"; - -export const ListLayoutListActionsAdditional = styled.span` - margin-left: auto; - - ${StyledButton} { - height: 34px; - padding: 0 20px; - } -`; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsButtons.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsButtons.jsx deleted file mode 100644 index b9fa6914..00000000 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsButtons.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import styled from "styled-components"; - -import { StyledButton } from "../../../Button"; - -export const ListLayoutListActionsButtons = styled.div` - display: flex; - - ${StyledButton} { - height: 34px; - padding: 0 30px; - - &:not(:last-child) { - margin-right: 11px; - } - } -`; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsText.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsText.jsx deleted file mode 100644 index 73100933..00000000 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/ListLayoutListActionsText.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import styled from "styled-components"; - -export const ListLayoutListActionsText = styled.span` - width: 186px; -`; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/StyledListLayoutListActions.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListActions/StyledListLayoutListActions.jsx deleted file mode 100644 index 544a55f2..00000000 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/StyledListLayoutListActions.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -export const StyledListLayoutListActions = styled.div` - display: flex; - align-items: center; - margin-bottom: 20px; -`; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/index.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListActions/index.jsx deleted file mode 100644 index c6b398dd..00000000 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListActions/index.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { StyledListLayoutListActions } from "./StyledListLayoutListActions"; -import { ListLayoutListActionsText } from "./ListLayoutListActionsText"; -import { ListLayoutListActionsButtons } from "./ListLayoutListActionsButtons"; -import { ListLayoutListActionsAdditional } from "./ListLayoutListActionsAdditional"; - -import { useTranslation } from "react-i18next"; - -import { Button } from "../../../Button"; - -import { resources } from "./ListLayoutListActions.resources.js"; - -export function ListLayoutListActions({ - isSelectAvailable, - isDeselectAvailable, - onSelect, - onDeselect, - children, - additional, -}) { - const { t, i18n } = useTranslation(); - - i18n.addResourceBundle("en", "ListLayoutListActions", resources.en); - i18n.addResourceBundle("ru", "ListLayoutListActions", resources.ru); - - return ( - - {/* span Π½ΡƒΠΆΠ΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€Ρ‹Π³Π°Π»ΠΎ - ΠΏΡ€ΠΈ исчСзновСнии children - */} - {children} - - - - - {additional && ( - - {additional} - - )} - - ); -} - -ListLayoutListActions.propTypes = { - isSelectAvailable: PropTypes.bool.isRequired, - isDeselectAvailable: PropTypes.bool.isRequired, - onSelect: PropTypes.func.isRequired, - onDeselect: PropTypes.func.isRequired, - children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), - additional: PropTypes.element, -}; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemBadges.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemBadges.jsx index ad09200f..b62d80b1 100644 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemBadges.jsx +++ b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemBadges.jsx @@ -1,5 +1,6 @@ import styled from "styled-components"; export const ListLayoutListItemBadges = styled.span` + display: flex; margin-left: auto; `; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemText.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemTitle.jsx similarity index 50% rename from src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemText.jsx rename to src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemTitle.jsx index 84192c13..b13987c6 100644 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemText.jsx +++ b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/ListLayoutListItemTitle.jsx @@ -1,16 +1,20 @@ import styled from "styled-components"; -import { colors } from "../../../../themes/colors"; - import { NavLink } from "react-router-dom"; -export const ListLayoutListItemText = styled.p.attrs(({ to }) => ({ +import { colors } from "../../../../style"; + +const ListLayoutListItemTitle = styled.p.attrs(({ to }) => ({ as: to ? NavLink : "p", }))` + margin: 0; font-size: 16px; + line-height: 26px; font-weight: 600; - color: ${colors.black}; - margin: 0; + color: ${colors.darkBlack}; text-decoration: none; + display: block; width: 100%; `; + +export { ListLayoutListItemTitle }; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/StyledListLayoutListItem.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/StyledListLayoutListItem.jsx index abb04ce8..0aca9f4b 100644 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/StyledListLayoutListItem.jsx +++ b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/StyledListLayoutListItem.jsx @@ -1,10 +1,14 @@ import styled from "styled-components"; +import { colors } from "../../../../style"; + export const StyledListLayoutListItem = styled.li` - height: 50px; - padding: 10px 0; - border-bottom: 1px solid #dadada; display: flex; align-items: center; - box-sizing: border-box; + position: relative; + padding: 17px 0; + + &:not(:last-child) { + border-bottom: 1px solid ${colors.grayMedium}; + } `; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/index.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/index.jsx index 18c9f950..2f572d16 100644 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListItem/index.jsx +++ b/src/components/ListLayout/ListLayoutList/ListLayoutListItem/index.jsx @@ -3,21 +3,27 @@ import PropTypes from "prop-types"; import { StyledListLayoutListItem } from "./StyledListLayoutListItem"; import { ListLayoutListItemCheckbox } from "./ListLayoutListItemCheckbox"; -import { ListLayoutListItemText } from "./ListLayoutListItemText"; +import { ListLayoutListItemTitle } from "./ListLayoutListItemTitle"; import { ListLayoutListItemBadges } from "./ListLayoutListItemBadges"; function ListLayoutListItem({ selectable, item, onChange, + onClick, selected, children, badges, to, - ...restProps + "data-testid": testId, + "data-id": id, }) { return ( - + {selectable && ( )} - {children} + {children} {badges && {badges}} ); @@ -33,15 +39,15 @@ function ListLayoutListItem({ ListLayoutListItem.propTypes = { selectable: PropTypes.bool, - item: PropTypes.string, + item: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), onChange: PropTypes.func, + onClick: PropTypes.func, selected: PropTypes.bool, children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), badges: PropTypes.element, to: PropTypes.string, "data-testid": PropTypes.string, + "data-id": PropTypes.oneOfType([PropTypes.number, PropTypes.string]), }; -ListLayoutListItem.defaultProps = { badges: [] }; - export { ListLayoutListItem, StyledListLayoutListItem }; diff --git a/src/components/ListLayout/ListLayoutList/ListLayoutListWrapper.jsx b/src/components/ListLayout/ListLayoutList/ListLayoutListWrapper.jsx index 305148c2..94a932ec 100644 --- a/src/components/ListLayout/ListLayoutList/ListLayoutListWrapper.jsx +++ b/src/components/ListLayout/ListLayoutList/ListLayoutListWrapper.jsx @@ -6,6 +6,6 @@ export const ListLayoutListWrapper = styled.div` min-height: 220px; &:not(:only-child) { - margin-right: 30px; + margin-right: 28px; } `; diff --git a/src/components/ListLayout/ListLayoutList/StyledListLayoutList.jsx b/src/components/ListLayout/ListLayoutList/StyledListLayoutList.jsx index cc4f90b1..c8641c9a 100644 --- a/src/components/ListLayout/ListLayoutList/StyledListLayoutList.jsx +++ b/src/components/ListLayout/ListLayoutList/StyledListLayoutList.jsx @@ -1,5 +1,7 @@ import styled from "styled-components"; +import { colors } from "../../../style"; + export const StyledListLayoutList = styled.ul` padding-left: 0; margin: 0; @@ -18,6 +20,6 @@ export const StyledListLayoutList = styled.ul` } &:not(:first-child) { - border-top: 1px solid #dadada; + border-top: 1px solid ${colors.grayMedium}; } `; diff --git a/src/components/ListLayout/ListLayoutList/index.jsx b/src/components/ListLayout/ListLayoutList/index.jsx index d55d4929..5a6bac34 100644 --- a/src/components/ListLayout/ListLayoutList/index.jsx +++ b/src/components/ListLayout/ListLayoutList/index.jsx @@ -6,10 +6,8 @@ import { StyledListLayoutList } from "./StyledListLayoutList"; import { ListLayoutNotice } from "../ListLayoutNotice"; import { ListLayoutListItem } from "./ListLayoutListItem"; import { ListLayoutListPagination } from "./ListLayoutListPagination"; -import { ListLayoutListActions } from "./ListLayoutListActions"; import { ListLayoutListSpinner } from "./ListLayoutListSpinner"; - -import { Ban } from "../../../assets/icons"; +import { Ban } from "../../icons"; function ListLayoutList({ listRef, @@ -17,41 +15,40 @@ function ListLayoutList({ isLoading, renderItem, noItemsText, - totalCount, - actions, pagination, - setPagination, columns, className, - ...restProps + "data-testid": testId, + hasNext, }) { + const isListEmpty = hasNext === false && items.length === 0; + const hasPagePagination = Boolean(pagination); + return ( - - {!isLoading ? ( - totalCount === 0 ? ( - } - data-testid="empty-list-notice" - > - {noItemsText} - + + {!isLoading || !hasPagePagination ? ( + isListEmpty ? ( + isLoading ? ( + + ) : ( + } + data-testid="empty-list-notice" + > + {noItemsText} + + ) ) : ( - {actions && actions} - + {items.map(renderItem)} - {pagination && ( - - )} + + {pagination} ) ) : ( @@ -64,20 +61,19 @@ function ListLayoutList({ ListLayoutList.propTypes = { listRef: PropTypes.object, items: PropTypes.array.isRequired, - renderItem: PropTypes.func, + renderItem: PropTypes.func.isRequired, noItemsText: PropTypes.string, - totalCount: PropTypes.number, - actions: PropTypes.element, - pagination: PropTypes.object.isRequired, - setPagination: PropTypes.func.isRequired, + hasNext: PropTypes.bool.isRequired, + pagination: PropTypes.object, columns: PropTypes.oneOf([1, 2]), className: PropTypes.string, isLoading: PropTypes.bool, + "data-testid": PropTypes.string, }; ListLayoutList.defaultProps = { items: [], - renderItem: item => ( + renderItem: (item) => ( {item} ), noItemsText: "No items", @@ -85,6 +81,11 @@ ListLayoutList.defaultProps = { }; ListLayoutList.Item = ListLayoutListItem; -ListLayoutList.Actions = ListLayoutListActions; +ListLayoutList.Pagination = ListLayoutListPagination; -export { ListLayoutList, StyledListLayoutList, ListLayoutListItem }; +export { + ListLayoutList, + StyledListLayoutList, + ListLayoutListItem, + ListLayoutListPagination, +}; diff --git a/src/components/ListLayout/ListLayoutNotice/ListLayoutNoticeIcon.jsx b/src/components/ListLayout/ListLayoutNotice/ListLayoutNoticeIcon.jsx index 64417548..ce539b13 100644 --- a/src/components/ListLayout/ListLayoutNotice/ListLayoutNoticeIcon.jsx +++ b/src/components/ListLayout/ListLayoutNotice/ListLayoutNoticeIcon.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -import { colors } from "../../../themes/colors"; +import { colors } from "../../../style"; export const ListLayoutNoticeIcon = styled.div` margin-bottom: 13px; diff --git a/src/components/ListLayout/ListLayoutProvider.jsx b/src/components/ListLayout/ListLayoutProvider.jsx new file mode 100644 index 00000000..c8bb0075 --- /dev/null +++ b/src/components/ListLayout/ListLayoutProvider.jsx @@ -0,0 +1,53 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { useMemo, useEffect, useState } from "react"; +import { createContext } from "react"; + +import { identity } from "lodash-es"; + +const ListLayoutContext = createContext({ + isHeaderFull: false, + setIsHeaderFull: identity, + headerHeight: 80, + /** + * Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ элСмСнты Π½Π΅ Π·Π°Π΅Π·ΠΆΠ°Π»ΠΈ + * ΠΏΠΎΠ΄ Ρ…Π΅Π΄Π΅Ρ€ прилоТСния, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΏΡ€ΠΈΠ»Π΅ΠΏΠ»Π΅Π½ ΠΊ Π²Π΅Ρ€Ρ…Ρƒ + */ + appHeaderOffset: 0, + setAppHeaderOffset: identity, +}); + +function getHeaderHeight(headerEl) { + return headerEl ? headerEl.getBoundingClientRect().height : 0; +} + +function ListLayoutProvider({ children }) { + const [isHeaderFull, setIsHeaderFull] = useState(false); + const [appHeaderOffset, setAppHeaderOffset] = useState(0); + + const store = useMemo( + () => ({ + isHeaderFull, + setIsHeaderFull, + headerHeight: getHeaderHeight(document.querySelector("header")), + appHeaderOffset, + }), + [isHeaderFull, appHeaderOffset] + ); + useEffect(() => { + setAppHeaderOffset(isHeaderFull ? store.headerHeight : 0); + }, [isHeaderFull]); + + return ( + + {children} + + ); +} + +ListLayoutProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), +}; + +export { ListLayoutProvider, ListLayoutContext }; diff --git a/src/components/ListLayout/ListLayoutSearch.jsx b/src/components/ListLayout/ListLayoutSearch.jsx index 080ab389..82bf803b 100644 --- a/src/components/ListLayout/ListLayoutSearch.jsx +++ b/src/components/ListLayout/ListLayoutSearch.jsx @@ -1,5 +1,3 @@ import styled from "styled-components"; -export const ListLayoutSearch = styled.div` - margin-bottom: 30px; -`; +export const ListLayoutSearch = styled.div``; diff --git a/src/components/ListLayout/ListLayoutTitle.jsx b/src/components/ListLayout/ListLayoutTitle.jsx index f77d64a9..ad0e3b94 100644 --- a/src/components/ListLayout/ListLayoutTitle.jsx +++ b/src/components/ListLayout/ListLayoutTitle.jsx @@ -2,6 +2,4 @@ import styled from "styled-components"; import { Title } from "../Text"; -export const ListLayoutTitle = styled(Title)` - line-height: 1; -`; +export const ListLayoutTitle = styled(Title)``; diff --git a/src/components/ListLayout/ListLayoutTop.jsx b/src/components/ListLayout/ListLayoutTop.jsx new file mode 100644 index 00000000..4466aebc --- /dev/null +++ b/src/components/ListLayout/ListLayoutTop.jsx @@ -0,0 +1,14 @@ +import styled from "styled-components"; + +import { ListStickyHeader } from "../ListStickyHeader"; + +import { colors } from "../../style"; + +const ListLayoutTop = styled(ListStickyHeader)` + padding-bottom: 24px; + padding-top: 24px; + margin-top: -24px; + background-color: ${colors.whiteSimple}; +`; + +export { ListLayoutTop }; diff --git a/src/components/ListLayout/index.jsx b/src/components/ListLayout/index.jsx index 39a8d58c..47e86f2b 100644 --- a/src/components/ListLayout/index.jsx +++ b/src/components/ListLayout/index.jsx @@ -7,23 +7,33 @@ import { ListLayoutTitle } from "./ListLayoutTitle"; import { ListLayoutButtons } from "./ListLayoutButtons"; import { ListLayoutSearch } from "./ListLayoutSearch"; import { ListLayoutContent } from "./ListLayoutContent"; +import { ListLayoutTop } from "./ListLayoutTop"; -export function ListLayout({ title, buttons, search, actions, content }) { +import { ListLayoutContext, ListLayoutProvider } from "./ListLayoutProvider"; + +function ListLayout({ title, buttons, search, actions, content, className }) { const hasHeader = title || buttons; + const hasTop = hasHeader || search; return ( - - {hasHeader && ( - - {title && {title}} - {buttons && {buttons}} - - )} + + + {hasTop && ( + + {hasHeader && ( + + {title && {title}} + {buttons && {buttons}} + + )} + {search && {search}} + + )} - {search && {search}} - {actions && actions} - {content && {content}} - + {actions && actions} + {content && {content}} + + ); } @@ -33,8 +43,12 @@ ListLayout.propTypes = { search: PropTypes.element, actions: PropTypes.element, content: PropTypes.element, + className: PropTypes.string, }; export * from "./ListLayoutList"; export * from "./ListLayoutNotice"; export * from "./ListLayoutDetailed"; +export * from "./ListLayoutActions"; +export { ListLayout }; +export { ListLayoutContext, ListLayoutProvider }; diff --git a/src/components/ListStickyHeader/ListStickyHeaderFixedBackground.jsx b/src/components/ListStickyHeader/ListStickyHeaderFixedBackground.jsx new file mode 100644 index 00000000..dfc1aa38 --- /dev/null +++ b/src/components/ListStickyHeader/ListStickyHeaderFixedBackground.jsx @@ -0,0 +1,15 @@ +import styled from "styled-components"; + +import { colors } from "../../style"; + +const ListStickyHeaderFixedBackground = styled.div` + position: fixed; + z-index: 1; + width: 100%; + background-color: ${colors.whiteSimple}; + left: 0; + top: 0; + transition: transform 200ms ease-in; +`; + +export { ListStickyHeaderFixedBackground }; diff --git a/src/components/ListStickyHeader/ListStickyHeaderInner.jsx b/src/components/ListStickyHeader/ListStickyHeaderInner.jsx new file mode 100644 index 00000000..d75c3dd1 --- /dev/null +++ b/src/components/ListStickyHeader/ListStickyHeaderInner.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +const ListStickyHeaderInner = styled.div` + width: 940px; +`; + +export { ListStickyHeaderInner }; diff --git a/src/components/ListStickyHeader/StyledListStickyHeader.jsx b/src/components/ListStickyHeader/StyledListStickyHeader.jsx new file mode 100644 index 00000000..ffcf1f74 --- /dev/null +++ b/src/components/ListStickyHeader/StyledListStickyHeader.jsx @@ -0,0 +1,8 @@ +import styled from "styled-components"; +import StickyBox from "react-sticky-box"; + +const StyledListStickyHeader = styled(StickyBox)` + transition: transform 120ms ease-in; +`; + +export { StyledListStickyHeader }; diff --git a/src/components/ListStickyHeader/hooks/index.js b/src/components/ListStickyHeader/hooks/index.js new file mode 100644 index 00000000..6e7ce867 --- /dev/null +++ b/src/components/ListStickyHeader/hooks/index.js @@ -0,0 +1 @@ +export * from "./use-short-sticky-header"; diff --git a/src/components/ListStickyHeader/hooks/use-short-sticky-header.js b/src/components/ListStickyHeader/hooks/use-short-sticky-header.js new file mode 100644 index 00000000..08224cbe --- /dev/null +++ b/src/components/ListStickyHeader/hooks/use-short-sticky-header.js @@ -0,0 +1,31 @@ +import { useEffect, useContext } from "react"; +import { useScrollDirection } from "../../../hooks"; +import { ListLayoutContext } from "../../ListLayout"; + +function useShortStickyHeader({ headerElRef }) { + const { directionY, y } = useScrollDirection(); + const { isHeaderFull, setIsHeaderFull } = useContext(ListLayoutContext); + useEffect(() => { + setIsHeaderFull(directionY === "top" && y > 600); + }, [directionY, y]); + + const isSticky = headerElRef.current && y > headerElRef.current.naturalTop; + + useEffect(() => { + const appHeader = document.getElementById("sticky-header"); + if (!appHeader) { + return; + } + + const newTranslateY = isHeaderFull ? 0 : "-100%"; + appHeader.style.transform = `translateY(${newTranslateY})`; + + return () => { + appHeader.style.transform = null; + }; + }, [isHeaderFull]); + + return { isSticky }; +} + +export { useShortStickyHeader }; diff --git a/src/components/ListStickyHeader/index.jsx b/src/components/ListStickyHeader/index.jsx new file mode 100644 index 00000000..0e96b356 --- /dev/null +++ b/src/components/ListStickyHeader/index.jsx @@ -0,0 +1,65 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { useRef, useContext } from "react"; +import { useShortStickyHeader } from "./hooks"; +import { ListLayoutContext } from "../ListLayout"; + +import { StyledListStickyHeader } from "./StyledListStickyHeader"; +import { ListStickyHeaderInner } from "./ListStickyHeaderInner"; +import { ListStickyHeaderFixedBackground } from "./ListStickyHeaderFixedBackground"; + +function ListStickyHeader({ children, listHeaderHeightShort, className }) { + const headerElRef = useRef(null); + const headerInnerRef = useRef(null); + const { isHeaderFull, appHeaderOffset } = useContext(ListLayoutContext); + const { isSticky } = useShortStickyHeader({ + headerElRef, + }); + + return ( + <> + + + {typeof children === "function" + ? children({ isHeaderFull, isSticky }) + : children} + + + {/* Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ элСмСнты ΠΏΠΎ Π±ΠΎΠΊΠ°ΠΌ (Π²Π½Π΅ основного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°) */} + {isSticky && headerElRef.current && ( + + )} + + ); +} + +ListStickyHeader.propTypes = { + children: PropTypes.oneOfType([ + PropTypes.func, + PropTypes.node, + PropTypes.array, + ]).isRequired, + listHeaderHeightShort: PropTypes.oneOfType([ + PropTypes.number, + PropTypes.string, + ]), + className: PropTypes.string, +}; + +export { ListStickyHeader }; diff --git a/src/components/Login/LoginForm/LoginFormButton.jsx b/src/components/Login/LoginForm/LoginFormButton.jsx index 12a0d07f..4ed13091 100644 --- a/src/components/Login/LoginForm/LoginFormButton.jsx +++ b/src/components/Login/LoginForm/LoginFormButton.jsx @@ -1,7 +1,8 @@ import styled from "styled-components"; -import Button from "../../Button"; -import colors from "../../../themes/colors"; +import { Button } from "../../Button"; + +import { colors } from "../../../style"; const LoginFormButton = styled(Button)` width: 128px; diff --git a/src/components/Login/LoginForm/LoginFormInput.jsx b/src/components/Login/LoginForm/LoginFormInput.jsx index 7c4b7a4e..acad8f34 100644 --- a/src/components/Login/LoginForm/LoginFormInput.jsx +++ b/src/components/Login/LoginForm/LoginFormInput.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -import colors from "../../../themes/colors"; +import { colors } from "../../../style"; const LoginFormInput = styled.input` font-size: 16px; diff --git a/src/components/Login/LoginForm/index.jsx b/src/components/Login/LoginForm/index.jsx index 86f2ee87..b9b6ef91 100644 --- a/src/components/Login/LoginForm/index.jsx +++ b/src/components/Login/LoginForm/index.jsx @@ -100,7 +100,7 @@ function LoginFormComponent({ ( + render={(props) => ( ( + render={(props) => ( { - const withButtons = boolean("With buttons", true); - const title = text("Title", "ID: 42"); - const titleColor = select( - "Title color", - { - Red: colors.brownSimple, - Blue: colors.navyBlue, - Yellow: colors.orangeSimple, - }, - colors.brownSimple - ); - const isLoading = boolean("Is loading", false); +import { Button } from "../Button"; +import { ArrowLeft, Check } from "../icons"; +const StyledPageCard = styled(PageCard)` + height: 400px; +`; + +storiesOf("Page card", module).add("default", () => { return ( - + + + + } /> ); }); diff --git a/src/components/PageCard/PageCardButton.jsx b/src/components/PageCard/PageCardButton.jsx deleted file mode 100644 index 503e0067..00000000 --- a/src/components/PageCard/PageCardButton.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import styled from "styled-components"; - -import Button from "../../components/Button"; - -const PageCardButton = styled(Button)` - width: 40px; - height: 40px; - border-radius: 5px; - opacity: 0.9; - box-shadow: ${({ dark }) => - dark - ? "0 2px 5px 0 rgba(0, 0, 0, 0.26)" - : "0 2px 5px 0 rgba(0, 0, 0, 0.13)"}; - - &:not(:last-of-type) { - margin-bottom: 5px; - } - - &:hover { - opacity: 1; - } -`; - -export default PageCardButton; diff --git a/src/components/PageCard/PageCardButtons.jsx b/src/components/PageCard/PageCardButtons.jsx index a27dcacd..eb856df9 100644 --- a/src/components/PageCard/PageCardButtons.jsx +++ b/src/components/PageCard/PageCardButtons.jsx @@ -1,12 +1,20 @@ import styled from "styled-components"; +import { StyledButton } from "../Button"; + const PageCardButtons = styled.div` position: absolute; top: -4px; left: -10px; - z-index: 1000; + z-index: 1; display: flex; flex-direction: column; + + ${StyledButton} { + &:not(:last-of-type) { + margin-bottom: 8px; + } + } `; -export default PageCardButtons; +export { PageCardButtons }; diff --git a/src/components/PageCard/PageCardTitle.jsx b/src/components/PageCard/PageCardTitle.jsx deleted file mode 100644 index 8acb6eb4..00000000 --- a/src/components/PageCard/PageCardTitle.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import styled from "styled-components"; - -const PageCardTitle = styled.h1` - position: absolute; - top: 0px; - right: 0px; - color: #fff; - overflow: hidden; - background-color: ${({ titleColor }) => titleColor}; - width: 120px; - box-sizing: border-box; - line-height: 45px; - border-radius: 0 5px 0 10px; - text-align: center; - font-size: 14px; - font-weight: 700; - margin: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - padding-left: 5px; - padding-right: 5px; -`; - -export default PageCardTitle; diff --git a/src/components/PageCard/StyledPageCard.jsx b/src/components/PageCard/StyledPageCard.jsx index c097f70b..e2032830 100644 --- a/src/components/PageCard/StyledPageCard.jsx +++ b/src/components/PageCard/StyledPageCard.jsx @@ -1,11 +1,12 @@ import styled from "styled-components"; -const PageCard = styled.section` +const StyledPageCard = styled.section` position: relative; box-sizing: border-box; - padding: 35px 75px; - border-radius: 5px; - box-shadow: 0px 0px 80px 0px rgba(162, 182, 189, 0.2); + padding: 32px 64px; + box-shadow: 0px 0px 80px rgba(162, 182, 189, 0.2); + /* Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅Π½ΡŒ Π±Ρ‹Π»Π° Π²Ρ‹ΡˆΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… отступов */ + z-index: 2; `; -export default PageCard; +export { StyledPageCard }; diff --git a/src/components/PageCard/index.jsx b/src/components/PageCard/index.jsx index 24db5fb2..a50f9a82 100644 --- a/src/components/PageCard/index.jsx +++ b/src/components/PageCard/index.jsx @@ -1,70 +1,23 @@ import React from "react"; import PropTypes from "prop-types"; -import StyledPageCard from "./StyledPageCard"; -import PageCardButtons from "./PageCardButtons"; -import PageCardButton from "./PageCardButton"; -import PageCardTitle from "./PageCardTitle"; +import { StyledPageCard } from "./StyledPageCard"; +import { PageCardButtons } from "./PageCardButtons"; -import { Sync, ArrowLeft } from "../../assets/icons"; - -class PageCard extends React.Component { - static propTypes = { - children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), - withButtons: PropTypes.bool, - onUpdate: PropTypes.func, - title: PropTypes.string, - titleColor: PropTypes.string, - isLoading: PropTypes.bool, - onBackButtonClick: PropTypes.func, - fetchError: PropTypes.object, - className: PropTypes.string, - }; - - componentDidUpdate(prevProps) { - if (!prevProps.fetchError && this.props.fetchError) { - this.props.onBackButtonClick(); - } - } - - render() { - const { - children, - withButtons, - onUpdate, - title, - titleColor, - isLoading, - onBackButtonClick, - className, - } = this.props; - - return ( - - {title && ( - - {title} - - )} - {children} - {withButtons && ( - - - - - - - - - )} - - ); - } +function PageCard({ children, className, buttons, "data-testid": testId }) { + return ( + + {buttons && {buttons}} + {children} + + ); } +PageCard.propTypes = { + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), + buttons: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), + className: PropTypes.string, + "data-testid": PropTypes.string, +}; + export { PageCard, StyledPageCard }; diff --git a/src/components/PageFiltersList/Content.jsx b/src/components/PageFiltersList/Content.jsx deleted file mode 100644 index 170e4d2b..00000000 --- a/src/components/PageFiltersList/Content.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import styled from "styled-components"; - -const Content = styled.section` - position: relative; - flex: 0 0 50%; -`; - -export default Content; diff --git a/src/components/PageFiltersList/EmptyListNotice.jsx b/src/components/PageFiltersList/EmptyListNotice.jsx deleted file mode 100644 index 426ded75..00000000 --- a/src/components/PageFiltersList/EmptyListNotice.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import StyledSquareDark from "./StyledSquareDark"; - -import { Plus } from "../../assets/icons"; - -import PageFiltersListNotice from "./PageFiltersListNotice"; - -export default function EmptyListNotice({ title, handleClick }) { - return ( - - {title} are not set, press - - - - to create the first one - - ); -} - -EmptyListNotice.propTypes = { - title: PropTypes.string, - handleClick: PropTypes.func, -}; diff --git a/src/components/PageFiltersList/List.jsx b/src/components/PageFiltersList/List.jsx deleted file mode 100644 index e1cad0a8..00000000 --- a/src/components/PageFiltersList/List.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -const List = styled.div` - flex: 1; - height: 330px; - margin-right: 43px; - padding-top: 30px; - position: relative; -`; - -export default List; diff --git a/src/components/PageFiltersList/ListDirectoryContext.js b/src/components/PageFiltersList/ListDirectoryContext.js deleted file mode 100644 index ea93b35d..00000000 --- a/src/components/PageFiltersList/ListDirectoryContext.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState, useEffect } from "react"; -import PropTypes from "prop-types"; - -import { noop } from "lodash-es"; - -export const ListDirectoryContext = React.createContext({ - isUserVisitList: false, - setIsUserVisitList: noop, -}); - -export const withListDirectoryContextProvider = Component => { - function WithListDirectoryContextProvider(props) { - const [isUserVisitList, setIsUserVisitList] = useState(false); - - return ( - - - - ); - } - - WithListDirectoryContextProvider.propTypes = { - forwardedRef: PropTypes.object, - }; - - return React.forwardRef((props, ref) => { - return ; - }); -}; - -export const withListDirectoryContext = Component => { - function WithListDirectoryContext(props) { - return ( - - {context => ( - - )} - - ); - } - - WithListDirectoryContext.propTypes = { - forwardedRef: PropTypes.object, - }; - - return React.forwardRef((props, ref) => { - return ; - }); -}; - -export const withListDirectoryList = Component => { - function WithListDirectoryList(props) { - useEffect(() => { - if (!props.isListFetching && !props.isUserVisitList) { - props.setIsUserVisitList(true); - } - }, [props.isListFetching]); - - return ; - } - - WithListDirectoryList.propTypes = { - isUserVisitList: PropTypes.bool.isRequired, - isListFetching: PropTypes.bool.isRequired, - setIsUserVisitList: PropTypes.func.isRequired, - forwardedRef: PropTypes.object, - }; - - const WithListDirectoryListWithForwardedRef = React.forwardRef( - (props, ref) => { - return ; - } - ); - - return withListDirectoryContext(WithListDirectoryListWithForwardedRef); -}; diff --git a/src/components/PageFiltersList/PageFiltersListActions.jsx b/src/components/PageFiltersList/PageFiltersListActions.jsx deleted file mode 100644 index 45398528..00000000 --- a/src/components/PageFiltersList/PageFiltersListActions.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -const PageFiltersListActions = styled.div` - padding-top: 20px; -`; - -export default PageFiltersListActions; diff --git a/src/components/PageFiltersList/PageFiltersListButtons/PageFiltersListButtonsButton.jsx b/src/components/PageFiltersList/PageFiltersListButtons/PageFiltersListButtonsButton.jsx deleted file mode 100644 index 9d8cb185..00000000 --- a/src/components/PageFiltersList/PageFiltersListButtons/PageFiltersListButtonsButton.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import styled from "styled-components"; - -import Button from "../../Button"; - -export const PageFiltersListButtonsButton = styled(Button).attrs(() => ({ - buttonTheme: "ghost", -}))` - width: 30px; - height: 30px; - display: flex; - align-items: center; - justify-content: center; - background-color: transparent; - color: #000; - padding: 0; - - &:not(:last-child) { - margin-right: 26px; - } -`; diff --git a/src/components/PageFiltersList/PageFiltersListButtons/index.jsx b/src/components/PageFiltersList/PageFiltersListButtons/index.jsx deleted file mode 100644 index 26c613b3..00000000 --- a/src/components/PageFiltersList/PageFiltersListButtons/index.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -import { PageFiltersListButtonsButton } from "./PageFiltersListButtonsButton"; - -const PageFiltersListButtons = styled.div` - display: flex; -`; - -PageFiltersListButtons.Button = PageFiltersListButtonsButton; - -export default PageFiltersListButtons; diff --git a/src/components/PageFiltersList/PageFiltersListContentTop.jsx b/src/components/PageFiltersList/PageFiltersListContentTop.jsx deleted file mode 100644 index 9f8fc3f8..00000000 --- a/src/components/PageFiltersList/PageFiltersListContentTop.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import styled from "styled-components"; - -const PageFiltersListContentTop = styled.div` - display: flex; - flex: 100%; - justify-content: space-between; - align-items: center; - margin-bottom: 18px; - padding-right: 10px; -`; - -export default PageFiltersListContentTop; diff --git a/src/components/PageFiltersList/PageFiltersListContext.js b/src/components/PageFiltersList/PageFiltersListContext.js deleted file mode 100644 index 5806ca0c..00000000 --- a/src/components/PageFiltersList/PageFiltersListContext.js +++ /dev/null @@ -1,21 +0,0 @@ -import React, { createContext } from "react"; - -const initialContext = { - searchQuery: "", - filters: {}, - pagination: {}, -}; - -const PageFiltersListContext = createContext(initialContext); - -export const withPageFiltersListContext = WrappedComponent => { - const WithPageFiltersListContext = props => ( - - {context => } - - ); - - return WithPageFiltersListContext; -}; - -export default PageFiltersListContext; diff --git a/src/components/PageFiltersList/PageFiltersListDynamicList/PageFiltersListPagination/StyledPageFiltersListPagination.jsx b/src/components/PageFiltersList/PageFiltersListDynamicList/PageFiltersListPagination/StyledPageFiltersListPagination.jsx deleted file mode 100644 index 29f46aff..00000000 --- a/src/components/PageFiltersList/PageFiltersListDynamicList/PageFiltersListPagination/StyledPageFiltersListPagination.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import styled from "styled-components"; - -const StyledPageFiltersListPagination = styled.div` - position: absolute; - top: 100%; - width: 100%; - height: 60px; - padding-top: 15px; - box-sizing: border-box; -`; - -export default StyledPageFiltersListPagination; diff --git a/src/components/PageFiltersList/PageFiltersListDynamicList/PageFiltersListPagination/index.jsx b/src/components/PageFiltersList/PageFiltersListDynamicList/PageFiltersListPagination/index.jsx deleted file mode 100644 index 9f8a8e88..00000000 --- a/src/components/PageFiltersList/PageFiltersListDynamicList/PageFiltersListPagination/index.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { withPageFiltersListContext } from "../../PageFiltersListContext"; -import { Pagination } from "../../../Pagination"; - -import StyledPageFiltersListPagination from "./StyledPageFiltersListPagination"; - -export function PageFiltersListPagination({ - pagination, - setPagination, - totalCount, -}) { - const { limit, offset } = pagination; - - const handleChange = ({ offset }) => { - setPagination({ offset }); - }; - - return ( - - - - ); -} - -PageFiltersListPagination.propTypes = { - pagination: PropTypes.object.isRequired, - setPagination: PropTypes.func.isRequired, - totalCount: PropTypes.number.isRequired, -}; - -export default withPageFiltersListContext(PageFiltersListPagination); diff --git a/src/components/PageFiltersList/PageFiltersListDynamicList/StyledPageFiltersListDynamicList.jsx b/src/components/PageFiltersList/PageFiltersListDynamicList/StyledPageFiltersListDynamicList.jsx deleted file mode 100644 index b68b2bf6..00000000 --- a/src/components/PageFiltersList/PageFiltersListDynamicList/StyledPageFiltersListDynamicList.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import styled from "styled-components"; - -const StyledPageFiltersListDynamicList = styled.div` - max-height: 100%; - overflow-y: auto; -`; - -export default StyledPageFiltersListDynamicList; diff --git a/src/components/PageFiltersList/PageFiltersListDynamicList/index.jsx b/src/components/PageFiltersList/PageFiltersListDynamicList/index.jsx deleted file mode 100644 index 773028d5..00000000 --- a/src/components/PageFiltersList/PageFiltersListDynamicList/index.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { DynamicList } from "../../DynamicList"; - -import PageFiltersListPagination from "./PageFiltersListPagination"; -import StyledPageFiltersListDynamicList from "./StyledPageFiltersListDynamicList"; - -import { withPageFiltersListContext } from "../PageFiltersListContext"; - -export function PageFiltersListDynamicList({ - isFetching, - totalCount, - listRef, - children, - className, -}) { - return ( - - {children} - - - ); -} - -PageFiltersListDynamicList.propTypes = { - children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), - isFetching: PropTypes.bool.isRequired, - totalCount: PropTypes.number.isRequired, - listRef: PropTypes.object, - className: PropTypes.string, -}; - -export default withPageFiltersListContext(PageFiltersListDynamicList); diff --git a/src/components/PageFiltersList/PageFiltersListInner.jsx b/src/components/PageFiltersList/PageFiltersListInner.jsx deleted file mode 100644 index abe55f91..00000000 --- a/src/components/PageFiltersList/PageFiltersListInner.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import styled from "styled-components"; - -const PageFiltersListInner = styled.div` - display: flex; - flex: 100%; - margin-top: -60px; -`; - -export default PageFiltersListInner; diff --git a/src/components/PageFiltersList/PageFiltersListNotice.jsx b/src/components/PageFiltersList/PageFiltersListNotice.jsx deleted file mode 100644 index 7c4af9be..00000000 --- a/src/components/PageFiltersList/PageFiltersListNotice.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import styled from "styled-components"; - -import { Notice } from "../Notice"; - -const PageFiltersListNotice = styled(Notice)` - position: relative; - top: -34px; -`; - -export default PageFiltersListNotice; diff --git a/src/components/PageFiltersList/PageFiltersListSearch/PageFiltersListSearch.resources.js b/src/components/PageFiltersList/PageFiltersListSearch/PageFiltersListSearch.resources.js deleted file mode 100644 index bfa2183c..00000000 --- a/src/components/PageFiltersList/PageFiltersListSearch/PageFiltersListSearch.resources.js +++ /dev/null @@ -1,8 +0,0 @@ -export const resources = { - ru: { - placeholder: "НачнитС Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅...", - }, - en: { - placeholder: "Start enter name...", - }, -}; diff --git a/src/components/PageFiltersList/PageFiltersListSearch/PageFiltersListSearchInput.jsx b/src/components/PageFiltersList/PageFiltersListSearch/PageFiltersListSearchInput.jsx deleted file mode 100644 index 00877dbd..00000000 --- a/src/components/PageFiltersList/PageFiltersListSearch/PageFiltersListSearchInput.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -import { Search } from "../../Search"; - -const PageFiltersListSearchInput = styled(Search)``; - -export default PageFiltersListSearchInput; diff --git a/src/components/PageFiltersList/PageFiltersListSearch/index.jsx b/src/components/PageFiltersList/PageFiltersListSearch/index.jsx deleted file mode 100644 index ac1ea176..00000000 --- a/src/components/PageFiltersList/PageFiltersListSearch/index.jsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { useEffect, useRef } from "react"; -import { useTranslation } from "../../../hooks"; -import { withPageFiltersListContext } from "../PageFiltersListContext"; - -import PageFiltersListSearchInput from "./PageFiltersListSearchInput"; - -import { resources } from "./PageFiltersListSearch.resources.js"; -import { isUndefined } from "lodash-es"; - -function PageFiltersListSearch({ - setSearchQuery, - "data-testid": testId, - searchQuery, - placeholder, - className, - iconSize, -}) { - const inputRef = useRef(); - const { t, i18n } = useTranslation("PageFiltersListSearch"); - - useEffect(() => { - if (inputRef.current) { - inputRef.current.focus(); - } - }, []); - - function handleChange({ target: { value } }) { - setSearchQuery(value); - } - - i18n.addResourceBundle("en", "PageFiltersListSearch", resources.en); - i18n.addResourceBundle("ru", "PageFiltersListSearch", resources.ru); - - const textPlaceholder = isUndefined(placeholder) - ? t("placeholder") - : placeholder; - - return ( - - ); -} - -PageFiltersListSearch.propTypes = { - className: PropTypes.string, - setSearchQuery: PropTypes.func.isRequired, - searchQuery: PropTypes.string.isRequired, - iconSize: PropTypes.string, - placeholder: PropTypes.string, - "data-testid": PropTypes.string, -}; - -export default withPageFiltersListContext(PageFiltersListSearch); diff --git a/src/components/PageFiltersList/PageFiltersListTitle.jsx b/src/components/PageFiltersList/PageFiltersListTitle.jsx deleted file mode 100644 index 62355a51..00000000 --- a/src/components/PageFiltersList/PageFiltersListTitle.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -const PageFiltersListTitle = styled.h1` - font-size: 44px; - line-height: normal; - font-weight: 300; - color: #000000; - margin: 0; -`; - -export default PageFiltersListTitle; diff --git a/src/components/PageFiltersList/StyledPageFiltersList.jsx b/src/components/PageFiltersList/StyledPageFiltersList.jsx deleted file mode 100644 index 44210206..00000000 --- a/src/components/PageFiltersList/StyledPageFiltersList.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -const StyledPageFiltersList = styled.div` - flex: 100%; - width: 100%; - display: flex; - align-items: center; - justify-content: center; -`; - -export default StyledPageFiltersList; diff --git a/src/components/PageFiltersList/StyledSquareDark.jsx b/src/components/PageFiltersList/StyledSquareDark.jsx deleted file mode 100644 index 48d5f1bd..00000000 --- a/src/components/PageFiltersList/StyledSquareDark.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import styled from "styled-components"; - -const StyledSquareDark = styled.div` - display: inline-block; - background-color: #f1f1f1; - border-radius: 5px; - width: 40px; - height: 40px; - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.13); - line-height: 40px; - text-align: center; - font-size: 16px; - color: #3b4b5a; - position: relative; - cursor: pointer; - opacity: 0.9; - - color: #fff; - background-color: #3b4b5a; - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); - - position: relative; - top: -2px; - margin: 0 8px; -`; - -export default StyledSquareDark; diff --git a/src/components/PageFiltersList/index.jsx b/src/components/PageFiltersList/index.jsx deleted file mode 100644 index 4c611dd5..00000000 --- a/src/components/PageFiltersList/index.jsx +++ /dev/null @@ -1,197 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import PageFiltersListTitle from "./PageFiltersListTitle"; -import StyledPageFiltersList from "./StyledPageFiltersList"; -import PageFiltersListInner from "./PageFiltersListInner"; - -import PageFiltersListContentTop from "./PageFiltersListContentTop"; -import PageFiltersListActions from "./PageFiltersListActions"; -import PageFiltersListSearch from "./PageFiltersListSearch"; - -import PageFiltersListButtons from "./PageFiltersListButtons"; -import EmptyListNotice from "./EmptyListNotice"; - -import List from "./List"; -import Content from "./Content"; - -import PageFiltersListDynamicList from "./PageFiltersListDynamicList"; - -import PageFiltersListContext from "./PageFiltersListContext"; - -import { isEqual, debounce, noop } from "lodash-es"; - -import { withListDirectoryList } from "./ListDirectoryContext"; - -class PageFiltersListComponent extends React.Component { - static propTypes = { - list: PropTypes.func, - listCount: PropTypes.number, - title: PropTypes.string, - onCreate: PropTypes.func, - buttons: PropTypes.func, - fetchList: PropTypes.func.isRequired, - isListFetching: PropTypes.bool.isRequired, - actions: PropTypes.node, - searchQuery: PropTypes.string, - placeholder: PropTypes.string, - onSearch: PropTypes.func, - setSearchQuery: PropTypes.func.isRequired, - }; - - static defaultProps = { - onSearch: noop, - }; - - listRef = React.createRef(); - - setSearchQuery = searchQuery => { - this.setState({ searchQuery, isSearching: true }, () => { - this.props.onSearch(this.state.searchQuery); - }); - }; - - setFilters = filters => { - this.setState({ filters }); - }; - - setPagination = newPagination => { - this.setState(({ pagination }) => ({ - pagination: { ...pagination, ...newPagination }, - })); - }; - - resetPagination = hasToRefetch => { - if (this.state.pagination.offset === 0 && hasToRefetch) { - this.props.fetchList(this.state.fetchParams); - } - - this.setState(({ pagination }) => ({ - pagination: { - ...pagination, - offset: 0, - }, - })); - }; - - fetchList = (reset = false) => { - const { searchQuery, pagination } = this.state; - - const newFetchParams = { - q: searchQuery, - limit: pagination.limit, - offset: pagination.offset, - meta: { - clearList: true, - }, - }; - - if (reset || !isEqual(newFetchParams, this.state.fetchParams)) { - this.setState({ fetchParams: newFetchParams }, () => { - this.props.fetchList(this.state.fetchParams); - }); - } - }; - - searchItems = debounce(this.fetchList, 500); - - componentDidMount() { - this.fetchList(); - } - - handleClick = e => { - this.props.onCreate(e); - }; - - componentDidUpdate(prevProps, prevState) { - if (prevState.searchQuery !== this.state.searchQuery) { - this.searchItems(); - - setTimeout(() => this.resetPagination(false), 500); - } - - if (prevState.isSearching && !this.state.isSearching) { - this.props.setSearchQuery(this.state.searchQuery); - } - - if (prevProps.isListFetching && !this.props.isListFetching) { - if (this.listRef.current) { - this.listRef.current.scrollTop = 0; - } - - this.setState({ isSearching: false }); - } - - if ( - prevState.searchQuery === this.state.searchQuery && - prevState.pagination.offset !== this.state.pagination.offset - ) { - this.fetchList(); - } - } - - state = { - searchQuery: this.props.searchQuery, - isSearching: false, - filters: {}, - pagination: { - limit: 10, - offset: 0, - }, - fetchParams: {}, - setSearchQuery: this.setSearchQuery, - setFilters: this.setFilters, - setPagination: this.setPagination, - resetPagination: this.resetPagination, - fetchList: this.fetchList, - }; - - render() { - const { - list, - buttons, - title, - listCount, - isListFetching, - actions, - placeholder, - } = this.props; - const { searchQuery, isSearching } = this.state; - - const hasNoItems = listCount === 0 && !isSearching && searchQuery === ""; - - return ( - - {!hasNoItems && ( - - - {list({ listRef: this.listRef })} - - - {title} - - {buttons({ fetchList: this.fetchList })} - - - - {actions && ( - {actions} - )} - - - - )} - {hasNoItems && !isListFetching && ( - - )} - - ); - } -} - -const PageFiltersList = withListDirectoryList(PageFiltersListComponent); - -export { PageFiltersList, PageFiltersListDynamicList, PageFiltersListButtons }; diff --git a/src/components/PageLoader/index.jsx b/src/components/PageLoader/index.jsx index 5974d856..ed99eb53 100644 --- a/src/components/PageLoader/index.jsx +++ b/src/components/PageLoader/index.jsx @@ -53,8 +53,8 @@ export class PageLoaderComponent extends Component { }; // ДобавляСт страницу Π² Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ - setFirstLoad = name => { - this.setState(state => ({ + setFirstLoad = (name) => { + this.setState((state) => ({ ...state, loadedPages: { ...state.loadedPages, diff --git a/src/components/Pagination/Pagination.stories.js b/src/components/Pagination/Pagination.stories.js index c6a61cfb..9318adbb 100644 --- a/src/components/Pagination/Pagination.stories.js +++ b/src/components/Pagination/Pagination.stories.js @@ -10,7 +10,7 @@ const StyledWrapper = styled.div` width: 500px; `; -storiesOf("Structures| Pagination", module).add("default", () => { +storiesOf("Navigation|Pagination", module).add("default", () => { const totalCount = number("total count", 1000); const limit = number("limit", 20); diff --git a/src/components/Pagination/PaginationButton.jsx b/src/components/Pagination/PaginationButton.jsx index fa5c2b04..f4512e6e 100644 --- a/src/components/Pagination/PaginationButton.jsx +++ b/src/components/Pagination/PaginationButton.jsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { Button } from "../Button"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; function getActiveStyles() { return css` @@ -11,9 +11,7 @@ function getActiveStyles() { `; } -const PaginationButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` +const PaginationButton = styled(Button)` &:hover { ${getActiveStyles} } diff --git a/src/components/Pagination/PaginationControlButton.jsx b/src/components/Pagination/PaginationControlButton.jsx index d85e728d..7d264289 100644 --- a/src/components/Pagination/PaginationControlButton.jsx +++ b/src/components/Pagination/PaginationControlButton.jsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { PaginationButton } from "./PaginationButton"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; const PaginationControlButton = styled(PaginationButton).attrs(() => ({ fit: "square", diff --git a/src/components/Pagination/PaginationPageButton.jsx b/src/components/Pagination/PaginationPageButton.jsx index b9eb7dc5..cb12d582 100644 --- a/src/components/Pagination/PaginationPageButton.jsx +++ b/src/components/Pagination/PaginationPageButton.jsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { PaginationButton, getActiveStyles } from "./PaginationButton"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; const PaginationPageButton = styled(PaginationButton)` border-radius: 2px; diff --git a/src/components/Pagination/index.jsx b/src/components/Pagination/index.jsx index cc80b831..b9e17947 100644 --- a/src/components/Pagination/index.jsx +++ b/src/components/Pagination/index.jsx @@ -9,11 +9,12 @@ import { PaginationPages } from "./PaginationPages"; import { PaginationPageButton } from "./PaginationPageButton"; import { PaginationControlButton } from "./PaginationControlButton"; import { PaginationDots } from "./PaginationDots"; -import { BoxRightArrow, BoxLeftArrow } from "../../assets/icons"; +import { BoxRightArrow, BoxLeftArrow } from "../icons"; const DOTS = "..."; const END_LIMIT_PADDINGNUM = 3; +// Deprecated function Pagination({ visibleRange, nearStartBorderNum, diff --git a/src/components/PersonCardDetailed/PersonCardDetailed.resources.js b/src/components/PersonCardDetailed/PersonCardDetailed.resources.js new file mode 100644 index 00000000..8e50b307 --- /dev/null +++ b/src/components/PersonCardDetailed/PersonCardDetailed.resources.js @@ -0,0 +1,10 @@ +export const resources = { + en: { + "Person not found": "Person not found", + "Select person to view details": "Select person to view details", + }, + ru: { + "Person not found": "ΠŸΠ΅Ρ€ΡΠΎΠ½Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°", + "Select person to view details": "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ пСрсону Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ", + }, +}; diff --git a/src/components/PersonCardDetailed/PersonCardDetailedActions.jsx b/src/components/PersonCardDetailed/PersonCardDetailedActions.jsx index bb597ad0..91894381 100644 --- a/src/components/PersonCardDetailed/PersonCardDetailedActions.jsx +++ b/src/components/PersonCardDetailed/PersonCardDetailedActions.jsx @@ -8,7 +8,7 @@ const PersonCardDetailedActions = styled.div` text-align: center; &:not(:last-child) { - margin-bottom: 11px; + margin-bottom: 12px; } } `; diff --git a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemIdValue.jsx b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemIdValue.jsx index 3093420c..9d4cb362 100644 --- a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemIdValue.jsx +++ b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemIdValue.jsx @@ -2,7 +2,7 @@ import styled from "styled-components"; import { PersonCardDetailedDataItemValue } from "./PersonCardDetailedDataItemValue"; -import { colors } from "../../../../themes/colors"; +import { colors } from "../../../../style"; const PersonCardDetailedDataItemIdValue = styled( PersonCardDetailedDataItemValue diff --git a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemLabel.jsx b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemLabel.jsx index 6bd9357c..6c14ef59 100644 --- a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemLabel.jsx +++ b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemLabel.jsx @@ -1,14 +1,16 @@ import styled from "styled-components"; -import { colors } from "../../../../themes/colors"; +import { colors } from "../../../../style"; const PersonCardDetailedDataItemLabel = styled.span` display: inline-block; - width: 94px; + width: 113px; min-width: 94px; - margin-right: 40px; - font-size: 13px; - color: ${colors.brownGray}; + margin-right: 21px; + font-weight: 300; + font-size: 14px; + line-height: 18px; + color: ${colors.darkBlack}; `; export { PersonCardDetailedDataItemLabel }; diff --git a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemPhoto/index.jsx b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemPhoto/index.jsx index 4c160763..80148ba5 100644 --- a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemPhoto/index.jsx +++ b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemPhoto/index.jsx @@ -20,5 +20,5 @@ export function PersonCardDetailedDataItemPhoto({ src, facesize }) { PersonCardDetailedDataItemPhoto.propTypes = { src: PropTypes.string, - facesize: PropTypes.number, + facesize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }; diff --git a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemValue.jsx b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemValue.jsx index 8e07c6e3..829e942b 100644 --- a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemValue.jsx +++ b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/PersonCardDetailedDataItemValue.jsx @@ -1,11 +1,13 @@ import styled from "styled-components"; import { ValueSpan } from "../../../ValueSpan"; +import { colors } from "../../../../style"; const PersonCardDetailedDataItemValue = styled(ValueSpan)` + font-weight: bold; font-size: 14px; - font-weight: 600; - color: #141518; + line-height: 18px; + color: ${colors.darkBlack}; `; export { PersonCardDetailedDataItemValue }; diff --git a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/index.jsx b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/index.jsx index 6a8cf751..cfa5b3c0 100644 --- a/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/index.jsx +++ b/src/components/PersonCardDetailed/PersonCardDetailedData/PersonCardDetailedDataItem/index.jsx @@ -6,7 +6,7 @@ const PersonCardDetailedDataItem = styled.p` display: flex; &:not(:last-child) { - margin-bottom: 10px; + margin-bottom: 8px; } `; diff --git a/src/components/PersonCardDetailed/PersonCardDetailedData/index.jsx b/src/components/PersonCardDetailed/PersonCardDetailedData/index.jsx index 8c0278dc..b281ed10 100644 --- a/src/components/PersonCardDetailed/PersonCardDetailedData/index.jsx +++ b/src/components/PersonCardDetailed/PersonCardDetailedData/index.jsx @@ -2,7 +2,7 @@ import styled from "styled-components"; const PersonCardDetailedData = styled.div` &:not(:last-child) { - margin-bottom: 30px; + margin-bottom: 24px; } `; diff --git a/src/components/PersonCardDetailed/StyledPersonCardDetailed.jsx b/src/components/PersonCardDetailed/StyledPersonCardDetailed.jsx index aa13d940..87bcacf2 100644 --- a/src/components/PersonCardDetailed/StyledPersonCardDetailed.jsx +++ b/src/components/PersonCardDetailed/StyledPersonCardDetailed.jsx @@ -1,10 +1,15 @@ import styled from "styled-components"; +import { StyledButton } from "../Button"; import { ListLayoutDetailed } from "../ListLayout/ListLayoutDetailed"; +import { colors } from "../../style"; + const StyledPersonCardDetailed = styled(ListLayoutDetailed)` - display: flex; - flex-direction: column; + ${StyledButton}:not(:hover) { + color: ${colors.slate}; + width: 100%; + } `; export { StyledPersonCardDetailed }; diff --git a/src/components/PersonCardDetailed/index.jsx b/src/components/PersonCardDetailed/index.jsx index 8b384e8e..f04c2866 100644 --- a/src/components/PersonCardDetailed/index.jsx +++ b/src/components/PersonCardDetailed/index.jsx @@ -1,6 +1,9 @@ -import React, { useEffect } from "react"; +import React from "react"; import PropTypes from "prop-types"; +import { useEffect } from "react"; +import { useTranslation } from "../../hooks"; + import { StyledPersonCardDetailed } from "./StyledPersonCardDetailed"; import { PersonCardDetailedSpinner } from "./PersonCardDetailedSpinner"; import { @@ -9,7 +12,9 @@ import { } from "./PersonCardDetailedData"; import { NoticeHero } from "../NoticeHero"; -import { Ban, PlaylistAddCheck } from "../../assets/icons"; +import { Ban, PlaylistAddCheck } from "../icons"; + +import { resources } from "./PersonCardDetailed.resources"; function PersonCardDetailed({ person, @@ -20,25 +25,34 @@ function PersonCardDetailed({ children, className, "data-testid": testId, + offsetTop, }) { + const { t, i18n } = useTranslation("PersonCardDetailed"); + i18n.addResourceBundle("en", "PersonCardDetailed", resources.en); + i18n.addResourceBundle("ru", "PersonCardDetailed", resources.ru); + useEffect(() => { if (personIdxid) { - fetchPerson({ idxid: personIdxid }); + fetchPerson(personIdxid); } }, [personIdxid]); return ( - + {isLoading ? ( ) : person && !isPersonNotExists ? ( children ) : isPersonNotExists ? ( - } title="Person not found" /> + } title={t("Person not found")} /> ) : ( } - title="Select person to view details" + title={t("Select person to view details")} /> )} @@ -57,10 +71,12 @@ PersonCardDetailed.propTypes = { children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]).isRequired, className: PropTypes.string.isRequired, "data-testid": PropTypes.string, + offsetTop: PropTypes.number.isRequired, }; PersonCardDetailed.defaultProps = { "data-testid": "person-card-detailed", + offsetTop: 120, }; export * from "./PersonCardDetailedData"; diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonButton.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonButton.jsx index 1e7147ee..7c8b751c 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonButton.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonButton.jsx @@ -1,9 +1,9 @@ import styled from "styled-components"; -import Button from "../../Button"; +import { Button } from "../../Button"; export const PersonsGroupListPersonButton = styled(Button)` &:not(:last-child) { - margin-bottom: 10px; + margin-bottom: 8px; } `; diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/PersonsGroupListPersonInfoIdxid/StyledPersonsGroupListPersonInfoIdxid.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/PersonsGroupListPersonInfoIdxid/StyledPersonsGroupListPersonInfoIdxid.jsx index f489c24a..80f91278 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/PersonsGroupListPersonInfoIdxid/StyledPersonsGroupListPersonInfoIdxid.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/PersonsGroupListPersonInfoIdxid/StyledPersonsGroupListPersonInfoIdxid.jsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { colors } from "../../../../../themes/colors"; +import { colors } from "../../../../../style"; export const StyledPersonsGroupListPersonInfoIdxid = styled.span` font-size: 13px; line-height: 1.38; - color: ${colors.brownGray}; + color: ${colors.grayWhite}; span { color: ${colors.black}; diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/StyledPersonsGroupListPersonInfo.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/StyledPersonsGroupListPersonInfo.jsx index 16280aba..4d900259 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/StyledPersonsGroupListPersonInfo.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonInfo/StyledPersonsGroupListPersonInfo.jsx @@ -5,6 +5,6 @@ export const StyledPersonsGroupListPersonInfo = styled.div` align-items: center; &:not(:last-child) { - margin-bottom: 20px; + margin-bottom: 24px; } `; diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonNotFoundNotice/index.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonNotFoundNotice/index.jsx index 312cd8c6..de3c3474 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonNotFoundNotice/index.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonNotFoundNotice/index.jsx @@ -3,7 +3,7 @@ import styled from "styled-components"; import { NoticeHero } from "../../../NoticeHero"; -import { Ban } from "../../../../assets/icons"; +import { Ban } from "../../../icons"; export const PersonsGroupListPersonNotFoundNotice = styled( NoticeHero diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/PersonsGroupListPersonTypeSelectLabel.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/PersonsGroupListPersonTypeSelectLabel.jsx index b2caae60..270b3a33 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/PersonsGroupListPersonTypeSelectLabel.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/PersonsGroupListPersonTypeSelectLabel.jsx @@ -1,9 +1,9 @@ import styled from "styled-components"; -import { colors } from "../../../../themes/index"; +import { colors } from "../../../../style"; export const PersonsGroupListPersonTypeSelectLabel = styled.label` font-size: 13px; - color: ${colors.brownGray}; + color: ${colors.grayWhite}; margin-bottom: 5px; display: inline-block; `; diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/StyledPersonsGroupListPersonTypeSelect.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/StyledPersonsGroupListPersonTypeSelect.jsx index 2e3d3aa2..16c2989e 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/StyledPersonsGroupListPersonTypeSelect.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/StyledPersonsGroupListPersonTypeSelect.jsx @@ -2,6 +2,6 @@ import styled from "styled-components"; export const StyledPersonsGroupListPersonTypeSelect = styled.div` &:not(:last-child) { - margin-bottom: 28px; + margin-bottom: 24px; } `; diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/index.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/index.jsx index 93cd7d87..4b046f50 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/index.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/PersonsGroupListPersonTypeSelect/index.jsx @@ -29,6 +29,6 @@ export function PersonsGroupListPersonTypeSelect({ onChange, type }) { } PersonsGroupListPersonTypeSelect.propTypes = { - type: PropTypes.string.isRequired, + type: PropTypes.object.isRequired, onChange: PropTypes.func.isRequired, }; diff --git a/src/components/PersonsGroup/PersonsGroupListPerson/index.jsx b/src/components/PersonsGroup/PersonsGroupListPerson/index.jsx index 51b88ee3..530ac913 100644 --- a/src/components/PersonsGroup/PersonsGroupListPerson/index.jsx +++ b/src/components/PersonsGroup/PersonsGroupListPerson/index.jsx @@ -29,12 +29,12 @@ export function PersonsGroupListPerson({ }) { useEffect(() => { if (personIdxid) { - fetchPerson({ idxid: personIdxid }); + fetchPerson(personIdxid); } }, [personIdxid]); return ( - + {(isPersonFetching || !person) && !error ? ( ) : error ? ( @@ -52,9 +52,8 @@ export function PersonsGroupListPerson({ {searchType.value.includes("excludes") && ( @@ -64,7 +63,6 @@ export function PersonsGroupListPerson({ {searchType.value.includes("includes") && ( - {title && {title}} - + ID{" "} {person.idxid} - + Place of first entry:
{" "} @@ -83,32 +74,15 @@ function PersonsGroupPerson({
- {isAddingMode ? ( + {isAddingMode && ( - ) : ( - - {({ togglePopup }) => ( - { - e.stopPropagation(); - togglePopup(e); - }} - isHidden={!isMouseOver} - isDisabled={isPersonsDeletingFromGroup} - mode={mode} - > - - - )} - )} ); @@ -117,17 +91,14 @@ function PersonsGroupPerson({ PersonsGroupPerson.propTypes = { person: PropTypes.object.isRequired, onClick: PropTypes.func.isRequired, - onPersonDelete: PropTypes.func.isRequired, onPersonAdd: PropTypes.func.isRequired, isSelected: PropTypes.bool.isRequired, isActive: PropTypes.bool, onChange: PropTypes.func.isRequired, mode: PropTypes.string, - isPersonsDeletingFromGroup: PropTypes.bool.isRequired, - isPersonsAddingToList: PropTypes.bool.isRequired, + isPersonsAddingToGroup: PropTypes.bool, className: PropTypes.string, "data-testid": PropTypes.string, - title: PropTypes.string, }; PersonsGroupPerson.defaultProps = { diff --git a/src/components/PersonsGroup/PersonsGroupPersonDetail/StyledPersonsGroupPersonDetail.jsx b/src/components/PersonsGroup/PersonsGroupPersonDetail/StyledPersonsGroupPersonDetail.jsx index 299ce0bd..05dac015 100644 --- a/src/components/PersonsGroup/PersonsGroupPersonDetail/StyledPersonsGroupPersonDetail.jsx +++ b/src/components/PersonsGroup/PersonsGroupPersonDetail/StyledPersonsGroupPersonDetail.jsx @@ -3,6 +3,7 @@ import styled from "styled-components"; import { PersonCardDetailed } from "../../PersonCardDetailed/index"; export const StyledPersonsGroupPersonDetail = styled(PersonCardDetailed)` - min-height: 502px; + min-height: 550px; width: 334px; + padding: 24px 20px; `; diff --git a/src/components/PersonsGroup/PersonsGroupPersonDetail/index.jsx b/src/components/PersonsGroup/PersonsGroupPersonDetail/index.jsx index 635e08aa..877f810f 100644 --- a/src/components/PersonsGroup/PersonsGroupPersonDetail/index.jsx +++ b/src/components/PersonsGroup/PersonsGroupPersonDetail/index.jsx @@ -5,6 +5,7 @@ import { StyledPersonsGroupPersonDetail } from "./StyledPersonsGroupPersonDetail import { PersonCardDetailed, + PersonCardDetailedActions, PersonCardDetailedDataItemLabel as PersonLabel, PersonCardDetailedDataItemValue as PersonValue, PersonCardDetailedDataItemIdValue as PersonIdValue, @@ -21,6 +22,7 @@ function PersonsGroupPersonDetail({ personIdxid, isLoading, isPersonNotExists, + actions, }) { return ( {person && !isPersonNotExists && ( - - - Photo - - - - - - ID - - {person.idxid} - - - - Age - {person.age} - - - Sex - {formatSex(person.sex)} - - - Card created - {formatDate(person.idxid_created)} - - - Place of first entry - {person.idxid_source.name} - - - Total existing entries - {person.total} - - - Exact entries - {person.exact} - - - HA entries - {person.ha} - - - Junk entries - {person.junk} - - + <> + + + Photo + + + + + + ID + + {person.idxid} + + + + Age + {person.age} + + + Sex + {formatSex(person.sex)} + + + Card created + {formatDate(person.idxid_created)} + + + Place of first entry + {person.idxid_source.name} + + + Total entries + {person.total} + + + Exact entries + {person.exact} + + + HA entries + {person.ha} + + + Junk entries + {person.junk} + + + {actions && ( + {actions} + )} + )} ); @@ -92,6 +99,7 @@ PersonsGroupPersonDetail.propTypes = { personIdxid: PropTypes.string, isLoading: PropTypes.bool.isRequired, isPersonNotExists: PropTypes.bool, + actions: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), }; export { PersonsGroupPersonDetail, StyledPersonsGroupPersonDetail }; diff --git a/src/components/PopupConfirm/PopupConfirmPopup/PopupConfirmPopupButton.jsx b/src/components/PopupConfirm/PopupConfirmPopup/PopupConfirmPopupButton.jsx index 251fe546..bfed6e17 100644 --- a/src/components/PopupConfirm/PopupConfirmPopup/PopupConfirmPopupButton.jsx +++ b/src/components/PopupConfirm/PopupConfirmPopup/PopupConfirmPopupButton.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -import Button from "../../Button"; +import { Button } from "../../Button"; export const PopupConfirmPopupButton = styled(Button)` width: 105px; diff --git a/src/components/PopupConfirm/PopupConfirmPopup/index.jsx b/src/components/PopupConfirm/PopupConfirmPopup/index.jsx index 196f2b31..44bf1ab7 100644 --- a/src/components/PopupConfirm/PopupConfirmPopup/index.jsx +++ b/src/components/PopupConfirm/PopupConfirmPopup/index.jsx @@ -11,15 +11,11 @@ function PopupConfirmPopup({ title, okText, cancelText, onConfirm, onCancel }) { {title} - + {okText} diff --git a/src/components/PopupConfirm/index.jsx b/src/components/PopupConfirm/index.jsx index a56432d1..ccd00edb 100644 --- a/src/components/PopupConfirm/index.jsx +++ b/src/components/PopupConfirm/index.jsx @@ -38,12 +38,12 @@ function PopupConfirm({ title={title} okText={okText} cancelText={cancelText} - onConfirm={e => { + onConfirm={(e) => { e.stopPropagation(); closePopup(e); onConfirm(); }} - onCancel={e => { + onCancel={(e) => { e.stopPropagation(); closePopup(e); }} @@ -59,7 +59,7 @@ PopupConfirm.propTypes = { title: PropTypes.string, okText: PropTypes.string, cancelText: PropTypes.string, - onConfirm: PropTypes.string.isRequired, + onConfirm: PropTypes.func.isRequired, portalRef: PropTypes.object, }; diff --git a/src/components/RouteSection/RouteSectionOverlay.jsx b/src/components/RouteSection/RouteSectionOverlay.jsx index dbe6f786..45eade65 100644 --- a/src/components/RouteSection/RouteSectionOverlay.jsx +++ b/src/components/RouteSection/RouteSectionOverlay.jsx @@ -2,10 +2,10 @@ import styled from "styled-components"; const RouteSectionOverlay = styled.div` position: absolute; - top: 0; - left: 0; - width: 114%; - height: ${props => (props.height ? props.height + "px" : "100%")}; + top: 20px; + left: -20px; + width: 120%; + height: ${(props) => (props.height ? props.height + "px" : "100%")}; &:after { content: ""; diff --git a/src/components/RouteSection/RouteSectionSpinner.jsx b/src/components/RouteSection/RouteSectionSpinner.jsx index 86212388..bd944de6 100644 --- a/src/components/RouteSection/RouteSectionSpinner.jsx +++ b/src/components/RouteSection/RouteSectionSpinner.jsx @@ -10,11 +10,10 @@ const RouteSectionSpinner = styled(Spinner).attrs(() => ({ height: 40 }))` position: absolute; top: 0; left: 0; - z-index: 2; justify-content: center; background-color: #fff; z-index: 1000; - pointer-events: ${props => (props.transparentForEvents ? "none" : "auto")}; + pointer-events: ${(props) => (props.transparentForEvents ? "none" : "auto")}; svg { margin-top: -34px; diff --git a/src/components/RouteSection/WithTransition.jsx b/src/components/RouteSection/WithTransition.jsx index f9caa74e..77ed0b4d 100644 --- a/src/components/RouteSection/WithTransition.jsx +++ b/src/components/RouteSection/WithTransition.jsx @@ -18,7 +18,7 @@ Spinner.propTypes = { }; export const withTransition = (RouteComponent, spinnerHeight) => { - const WithTransition = props => ( + const WithTransition = (props) => ( { - class SearchValueWrapper extends React.Component { - state = { - value: "", - }; - - handleChange = ({ target: { value } }) => { - this.setState({ value }); - }; +storiesOf("Search", module) + .add("default", () => { + function SearchWrapper() { + const [value, setValue] = useState(""); - render() { return ( setValue(value)} + placeholder="Start enter name..." + /> + ); + } + + return ; + }) + .add("compact", () => { + function SearchWrapper() { + const [value, setValue] = useState(""); + + return ( + setValue(value)} placeholder="Start enter name..." /> ); } - } - return ; -}); + return ; + }); diff --git a/src/components/Search/SearchClearButton.jsx b/src/components/Search/SearchClearButton.jsx new file mode 100644 index 00000000..072a6f5a --- /dev/null +++ b/src/components/Search/SearchClearButton.jsx @@ -0,0 +1,17 @@ +import styled from "styled-components"; + +import { Button } from "../Button"; + +import { colors } from "../../style"; + +const SearchClearButton = styled(Button)` + position: absolute; + right: 16px; + padding: 0; + display: flex; + height: 100%; + align-items: center; + color: ${colors.darkBlack}; +`; + +export { SearchClearButton }; diff --git a/src/components/Search/SearchClearButton/SearchClearButtonIcon.jsx b/src/components/Search/SearchClearButton/SearchClearButtonIcon.jsx deleted file mode 100644 index 4e3bc303..00000000 --- a/src/components/Search/SearchClearButton/SearchClearButtonIcon.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from "styled-components"; - -import { Times } from "../../../assets/icons"; - -export const SearchClearButtonIcon = styled(Times)` - color: #3b4b5a; -`; diff --git a/src/components/Search/SearchClearButton/StyledSearchClearButton.jsx b/src/components/Search/SearchClearButton/StyledSearchClearButton.jsx deleted file mode 100644 index 5be50ba3..00000000 --- a/src/components/Search/SearchClearButton/StyledSearchClearButton.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -import { Button } from "../../Button"; - -export const StyledSearchClearButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` - height: 23px; - width: 23px; - padding: 0px; -`; diff --git a/src/components/Search/SearchClearButton/index.jsx b/src/components/Search/SearchClearButton/index.jsx deleted file mode 100644 index 0e0a83de..00000000 --- a/src/components/Search/SearchClearButton/index.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { StyledSearchClearButton } from "./StyledSearchClearButton"; -import { SearchClearButtonIcon } from "./SearchClearButtonIcon"; - -function SearchClearButton(props) { - return ( - - - - ); -} - -SearchClearButton.propTypes = { - size: PropTypes.number, -}; - -SearchClearButton.defaultProps = { - size: 23, -}; - -export { SearchClearButton, StyledSearchClearButton }; diff --git a/src/components/Search/SearchCompact/index.jsx b/src/components/Search/SearchCompact/index.jsx new file mode 100644 index 00000000..a13e3013 --- /dev/null +++ b/src/components/Search/SearchCompact/index.jsx @@ -0,0 +1,34 @@ +import styled from "styled-components"; + +import { + Search, + SearchIcon, + SearchFakeInputValue, + SearchInput, +} from "../index.jsx"; + +import { colors } from "../../../style"; + +const SearchCompact = styled(Search).attrs(() => ({ isCompact: true }))` + padding: 3px 8px; + padding-right: 30px; + height: 30px; + + ${SearchIcon} { + margin-right: 8px; + color: ${colors.grayDark}; + } + + ${SearchInput} { + &::placeholder { + color: ${colors.grayDark}; + font-weight: 600; + } + } + + ${SearchFakeInputValue} { + left: 40px; + } +`; + +export { SearchCompact }; diff --git a/src/components/Search/SearchFakeInputValue.jsx b/src/components/Search/SearchFakeInputValue.jsx index 85638930..8eaa7729 100644 --- a/src/components/Search/SearchFakeInputValue.jsx +++ b/src/components/Search/SearchFakeInputValue.jsx @@ -6,10 +6,10 @@ import styled from "styled-components"; * Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ */ -export const SearchFakeInputValue = styled.span` +const SearchFakeInputValue = styled.span` position: absolute; - left: 54px; - font-size: 20px; - color: rgb(67, 67, 67); + left: 56px; pointer-events: none; `; + +export { SearchFakeInputValue }; diff --git a/src/components/Search/SearchIcon.jsx b/src/components/Search/SearchIcon.jsx index 2259a2f3..e34eafe9 100644 --- a/src/components/Search/SearchIcon.jsx +++ b/src/components/Search/SearchIcon.jsx @@ -1,9 +1,13 @@ import styled from "styled-components"; -import { Search } from "../../assets/icons"; +import { Search } from "../icons"; -export const SearchIcon = styled(Search)` - margin-right: 15px; +import { colors } from "../../style"; + +const SearchIcon = styled(Search)` + margin-right: 16px; min-width: 24px; - color: #3b4b5a; + color: ${colors.darkBlack}; `; + +export { SearchIcon }; diff --git a/src/components/Search/SearchInput.jsx b/src/components/Search/SearchInput.jsx index 1c4f9a92..43b7cd03 100644 --- a/src/components/Search/SearchInput.jsx +++ b/src/components/Search/SearchInput.jsx @@ -1,6 +1,8 @@ import styled from "styled-components"; -export const SearchInput = styled.input.attrs(() => ({ +import { colors } from "../../style"; + +const SearchInput = styled.input.attrs(() => ({ type: "search", spellCheck: "false", }))` @@ -9,15 +11,15 @@ export const SearchInput = styled.input.attrs(() => ({ padding: 0; width: 100%; background-color: inherit; - margin-right: 8px; - font-size: 20px; - color: rgb(67, 67, 67); &::placeholder { - color: rgba(67, 67, 67, 0.6); + font-weight: 300; + color: ${colors.gray}; } &::-webkit-search-cancel-button { display: none; } `; + +export { SearchInput }; diff --git a/src/components/Search/StyledSearch.jsx b/src/components/Search/StyledSearch.jsx index 8813a4eb..8b1434be 100644 --- a/src/components/Search/StyledSearch.jsx +++ b/src/components/Search/StyledSearch.jsx @@ -1,32 +1,20 @@ import styled from "styled-components"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; -export const StyledSearch = styled.div` +const StyledSearch = styled.div` box-sizing: border-box; position: relative; display: flex; align-items: center; - padding-right: 15px; - padding-left: 15px; - height: 60px; + padding: 12px 16px; + padding-right: 30px; + height: 48px; border-radius: 8px; - background-color: ${colors.veryLightBlue}; - - &:after { - content: ""; - position: absolute; - left: 0; - z-index: -1; - width: 100%; - height: 100%; - border-radius: 8px; - opacity: 0; - box-shadow: 0 0 30px 0 rgba(162, 182, 189, 0.25); - transition: opacity 0.3s ease-in-out; - } - - &:hover:after { - opacity: 1; - } + background-color: ${colors.whiteGrayLight}; + font-size: 16px; + line-height: 26px; + color: ${colors.darkBlack}; `; + +export { StyledSearch }; diff --git a/src/components/Search/__tests__/Search.js b/src/components/Search/__tests__/Search.js deleted file mode 100644 index 75b2a4f5..00000000 --- a/src/components/Search/__tests__/Search.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from "react"; - -import { fireEvent } from "@testing-library/react"; -import { render } from "../../../../test/utils"; - -import { Search } from "../index"; - -describe("Search tests", () => { - function renderSearch() { - class SearchWrapper extends React.Component { - state = { - value: "", - }; - - handleChange = ({ target: { value } }) => { - this.setState({ value }); - }; - - render() { - return ; - } - } - - return render(); - } - - test("Search renders clear button only when input has value", () => { - const { queryByTestId, getByTestId } = renderSearch(); - - expect(queryByTestId("search-clear-btn")).not.toBeInTheDocument(); - - fireEvent.change(getByTestId("search-input"), { - target: { value: "query" }, - }); - - expect(queryByTestId("search-clear-btn")).toBeInTheDocument(); - - fireEvent.click(queryByTestId("search-clear-btn")); - - expect(queryByTestId("search-clear-btn")).not.toBeInTheDocument(); - }); -}); diff --git a/src/components/Search/index.jsx b/src/components/Search/index.jsx index d7aad0f1..ac6235ce 100644 --- a/src/components/Search/index.jsx +++ b/src/components/Search/index.jsx @@ -1,57 +1,82 @@ import React from "react"; import PropTypes from "prop-types"; +import { useRef } from "react"; + import { StyledSearch } from "./StyledSearch"; import { SearchInput } from "./SearchInput"; import { SearchFakeInputValue } from "./SearchFakeInputValue"; import { SearchIcon } from "./SearchIcon"; +import { SearchCompact } from "./SearchCompact"; import { SearchClearButton } from "./SearchClearButton"; +import { TimesDelete, TimesDeleteBold } from "../icons"; + +import { setNativeValue } from "../../utils/helpers"; function Search({ + name, value, onChange, placeholder, innerRef, className, - iconSize, - ...restProps + "data-testid": testId, + isCompact, }) { + const inputRef = useRef(innerRef ? innerRef.current : null); + + function clearInputValue() { + setNativeValue(inputRef.current, ""); + inputRef.current.dispatchEvent(new Event("input", { bubbles: true })); + } + return ( - + {value} {value && ( - { - onChange({ target: { value: "" } }); - }} - /> + + {isCompact ? ( + + ) : ( + + )} + )} ); } Search.propTypes = { + name: PropTypes.string, value: PropTypes.string, placeholder: PropTypes.string, onChange: PropTypes.func, innerRef: PropTypes.object, - iconSize: PropTypes.number, className: PropTypes.string, "data-testid": PropTypes.string, + isCompact: PropTypes.bool, }; Search.defaultProps = { - iconSize: 23, "data-testid": "search-input", }; -export { Search, StyledSearch, SearchFakeInputValue }; +Search.Compact = SearchCompact; + +export { + Search, + SearchCompact, + StyledSearch, + SearchInput, + SearchFakeInputValue, + SearchIcon, +}; diff --git a/src/components/SegmentedTabs/SegmentedTabsSpinner.jsx b/src/components/SegmentedTabs/SegmentedTabsSpinner.jsx new file mode 100644 index 00000000..0c9d16aa --- /dev/null +++ b/src/components/SegmentedTabs/SegmentedTabsSpinner.jsx @@ -0,0 +1,9 @@ +import styled from "styled-components"; + +import { Spinner } from "../Spinner"; + +const SegmentedTabsSpinner = styled(Spinner)` + height: 100%; +`; + +export { SegmentedTabsSpinner }; diff --git a/src/components/SegmentedTabs/SegmentedTabsTabbar/StyledSegmentedTabsTabbar.jsx b/src/components/SegmentedTabs/SegmentedTabsTabbar/StyledSegmentedTabsTabbar.jsx new file mode 100644 index 00000000..6183346a --- /dev/null +++ b/src/components/SegmentedTabs/SegmentedTabsTabbar/StyledSegmentedTabsTabbar.jsx @@ -0,0 +1,29 @@ +import styled from "styled-components"; + +import { StyledButton } from "../../Button"; + +const StyledSegmentedTabsTabbar = styled.div` + display: flex; + + &:not(:last-child) { + margin-bottom: 28px; + } + + ${StyledButton} { + &:first-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + + &:last-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + } +`; + +export { StyledSegmentedTabsTabbar }; diff --git a/src/components/SegmentedTabs/SegmentedTabsTabbar/index.jsx b/src/components/SegmentedTabs/SegmentedTabsTabbar/index.jsx new file mode 100644 index 00000000..e8f51ef4 --- /dev/null +++ b/src/components/SegmentedTabs/SegmentedTabsTabbar/index.jsx @@ -0,0 +1,46 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { useContext } from "react"; +import { TabsContext } from "../../Tabs"; + +import { StyledSegmentedTabsTabbar } from "./StyledSegmentedTabsTabbar"; +import { Button } from "../../Button"; + +function SegmentedTabsTabbar({ options, "data-testid": testId, className }) { + const { openTab, activeTab } = useContext(TabsContext); + + function renderTabBarItem(option) { + const { label, value } = option; + + function getButtonTheme(buttonName) { + return activeTab === buttonName ? "dark" : "light"; + } + + return ( + + ); + } + + return ( + + {options.map(renderTabBarItem)} + + ); +} + +SegmentedTabsTabbar.propTypes = { + options: PropTypes.array.isRequired, + "data-testid": PropTypes.string, + className: PropTypes.string, +}; + +export { SegmentedTabsTabbar, StyledSegmentedTabsTabbar }; diff --git a/src/components/SegmentedTabs/StyledSegmentedTabs.jsx b/src/components/SegmentedTabs/StyledSegmentedTabs.jsx new file mode 100644 index 00000000..89776bfe --- /dev/null +++ b/src/components/SegmentedTabs/StyledSegmentedTabs.jsx @@ -0,0 +1,9 @@ +import styled from "styled-components"; + +const StyledSegmentedTabs = styled.div` + flex: 100%; + display: flex; + flex-direction: column; +`; + +export { StyledSegmentedTabs }; diff --git a/src/components/SegmentedTabs/index.jsx b/src/components/SegmentedTabs/index.jsx new file mode 100644 index 00000000..07a15dd6 --- /dev/null +++ b/src/components/SegmentedTabs/index.jsx @@ -0,0 +1,50 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import { StyledSegmentedTabs } from "./StyledSegmentedTabs"; +import { SegmentedTabsTabbar } from "./SegmentedTabsTabbar"; +import { SegmentedTabsSpinner } from "./SegmentedTabsSpinner"; +import { Tabs } from "../Tabs"; +const { TabPanes, TabPane } = Tabs; + +function SegmentedTabs({ + options, + defaultActiveTab, + onChange, + "data-testid": testId, + className, +}) { + function renderTabPane(option) { + const { value, Component } = option; + + return ( + props.isActive && } + /> + ); + } + + return ( + + + + {options.map(renderTabPane)} + + + ); +} + +SegmentedTabs.propTypes = { + options: PropTypes.array.isRequired, + defaultActiveTab: PropTypes.string, + onChange: PropTypes.func, + "data-testid": PropTypes.string, + className: PropTypes.string, +}; + +export { SegmentedTabs, SegmentedTabsTabbar, SegmentedTabsSpinner }; diff --git a/src/components/SelectableList/index.jsx b/src/components/SelectableList/index.jsx deleted file mode 100644 index a7b00e8f..00000000 --- a/src/components/SelectableList/index.jsx +++ /dev/null @@ -1,122 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import { uniq, noop } from "lodash-es"; - -export class SelectableList extends React.Component { - static propTypes = { - options: PropTypes.array.isRequired, - render: PropTypes.func, - children: PropTypes.func, - onChange: PropTypes.func.isRequired, - value: PropTypes.array, - }; - - static defaultProps = { - options: [], - onChange: noop, - }; - - deselectAll = () => { - this.setState({ selected: [] }); - }; - - selectAll = () => { - const { options } = this.props; - - this.setState({ - selected: options.map(option => String(option.value || option)), - }); - }; - - handleCheckboxChange = event => { - const { name } = event.target; - const { lastChecked } = this.state; - const { shiftKey } = event.nativeEvent; - - const isCheck = !this.state.selected.includes(name); - - if (shiftKey && name !== lastChecked) { - this.checkIntermediateBoxes(name, isCheck); - } - - this.setState(({ selected }) => ({ - selected: isCheck - ? uniq(selected.concat(name)) - : selected.filter(option => option !== name), - lastChecked: name, - })); - }; - - checkIntermediateBoxes(checkTo, isCheck) { - let { lastChecked: checkFrom } = this.state; - const { options } = this.props; - const stringOptions = options.map(option => - option.value ? String(option.value) : String(option) - ); - - if (stringOptions.indexOf(checkFrom) > stringOptions.indexOf(checkTo)) { - [checkTo, checkFrom] = [checkFrom, checkTo]; - } - - const hasToCheck = stringOptions - .filter( - (_, key) => - stringOptions.indexOf(checkFrom) < key && - key < stringOptions.indexOf(checkTo) - ) - .concat([checkFrom, checkTo]); - - this.setState(({ selected }) => ({ - selected: isCheck - ? uniq([...selected, ...hasToCheck]) - : selected.filter(option => !hasToCheck.includes(option)), - })); - } - - state = { - selected: this.props.value || [], - selectAll: this.selectAll, - deselectAll: this.deselectAll, - handleCheckboxChange: this.handleCheckboxChange, - lastChecked: null, - }; - - componentDidUpdate(prevProps, prevState) { - if (prevState.selected !== this.state.selected) { - this.props.onChange(this.state.selected); - } - - if (prevProps.value !== this.props.value) { - this.setState({ selected: this.props.value }); - } - if (prevProps.options !== this.props.options) { - this.setState(({ selected }) => { - return { - selected: selected.filter(item => this.props.options.includes(item)), - }; - }); - } - } - - render() { - const { selected } = this.state; - const { options, render, children } = this.props; - - const hasOptions = Boolean(options.length); - - const sharedState = { - ...this.state, - options, - hasOptions, - isAllSelected: hasOptions && selected.length === options.length, - isAllDeselected: hasOptions && selected.length === 0, - }; - - if (render) { - return render(sharedState); - } else { - return children(sharedState); - } - } -} diff --git a/src/components/ShownControl/StyledShownControlButtonArrow.jsx b/src/components/ShownControl/StyledShownControlButtonArrow.jsx index 9b90114b..ebe8d5ea 100644 --- a/src/components/ShownControl/StyledShownControlButtonArrow.jsx +++ b/src/components/ShownControl/StyledShownControlButtonArrow.jsx @@ -1,5 +1,6 @@ import styled from "styled-components"; -import Button from "../Button"; + +import { Button } from "../Button"; const StyledShownControlButtonArrow = styled(Button)` width: 36px; diff --git a/src/components/ShownControl/__tests__/ShownControl.js b/src/components/ShownControl/__tests__/ShownControl.js index 741e3229..928ac941 100644 --- a/src/components/ShownControl/__tests__/ShownControl.js +++ b/src/components/ShownControl/__tests__/ShownControl.js @@ -22,7 +22,9 @@ describe("ShownControl tests", () => { offset={0} totalCount={100} onChange={handleChangePaginationMock} - /> + > + some text + ); } @@ -41,7 +43,9 @@ describe("ShownControl tests", () => { offset={80} totalCount={100} onChange={handleChangePaginationMock} - /> + > + some text + ); expect(getByTestId("shownControl-button-prev")).not.toBeDisabled(); expect(getByTestId("shownControl-button-next")).toBeDisabled(); @@ -56,7 +60,9 @@ describe("ShownControl tests", () => { offset={0} totalCount={10} onChange={handleChangePaginationMock} - /> + > + some text + ); expect(getByTestId("shownControl-button-prev")).toBeDisabled(); expect(getByTestId("shownControl-button-next")).toBeDisabled(); @@ -78,7 +84,9 @@ describe("ShownControl tests", () => { offset={20} totalCount={100} onChange={handleChangePaginationMock} - /> + > + some text + ); fireEvent.click(getByTestId("shownControl-button-prev")); expect(handleChangePaginationMock).toHaveBeenCalledWith({ offset: 0 }); diff --git a/src/components/ShownControl/index.jsx b/src/components/ShownControl/index.jsx index b9115fde..c9c864b0 100644 --- a/src/components/ShownControl/index.jsx +++ b/src/components/ShownControl/index.jsx @@ -4,15 +4,13 @@ import StyledShownControl from "./StyledShownControl.jsx"; import StyledShownControlArrowRightContainer from "./StyledShownControlArrowRightContainer.jsx"; import StyledShownControlButtonArrow from "./StyledShownControlButtonArrow.jsx"; -import { - KeyboardArrowRight, - KeyboardArrowLeft, -} from "../../assets/icons/index.js"; +import { KeyboardArrowRight, KeyboardArrowLeft } from "../icons/index.js"; import StyledShownControlInfoContainer from "./StyledShownControlInfoContainer.jsx"; import StyledShownControlInfoContainerInner from "./StyledShownControlInfoContainerInner.jsx"; import { usePagination } from "../../hooks"; +// Deprecated export function ShownControl(props) { const { paginationState, @@ -46,9 +44,9 @@ export function ShownControl(props) { @@ -65,8 +63,8 @@ export function ShownControl(props) { diff --git a/src/components/Slider/Slidee.js b/src/components/Slider/SliderInner.jsx similarity index 68% rename from src/components/Slider/Slidee.js rename to src/components/Slider/SliderInner.jsx index 7b2a6cc2..c8305cd2 100644 --- a/src/components/Slider/Slidee.js +++ b/src/components/Slider/SliderInner.jsx @@ -12,13 +12,13 @@ function animation(props) { `; } -const Slidee = styled.ul` - animation: ${props => animation(props)} 0.3s ease-in-out; +const SliderInner = styled.ul` + animation: ${(props) => animation(props)} 0.3s ease-in-out; height: 6500px; margin: 0; padding: 0; width: 100%; - list-style: none; + list-style-type: none; `; -export default Slidee; +export { SliderInner }; diff --git a/src/components/Slider/StyledFrame.js b/src/components/Slider/StyledFrame.js deleted file mode 100644 index 5e6b310c..00000000 --- a/src/components/Slider/StyledFrame.js +++ /dev/null @@ -1,9 +0,0 @@ -import styled from "styled-components"; - -const Frame = styled.div` - overflow: hidden; - height: ${props => props.height}px; - width: 100%; -`; - -export default Frame; diff --git a/src/components/Slider/StyledSlider.jsx b/src/components/Slider/StyledSlider.jsx new file mode 100644 index 00000000..0b6a0f8a --- /dev/null +++ b/src/components/Slider/StyledSlider.jsx @@ -0,0 +1,9 @@ +import styled from "styled-components"; + +const StyledSlider = styled.div` + overflow: hidden; + width: 100%; + height: ${(props) => (props.height !== undefined ? props.height : "auto")}px; +`; + +export { StyledSlider }; diff --git a/src/components/Slider/index.jsx b/src/components/Slider/index.jsx index 338831dc..9f523315 100644 --- a/src/components/Slider/index.jsx +++ b/src/components/Slider/index.jsx @@ -1,21 +1,19 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; -import Slidee from "./Slidee"; -import StyledFrame from "./StyledFrame"; + +import { StyledSlider } from "./StyledSlider"; +import { SliderInner } from "./SliderInner"; export class Slider extends Component { static propTypes = { height: PropTypes.number, totalItemHeight: PropTypes.number, - children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]), - onUpdateSliderRef: PropTypes.func, - visibility: PropTypes.bool, + children: PropTypes.oneOfType([PropTypes.node, PropTypes.array]).isRequired, }; static defaultProps = { height: 516, totalItemHeight: 129, - visibility: false, }; state = { @@ -95,10 +93,11 @@ export class Slider extends Component { render() { const { translateFrom, translateTo, activeItemIndex } = this.state; - const { visibility, children } = this.props; + const { children } = this.props; if (!children) { - return ""; + return null; } + const cloneChildren = React.Children.map(children, (child, index) => { const childKey = child.key || index; @@ -110,12 +109,9 @@ export class Slider extends Component { }); }); - return visibility ? ( - - { - node && this.props.onUpdateSliderRef(node); - }} + return ( + + {cloneChildren} - - - ) : null; + + + ); } } diff --git a/src/components/Spinner/SpinnerIcon.jsx b/src/components/Spinner/SpinnerIcon.jsx index 3d60dc49..f668a614 100644 --- a/src/components/Spinner/SpinnerIcon.jsx +++ b/src/components/Spinner/SpinnerIcon.jsx @@ -1,10 +1,10 @@ import styled from "styled-components"; -import { Asterisk } from "../../assets/icons"; +import { Asterisk } from "../icons"; const SpinnerIcon = styled(Asterisk)` margin-bottom: 4px; color: #3b4b5a; `; -export default SpinnerIcon; +export { SpinnerIcon }; diff --git a/src/components/Spinner/StyledSpinnerContainer.jsx b/src/components/Spinner/StyledSpinner.jsx similarity index 70% rename from src/components/Spinner/StyledSpinnerContainer.jsx rename to src/components/Spinner/StyledSpinner.jsx index 799c73bb..acfbe1ef 100644 --- a/src/components/Spinner/StyledSpinnerContainer.jsx +++ b/src/components/Spinner/StyledSpinner.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -const StyledSpinnerContainer = styled.div` +const StyledSpinner = styled.div` width: ${({ width }) => (width ? width + "px" : "100%")}; display: flex; min-height: 40px; @@ -8,4 +8,4 @@ const StyledSpinnerContainer = styled.div` align-content: center; `; -export default StyledSpinnerContainer; +export { StyledSpinner }; diff --git a/src/components/Spinner/index.jsx b/src/components/Spinner/index.jsx index 69571d22..270eda3e 100644 --- a/src/components/Spinner/index.jsx +++ b/src/components/Spinner/index.jsx @@ -1,14 +1,14 @@ import React from "react"; import PropTypes from "prop-types"; -import StyledSpinnerContainer from "./StyledSpinnerContainer"; -import SpinnerIcon from "./SpinnerIcon"; +import { StyledSpinner } from "./StyledSpinner"; +import { SpinnerIcon } from "./SpinnerIcon"; -export function Spinner({ width, className }) { +function Spinner({ width, className }) { return ( - + - + ); } @@ -16,3 +16,5 @@ Spinner.propTypes = { width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), className: PropTypes.string, }; + +export { Spinner, StyledSpinner }; diff --git a/src/components/Stepper/__tests__/Stepper.js b/src/components/Stepper/__tests__/Stepper.js index f7440950..29792ce1 100644 --- a/src/components/Stepper/__tests__/Stepper.js +++ b/src/components/Stepper/__tests__/Stepper.js @@ -32,7 +32,7 @@ describe("Stepper tests", () => { onReset={handleStepperResetMock} onStepChanges={onStepChangesMock} > - {stepperProps => ( + {(stepperProps) => (
{stepperProps.activeStepIndex} diff --git a/src/components/Stepper/index.jsx b/src/components/Stepper/index.jsx index c9ba526a..1b6b0411 100644 --- a/src/components/Stepper/index.jsx +++ b/src/components/Stepper/index.jsx @@ -9,11 +9,11 @@ const StepperContext = React.createContext({ reset: noop, }); -const withStepperContext = WrappedComponent => { - const WithStepperContext = props => { +const withStepperContext = (WrappedComponent) => { + const WithStepperContext = (props) => { return ( - {context => } + {(context) => } ); }; diff --git a/src/components/Tabs.js b/src/components/Tabs.js index d93a3315..dddc7992 100644 --- a/src/components/Tabs.js +++ b/src/components/Tabs.js @@ -11,10 +11,10 @@ const TabsContext = React.createContext({ toggleDisabled: () => {}, }); -const withTabsContext = WrappedComponent => { - const WithTabsContext = props => ( +const withTabsContext = (WrappedComponent) => { + const WithTabsContext = (props) => ( - {context => } + {(context) => } ); @@ -91,20 +91,20 @@ class Tabs extends Component { } } - openTab = tabName => { + openTab = (tabName) => { this.setState(({ disabledTabs }) => ({ activeTab: tabName, - disabledTabs: disabledTabs.filter(tab => tab !== tabName), + disabledTabs: disabledTabs.filter((tab) => tab !== tabName), })); }; - toggleDisabled = tabName => { + toggleDisabled = (tabName) => { this.setState(({ disabledTabs }) => ({ disabledTabs: toggleInArray(disabledTabs, tabName), })); }; - disableTab = tabName => { + disableTab = (tabName) => { this.setState(({ disabledTabs }) => ({ disabledTabs: disabledTabs.concat(tabName), })); diff --git a/src/components/Text/TextDrag.jsx b/src/components/Text/TextDrag.jsx index 833cde78..f2bf9999 100644 --- a/src/components/Text/TextDrag.jsx +++ b/src/components/Text/TextDrag.jsx @@ -1,7 +1,7 @@ import styled from "styled-components"; -import colors from "../../themes/colors"; +import { colors } from "../../style"; export const TextDrag = styled.span` - color: ${props => props.isLockDrop && colors.graySimple}; + color: ${(props) => props.isLockDrop && colors.graySimple}; `; diff --git a/src/components/Text/TextTrim.jsx b/src/components/Text/TextTrim.jsx index de420005..35ad8e80 100644 --- a/src/components/Text/TextTrim.jsx +++ b/src/components/Text/TextTrim.jsx @@ -5,7 +5,7 @@ import { css } from "styled-components"; Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ строк */ function textTrimStyles() { - return function() { + return function () { return css` text-overflow: ellipsis; white-space: nowrap; diff --git a/src/components/Text/Title.jsx b/src/components/Text/Title.jsx index e121ab58..963d8fd1 100644 --- a/src/components/Text/Title.jsx +++ b/src/components/Text/Title.jsx @@ -1,14 +1,14 @@ import PropTypes from "prop-types"; import styled, { css } from "styled-components"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; function getStyles({ level }) { return { 1: css` font-size: 44px; - line-height: 60px; - font-weight: 300; + line-height: 44px; letter-spacing: -0.5px; + font-weight: normal; `, 2: css` font-size: 20px; @@ -18,8 +18,8 @@ function getStyles({ level }) { 3: css` font-size: 18px; line-height: 24px; - font-weight: normal; letter-spacing: -0.36px; + font-weight: normal; `, }[level]; } diff --git a/src/components/UIBadge/UIBadgeThemes.jsx b/src/components/UIBadge/UIBadgeThemes.jsx index 132690ab..9bec6d57 100644 --- a/src/components/UIBadge/UIBadgeThemes.jsx +++ b/src/components/UIBadge/UIBadgeThemes.jsx @@ -1,6 +1,6 @@ import { css } from "styled-components"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; const blueTheme = css` background-color: ${colors.bluish}; @@ -8,7 +8,7 @@ const blueTheme = css` `; const grayTheme = css` - background-color: ${colors.brownGray}; + background-color: ${colors.grayWhite}; color: ${colors.whiteSimple}; `; diff --git a/src/components/UIBadge/index.jsx b/src/components/UIBadge/index.jsx index 9a443f41..9e2d8e54 100644 --- a/src/components/UIBadge/index.jsx +++ b/src/components/UIBadge/index.jsx @@ -2,16 +2,16 @@ import styled, { css } from "styled-components"; import BadgeThemes from "./UIBadgeThemes"; -import { colors } from "../../themes/colors"; +import { colors } from "../../style"; export const UIBadge = styled.span` border-radius: 22.5px; text-align: center; font-size: 13px; - line-height: 1.08; + line-height: 18px; font-weight: normal; padding: 0 8px; - ${({ badgeTheme }) => BadgeThemes[badgeTheme]}; + ${({ badgeTheme }) => BadgeThemes[badgeTheme]} ${({ color }) => color @@ -19,7 +19,7 @@ export const UIBadge = styled.span` background-color: ${color}; color: ${colors.whiteSimple}; ` - : null}; + : null} `; UIBadge.defaultProps = { diff --git a/src/components/Value.jsx b/src/components/Value.jsx index 3ad8fd3a..ad9d005f 100644 --- a/src/components/Value.jsx +++ b/src/components/Value.jsx @@ -1,9 +1,9 @@ import PropTypes from "prop-types"; -import { isNotEmpty } from "../utils/helpers"; +import { isNotEmpty, hasProperty } from "../utils/helpers"; export function Value(props) { - const hasValueInProps = Object.prototype.hasOwnProperty.call(props, "value"); + const hasValueInProps = hasProperty(props, "value"); const { children, defaultValue, isZeroEmpty, value } = props; const valueToCheck = hasValueInProps ? value : children; diff --git a/src/components/WithCurrentOpenItem/ListItemsContext.js b/src/components/WithCurrentOpenItem/ListItemsContext.js deleted file mode 100644 index e037feb7..00000000 --- a/src/components/WithCurrentOpenItem/ListItemsContext.js +++ /dev/null @@ -1,6 +0,0 @@ -import React from "react"; - -export const ListItemsContext = React.createContext({ - currentOpenItem: null, - setCurrentOpenItem: () => {}, -}); diff --git a/src/components/WithCurrentOpenItem/WithListItemContextProvider.jsx b/src/components/WithCurrentOpenItem/WithListItemContextProvider.jsx deleted file mode 100644 index c71e850e..00000000 --- a/src/components/WithCurrentOpenItem/WithListItemContextProvider.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from "react"; - -import { ListItemsContext } from "./ListItemsContext"; - -export const WithListItemContextProvider = Component => { - class WithCurrentItemComponent extends React.Component { - state = { - currentOpenItem: null, - }; - - setCurrentOpenItem = currentOpenItem => { - this.setState({ currentOpenItem }); - }; - - render() { - return ( - - - - ); - } - } - - return WithCurrentItemComponent; -}; diff --git a/src/components/WithCurrentOpenItem/index.js b/src/components/WithCurrentOpenItem/index.js deleted file mode 100644 index 457b3a75..00000000 --- a/src/components/WithCurrentOpenItem/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./ListItemsContext"; -export * from "./WithListItemContextProvider"; diff --git a/src/components/form/components/FormCheckbox/CheckboxSizes.jsx b/src/components/form/components/FormCheckbox/CheckboxSizes.jsx deleted file mode 100644 index c8aec4f0..00000000 --- a/src/components/form/components/FormCheckbox/CheckboxSizes.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import { css } from "styled-components"; - -import { FormCheckboxFlag } from "./FormCheckboxFlag"; - -const smallSize = css` - width: 22px; - height: 22px; - - ${FormCheckboxFlag}:before { - width: 6px; - height: 11px; - margin: 1px 0 0 6px; - } -`; - -const largeSize = css` - width: 24px; - height: 24px; - - ${FormCheckboxFlag}:before { - width: 6px; - height: 15px; - margin: 0px 0 0 7px; - } -`; - -export default { - small: smallSize, - large: largeSize, -}; diff --git a/src/components/form/components/FormCheckbox/CheckboxThemes.jsx b/src/components/form/components/FormCheckbox/CheckboxThemes.jsx deleted file mode 100644 index fddb8ec3..00000000 --- a/src/components/form/components/FormCheckbox/CheckboxThemes.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import { css } from "styled-components"; - -import { FormCheckboxFlag } from "./FormCheckboxFlag"; - -import { colors } from "../../../../themes/colors"; - -const lightTheme = css` - ${({ checked, disabled }) => { - if (disabled) { - return css` - background-color: ${colors.grayLight}; - border-color: #dadada; - `; - } - - if (checked) { - return css` - background-color: ${colors.whiteSimple}; - border-color: ${colors.slate}; - - &:hover { - background-color: #f2f5f7; - } - `; - } - - return css` - background-color: ${colors.whiteSimple}; - border-color: #9aa7b3; - `; - }} - - ${FormCheckboxFlag}:before { - border-color: ${colors.slate}; - } -`; - -const darkTheme = css` - ${({ checked, disabled }) => { - if (disabled) { - return css` - background-color: ${colors.grayLight}; - border-color: #dadada; - `; - } - - if (checked) { - return css` - background-color: ${colors.slate}; - border-color: ${colors.slate}; - - &:hover { - background-color: #6e7b88; - border-color: #6e7b88; - } - `; - } - - return css` - background-color: ${colors.whiteSimple}; - border-color: #dadada; - - &:hover { - background-color: #f2f5f7; - } - `; - }} - - ${FormCheckboxFlag}:before { - border-color: ${colors.whiteSimple}; - } -`; - -export default { - light: lightTheme, - dark: darkTheme, -}; diff --git a/src/components/form/components/FormCheckbox/FormCheckbox.stories.js b/src/components/form/components/FormCheckbox/FormCheckbox.stories.js index 9f65c5e0..6b45806d 100644 --- a/src/components/form/components/FormCheckbox/FormCheckbox.stories.js +++ b/src/components/form/components/FormCheckbox/FormCheckbox.stories.js @@ -1,14 +1,12 @@ import React from "react"; import { storiesOf } from "@storybook/react"; -import { select, boolean } from "@storybook/addon-knobs"; +import { boolean } from "@storybook/addon-knobs"; import { useState } from "react"; import { FormCheckbox } from "./index"; storiesOf("Form Components| FormCheckbox", module).add("default", () => { - const checkboxTheme = select("Theme", ["light", "dark"], "light"); - const checkboxSize = select("Size", ["small", "large"], "small"); const isCheckboxDisabled = boolean("Disabled", false); const checkboxChecked = boolean("Checked", false); @@ -19,9 +17,9 @@ storiesOf("Form Components| FormCheckbox", module).add("default", () => { setChecked(!checked)} - checkboxTheme={checkboxTheme} - size={checkboxSize} + onChange={() => { + setChecked((checked) => !checked); + }} disabled={isCheckboxDisabled} /> ); diff --git a/src/components/form/components/FormCheckbox/FormCheckboxCheckedIcon.jsx b/src/components/form/components/FormCheckbox/FormCheckboxCheckedIcon.jsx new file mode 100644 index 00000000..5de528a7 --- /dev/null +++ b/src/components/form/components/FormCheckbox/FormCheckboxCheckedIcon.jsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +import { Check } from "../../../icons"; + +const FormCheckboxCheckedIcon = styled(Check)``; + +export { FormCheckboxCheckedIcon }; diff --git a/src/components/form/components/FormCheckbox/FormCheckboxFlag.jsx b/src/components/form/components/FormCheckbox/FormCheckboxFlag.jsx deleted file mode 100644 index 3b99a9fd..00000000 --- a/src/components/form/components/FormCheckbox/FormCheckboxFlag.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import styled from "styled-components"; - -const FormCheckboxFlag = styled.div` - position: absolute; - width: 100%; - height: 100%; - - &:before { - content: ""; - display: block; - border: 2px solid #fff; - border-top: 0; - border-left: 0; - transition: transform 120ms ease; - - transform: ${({ checked }) => - checked ? "rotate(45deg) scale(1)" : "rotate(45deg) scale(0)"}; - } -`; - -export { FormCheckboxFlag }; diff --git a/src/components/form/components/FormCheckbox/StyledFormCheckbox.jsx b/src/components/form/components/FormCheckbox/StyledFormCheckbox.jsx index 648e8beb..c65e1e24 100644 --- a/src/components/form/components/FormCheckbox/StyledFormCheckbox.jsx +++ b/src/components/form/components/FormCheckbox/StyledFormCheckbox.jsx @@ -1,21 +1,43 @@ -import styled from "styled-components"; +import styled, { css } from "styled-components"; -import CheckboxThemes from "./CheckboxThemes"; -import CheckboxSizes from "./CheckboxSizes"; +import { FormCheckboxCheckedIcon } from "./FormCheckboxCheckedIcon"; + +import { colors } from "../../../../style"; + +function getStyles({ disabled }) { + if (disabled) { + return css` + background-color: ${colors.grayLight}; + border-color: ${colors.grayWhite}; + color: ${colors.grayWhite}; + `; + } + + return css` + background-color: ${colors.whiteSimple}; + border-color: ${colors.grayDark}; + color: ${colors.slate}; + `; +} const StyledFormCheckbox = styled.label` cursor: ${({ disabled }) => (disabled ? "not-allowed" : "pointer")}; position: relative; - box-sizing: border-box; display: block; - + text-align: center; border: 1px solid; - border-radius: 2px; + border-radius: 3px; transition: background-color 120ms ease-in-out, border-color 120ms ease-in-out; + width: 22px; + height: 22px; + + ${getStyles} - ${({ checkboxTheme }) => CheckboxThemes[checkboxTheme]}; - ${({ size }) => CheckboxSizes[size]}; + ${FormCheckboxCheckedIcon} { + width: 10px; + height: 100%; + } `; export { StyledFormCheckbox }; diff --git a/src/components/form/components/FormCheckbox/index.jsx b/src/components/form/components/FormCheckbox/index.jsx index 8d0ceb08..872d3e75 100644 --- a/src/components/form/components/FormCheckbox/index.jsx +++ b/src/components/form/components/FormCheckbox/index.jsx @@ -2,36 +2,32 @@ import React from "react"; import PropTypes from "prop-types"; import { StyledFormCheckbox } from "./StyledFormCheckbox"; -import { FormCheckboxFlag } from "./FormCheckboxFlag"; +import { FormCheckboxCheckedIcon } from "./FormCheckboxCheckedIcon"; import { FormCheckboxInput } from "./FormCheckboxInput"; import { getTestId } from "../../utils"; -function FormCheckbox({ - checked, - onChange, - onBlur, - onClick, - name, - disabled, - checkboxTheme, - size, - className, - "data-testid": testId, -}) { - testId = getTestId(name, testId); +function FormCheckbox(props) { + const { + checked, + onChange, + onBlur, + onClick, + name, + disabled, + className, + } = props; + const testId = getTestId(props.name, props["data-testid"]); return ( - + {checked && } {
Select all} + label="Select all" data-testid="test-group-select-all" checked={selectableProps.isAllSelected} onChange={({ target }) => { @@ -45,7 +45,7 @@ storiesOf("Form Components| FormCheckboxGroup", module).add("default", () => { /> Deselect all} + label="Deselect all" data-testid="test-group-deselect-all" checked={selectableProps.isAllDeselected} onChange={({ target }) => { diff --git a/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/FormCheckboxGroupItemTitle.jsx b/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/FormCheckboxGroupItemTitle.jsx new file mode 100644 index 00000000..8905d44f --- /dev/null +++ b/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/FormCheckboxGroupItemTitle.jsx @@ -0,0 +1,20 @@ +import styled, { css } from "styled-components"; + +import { FormLabelTitle } from "../../FormLabel"; + +function getStyles({ checked }) { + return checked + ? css` + font-weight: bold; + ` + : null; +} + +const FormCheckboxGroupItemTitle = styled(FormLabelTitle)` + font-size: 16px; + line-height: 26px; + + ${getStyles} +`; + +export { FormCheckboxGroupItemTitle }; diff --git a/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/StyledFormCheckboxGroupItem.jsx b/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/StyledFormCheckboxGroupItem.jsx index 3fd3925e..4dfa95d6 100644 --- a/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/StyledFormCheckboxGroupItem.jsx +++ b/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/StyledFormCheckboxGroupItem.jsx @@ -1,8 +1,5 @@ import styled from "styled-components"; export const StyledFormCheckboxGroupItem = styled.div` - &:not(:last-of-type) { - margin-bottom: 10px; - line-height: 1.4; - } + height: 26px; `; diff --git a/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/index.jsx b/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/index.jsx index a5acfac5..b6f2b948 100644 --- a/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/index.jsx +++ b/src/components/form/components/FormCheckboxGroup/FormCheckboxGroupItem/index.jsx @@ -2,9 +2,10 @@ import React from "react"; import PropTypes from "prop-types"; import { FormCheckbox } from "../../FormCheckbox"; -import { FormLabel, FormLabelTitle } from "../../FormLabel"; +import { FormLabel } from "../../FormLabel"; import { StyledFormCheckboxGroupItem } from "./StyledFormCheckboxGroupItem"; +import { FormCheckboxGroupItemTitle } from "./FormCheckboxGroupItemTitle"; function FormCheckboxGroupItem({ label, @@ -18,7 +19,9 @@ function FormCheckboxGroupItem({ return ( - {label} + + {label} + ); } -describe("FormCheckbox tests", () => { - test("FormCheckbox should change checked state by click", () => { +describe("FormCheckboxGroup tests", () => { + test("FormCheckboxGroup should change checked state by click", () => { const { getByTestId } = renderFormCheckboxGroup(); expect(getByTestId("test-form")).toHaveFormValues({ diff --git a/src/components/form/components/FormCheckboxGroup/index.jsx b/src/components/form/components/FormCheckboxGroup/index.jsx index e7b8f30b..83c28219 100644 --- a/src/components/form/components/FormCheckboxGroup/index.jsx +++ b/src/components/form/components/FormCheckboxGroup/index.jsx @@ -1,38 +1,40 @@ import React from "react"; import PropTypes from "prop-types"; +import { StyledFormCheckboxGroup } from "./StyledFormCheckboxGroup"; import { FormCheckboxGroupItem } from "./FormCheckboxGroupItem"; - -import { SelectableList } from "../../../SelectableList"; +import { useSelectableList } from "../../../../hooks/index"; function FormCheckboxGroup({ value, onChange, groupName, render, options }) { + const { ...selectedListOptions } = useSelectableList({ + options, + value, + onChange, + }); + return ( - { - return render({ - ...selectedListProps, - checkboxes: () => { - const { selected, handleCheckboxChange } = selectedListProps; - - return options.map(({ label, value: optionValue }) => { - return ( - - ); - }); - }, - }); - }} - /> + + {render({ + ...selectedListOptions, + checkboxes: () => { + const { selected, onCheckboxChange } = selectedListOptions; + return options.map(({ label, value: optionValue }) => { + const strOption = String(optionValue); + + return ( + + ); + }); + }, + })} + ); } diff --git a/src/components/form/components/FormDropdown/FormDropdown.stories.js b/src/components/form/components/FormDropdown/FormDropdown.stories.js index 70c37880..15384610 100644 --- a/src/components/form/components/FormDropdown/FormDropdown.stories.js +++ b/src/components/form/components/FormDropdown/FormDropdown.stories.js @@ -205,7 +205,7 @@ storiesOf("Form Components/FormDropdown", module) width={number("width", 200)} withSearch={boolean("with search", false)} disabled={boolean("disabled", false)} - renderItem={item => ( + renderItem={(item) => ( {`${isEven(item.value) ? "🍎" : "🍌"} ${item.label}`} )} /> diff --git a/src/components/form/components/FormDropdown/FormDropdownControl.jsx b/src/components/form/components/FormDropdown/FormDropdownControl.jsx index e8dcf97b..a77a76bf 100644 --- a/src/components/form/components/FormDropdown/FormDropdownControl.jsx +++ b/src/components/form/components/FormDropdown/FormDropdownControl.jsx @@ -1,13 +1,11 @@ -import styled, { css } from "styled-components"; +import styled from "styled-components"; import { Button } from "../../../Button"; -import { colors } from "../../../../themes/colors"; +import { colors } from "../../../../style"; import { textTrimStyles } from "../../../Text/TextTrim"; -const FormDropdownControl = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` +const FormDropdownControl = styled(Button)` ${textTrimStyles} width: 100%; position: relative; diff --git a/src/components/form/components/FormDropdown/FormDropdownMenu.jsx b/src/components/form/components/FormDropdown/FormDropdownMenu.jsx index 29732767..5ab987ea 100644 --- a/src/components/form/components/FormDropdown/FormDropdownMenu.jsx +++ b/src/components/form/components/FormDropdown/FormDropdownMenu.jsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; -import { colors } from "../../../../themes/colors"; +import { colors } from "../../../../style"; const FormDropdownMenu = styled.ul` box-sizing: border-box; diff --git a/src/components/form/components/FormDropdown/FormDropdownOption.jsx b/src/components/form/components/FormDropdown/FormDropdownOption.jsx index 28d52b35..ee3f5770 100644 --- a/src/components/form/components/FormDropdown/FormDropdownOption.jsx +++ b/src/components/form/components/FormDropdown/FormDropdownOption.jsx @@ -2,7 +2,32 @@ import styled, { css } from "styled-components"; import { textTrimStyles } from "../../../Text/TextTrim"; -import { colors } from "../../../../themes/colors"; +import { colors } from "../../../../style"; + +function getHighlightedStyles({ highlighted }) { + return highlighted + ? css` + background-color: #f5f5f5; + ` + : css` + &:hover { + background-color: ${colors.whiteSimple}; + } + `; +} + +function getDisabledStyles({ disabled }) { + return disabled + ? css` + border-color: #546e7a; + opacity: 0.5; + ` + : css` + &:hover { + background-color: #f5f5f5; + } + `; +} const FormDropdownOption = styled.li` ${textTrimStyles} @@ -11,39 +36,17 @@ const FormDropdownOption = styled.li` font-size: 16px; line-height: 1.63; transition: background-color 120ms ease-in-out; - padding: 12px 22px 12px 36px; + padding: 12px 36px; + ${getHighlightedStyles} + ${getDisabledStyles} &:first-child { padding-top: 16px; } + &:last-child { padding-bottom: 16px; } - - ${({ highlighted }) => { - return highlighted - ? css` - background-color: #f5f5f5; - ` - : css` - &:hover { - background-color: ${colors.whiteSimple}; - } - `; - }}; - - ${({ disabled }) => { - return disabled - ? css` - border-color: #546e7a; - opacity: 0.5; - ` - : css` - &:hover { - background-color: #f5f5f5; - } - `; - }} `; export { FormDropdownOption }; diff --git a/src/components/form/components/FormDropdown/FormDropdownOptionSelectedIcon.jsx b/src/components/form/components/FormDropdown/FormDropdownOptionSelectedIcon.jsx index a85679a3..80e595de 100644 --- a/src/components/form/components/FormDropdown/FormDropdownOptionSelectedIcon.jsx +++ b/src/components/form/components/FormDropdown/FormDropdownOptionSelectedIcon.jsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -import { Check } from "../../../../assets/icons"; +import { Check } from "../../../icons"; const FormDropdownOptionSelectedIcon = styled(Check)` position: absolute; diff --git a/src/components/form/components/FormDropdown/FormDropdownResetButton.jsx b/src/components/form/components/FormDropdown/FormDropdownResetButton.jsx index acb5c98e..88522ec4 100644 --- a/src/components/form/components/FormDropdown/FormDropdownResetButton.jsx +++ b/src/components/form/components/FormDropdown/FormDropdownResetButton.jsx @@ -1,9 +1,8 @@ import styled from "styled-components"; -import Button from "../../../Button"; -const FormDropdownResetButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` +import { Button } from "../../../Button"; + +const FormDropdownResetButton = styled(Button)` position: absolute; top: 0; bottom: 0; diff --git a/src/components/form/components/FormDropdown/StyledFormDropdown.jsx b/src/components/form/components/FormDropdown/StyledFormDropdown.jsx index 977e9f1a..2ddd8af5 100644 --- a/src/components/form/components/FormDropdown/StyledFormDropdown.jsx +++ b/src/components/form/components/FormDropdown/StyledFormDropdown.jsx @@ -1,9 +1,15 @@ -import styled from "styled-components"; +import styled, { css } from "styled-components"; const StyledFormDropdown = styled.div` position: relative; width: ${({ width }) => (width ? `${width}px` : "100%")}; opacity: ${({ disabled }) => (disabled ? 0.5 : 1)}; + + ${({ isFetching }) => + isFetching && + css` + opacity: 0.8; + `} `; export { StyledFormDropdown }; diff --git a/src/components/form/components/FormDropdown/__tests__/FormDropdown.js b/src/components/form/components/FormDropdown/__tests__/FormDropdown.js index e91a5ddf..ef34d7b9 100644 --- a/src/components/form/components/FormDropdown/__tests__/FormDropdown.js +++ b/src/components/form/components/FormDropdown/__tests__/FormDropdown.js @@ -42,7 +42,7 @@ function renderFormDropdown(props = {}) { name={componentName} options={options} value={value} - onChange={ev => { + onChange={(ev) => { setValue(ev); onChangeMock(ev); }} diff --git a/src/components/form/components/FormDropdown/index.jsx b/src/components/form/components/FormDropdown/index.jsx index f413460e..89a89427 100644 --- a/src/components/form/components/FormDropdown/index.jsx +++ b/src/components/form/components/FormDropdown/index.jsx @@ -13,7 +13,7 @@ import { FormDropdownInputWrapper } from "./FormDropdownInputWrapper"; import { FormDropdownInput } from "./FormDropdownInput"; import { FormDropdownResetButton } from "./FormDropdownResetButton"; import { FormDropdownOptionSelectedIcon } from "./FormDropdownOptionSelectedIcon"; -import { Times } from "../../../../assets/icons"; +import { Times } from "../../../icons"; import { searchInList, capitalize } from "../../../../utils/helpers"; import { identity, property as prop, isEqual, get } from "lodash-es"; @@ -45,6 +45,7 @@ function FormDropdown({ "data-testid": testId, multiple, renderSelected, + isFetching, }) { if (name) { testId = name; @@ -80,7 +81,7 @@ function FormDropdown({ function getHighlighted(selected) { const selectedOptionIndex = selected ? searchInList(options, inputValue, ["label"]).findIndex( - item => item.value === selected.value + (item) => item.value === selected.value ) : 0; @@ -197,13 +198,13 @@ function FormDropdown({ if (multiple) { const selectedInOptions = selected.find( - item => item.value === option.value + (item) => item.value === option.value ); if (selectedInOptions) { const changes = selected - .filter(option => !isSingle(option)) - .filter(option => !isEqual(option, selectedInOptions)); + .filter((option) => !isSingle(option)) + .filter((option) => !isEqual(option, selectedInOptions)); if (hasDefault && changes.length === 0) { onChange(defaultOptions); @@ -211,7 +212,7 @@ function FormDropdown({ onChange(changes); } } else { - onChange(selected.filter(option => !isSingle(option)).concat(option)); + onChange(selected.filter((option) => !isSingle(option)).concat(option)); } } else { onChange(option); @@ -243,7 +244,7 @@ function FormDropdown({ function getIsOptionSelected(option, selectedItem) { if (multiple) { return ( - selectedItem.find(item => item.value === option.value) !== undefined + selectedItem.find((item) => item.value === option.value) !== undefined ); } else { return isEqual(selectedItem, option); @@ -255,7 +256,7 @@ function FormDropdown({ initialSelectedItem={value} selectedItem={selected} inputValue={inputValue} - itemToString={item => (item ? item.label : "")} + itemToString={(item) => (item ? item.label : "")} stateReducer={stateReducer} onChange={handleChange} onStateChange={handleStateChange} @@ -283,6 +284,7 @@ function FormDropdown({ disabled, className, "data-testid": testId, + isFetching, })} > { + onClick={(e) => { e.stopPropagation(); clearSelection(); closeMenu(); @@ -311,10 +313,9 @@ function FormDropdown({ {isOpen && ( @@ -323,8 +324,8 @@ function FormDropdown({ )} @@ -346,7 +347,7 @@ function FormDropdown({ "data-testid": `${testId}-option-${item.value}`, })} > - {selected && ( + {multiple && selected && ( )} {renderItem(item)} @@ -366,12 +367,19 @@ function FormDropdown({ const optionShape = PropTypes.shape({ label: PropTypes.string.isRequired, - value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }); FormDropdown.propTypes = { name: PropTypes.string, - value: PropTypes.oneOfType([PropTypes.arrayOf(optionShape), optionShape]), + value: PropTypes.oneOfType([ + optionShape, + PropTypes.arrayOf(optionShape), + PropTypes.string, + PropTypes.arrayOf(PropTypes.string), + PropTypes.number, + PropTypes.arrayOf(PropTypes.number), + ]), withSearch: PropTypes.bool, multiple: PropTypes.bool, disabled: PropTypes.bool, diff --git a/src/components/form/components/FormField/FormFieldIcon.jsx b/src/components/form/components/FormField/FormFieldIcon.jsx index 8516f697..ac690770 100644 --- a/src/components/form/components/FormField/FormFieldIcon.jsx +++ b/src/components/form/components/FormField/FormFieldIcon.jsx @@ -1,9 +1,13 @@ import styled from "styled-components"; -const FormFieldIcon = styled.span` - display: inline-block; - margin-left: 5px; - color: #aeb9be; +import { InfoCircle } from "../../../icons"; + +import { colors } from "../../../../style"; + +const FormFieldIcon = styled(InfoCircle)` + align-self: flex-start; + color: ${colors.grayMedium}; + margin-left: 2px; `; -export default FormFieldIcon; +export { FormFieldIcon }; diff --git a/src/components/form/components/FormField/FormFieldTag.jsx b/src/components/form/components/FormField/FormFieldTag.jsx index 4a15c0fd..21e53fab 100644 --- a/src/components/form/components/FormField/FormFieldTag.jsx +++ b/src/components/form/components/FormField/FormFieldTag.jsx @@ -1,14 +1,18 @@ import styled from "styled-components"; +import { colors } from "../../../../style"; + const FormFieldTag = styled.span` display: inline-block; + align-self: center; margin-left: 6px; padding: 0 5px; font-size: 13px; + line-height: 1.5; font-weight: 700; - color: #fff; + color: ${colors.whiteSimple}; + background-color: ${colors.grayMedium}; border-radius: 3px; - background-color: #aeb9be; `; export default FormFieldTag; diff --git a/src/components/form/components/FormField/index.jsx b/src/components/form/components/FormField/index.jsx index c26e57e2..545f2142 100644 --- a/src/components/form/components/FormField/index.jsx +++ b/src/components/form/components/FormField/index.jsx @@ -7,15 +7,14 @@ import StyledFormField from "./StyledFormField"; import { FormLabel, FormLabelTitle } from "../FormLabel"; import { Tooltip } from "../../../Tooltip"; -import FormFieldIcon from "./FormFieldIcon"; +import { FormFieldIcon } from "./FormFieldIcon"; import FormFieldTag from "./FormFieldTag"; import FormFieldError from "./FormFieldError"; -import { InfoCircle } from "../../../../assets/icons"; - function FormField(props) { const { label, + labelType, render, name, type, @@ -36,7 +35,7 @@ function FormField(props) { const hasError = Boolean(touched && error); - const onChange = ev => { + const onChange = (ev) => { if (ev.type) { field.onChange(ev); } else { @@ -69,9 +68,7 @@ function FormField(props) { return ( tip && ( - - - + ) ); @@ -96,11 +93,13 @@ function FormField(props) { {label} + {labelType === "bold" && ":"} {getFormFieldTip()} {getFormFieldTag()} @@ -123,6 +122,7 @@ function FormField(props) { FormField.propTypes = { name: PropTypes.string.isRequired, label: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), + labelType: PropTypes.oneOf(["bold", "normal"]), tip: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), tag: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), direction: PropTypes.oneOf(["row", "column"]), @@ -149,6 +149,7 @@ FormField.propTypes = { FormField.defaultProps = { direction: "row", + labelType: "normal", showError: true, }; diff --git a/src/components/form/components/FormInput/FormInput.stories.js b/src/components/form/components/FormInput/FormInput.stories.js index a7ef3fdf..116075df 100644 --- a/src/components/form/components/FormInput/FormInput.stories.js +++ b/src/components/form/components/FormInput/FormInput.stories.js @@ -1,4 +1,5 @@ import React, { useState } from "react"; + import { storiesOf } from "@storybook/react"; import { boolean } from "@storybook/addon-knobs"; diff --git a/src/components/form/components/FormInput/FormInputUneditable.jsx b/src/components/form/components/FormInput/FormInputUneditable.jsx new file mode 100644 index 00000000..0444a605 --- /dev/null +++ b/src/components/form/components/FormInput/FormInputUneditable.jsx @@ -0,0 +1,13 @@ +import styled from "styled-components"; + +import { colors } from "../../../../style"; + +const FormInputUneditable = styled.p` + margin: 0; + font-weight: bold; + font-size: 16px; + line-height: 26px; + color: ${colors.darkBlack}; +`; + +export { FormInputUneditable }; diff --git a/src/components/form/components/FormInput/StyledFormInput.jsx b/src/components/form/components/FormInput/StyledFormInput.jsx new file mode 100644 index 00000000..bdc595f9 --- /dev/null +++ b/src/components/form/components/FormInput/StyledFormInput.jsx @@ -0,0 +1,32 @@ +import styled from "styled-components"; + +import { colors } from "../../../../style"; + +const StyledFormInput = styled.input` + box-sizing: border-box; + padding: 6px 16px; + height: 30px; + background-color: ${colors.whiteGrayLight}; + border-radius: 5px; + font-size: 14px; + line-height: 18px; + color: ${colors.darkBlack}; + border: 1px solid transparent; + + &[type="number"]::-webkit-inner-spin-button, + &[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } + + &:focus { + outline: none; + border: 1px solid ${colors.grayMedium}; + } + + &:disabled { + color: ${colors.grayWhite}; + } +`; + +export { StyledFormInput }; diff --git a/src/components/form/components/FormInput/index.jsx b/src/components/form/components/FormInput/index.jsx index dd928440..6a606e8c 100644 --- a/src/components/form/components/FormInput/index.jsx +++ b/src/components/form/components/FormInput/index.jsx @@ -1,49 +1,54 @@ import React from "react"; import PropTypes from "prop-types"; -import styled from "styled-components"; -import { getTestId } from "../../utils"; - -const StyledFormInput = styled.input` - box-sizing: border-box; - border: 1px solid #9aa7b3; - border-radius: 3px; - padding: 2px 10px; - - &:focus { - outline: none; - } - - &[type="number"]::-webkit-inner-spin-button, - &[type="number"]::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; - } -`; +import { StyledFormInput } from "./StyledFormInput"; +import { FormInputUneditable } from "./FormInputUneditable"; -function FormInput(props) { - const testId = getTestId(props.name, props["data-testid"]); +import { getTestId } from "../../utils"; +const FormInput = React.forwardRef((props, ref) => { return ( - + ); -} +}); FormInput.propTypes = { onChange: PropTypes.func.isRequired, onBlur: PropTypes.func.isRequired, value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, name: PropTypes.string.isRequired, - placeholder: PropTypes.string, type: PropTypes.oneOf(["text", "password", "email", "number"]), disabled: PropTypes.bool, "data-testid": PropTypes.string, className: PropTypes.string, - innerRef: PropTypes.object, }; FormInput.defaultProps = { type: "text", }; -export { FormInput, StyledFormInput }; +FormInput.Password = function (props) { + return ; +}; + +FormInput.Number = function (props) { + return ; +}; + +FormInput.Uneditable = function (props) { + // eslint-disable-next-line react/prop-types + return {props.value}; +}; + +const StyledFormInputUneditable = FormInputUneditable; + +export { + FormInput, + StyledFormInput, + FormInputUneditable, + StyledFormInputUneditable, +}; diff --git a/src/components/form/components/FormInputToggle/FormInputToggle.stories.js b/src/components/form/components/FormInputToggle/FormInputToggle.stories.js deleted file mode 100644 index 8785ea4c..00000000 --- a/src/components/form/components/FormInputToggle/FormInputToggle.stories.js +++ /dev/null @@ -1,35 +0,0 @@ -import React from "react"; -import { storiesOf } from "@storybook/react"; -import { number, text, boolean } from "@storybook/addon-knobs"; -import { action } from "@storybook/addon-actions"; - -import { useState } from "react"; - -import { FormInputToggle } from "./index"; - -storiesOf("Form Components| FormInputToggle", module).add("default", () => { - function ComponentWrapper() { - const [value, setValue] = useState(""); - - return ( - { - const { - target: { value }, - } = ev; - setValue(value); - action("On change")(ev); - }} - onBlur={action("On blur")} - placeholder={text("placeholder", "enter smth")} - valuePlaceholder={text("value placeholder", "touch me")} - disabled={boolean("disabled", false)} - width={number("width", 200)} - /> - ); - } - - return ; -}); diff --git a/src/components/form/components/FormInputToggle/FormInputToggleButton.jsx b/src/components/form/components/FormInputToggle/FormInputToggleButton.jsx deleted file mode 100644 index a5be9285..00000000 --- a/src/components/form/components/FormInputToggle/FormInputToggleButton.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import styled from "styled-components"; - -import { Button } from "../../../Button"; -import { FormUneditableFieldStyles } from "../FormUneditableField/StyledFormUneditableField"; - -import { colors } from "../../../../themes/colors"; - -const FormInputToggleButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", - isRounded: false, -}))` - ${FormUneditableFieldStyles} - /* 11px - смСщСниС ΠΈΠ½ΠΏΡƒΡ‚Π° Π²Π»Π΅Π²ΠΎ */ - /* тСкст пСрСносится Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ строку */ - /* width: calc(100% - 11px); */ - width: 100%; - text-decoration: underline dotted; - border-bottom: 1px dotted - ${({ hasContent }) => (hasContent ? "transparent" : colors.black)}; -`; - -export { FormInputToggleButton }; diff --git a/src/components/form/components/FormInputToggle/StyledFormInputToggle.jsx b/src/components/form/components/FormInputToggle/StyledFormInputToggle.jsx deleted file mode 100644 index 39b2f5fa..00000000 --- a/src/components/form/components/FormInputToggle/StyledFormInputToggle.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import styled from "styled-components"; - -import { StyledFormInput } from "../FormInput"; - -const StyledFormInputToggle = styled.span` - height: 24px; - line-height: 24px; - display: inline-block; - width: ${props => (props.width ? props.width + "px" : "auto")}; - min-width: ${({ hasValue }) => (hasValue ? "auto" : "100px")}; - cursor: pointer; - - ${StyledFormInput} { - width: ${props => (props.width ? "100%" : "auto")}; - position: relative; - left: -11px; - } -`; - -export { StyledFormInputToggle }; diff --git a/src/components/form/components/FormInputToggle/__tests__/FormInputToggle.js b/src/components/form/components/FormInputToggle/__tests__/FormInputToggle.js deleted file mode 100644 index f0cc5fe8..00000000 --- a/src/components/form/components/FormInputToggle/__tests__/FormInputToggle.js +++ /dev/null @@ -1,114 +0,0 @@ -import React, { useState } from "react"; - -import { FormInputToggle } from "../index"; - -import { fireEvent } from "@testing-library/react"; -import { render } from "../../../../../../test/utils"; - -const onChangeMock = jest.fn(); -const onBlurMock = jest.fn(); - -const componentName = "test-form-input"; - -afterEach(() => { - onChangeMock.mockClear(); - onBlurMock.mockClear(); -}); - -afterAll(() => { - onChangeMock.mockReset(); - onBlurMock.mockReset(); -}); - -function renderFormInputToggle(props) { - function FormInputToggleWrapper() { - const [value, setValue] = useState(null); - - return ( -
- { - setValue(ev.target.value); - onChangeMock(ev); - }} - onBlur={onBlurMock} - {...props} - /> - - ); - } - - return render(); -} - -describe("FormInputToggle tests", () => { - test("FormInputToggle should hide button and render input on click", () => { - const { queryByTestId, getByTestId } = renderFormInputToggle(); - - expect(queryByTestId(`${componentName}-input`)).not.toBeInTheDocument(); - expect(queryByTestId(`${componentName}-button`)).toBeInTheDocument(); - - fireEvent.click(getByTestId(componentName)); - - expect(queryByTestId(`${componentName}-input`)).toBeInTheDocument(); - expect(queryByTestId(`${componentName}-button`)).not.toBeInTheDocument(); - }); - - test("FormInputToggle should focus on input after render it", () => { - const { queryByTestId, getByTestId } = renderFormInputToggle(); - - fireEvent.click(getByTestId(componentName)); - - expect(queryByTestId(`${componentName}-input`)).toHaveFocus(); - }); - - test("FormInputToggle should not hide input and render button on click inside", () => { - const { queryByTestId, getByTestId } = renderFormInputToggle(); - - fireEvent.click(getByTestId(componentName)); - fireEvent.click(getByTestId(componentName)); - - expect(queryByTestId(`${componentName}-input`)).toBeInTheDocument(); - expect(queryByTestId(`${componentName}-button`)).not.toBeInTheDocument(); - }); - - test("FormInputToggle should change input value correctly", () => { - const { queryByTestId, getByTestId } = renderFormInputToggle(); - - fireEvent.click(getByTestId(componentName)); - fireEvent.change(getByTestId(`${componentName}-input`), { - target: { value: "jane_doe" }, - }); - - expect(queryByTestId(`${componentName}-input`)).toBeInTheDocument(); - expect(queryByTestId(`${componentName}-button`)).not.toBeInTheDocument(); - - fireEvent.blur(getByTestId(`${componentName}-input`)); - - expect(queryByTestId(`${componentName}-button`)).toHaveTextContent( - "jane_doe" - ); - expect(onChangeMock.mock.calls).toHaveLength(1); - }); - - test("FormInputToggle should call onBlur callback correctly", () => { - const { getByTestId } = renderFormInputToggle(); - - fireEvent.click(getByTestId(componentName)); - fireEvent.blur(getByTestId(`${componentName}-input`)); - - expect(onBlurMock.mock.calls).toHaveLength(1); - }); - - test("FormInputToggle should hide input and render button on click outside", () => { - const { queryByTestId, getByTestId } = renderFormInputToggle(); - - fireEvent.click(getByTestId(componentName)); - fireEvent.blur(getByTestId(`${componentName}-input`)); - - expect(queryByTestId(`${componentName}-input`)).not.toBeInTheDocument(); - expect(queryByTestId(`${componentName}-button`)).toBeInTheDocument(); - }); -}); diff --git a/src/components/form/components/FormInputToggle/index.jsx b/src/components/form/components/FormInputToggle/index.jsx deleted file mode 100644 index f63c78be..00000000 --- a/src/components/form/components/FormInputToggle/index.jsx +++ /dev/null @@ -1,104 +0,0 @@ -import React, { useEffect } from "react"; -import PropTypes from "prop-types"; - -import { useRef, useState } from "react"; - -import { FormInput } from "../FormInput"; -import { StyledFormInputToggle } from "./StyledFormInputToggle"; -import { FormInputToggleButton } from "./FormInputToggleButton"; - -import { getTestId } from "../../utils"; - -function FormInputToggle({ - initialOpen, - name, - width, - value, - onChange, - onBlur, - disabled, - type, - placeholder, - buttonText, - valuePlaceholder, - className, - "data-testid": testId, -}) { - testId = getTestId(name, testId); - - const [isOpen, setIsOpen] = useState(initialOpen); - const inputRef = useRef(null); - - useEffect(() => { - if (isOpen && inputRef.current) { - inputRef.current.focus(); - } - }, [isOpen]); - - const buttonContent = buttonText || value || valuePlaceholder; - const hasValue = value !== undefined && value !== null && value !== ""; - - return ( - { - setIsOpen(true); - }} - > - {isOpen ? ( - { - setIsOpen(false); - if (onBlur) { - onBlur(ev); - } - }} - value={hasValue ? value : ""} - innerRef={inputRef} - disabled={disabled} - data-testid={testId + "-input"} - /> - ) : ( - - {buttonContent} - - )} - - ); -} - -FormInputToggle.propTypes = { - onChange: PropTypes.func.isRequired, - onBlur: PropTypes.func, - value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - name: PropTypes.string.isRequired, - placeholder: PropTypes.string, - type: PropTypes.oneOf(["text", "password", "email", "number"]), - initialOpen: PropTypes.bool, - width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - disabled: PropTypes.bool, - className: PropTypes.string, - valuePlaceholder: PropTypes.string, - buttonText: PropTypes.string, - "data-testid": PropTypes.string, -}; - -FormInputToggle.defaultProps = { - type: "text", - initialOpen: false, -}; - -export { FormInputToggle, StyledFormInputToggle }; diff --git a/src/components/form/components/FormLabel/FormLabelTitle.jsx b/src/components/form/components/FormLabel/FormLabelTitle.jsx index 7e9dc839..dfefb562 100644 --- a/src/components/form/components/FormLabel/FormLabelTitle.jsx +++ b/src/components/form/components/FormLabel/FormLabelTitle.jsx @@ -1,8 +1,14 @@ import styled from "styled-components"; +import { colors } from "../../../../style"; + const FormLabelTitle = styled.span` + display: flex; font-weight: ${({ bold }) => (bold ? 600 : 200)}; cursor: pointer; + font-size: 16px; + line-height: 26px; + color: ${colors.darkBlack}; `; export { FormLabelTitle }; diff --git a/src/components/form/components/FormLabel/index.jsx b/src/components/form/components/FormLabel/index.jsx index 49831f17..da600c58 100644 --- a/src/components/form/components/FormLabel/index.jsx +++ b/src/components/form/components/FormLabel/index.jsx @@ -1,13 +1,48 @@ -import styled from "styled-components"; +import styled, { css } from "styled-components"; + +import { FormLabelTitle } from "./FormLabelTitle"; + +function getDirectionStyles({ direction }) { + return direction === "row" + ? css` + align-items: center; + ` + : css` + flex-direction: column; + + ${FormLabelTitle} { + margin-bottom: 6px; + } + `; +} + +function getTypeStyles({ labelType }) { + return labelType === "bold" + ? css` + ${FormLabelTitle} { + font-weight: 600; + font-size: 12px; + line-height: 16px; + } + ` + : css` + ${FormLabelTitle} { + font-size: 16px; + line-height: 26px; + } + `; +} const FormLabel = styled.label` display: inline-flex; - flex-direction: ${({ direction }) => direction}; - align-items: ${({ direction }) => direction === "row" && "center"}; - height: ${({ height }) => (height ? `${height}px` : "25px")}; + ${getDirectionStyles} + ${getTypeStyles} `; const StyledFormLabel = FormLabel; -export { FormLabelTitle } from "./FormLabelTitle"; -export { FormLabel, StyledFormLabel }; +FormLabel.defaultProps = { + direction: "row", +}; + +export { FormLabel, StyledFormLabel, FormLabelTitle }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelect.stories.js b/src/components/form/components/FormMultiSelect/FormMultiSelect.stories.js index dd37538c..5723ddd3 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelect.stories.js +++ b/src/components/form/components/FormMultiSelect/FormMultiSelect.stories.js @@ -1,6 +1,6 @@ import React from "react"; import { storiesOf } from "@storybook/react"; -import { text, boolean, number } from "@storybook/addon-knobs"; +import { text, boolean } from "@storybook/addon-knobs"; import { generateOptions } from "../../../../../test/generate"; @@ -24,7 +24,6 @@ storiesOf("Form Components| FormMultiSelect", module) value={multiSelectValue} onChange={setMultiSelectValue} isLoading={boolean("isLoading", false)} - width={number("width", 600)} /> ); } @@ -42,7 +41,6 @@ storiesOf("Form Components| FormMultiSelect", module) value={multiSelectValue} onChange={setMultiSelectValue} isLoading={boolean("isLoading", false)} - width={number("width", 600)} /> ); } diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectInput.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectInput.jsx index 3673309b..bbd43c56 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectInput.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectInput.jsx @@ -1,18 +1,20 @@ import styled from "styled-components"; +import { colors } from "../../../../style"; + const FormMultiSelectInput = styled.input` - background-color: transparent; + display: inline-block; width: 350px; border: none; outline: none; - display: inline-block; - font-weight: 600; - line-height: 30px; - color: #444; + color: ${colors.darkBlack}; + font-size: 16px; + line-height: 18px; + background-color: transparent; + ::placeholder { - color: #444; + color: ${colors.darkBlack}; } - padding-left: 3px; `; -export default FormMultiSelectInput; +export { FormMultiSelectInput }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectInputWrapper.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectInputWrapper.jsx index 390d8a7d..1f3597cd 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectInputWrapper.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectInputWrapper.jsx @@ -1,9 +1,9 @@ import styled from "styled-components"; -const FormMultiSelectInput = styled.li` - margin-bottom: 8px; +const FormMultiSelectInputWrapper = styled.li` + margin-bottom: 6px; width: 130px; overflow: visible; `; -export default FormMultiSelectInput; +export { FormMultiSelectInputWrapper }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/FormMultiSelectOption.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/FormMultiSelectOption.jsx index 6255da1e..e6e2e12f 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/FormMultiSelectOption.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/FormMultiSelectOption.jsx @@ -1,20 +1,22 @@ -import styled from "styled-components"; +import styled, { css } from "styled-components"; + +import { colors } from "../../../../../style"; + +function getStyles({ isHighlighted }) { + if (isHighlighted) { + return css` + background-color: ${colors.whiteGrayLight}; + `; + } +} const FormMultiSelectOption = styled.li` font-size: 16px; - line-height: 1.5; - padding: 4px 23px; + line-height: 26px; + padding: 6px 18px; cursor: pointer; - background-color: ${({ isHighlighted }) => { - if (isHighlighted) return "#3b4b5a"; - - return "#fff"; - }}; - color: ${({ isHighlighted }) => { - if (isHighlighted) return "#fff"; - - return "#263238"; - }}; + color: ${colors.darkBlack}; + ${getStyles} `; -export default FormMultiSelectOption; +export { FormMultiSelectOption }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/index.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/index.jsx index f786bc11..04044dc1 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/index.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectMenu/index.jsx @@ -1,42 +1,23 @@ import styled, { css } from "styled-components"; +import { colors } from "../../../../../style"; + const FormMultiSelectMenu = styled.ul` list-style-type: none; position: absolute; - padding-left: 0; - box-shadow: 0px 0px 80px 0px rgba(162, 182, 189, 0.4); + box-shadow: 0px 0px 80px rgba(162, 182, 189, 0.2); + border-radius: 4px; max-height: 288px; overflow-y: auto; z-index: 1; - border-radius: 5px; - padding: 10px 0px; - background: white; - ${({ isUp }) => - isUp - ? css` - bottom: 85%; - ` - : css` - top: 85%; - `} + padding: 12px 0px; + background-color: ${colors.whiteSimple}; + ${({ isOpen }) => !isOpen && css` visibility: hidden; `} - - &:after { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: ${({ isLoading }) => (isLoading ? 1 : 0)}; - visibility: ${({ isLoading }) => (isLoading ? "visible" : "hidden")}; - transition: opacity 200ms ease-in-out, visibility 200ms ease-in-out; - background-color: rgba(255, 255, 255, 0.6); - } `; -export default FormMultiSelectMenu; +export { FormMultiSelectMenu }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemCross.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemCross.jsx deleted file mode 100644 index bc5491ec..00000000 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemCross.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import styled from "styled-components"; - -import Button from "../../../../../Button"; -import colors from "../../../../../../themes/colors"; - -const FormMultiSelectTagsItemCross = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` - margin-left: 4px; - padding: 0; - padding-top: 1px; - padding-left: 5px; - position: absolute; - right: 6px; - background: ${colors.whiteSimple}; - - &:before { - font-size: 18px; - color: #444; - content: "Γ—"; - font-style: normal; - cursor: pointer; - } -`; - -export default FormMultiSelectTagsItemCross; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemRemoveButton.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemRemoveButton.jsx new file mode 100644 index 00000000..4d3783e1 --- /dev/null +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemRemoveButton.jsx @@ -0,0 +1,9 @@ +import styled from "styled-components"; + +import { Button } from "../../../../../Button"; + +const FormMultiSelectTagsItemRemoveButton = styled(Button)` + padding: 0; +`; + +export { FormMultiSelectTagsItemRemoveButton }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemTitle.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemTitle.jsx index 7c176e13..5736bb88 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemTitle.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/FormMultiSelectTagsItemTitle.jsx @@ -1,13 +1,17 @@ import styled from "styled-components"; +import { textTrimStyles } from "../../../../../Text/TextTrim"; +import { colors } from "../../../../../../style"; + const FormMultiSelectTagsItemTitle = styled.span` - margin-right: 4px; - vertical-align: middle; - display: inline-block; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; + font-size: 12px; + line-height: 20px; + color: ${colors.darkBlack}; + ${textTrimStyles} + + &:not(:last-child) { + margin-right: 4px; + } `; -export default FormMultiSelectTagsItemTitle; +export { FormMultiSelectTagsItemTitle }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/StyledFormMultiSelectTagsItem.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/StyledFormMultiSelectTagsItem.jsx index 0a5de734..fbfdbbf0 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/StyledFormMultiSelectTagsItem.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/StyledFormMultiSelectTagsItem.jsx @@ -1,21 +1,17 @@ import styled from "styled-components"; -const FormMultiSelectTagsItem = styled.li` - padding-left: 5px; - padding-right: 5px; - color: #444; - background: #fff; - white-space: nowrap; - overflow: hidden; - cursor: pointer; - border-radius: 6px; - max-width: 150px; - margin-bottom: 8px; - position: relative; - padding-right: 20px; - &:not(:last-child) { - margin-right: 10px; - } +import { colors } from "../../../../../../style"; + +const StyledFormMultiSelectTagsItem = styled.li` + box-sizing: border-box; + display: flex; + align-items: center; + overflow: visible; + padding: 4px 6px; + background-color: ${colors.whiteSimple}; + border-radius: 4px; + height: 20px; + max-width: 180px; `; -export default FormMultiSelectTagsItem; +export { StyledFormMultiSelectTagsItem }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/index.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/index.jsx index bfd62ec9..2ec0f70c 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/index.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/FormMultiSelectTagsItem/index.jsx @@ -1,9 +1,10 @@ import React from "react"; import PropTypes from "prop-types"; -import StyledFormMultiSelectTagsItem from "./StyledFormMultiSelectTagsItem"; -import FormMultiSelectTagsItemTitle from "./FormMultiSelectTagsItemTitle"; -import FormMultiSelectTagsItemCross from "./FormMultiSelectTagsItemCross"; +import { StyledFormMultiSelectTagsItem } from "./StyledFormMultiSelectTagsItem"; +import { FormMultiSelectTagsItemTitle } from "./FormMultiSelectTagsItemTitle"; +import { FormMultiSelectTagsItemRemoveButton } from "./FormMultiSelectTagsItemRemoveButton"; +import { TimesDelete } from "../../../../../icons"; function FormMultiSelectTagsItem({ onCrossClick, @@ -13,10 +14,12 @@ function FormMultiSelectTagsItem({ return ( {title} - + > + + ); } @@ -27,4 +30,4 @@ FormMultiSelectTagsItem.propTypes = { onCrossClick: PropTypes.func.isRequired, }; -export default FormMultiSelectTagsItem; +export { FormMultiSelectTagsItem }; diff --git a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/index.jsx b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/index.jsx index e9beed69..d0c67309 100644 --- a/src/components/form/components/FormMultiSelect/FormMultiSelectTags/index.jsx +++ b/src/components/form/components/FormMultiSelect/FormMultiSelectTags/index.jsx @@ -1,21 +1,21 @@ import styled from "styled-components"; +import { StyledFormMultiSelectTagsItem } from "./FormMultiSelectTagsItem/StyledFormMultiSelectTagsItem"; + const FormMultiSelectTags = styled.ul` - box-sizing: border-box; list-style-type: none; - padding: 8px; margin: 0; - border-radius: 6px; - cursor: text; - font-size: 16px; - font-weight: 600; - color: #555; - background: #f3f3f3; - line-height: 26px; + padding: 0; display: flex; flex-wrap: wrap; - padding-left: 8px; - padding-bottom: 0; + cursor: text; + margin-bottom: -6px; + margin-right: -6px; + + ${StyledFormMultiSelectTagsItem} { + margin-bottom: 6px; + margin-right: 6px; + } `; -export default FormMultiSelectTags; +export { FormMultiSelectTags }; diff --git a/src/components/form/components/FormMultiSelect/StyledFormMultiSelect.jsx b/src/components/form/components/FormMultiSelect/StyledFormMultiSelect.jsx index 886b5e04..1dee87cf 100644 --- a/src/components/form/components/FormMultiSelect/StyledFormMultiSelect.jsx +++ b/src/components/form/components/FormMultiSelect/StyledFormMultiSelect.jsx @@ -1,8 +1,12 @@ import styled from "styled-components"; +import { colors } from "../../../../style"; + const StyledFormMultiSelect = styled.div` position: relative; - width: ${({ width }) => (width ? `${width}px` : "100%")}; + background-color: ${colors.whiteGrayLight}; + padding: 12px; + border-radius: 4px; &:after { content: ""; @@ -18,4 +22,4 @@ const StyledFormMultiSelect = styled.div` } `; -export default StyledFormMultiSelect; +export { StyledFormMultiSelect }; diff --git a/src/components/form/components/FormMultiSelect/__tests__/FormMultiSelect.js b/src/components/form/components/FormMultiSelect/__tests__/FormMultiSelect.js index 271557a2..badeeaeb 100644 --- a/src/components/form/components/FormMultiSelect/__tests__/FormMultiSelect.js +++ b/src/components/form/components/FormMultiSelect/__tests__/FormMultiSelect.js @@ -32,7 +32,7 @@ function renderFormMultiSelect(props) { name={componentName} value={value} options={options} - onChange={ev => { + onChange={(ev) => { setValue(ev); onChangeMock(ev); }} @@ -81,11 +81,11 @@ describe("FormMultiSelect tests", () => { fireEvent.click(getByTestId(`${componentName}-input`)); - optionsToSelect.forEach(option => { + optionsToSelect.forEach((option) => { fireEvent.click(getByTestId(`${componentName}-option-${option.value}`)); }); - optionsToSelect.forEach(option => { + optionsToSelect.forEach((option) => { expect(getByTestId(`${componentName}-tag-${option.value}`)); }); expect( @@ -104,11 +104,11 @@ describe("FormMultiSelect tests", () => { fireEvent.click(getByTestId(`${componentName}-input`)); - optionsToSelect.forEach(option => { + optionsToSelect.forEach((option) => { fireEvent.click(getByTestId(`${componentName}-option-${option.value}`)); }); - optionsToSelect.forEach(option => { + optionsToSelect.forEach((option) => { expect(getByTestId(`${componentName}-tag-${option.value}`)); }); diff --git a/src/components/form/components/FormMultiSelect/index.jsx b/src/components/form/components/FormMultiSelect/index.jsx index a53eaf49..a0c53dbf 100644 --- a/src/components/form/components/FormMultiSelect/index.jsx +++ b/src/components/form/components/FormMultiSelect/index.jsx @@ -1,17 +1,17 @@ import React from "react"; import PropTypes from "prop-types"; -import Downshift from "downshift"; - -import StyledFormMultiSelect from "./StyledFormMultiSelect"; -import FormMultiSelectInput from "./FormMultiSelectInput"; -import FormMultiSelectInputWrapper from "./FormMultiSelectInputWrapper"; - -import FormMultiSelectMenu from "./FormMultiSelectMenu"; -import FormMultiSelectOption from "./FormMultiSelectMenu/FormMultiSelectOption"; +import { useState, useEffect, useRef } from "react"; +import { usePrevious, useUpdateEffect } from "react-use"; -import FormMultiSelectTags from "./FormMultiSelectTags"; -import FormMultiSelectTagsItem from "./FormMultiSelectTags/FormMultiSelectTagsItem"; +import Downshift from "downshift"; +import { StyledFormMultiSelect } from "./StyledFormMultiSelect"; +import { FormMultiSelectInput } from "./FormMultiSelectInput"; +import { FormMultiSelectInputWrapper } from "./FormMultiSelectInputWrapper"; +import { FormMultiSelectMenu } from "./FormMultiSelectMenu"; +import { FormMultiSelectOption } from "./FormMultiSelectMenu/FormMultiSelectOption"; +import { FormMultiSelectTags } from "./FormMultiSelectTags"; +import { FormMultiSelectTagsItem } from "./FormMultiSelectTags/FormMultiSelectTagsItem"; import { searchInList, @@ -23,41 +23,74 @@ import { getTestId } from "../../utils"; const BACKSPACE_KEY_CODE = 8; -class FormMultiSelect extends React.Component { - static propTypes = { - name: PropTypes.string, - placeholder: PropTypes.string, - options: PropTypes.array.isRequired, - onChange: PropTypes.func.isRequired, - value: PropTypes.array, - onInputChange: PropTypes.func, - width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - menuRef: PropTypes.object, - isLoading: PropTypes.bool, - className: PropTypes.string, - "data-testid": PropTypes.string, - }; - - static defaultProps = { - options: [], - value: [], - }; +function FormMultiSelect(props) { + const { + options, + value, + onChange, + onInputChange, + menuRef, + width, + isLoading, + placeholder, + className, + name, + } = props; + const testId = getTestId(name, props["data-testid"]); + const [selected, setSelected] = useState(value); + const prevSelected = usePrevious(selected); + const [inputValue, setInputValue] = useState(""); + const [isOpen, setIsOpen] = useState(false); + const inputRef = useRef(null); + const tagsRef = useRef(null); + + useEffect(() => { + const input = inputRef.current; + + function handleKeyDown(ev) { + if (ev.keyCode === BACKSPACE_KEY_CODE && ev.target.value === "") { + // УдаляСм послСдний элСмСнт + setSelected((selected) => selected.slice(0, selected.length - 1)); + setIsOpen(false); + } + } - state = { - selected: this.props.value || [], - inputValue: "", - isOpen: false, - isMenuUp: false, - }; + if (input) { + input.addEventListener("keydown", handleKeyDown); + } - selectRef = React.createRef(); - inputRef = React.createRef(); - menuRef = React.createRef(); - tagsRef = React.createRef(); + return () => { + if (input) { + input.removeEventListener("keydown", handleKeyDown); + } + }; + }, []); + + const prevInputValue = usePrevious(inputValue); + useUpdateEffect(() => { + if (prevInputValue !== inputValue) { + if (!isOpen) { + setIsOpen(true); + } + + if (onInputChange) { + onInputChange(inputValue); + } + } + }, [inputValue]); + + useUpdateEffect(() => { + onChange(selected); + }, [selected]); + useUpdateEffect(() => { + if (value !== prevSelected) { + setSelected(value || []); + } + }, [value]); - stateReducer = (_, changes) => { + function stateReducer(_, changes) { if (changes.type === Downshift.stateChangeTypes.changeInput) { - this.setState({ inputValue: changes.inputValue }); + setInputValue(changes.inputValue); } switch (changes.type) { @@ -70,249 +103,176 @@ class FormMultiSelect extends React.Component { default: return changes; } - }; - - componentDidMount() { - this.inputRef.current.addEventListener("keydown", this.handleKeyDown); } - componentWillUnmount() { - this.inputRef.current.removeEventListener("keydown", this.handleKeyDown); + function addItem(item) { + setSelected((selected) => [...selected, item]); } - handleKeyDown = ev => { - if (ev.keyCode === BACKSPACE_KEY_CODE && this.state.inputValue === "") { - this.removeLastItem(); - this.setState({ isOpen: false }); - } - }; - - componentDidUpdate(prevProps, prevState) { - if (prevState.selected !== this.state.selected) { - this.props.onChange(this.state.selected); - } - - if (prevProps.value !== this.props.value) { - this.setState({ selected: this.props.value || [] }); - } - - if (prevState.inputValue !== this.state.inputValue && !this.state.isOpen) { - this.setState({ isOpen: true }); - } - - const actualMenuRef = this.props.menuRef || this.menuRef; - - if ( - !prevState.isOpen && - this.state.isOpen && - this.selectRef && - this.selectRef.current && - actualMenuRef && - actualMenuRef.current - ) { - const selectEl = this.selectRef.current; - const menuEl = actualMenuRef.current; - - const isMenuUp = - selectEl.getBoundingClientRect().top - - menuEl.getBoundingClientRect().height >= - 0; - - this.setState({ isMenuUp }); - } - - if (prevState.inputValue !== this.state.inputValue) { - this.props.onInputChange(this.state.inputValue); - } + function removeItem(item) { + setSelected((selected) => selected.filter((i) => i !== item)); } - removeItem = item => { - this.setState(({ selected }) => ({ - selected: selected.filter(i => i !== item), - })); - }; - - removeLastItem = () => { - this.setState(({ selected }) => ({ - selected: selected.slice(0, selected.length - 1), - })); - }; - - addItem(item) { - this.setState(({ selected }) => ({ - selected: [...selected, item], - })); + function handleChange(option) { + addItem(option); + setInputValue(""); + setIsOpen(true); } - handleChange = option => { - this.addItem(option); - this.setState({ inputValue: "", isOpen: true }); - }; - - handleInputBlur = () => { - this.setState({ isOpen: false, inputValue: "" }); - }; - - closeMenu = () => { - this.setState({ isOpen: false }); - }; - - toggleMenu = () => { - this.setState(({ isOpen }) => ({ - isOpen: !isOpen, - })); - }; + function handleInputBlur() { + setInputValue(""); + setIsOpen(false); + } - handleTagsClick = ({ target }) => { - if (target !== this.tagsRef.current && target !== this.inputRef.current) { - this.closeMenu(); + function handleTagsClick({ target }) { + if (target !== tagsRef.current && target !== inputRef.current) { + setIsOpen(false); return; } - this.inputRef.current.focus(); - this.toggleMenu(); - }; - - render() { - const { - options, - width, - placeholder, - menuRef = this.menuRef, - name, - isLoading, - className, - } = this.props; - const { selected, inputValue, isOpen, isMenuUp } = this.state; - - const testId = getTestId(name, this.props["data-testid"]); + inputRef.current.focus(); + setIsOpen((isOpen) => !isOpen); + } - return ( - (item && item.label ? item.label : "")} - stateReducer={this.stateReducer} - defaultHighlightedIndex={0} - inputValue={inputValue} - selectedItem={selected} - isOpen={isOpen} - data-testid={testId} - > - {({ - getItemProps, - getMenuProps, - highlightedIndex, - selectedItem, - getInputProps, - getRootProps, - }) => { - return ( - (item && item.label ? item.label : "")} + stateReducer={stateReducer} + defaultHighlightedIndex={0} + inputValue={inputValue} + selectedItem={selected} + isOpen={isOpen} + data-testid={testId} + > + {({ + getItemProps, + getMenuProps, + highlightedIndex, + selectedItem, + getInputProps, + getRootProps, + }) => { + return ( + + - - {selected.map(selected => { - const tagName = selected.label || selected; - const tagValue = selected.value || selected; - - return ( - { - this.removeItem(selected); - this.inputRef.current.focus(); - }} - /> - ); - })} - - { + const tagName = selected.label || selected; + const tagValue = selected.value || selected; + + return ( + { + removeItem(selected); + inputRef.current.focus(); + }} /> - - {isOpen && - searchInList( - options, - inputValue, - options[0] && options[0].label && ["label"] - ) - .filter(option => { - /** ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π° Π² массивС - * TODO: Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ стоит вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ - */ - return !( - some(selected, option) || selected.includes(option) - ); - }) - .map((item, index) => { - const itemValue = hasProperty(item, "value") - ? item.value - : item; - const itemLabel = hasProperty(item, "label") - ? item.label - : item; - - return ( - - {getStringShort(itemLabel, 20)} - - ); - })} - - - - - ); - }} - - ); - } + ); + })} + + + + {isOpen && + searchInList( + options, + inputValue, + options[0] && options[0].label && ["label"] + ) + .filter((option) => { + /** ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π° Π² массивС + * TODO: Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ стоит вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ + */ + return !( + some(selected, option) || selected.includes(option) + ); + }) + .map((item, index) => { + const itemValue = hasProperty(item, "value") + ? item.value + : item; + const itemLabel = hasProperty(item, "label") + ? item.label + : item; + + return ( + + {getStringShort(itemLabel, 20)} + + ); + })} + + + + + ); + }} + + ); } +FormMultiSelect.propTypes = { + name: PropTypes.string, + placeholder: PropTypes.string, + options: PropTypes.array.isRequired, + onChange: PropTypes.func.isRequired, + value: PropTypes.array, + onInputChange: PropTypes.func, + width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + menuRef: PropTypes.object, + isLoading: PropTypes.bool, + className: PropTypes.string, + "data-testid": PropTypes.string, +}; + +FormMultiSelect.defaultProps = { + options: [], + value: [], +}; + FormMultiSelect.Menu = FormMultiSelectMenu; FormMultiSelect.Option = FormMultiSelectOption; diff --git a/src/components/form/components/FormRangeSlider/FormRangeSlider.stories.js b/src/components/form/components/FormRangeSlider/FormRangeSlider.stories.js index 85ef85ef..380140cf 100644 --- a/src/components/form/components/FormRangeSlider/FormRangeSlider.stories.js +++ b/src/components/form/components/FormRangeSlider/FormRangeSlider.stories.js @@ -1,6 +1,6 @@ import React from "react"; import { storiesOf } from "@storybook/react"; -import { number, boolean } from "@storybook/addon-knobs"; +import { number } from "@storybook/addon-knobs"; import { useState } from "react"; @@ -19,7 +19,6 @@ storiesOf("Form Components| FormRangeSlider", module).add("default", () => { minFrom={number("min from", 0)} minTo={number("min from", 99)} width={number("width", 200)} - withClear={boolean("with clear", false)} />
); diff --git a/src/components/form/components/FormRangeSlider/FormRangeSliderResetButton.jsx b/src/components/form/components/FormRangeSlider/FormRangeSliderResetButton.jsx deleted file mode 100644 index 773f7188..00000000 --- a/src/components/form/components/FormRangeSlider/FormRangeSliderResetButton.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import styled, { css } from "styled-components"; - -import { Button } from "../../../Button"; - -const FormRangeSliderResetButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` - color: #6b787f; - font-size: 22px; - transition: opacity 120ms ease-in-out; - ${({ isHidden }) => - isHidden && - css` - opacity: 0; - `} -`; - -export { FormRangeSliderResetButton }; diff --git a/src/components/form/components/FormRangeSlider/__tests__/FormRangeSlider.js b/src/components/form/components/FormRangeSlider/__tests__/FormRangeSlider.js index 210240a2..0948f56f 100644 --- a/src/components/form/components/FormRangeSlider/__tests__/FormRangeSlider.js +++ b/src/components/form/components/FormRangeSlider/__tests__/FormRangeSlider.js @@ -27,7 +27,7 @@ function renderFormRangeSlider(props) { data-testid={componentName} from={value[0]} to={value[1]} - onChange={ev => { + onChange={(ev) => { setValue(ev); onChangeMock(ev); }} @@ -52,12 +52,11 @@ describe("FormRangeSlider tests", () => { ).toHaveTextContent(99); }); - test("FormRangeSlider should render clear button corretly", () => { - const { getByTestId } = renderFormRangeSlider({ - withClear: true, - }); - - expect(getByTestId(`${componentName}-clear`)).not.toBeVisible(); + /** + * TODO: ΠŸΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ этот тСст + */ + test.skip("FormRangeSlider should change value correctly", () => { + const { getByTestId } = renderFormRangeSlider(); /** * рСализация тСстирования drag and drop @@ -75,7 +74,5 @@ describe("FormRangeSlider tests", () => { clientX: 1, clientY: 0, }); - - expect(getByTestId(`${componentName}-clear`)).toBeVisible(); }); }); diff --git a/src/components/form/components/FormRangeSlider/index.jsx b/src/components/form/components/FormRangeSlider/index.jsx index be132119..b66abee2 100644 --- a/src/components/form/components/FormRangeSlider/index.jsx +++ b/src/components/form/components/FormRangeSlider/index.jsx @@ -3,41 +3,29 @@ import PropTypes from "prop-types"; import { StyledFormRangeSlider } from "./StyledFormRangeSlider"; import { FormRangeSliderInner } from "./FormRangeSliderInner"; -import { FormRangeSliderResetButton } from "./FormRangeSliderResetButton"; -import { TimesCircle } from "../../../../assets/icons"; import { round } from "lodash"; import { getTestId } from "../../utils"; function formatter(decimals) { return { - from: function(value) { + from: function (value) { return `${round(value, decimals)}`; }, - to: function(value) { + to: function (value) { return `${round(value, decimals)}`; }, }; } -function FormRangeSlider({ - from, - to, - minFrom, - maxTo, - width, - onChange, - withClear, - className, - "data-testid": testId, -}) { - testId = getTestId(name, testId); - - const isClearButtonHidden = Boolean(minFrom === from && maxTo === to); +function FormRangeSlider(props) { + const { from, to, minFrom, maxTo, width, onChange, className } = props; + const testId = getTestId(props.name, props["data-testid"]); return ( { + onChange={(value) => { onChange(!value ? value : value.map(Number)); }} data-testid={`${testId}-slider`} /> - {withClear && ( - { - onChange([minFrom, maxTo]); - }} - isHidden={isClearButtonHidden} - data-testid={`${testId}-clear`} - > - - - )} ); } @@ -75,8 +52,8 @@ FormRangeSlider.propTypes = { maxTo: PropTypes.number, width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), onChange: PropTypes.func.isRequired, - withClear: PropTypes.bool, className: PropTypes.string, + name: PropTypes.string, "data-testid": PropTypes.string, }; @@ -85,7 +62,6 @@ FormRangeSlider.defaultProps = { maxTo: 99, from: 0, to: 99, - withClear: false, }; export { FormRangeSlider, StyledFormRangeSlider }; diff --git a/src/components/form/components/FormRangeSlider/styles.css b/src/components/form/components/FormRangeSlider/styles.css index f12ae198..fa6f8789 100644 --- a/src/components/form/components/FormRangeSlider/styles.css +++ b/src/components/form/components/FormRangeSlider/styles.css @@ -3,69 +3,47 @@ display: none; } -.noUi-handle { - outline: none; - border: none; - background: #a1a1a1; - border-radius: 22px; - box-shadow: 0 2px 8px 0px #aaa; +.noUi-horizontal { + height: 4px; } +.noUi-connect { + background: #3b4b5a; +} +.noUi-target { + background: #e4e9eb; + border-radius: 6px; -.noUi-horizontal { - height: 8px; + box-shadow: none; + border: none; } +.noUi-handle { + cursor: pointer; + background-color: #3b4b5a; + border-radius: 50%; + + outline: none; + border: none; + box-shadow: none; +} .noUi-horizontal .noUi-handle { - /* left: -11px; */ - top: -7px; - width: 22px; - height: 22px; + top: -3px; + right: -5px; + width: 10px; + height: 10px; } .noUi-tooltip { - font-size: 12px; font-weight: 600; + font-size: 12px; + line-height: 16px; + color: #3b4b5a; + border: none; } - .noUi-horizontal .noUi-tooltip { transform: translate(-50%, 0); left: 50%; bottom: 120%; padding: 0; } - -html:not([dir="rtl"]) .noUi-horizontal .noUi-handle { - right: -11px; -} - -.noUi-connects { - border-radius: 3px; -} - -.noUi-connect { - background: #27a1ca; -} - -.noUi-target { - padding: 0 10px; - background: #ddd; - border-radius: 2px; - box-shadow: none; - border: none; -} -.noUi-base:before, -.noUi-base:after { - width: 11px; - content: ""; - position: absolute; - top: 0; - height: 100%; - display: block; -} -.noUi-base:before { - left: -11px; -} -.noUi-base:after { - left: 100%; -} diff --git a/src/components/form/components/FormSwitch/FormSwitch.stories.js b/src/components/form/components/FormSwitch/FormSwitch.stories.js index 18811c37..3f0d0fae 100644 --- a/src/components/form/components/FormSwitch/FormSwitch.stories.js +++ b/src/components/form/components/FormSwitch/FormSwitch.stories.js @@ -1,6 +1,5 @@ import React from "react"; import { storiesOf } from "@storybook/react"; -import { select } from "@storybook/addon-knobs"; import { useState } from "react"; @@ -15,8 +14,6 @@ storiesOf("Form Components| FormSwitch", module).add("default", () => { name="form-switch" checked={value} onChange={({ target: { checked } }) => setValue(checked)} - size={select("Size", ["m", "l"], "m")} - theme={select("Theme", ["blue", "dark-gray"], "blue")} /> ); } diff --git a/src/components/form/components/FormSwitch/FormSwitchLabel.jsx b/src/components/form/components/FormSwitch/FormSwitchLabel.jsx index 025b25b4..48d59d4b 100644 --- a/src/components/form/components/FormSwitch/FormSwitchLabel.jsx +++ b/src/components/form/components/FormSwitch/FormSwitchLabel.jsx @@ -1,66 +1,39 @@ -import styled, { css } from "styled-components"; +import styled from "styled-components"; -import { colors } from "../../../../themes/colors"; - -const checkedColors = { - blue: "#34a7c1", - "dark-gray": colors.gray, -}; -const backColors = { - blue: "#eeeeee", - "dark-gray": "#DDDDDD", -}; +import { colors } from "../../../../style"; +import { widths } from "./StyledFormSwitch"; const circleSizes = { - s: 18, - m: 22, + m: 12, }; const barHeights = { - s: 12, - m: 16, + m: 20, }; -const barWidths = { - s: 28, - m: 40, -}; - -const checkedStyles = css` - border-color: #34a7c1; - background-color: ${({ theme }) => checkedColors[theme]}; - box-shadow: 3px 2px 18px 0 rgba(0, 0, 0, 0.2); -`; - const calcOffset = ({ checked, size }) => { - return !checked ? "0px" : barWidths[size] - circleSizes[size] / 2 - 3 + "px"; + return !checked ? "4px" : widths[size] - circleSizes[size] - 4 + "px"; }; const FormSwitchLabel = styled.div` cursor: pointer; - padding: 0; - border: 0 solid ${({ checked }) => (checked ? "#34a7c1" : "#eeeeee")}; - border-radius: 22px; - background-color: ${({ theme }) => backColors[theme]}; height: ${({ size }) => barHeights[size] + "px"}; - width: ${({ size }) => barWidths[size] + "px"}; + border-radius: 20px; + background-color: ${({ checked }) => + checked ? colors.slate : colors.grayMedium}; &:before { content: ""; display: block; - height: ${({ size }) => circleSizes[size] + "px"}; - width: ${({ size }) => circleSizes[size] + "px"}; - margin: -3px; - background: #9ba7ac; position: absolute; - top: 0; - bottom: 0; left: ${calcOffset}; - transition: left 120ms ease-in-out; + top: 50%; + transform: translateY(-50%); + height: ${({ size }) => circleSizes[size] + "px"}; + width: ${({ size }) => circleSizes[size] + "px"}; border-radius: 50%; - box-shadow: 0 2px 8px 0 #aaa; - - ${({ checked }) => (checked ? checkedStyles : "")} + background-color: ${colors.whiteSimple}; + transition: left 120ms ease-in-out; } `; diff --git a/src/components/form/components/FormSwitch/StyledFormSwitch.jsx b/src/components/form/components/FormSwitch/StyledFormSwitch.jsx index 8291c04a..ad6181fd 100644 --- a/src/components/form/components/FormSwitch/StyledFormSwitch.jsx +++ b/src/components/form/components/FormSwitch/StyledFormSwitch.jsx @@ -1,8 +1,7 @@ import styled from "styled-components"; const widths = { - s: 28, - m: 40, + m: 36, }; const StyledFormSwitch = styled.label` @@ -12,4 +11,4 @@ const StyledFormSwitch = styled.label` user-select: none; `; -export { StyledFormSwitch }; +export { StyledFormSwitch, widths }; diff --git a/src/components/form/components/FormSwitch/index.jsx b/src/components/form/components/FormSwitch/index.jsx index 38c3b713..a78ed243 100644 --- a/src/components/form/components/FormSwitch/index.jsx +++ b/src/components/form/components/FormSwitch/index.jsx @@ -10,7 +10,6 @@ import { getTestId } from "../../utils"; function FormSwitch({ name, size, - theme, checked, onChange, className, @@ -37,7 +36,6 @@ function FormSwitch({ @@ -49,14 +47,12 @@ FormSwitch.propTypes = { checked: PropTypes.bool.isRequired, name: PropTypes.string.isRequired, size: PropTypes.oneOf(["s", "m"]), - theme: PropTypes.oneOf(["blue", "dark-gray"]), className: PropTypes.string, "data-testid": PropTypes.string, }; FormSwitch.defaultProps = { size: "m", - theme: "blue", }; -export { FormSwitch, StyledFormSwitch }; +export { FormSwitch, StyledFormSwitch, FormSwitchLabel }; diff --git a/src/components/form/components/index.js b/src/components/form/components/index.js index d09e62a2..0f7e27a7 100644 --- a/src/components/form/components/index.js +++ b/src/components/form/components/index.js @@ -1,7 +1,6 @@ export * from "./FormField"; export * from "./FormLabel"; export * from "./FormInput"; -export * from "./FormInputToggle"; export * from "./FormSwitch"; export * from "./FormDropdown"; export * from "./FormCheckbox"; diff --git a/src/components/form/hooks/use-form-api-errors.js b/src/components/form/hooks/use-form-api-errors.js index 63cdc7af..7deb5f70 100644 --- a/src/components/form/hooks/use-form-api-errors.js +++ b/src/components/form/hooks/use-form-api-errors.js @@ -2,6 +2,8 @@ import { useEffect } from "react"; export function useFormApiErrors(apiErrors, setErrors) { useEffect(() => { - setErrors(apiErrors); + if (setErrors) { + setErrors(apiErrors); + } }, [apiErrors]); } diff --git a/src/components/form/layouts/FormActions/index.jsx b/src/components/form/layouts/FormActions/index.jsx deleted file mode 100644 index 8bb51fc9..00000000 --- a/src/components/form/layouts/FormActions/index.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import styled from "styled-components"; - -import { StyledButton } from "../../../Button"; - -const FormActions = styled.div` - display: flex; - - ${StyledButton} { - height: 38px; - line-height: 38px; - width: 104px; - padding: 0 24px; - - &:not(:last-child) { - margin-right: 8px; - } - } -`; - -export { FormActions }; diff --git a/src/components/form/layouts/FormFieldGroup/FormFieldGroupTitle.jsx b/src/components/form/layouts/FormFieldGroup/FormFieldGroupTitle.jsx index bd44f304..edcbab26 100644 --- a/src/components/form/layouts/FormFieldGroup/FormFieldGroupTitle.jsx +++ b/src/components/form/layouts/FormFieldGroup/FormFieldGroupTitle.jsx @@ -2,6 +2,7 @@ import styled from "styled-components"; const FormFieldGroupTitle = styled.h3` font-size: 15px; + line-height: 20px; font-weight: 700; text-transform: uppercase; margin-top: 0; diff --git a/src/components/form/layouts/index.js b/src/components/form/layouts/index.js index 9d601abd..6b2c24cf 100644 --- a/src/components/form/layouts/index.js +++ b/src/components/form/layouts/index.js @@ -1,2 +1 @@ export * from "./FormFieldGroup"; -export * from "./FormActions"; diff --git a/src/components/icons/ArrowRight.jsx b/src/components/icons/ArrowRight.jsx new file mode 100644 index 00000000..e10858b0 --- /dev/null +++ b/src/components/icons/ArrowRight.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function ArrowRight({ size, className }) { + return ( + + + + ); +} + +ArrowRight.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +ArrowRight.defaultProps = { + size: 12, +}; + +export default ArrowRight; diff --git a/src/assets/icons/Asterisk.jsx b/src/components/icons/Asterisk.jsx similarity index 69% rename from src/assets/icons/Asterisk.jsx rename to src/components/icons/Asterisk.jsx index f63bc3e0..b6cf4ccb 100644 --- a/src/assets/icons/Asterisk.jsx +++ b/src/components/icons/Asterisk.jsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; -import { Asterisk } from "styled-icons/fa-solid/Asterisk"; -import { spin } from "../animations"; +import { Asterisk } from "@styled-icons/fa-solid/Asterisk"; +import { spin } from "../../style"; const AsteriskIcon = styled(Asterisk)` animation: ${({ isSpin }) => diff --git a/src/components/icons/Check.jsx b/src/components/icons/Check.jsx new file mode 100644 index 00000000..3b289088 --- /dev/null +++ b/src/components/icons/Check.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function Check({ size, className }) { + return ( + + + + ); +} + +Check.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +Check.defaultProps = { + size: 10, +}; + +export default Check; diff --git a/src/components/icons/Gear.jsx b/src/components/icons/Gear.jsx new file mode 100644 index 00000000..f99d2955 --- /dev/null +++ b/src/components/icons/Gear.jsx @@ -0,0 +1,37 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function Gear({ size, className }) { + return ( + + + + + ); +} + +Gear.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +Gear.defaultProps = { + size: 10, +}; + +export default Gear; diff --git a/src/components/icons/GearOutline.jsx b/src/components/icons/GearOutline.jsx new file mode 100644 index 00000000..5ff3064c --- /dev/null +++ b/src/components/icons/GearOutline.jsx @@ -0,0 +1,36 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function GearOutline({ size, className }) { + return ( + + + + + ); +} + +GearOutline.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +GearOutline.defaultProps = { + size: 10, +}; + +export default GearOutline; diff --git a/src/components/icons/InfoCircleColor.jsx b/src/components/icons/InfoCircleColor.jsx new file mode 100644 index 00000000..5bddc798 --- /dev/null +++ b/src/components/icons/InfoCircleColor.jsx @@ -0,0 +1,37 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function InfoCircleColor({ size, className }) { + return ( + + + + + ); +} + +InfoCircleColor.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +InfoCircleColor.defaultProps = { + size: 10, +}; + +export default InfoCircleColor; diff --git a/src/components/icons/Pencil.jsx b/src/components/icons/Pencil.jsx new file mode 100644 index 00000000..33985fcb --- /dev/null +++ b/src/components/icons/Pencil.jsx @@ -0,0 +1,35 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function Pencil({ size, className }) { + return ( + + + + + ); +} + +Pencil.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +Pencil.defaultProps = { + size: 10, +}; + +export default Pencil; diff --git a/src/components/icons/QRcode.jsx b/src/components/icons/QRcode.jsx new file mode 100644 index 00000000..06860c69 --- /dev/null +++ b/src/components/icons/QRcode.jsx @@ -0,0 +1,31 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function QRcode({ size, className }) { + return ( + + + + ); +} + +QRcode.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +QRcode.defaultProps = { + size: 10, +}; + +export default QRcode; diff --git a/src/components/icons/Search.jsx b/src/components/icons/Search.jsx new file mode 100644 index 00000000..7c62f0a8 --- /dev/null +++ b/src/components/icons/Search.jsx @@ -0,0 +1,38 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function Search({ size, className }) { + return ( + + + + + + + + + + + ); +} + +Search.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +Search.defaultProps = { + size: 10, +}; + +export default Search; diff --git a/src/assets/icons/Sync.jsx b/src/components/icons/Sync.jsx similarity index 68% rename from src/assets/icons/Sync.jsx rename to src/components/icons/Sync.jsx index df570461..6974033d 100644 --- a/src/assets/icons/Sync.jsx +++ b/src/components/icons/Sync.jsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; -import { SyncAlt } from "styled-icons/fa-solid/SyncAlt"; -import { spin } from "../animations"; +import { SyncAlt } from "@styled-icons/fa-solid/SyncAlt"; +import { spin } from "../../style"; const SyncIcon = styled(SyncAlt)` animation: ${({ isSpin }) => diff --git a/src/components/icons/TimesDelete.jsx b/src/components/icons/TimesDelete.jsx new file mode 100644 index 00000000..3cd1bf80 --- /dev/null +++ b/src/components/icons/TimesDelete.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function TimesDelete({ size, className }) { + return ( + + + + ); +} + +TimesDelete.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +TimesDelete.defaultProps = { + size: 10, +}; + +export default TimesDelete; diff --git a/src/components/icons/TimesDeleteBold.jsx b/src/components/icons/TimesDeleteBold.jsx new file mode 100644 index 00000000..45a77770 --- /dev/null +++ b/src/components/icons/TimesDeleteBold.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function TimesDeleteBold({ size, className }) { + return ( + + + + ); +} + +TimesDeleteBold.propTypes = { + size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + className: PropTypes.string, +}; + +TimesDeleteBold.defaultProps = { + size: 10, +}; + +export default TimesDeleteBold; diff --git a/src/components/icons/index.js b/src/components/icons/index.js new file mode 100644 index 00000000..5418e176 --- /dev/null +++ b/src/components/icons/index.js @@ -0,0 +1,56 @@ +export { + Bolt, + Eye, + EyeSlash, + Camera, + Video, + VideoSlash, + User, + UserPlus, + UserTimes, + Times, + Plus, + Exclamation, + Play, + ArrowUp, + AngleRight, + ArrowDown, + ArrowLeft, + InfoCircle, + Clone, + CalendarAlt, + Ban, + Trash, +} from "@styled-icons/fa-solid"; + +export { + RightArrow as BoxRightArrow, + LeftArrow as BoxLeftArrow, + Pencil as BoxPencil, +} from "@styled-icons/boxicons-solid"; + +export { + TimesCircle, + ArrowAltCircleDown, + ArrowAltCircleRight, +} from "@styled-icons/fa-regular"; + +export { + KeyboardArrowRight, + KeyboardArrowLeft, + PlaylistAdd, + PlaylistAddCheck, +} from "@styled-icons/material"; + +export { default as ArrowRight } from "./ArrowRight"; +export { default as InfoCircleColor } from "./InfoCircleColor"; +export { default as Pencil } from "./Pencil"; +export { default as TimesDelete } from "./TimesDelete"; +export { default as TimesDeleteBold } from "./TimesDeleteBold"; +export { default as Check } from "./Check"; +export { default as Sync } from "./Sync"; +export { default as Asterisk } from "./Asterisk"; +export { default as Search } from "./Search"; +export { default as Gear } from "./Gear"; +export { default as GearOutline } from "./GearOutline"; +export { default as QRcode } from "./QRcode"; diff --git a/src/components/index.js b/src/components/index.js index 6688a63c..41558c46 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,12 +1,11 @@ export * from "./Badge"; export * from "./UIBadge"; +export * from "./Breadcrumbs"; export * from "./Button"; export * from "./ButtonLink"; export * from "./CardSmall"; export * from "./CopyItem"; -export * from "./DeleteSure"; export * from "./DeleteSureButton"; -export * from "./DynamicList"; export * from "./Entries"; export * from "./ErrorBoundary"; export * from "./ErrorPageBoundary"; @@ -18,6 +17,9 @@ export * from "./IdCopy"; export * from "./IdFormat"; export * from "./InfiniteScroll"; export * from "./InfiniteDropdown"; +export * from "./InfiniteMultiSelect"; +export * from "./InfinitePageList"; +export * from "./InfoCard"; export * from "./ImageCentered"; export * from "./LazyImage"; export * from "./ListItemPopup"; @@ -26,7 +28,6 @@ export * from "./Login"; export * from "./Notice"; export * from "./notification"; export * from "./PageCard"; -export * from "./PageFiltersList"; export * from "./PageLoader"; export * from "./PageWrapper"; export * from "./PersonsGroup"; @@ -35,18 +36,16 @@ export * from "./PopupConfirm"; export * from "./RouteSection"; export * from "./Search"; export * from "./Segment"; -export * from "./SelectableList"; export * from "./ShownControl"; export * from "./Slider"; export * from "./Spinner"; export * from "./Text"; export * from "./Tooltip"; -export * from "./WithCurrentOpenItem"; export * from "./Tabs"; export * from "./Stepper"; +export * from "./SegmentedTabs"; export * from "./Value"; export * from "./ValueSpan"; -export * from "./FaceSize"; export * from "./PopupContainer"; export * from "./GlobalStyles"; export * from "./I18nProvider"; diff --git a/src/components/notification/NotificationCloseButton.jsx b/src/components/notification/NotificationCloseButton.jsx index e1360c2c..0bcd755e 100644 --- a/src/components/notification/NotificationCloseButton.jsx +++ b/src/components/notification/NotificationCloseButton.jsx @@ -1,10 +1,8 @@ import styled from "styled-components"; -import Button from "../Button"; +import { Button } from "../Button"; -const NotificationCloseButton = styled(Button).attrs(() => ({ - buttonTheme: "reset", -}))` +const NotificationCloseButton = styled(Button)` position: absolute; top: 0px; right: 15px; diff --git a/src/components/notification/NotificationContent.jsx b/src/components/notification/NotificationContent.jsx index fc044c29..09d4df53 100644 --- a/src/components/notification/NotificationContent.jsx +++ b/src/components/notification/NotificationContent.jsx @@ -3,7 +3,7 @@ import PropTypes from "prop-types"; import StyledNotificationContent from "./StyledNotificationContent"; -import { Bolt } from "../../assets/icons"; +import { Bolt } from "../icons"; NotificationContent.propTypes = { message: PropTypes.string.isRequired, diff --git a/src/components/notification/index.jsx b/src/components/notification/index.jsx index 8bb04389..547f970b 100644 --- a/src/components/notification/index.jsx +++ b/src/components/notification/index.jsx @@ -4,7 +4,7 @@ import React from "react"; import NotificationContent from "./NotificationContent"; import NotificationCloseButton from "./NotificationCloseButton"; -import { Times } from "../../assets/icons"; +import { Times } from "../icons"; import "./style.css"; @@ -26,7 +26,7 @@ Notification.newInstance( ), }, - n => (notification = n) + (n) => (notification = n) ); export function open({ message, description, type, duration }) { diff --git a/src/components/notification/style.css b/src/components/notification/style.css index 78f61a45..5a2f7202 100644 --- a/src/components/notification/style.css +++ b/src/components/notification/style.css @@ -8,7 +8,6 @@ line-height: 1.5; list-style: none; font-feature-settings: "tnum"; - position: fixed; z-index: 1010; width: 384px; max-width: calc(100vw - 32px); @@ -30,7 +29,6 @@ } .ui-notification-fade-leave { - animation-duration: 0.24s; animation-timing-function: ease-in-out; animation-fill-mode: both; diff --git a/src/hooks/index.js b/src/hooks/index.js index 9a155eff..24938af7 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -4,4 +4,8 @@ export * from "./use-pagination"; export * from "./use-timeout"; export * from "./use-popup"; export * from "./use-position-popup"; +export * from "./use-infinite-menu"; +export * from "./use-redirect-on-error"; +export * from "./use-scroll-direction"; +export * from "./use-selectable-list"; export { useTranslation, withTranslation } from "react-i18next"; diff --git a/src/hooks/use-copy-to-clipboard.js b/src/hooks/use-copy-to-clipboard.js index 251dce7c..6763162c 100644 --- a/src/hooks/use-copy-to-clipboard.js +++ b/src/hooks/use-copy-to-clipboard.js @@ -6,7 +6,7 @@ const isCopyAvailable = function useCopyToClipboard() { const [isCopied, setIsCopied] = useState(false); - const copyToClipboard = text => { + const copyToClipboard = (text) => { setIsCopied(false); if (typeof text == "string" || typeof text == "number") { diff --git a/src/hooks/use-infinite-menu.js b/src/hooks/use-infinite-menu.js new file mode 100644 index 00000000..ad5ba0c8 --- /dev/null +++ b/src/hooks/use-infinite-menu.js @@ -0,0 +1,37 @@ +import { useState, useEffect } from "react"; +import { useListFetch } from "./use-list-fetch"; + +function useInfiniteMenu({ limit, hasNext, fetchOptions }) { + const [isListEnds, setIsListEnds] = useState(!hasNext); + + const { pagination, setPagination, setFetchParams } = useListFetch({ + fetchList: (params) => { + fetchOptions({ ...params, meta: { clearList: params.offset === 0 } }); + }, + pagination: { limit, offset: 0 }, + }); + + useEffect(() => { + setIsListEnds(!hasNext); + }, [hasNext]); + + function searchOptions(value) { + setFetchParams({ + q: value, + offset: 0, + }); + } + + function fetchNext() { + if (!isListEnds) { + setPagination({ offset: pagination.offset + pagination.limit }); + } + } + + return { + searchOptions, + fetchNext, + }; +} + +export { useInfiniteMenu }; diff --git a/src/hooks/use-list-fetch.js b/src/hooks/use-list-fetch.js index 4e706f5d..31259c8b 100644 --- a/src/hooks/use-list-fetch.js +++ b/src/hooks/use-list-fetch.js @@ -26,11 +26,21 @@ function useFetchParams(initialFetchParams = {}) { } export function useListFetch({ + /** + * ΠŸΡ€ΠΈ использовании Ρ…ΡƒΠΊΠ° + * Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ мноТСствСннго пСрСсоздания debouncedFetchList + * слСдуСт всСгда ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ fetchList + * ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ fetchList слСдуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ + * ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ + * */ + fetchList, pagination: defaultPagination = { limit: 10, offset: 0 }, searchQuery: initialSearchQuery = "", clearList = true, searchQueryHook = useSearchQuery, + fetchOnInitial = true, + onFetchParamsChange, }) { if (!(fetchList instanceof Function)) { console.warn("You did not specify fetchList function"); @@ -48,7 +58,7 @@ export function useListFetch({ const prevFetchParams = usePrevious(fetchParams); - const debouncedFetchList = useCallback(debounce(fetchList, 500), []); + const debouncedFetchList = useCallback(debounce(fetchList, 500), [fetchList]); function fetchListWithParams(hasDebounce) { const params = { ...fetchParams, meta: { clearList, hasDebounce } }; @@ -69,6 +79,14 @@ export function useListFetch({ } useDeepCompareEffect(() => { + if (onFetchParamsChange) { + onFetchParamsChange(prevFetchParams, fetchParams); + } + + if (prevFetchParams === undefined && !fetchOnInitial) { + return; + } + const hasDebounce = prevFetchParams && prevFetchParams.q !== fetchParams.q; if (fetchParams.q !== searchQuery) { @@ -92,6 +110,10 @@ export function useListFetch({ setFetchParams({ limit: pagination.limit, offset: pagination.offset }); }, [pagination]); + function changeOffset(offset) { + setPagination({ ...pagination, offset }); + } + return { pagination, setPagination, @@ -104,5 +126,8 @@ export function useListFetch({ setSearchQuery, fetchListWithParams, + + offset: pagination.offset, + changeOffset, }; } diff --git a/src/hooks/use-pagination.js b/src/hooks/use-pagination.js index b58e5140..a7c55bc9 100644 --- a/src/hooks/use-pagination.js +++ b/src/hooks/use-pagination.js @@ -5,7 +5,7 @@ const calculateSelectedPage = (offset, limit) => { return offset / limit + 1 || 1; }; -export const usePagination = props => { +export const usePagination = (props) => { const { limit, offset, totalCount } = props; const fullPaginationNumbersLength = Math.ceil(totalCount / limit || 0); diff --git a/src/hooks/use-popup.js b/src/hooks/use-popup.js index 0eb50983..2a4b43a7 100644 --- a/src/hooks/use-popup.js +++ b/src/hooks/use-popup.js @@ -24,7 +24,8 @@ function usePopup(params) { params.onOpen(targetEl); } }, - bindTo: document && document.getElementById("app-container"), + bindTo: + params.bindTo || (document && document.getElementById("app-container")), }); const [targetParams, setTargetParams] = useState({ diff --git a/src/hooks/use-redirect-on-error.js b/src/hooks/use-redirect-on-error.js new file mode 100644 index 00000000..f362e67c --- /dev/null +++ b/src/hooks/use-redirect-on-error.js @@ -0,0 +1,11 @@ +import { useEffect } from "react"; + +function useRedirectOnError(error, redirect) { + useEffect(() => { + if (error && redirect) { + redirect(); + } + }, [error]); +} + +export { useRedirectOnError }; diff --git a/src/hooks/use-scroll-direction.js b/src/hooks/use-scroll-direction.js new file mode 100644 index 00000000..4a18efb9 --- /dev/null +++ b/src/hooks/use-scroll-direction.js @@ -0,0 +1,30 @@ +import { useState, useEffect, useRef } from "react"; +import { useWindowScroll } from "react-use"; + +import { throttle } from "lodash-es"; + +function useScrollDirection() { + const { y } = useWindowScroll(); + const prevY = useRef(y); + const [directionY, setDirectionY] = useState(null); + function handleScroll(prevY, y) { + if (prevY !== undefined) { + setDirectionY(prevY < y ? "bottom" : "top"); + } + } + const throttledScroll = useRef(throttle(handleScroll, 300)); + + useEffect(() => { + throttledScroll.current(prevY.current, y); + if (Math.abs(prevY.current - y) > 50) { + prevY.current = y; + } + }, [y]); + + return { + y, + directionY, + }; +} + +export { useScrollDirection }; diff --git a/src/hooks/use-selectable-list.js b/src/hooks/use-selectable-list.js new file mode 100644 index 00000000..b3148a3f --- /dev/null +++ b/src/hooks/use-selectable-list.js @@ -0,0 +1,93 @@ +import { useState } from "react"; +import { usePrevious, useUpdateEffect } from "react-use"; + +import { uniq, isEqual } from "lodash-es"; +import { hasProperty } from "../utils/helpers"; + +function useSelectableList({ options, value, onChange }) { + const [selected, setSelected] = useState(value || []); + const prevSelected = usePrevious(selected); + const [lastChecked, setLastChecked] = useState(null); + + function getOptionPresentation(option) { + return hasProperty(option, "value") ? String(option.value) : String(option); + } + + useUpdateEffect(() => { + if (onChange && !isEqual(prevSelected, selected)) { + onChange(selected); + } + }, [selected]); + + useUpdateEffect(() => { + setSelected(value); + }, [value]); + + function selectAll() { + setSelected(options.map(getOptionPresentation)); + } + + function deselectAll() { + setSelected([]); + } + + function toggleSelected(option) { + const optionPresentation = getOptionPresentation(option); + + setSelected((selected) => + selected.includes(optionPresentation) + ? selected.filter((sel) => optionPresentation !== sel) + : selected.concat(optionPresentation) + ); + } + + function toggleIntermediateOptions(checkFrom, checkTo, isCheck) { + const stringOptions = options.map(getOptionPresentation); + + if (stringOptions.indexOf(checkFrom) > stringOptions.indexOf(checkTo)) { + [checkTo, checkFrom] = [checkFrom, checkTo]; + } + + const hasToCheck = stringOptions + .filter( + (_, key) => + stringOptions.indexOf(checkFrom) < key && + key < stringOptions.indexOf(checkTo) + ) + .concat([checkFrom, checkTo]); + + setSelected((selected) => + isCheck + ? uniq(selected.concat(hasToCheck)) + : selected.filter((option) => !hasToCheck.includes(option)) + ); + } + + function onCheckboxChange(event) { + const { name: option } = event.target; + toggleSelected(option); + setLastChecked(option); + + const { shiftKey } = event.nativeEvent; + const isCheck = !selected.includes(option); + if (shiftKey && option !== lastChecked) { + toggleIntermediateOptions(lastChecked, option, isCheck); + } + } + + const hasOptions = options && options.length > 0; + + return { + selected, + selectAll, + deselectAll, + toggleSelected, + onCheckboxChange, + isAllSelected: hasOptions && selected.length === options.length, + isAllDeselected: hasOptions && selected.length === 0, + hasOptions: options.length !== 0, + hasSelected: selected.length !== 0, + }; +} + +export { useSelectableList }; diff --git a/src/index.js b/src/index.js index ef8e0203..d18af30a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ export * from "./assets"; -export * from "./themes"; -export * from "./hooks"; export * from "./components"; +export * from "./hooks"; +export * from "./style"; export * from "./utils"; diff --git a/src/locales/en.js b/src/locales/en.js deleted file mode 100644 index e2ebf59c..00000000 --- a/src/locales/en.js +++ /dev/null @@ -1,7 +0,0 @@ -export const en = { - translation: { - Apply: "Apply", - Clear: "Clear", - Reset: "Reset", - }, -}; diff --git a/src/locales/index.js b/src/locales/index.js deleted file mode 100644 index 6a8fd3c8..00000000 --- a/src/locales/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import { en } from "./en"; -import { ru } from "./ru"; - -const locales = { - en, - ru, -}; - -export default locales; diff --git a/src/locales/ru.js b/src/locales/ru.js deleted file mode 100644 index 6ac2c1aa..00000000 --- a/src/locales/ru.js +++ /dev/null @@ -1,7 +0,0 @@ -export const ru = { - translation: { - Apply: "ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ", - Clear: "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ", - Reset: "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ", - }, -}; diff --git a/src/assets/animations/fade-enter.jsx b/src/style/animations/fade-enter.jsx similarity index 81% rename from src/assets/animations/fade-enter.jsx rename to src/style/animations/fade-enter.jsx index c2e20729..a9b6dbf0 100644 --- a/src/assets/animations/fade-enter.jsx +++ b/src/style/animations/fade-enter.jsx @@ -1,6 +1,6 @@ import { css } from "styled-components"; -export const fadeEnter = timing => css` +export const fadeEnter = (timing) => css` &-appear { opacity: 0; } diff --git a/src/assets/animations/fade-exit.jsx b/src/style/animations/fade-exit.jsx similarity index 81% rename from src/assets/animations/fade-exit.jsx rename to src/style/animations/fade-exit.jsx index a79b5e2c..94100be7 100644 --- a/src/assets/animations/fade-exit.jsx +++ b/src/style/animations/fade-exit.jsx @@ -1,6 +1,6 @@ import { css } from "styled-components"; -export const fadeExit = timing => css` +export const fadeExit = (timing) => css` &-exit { opacity: 1; } diff --git a/src/assets/animations/index.js b/src/style/animations/index.js similarity index 100% rename from src/assets/animations/index.js rename to src/style/animations/index.js diff --git a/src/assets/animations/spin.jsx b/src/style/animations/spin.jsx similarity index 100% rename from src/assets/animations/spin.jsx rename to src/style/animations/spin.jsx diff --git a/src/themes/colors.js b/src/style/color/colors.js similarity index 80% rename from src/themes/colors.js rename to src/style/color/colors.js index 89f4a5e8..e9322774 100644 --- a/src/themes/colors.js +++ b/src/style/color/colors.js @@ -1,10 +1,11 @@ -export const colors = { +const colors = { whiteSimple: "#fff", whiteGray: "#f9f9f9", whiteGrayLight: "#f7f8f9", whiteGrayDark: "#f2f2f2", whiteBlue: "#f2f6fa", whiteYellow: "#f8f8ee", + /* for types of records */ navyBlue: "#1e8ab9", darkBlue: "#1A5D7B", @@ -13,13 +14,16 @@ export const colors = { greenish: "#3f9655", lightYellow: "#ffc228", lightRed: "#f65502", + + slate: "#3b4b5a", gray: "#5d7784", - graySimpleLight: "#ddd", - graySimple: "#bbb", - grayWhite: "#aaa", + grayMedium: "#dadada", + graySimple: "#bbbbbb", + graySimpleLight: "#dddddd", + grayWhite: "#aaaaaa", grayMiddle: "#6a6e71", + grayDark: "#A8B3BE", grayLight: "#f3f3f3", - slate: "#3b4b5a", grayBlueLight: "#6b7d86", grayBlueLight2: "#e2e5e8", grayBlueMiddle: "#bec9ce", @@ -27,33 +31,33 @@ export const colors = { grayBlueDarkLight: "#798990", grayBlueDark: "#687d90", grayBlueDark2: "#ebf0f2", - grayRedLight: "#eee", + grayRedLight: "#eeeeee", grayRedDark: "#dedede", - grayRedMiddle: "#ccc", + grayRedMiddle: "#cccccc", + brownSimple: "#AC3D03", - black: "#000", + simpleBlue: "#4c6a95", + middleBlue: "#42608C", blueWhite: "#e4e9eb", blueGray: "#6a8694", - brownGray: "#aaaaaa", veryLightBlue: "#e4e9ec", - darkestBlue: "#2e4669", - middleBlue: "#42608C", - simpleBlue: "#4c6a95", iceBlue: "#f0f1f2", darkestPink: "#b6245e", middlePink: "#be2c66", simplePink: "#d2477e", - darkBlack: "#222", bloodOrange: "#ef5305", orangeSimple: "#f89406", orangeDark: "#fabf29", + black: "#000000", + darkBlack: "#222222", + red: "#dc0909", green: "#008000", }; -export default colors; +export { colors }; diff --git a/src/themes/index.js b/src/style/color/index.js similarity index 100% rename from src/themes/index.js rename to src/style/color/index.js diff --git a/src/resources/styles/fonts.css b/src/style/font/fonts.css similarity index 62% rename from src/resources/styles/fonts.css rename to src/style/font/fonts.css index bd021549..26ba7cfd 100644 --- a/src/resources/styles/fonts.css +++ b/src/style/font/fonts.css @@ -1,27 +1,27 @@ @font-face { font-family: "Open Sans"; - src: url(../fonts/open-sans/OpenSans-Regular.ttf); + src: url(./fonts/open-sans/OpenSans-Regular.ttf); font-weight: normal; font-style: normal; } @font-face { font-family: "Open Sans"; - src: url(../fonts/open-sans/OpenSans-Light.ttf); + src: url(./fonts/open-sans/OpenSans-Light.ttf); font-weight: 300; font-style: normal; } @font-face { font-family: "Open Sans"; - src: url(../fonts/open-sans/OpenSans-SemiBold.ttf); + src: url(./fonts/open-sans/OpenSans-SemiBold.ttf); font-weight: 600; font-style: normal; } @font-face { font-family: "Open Sans"; - src: url(../fonts/open-sans/OpenSans-Bold.ttf); + src: url(./fonts/open-sans/OpenSans-Bold.ttf); font-weight: 700; font-style: normal; } diff --git a/src/resources/fonts/open-sans/LICENSE.txt b/src/style/font/fonts/open-sans/LICENSE.txt similarity index 100% rename from src/resources/fonts/open-sans/LICENSE.txt rename to src/style/font/fonts/open-sans/LICENSE.txt diff --git a/src/resources/fonts/open-sans/OpenSans-Bold.ttf b/src/style/font/fonts/open-sans/OpenSans-Bold.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-Bold.ttf rename to src/style/font/fonts/open-sans/OpenSans-Bold.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-BoldItalic.ttf b/src/style/font/fonts/open-sans/OpenSans-BoldItalic.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-BoldItalic.ttf rename to src/style/font/fonts/open-sans/OpenSans-BoldItalic.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-ExtraBold.ttf b/src/style/font/fonts/open-sans/OpenSans-ExtraBold.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-ExtraBold.ttf rename to src/style/font/fonts/open-sans/OpenSans-ExtraBold.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf b/src/style/font/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf rename to src/style/font/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-Italic.ttf b/src/style/font/fonts/open-sans/OpenSans-Italic.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-Italic.ttf rename to src/style/font/fonts/open-sans/OpenSans-Italic.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-Light.ttf b/src/style/font/fonts/open-sans/OpenSans-Light.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-Light.ttf rename to src/style/font/fonts/open-sans/OpenSans-Light.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-LightItalic.ttf b/src/style/font/fonts/open-sans/OpenSans-LightItalic.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-LightItalic.ttf rename to src/style/font/fonts/open-sans/OpenSans-LightItalic.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-Regular.ttf b/src/style/font/fonts/open-sans/OpenSans-Regular.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-Regular.ttf rename to src/style/font/fonts/open-sans/OpenSans-Regular.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-SemiBold.ttf b/src/style/font/fonts/open-sans/OpenSans-SemiBold.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-SemiBold.ttf rename to src/style/font/fonts/open-sans/OpenSans-SemiBold.ttf diff --git a/src/resources/fonts/open-sans/OpenSans-SemiBoldItalic.ttf b/src/style/font/fonts/open-sans/OpenSans-SemiBoldItalic.ttf similarity index 100% rename from src/resources/fonts/open-sans/OpenSans-SemiBoldItalic.ttf rename to src/style/font/fonts/open-sans/OpenSans-SemiBoldItalic.ttf diff --git a/src/style/font/index.js b/src/style/font/index.js new file mode 100644 index 00000000..836d9637 --- /dev/null +++ b/src/style/font/index.js @@ -0,0 +1 @@ +export { default as fonts } from "./fonts.css"; diff --git a/src/style/index.js b/src/style/index.js new file mode 100644 index 00000000..66419133 --- /dev/null +++ b/src/style/index.js @@ -0,0 +1,3 @@ +export * from "./animations"; +export * from "./color"; +export * from "./font"; diff --git a/src/utils/cookie-service.js b/src/utils/cookie-service.js deleted file mode 100644 index 17bd9aaa..00000000 --- a/src/utils/cookie-service.js +++ /dev/null @@ -1,22 +0,0 @@ -import { cookie } from "browser-cookie-lite"; - -import { SECURE } from "./storage"; - -export function removeCookie({ name, path, domain, secure = SECURE }) { - return cookie(name, "", -1, path, domain, secure); -} - -export function saveCookie({ - name, - value, - ttl, - path, - domain, - secure = SECURE, -}) { - return cookie(name, JSON.stringify(value), ttl, path, domain, secure); -} - -export function getCookie(name) { - return JSON.parse(cookie(name) || "{}"); -} diff --git a/src/utils/helpers.js b/src/utils/helpers.js index 11defbf7..a648a7ee 100644 --- a/src/utils/helpers.js +++ b/src/utils/helpers.js @@ -1,20 +1,10 @@ import dayjs from "dayjs"; import matchSorter from "match-sorter"; -import { isEqual } from "lodash-es"; +import { isEqual, get } from "lodash-es"; +import jump from "jump.js"; -const DATE_TIME_FORMAT_SLASHES = "DD/MM/YY HH:mm"; const DATE_TIME_FORMAT_SIMPLE = "D MMM YYYY, HH:mm:ss"; -const defaultConfValues = { - new: false, - reinit: false, - exact: false, - ha: false, - junk: false, - nm: false, - det: false, -}; - export function createUUID() { // http://www.ietf.org/rfc/rfc4122.txt var s = []; @@ -30,38 +20,15 @@ export function createUUID() { return uuid; } -export function dataURItoBlob(dataURI) { - // convert base64/URLEncoded data component to raw binary data held in a string - var byteString; - if (dataURI.split(",")[0].indexOf("base64") >= 0) - byteString = atob(dataURI.split(",")[1]); - else byteString = unescape(dataURI.split(",")[1]); - // separate out the mime component - var mimeString = dataURI - .split(",")[0] - .split(":")[1] - .split(";")[0]; - // write the bytes of the string to a typed array - var ia = new Uint8Array(byteString.length); - for (var i = 0; i < byteString.length; i++) { - ia[i] = byteString.charCodeAt(i); - } - return new Blob([ia], { type: mimeString }); -} - -export function timeFormatSlashes(time) { - return timeFormater(time, DATE_TIME_FORMAT_SLASHES); -} - -export function timeFormat(time) { - return timeFormater(time, DATE_TIME_FORMAT_SIMPLE); -} - +// DATA FORMATTERS function timeFormater(time, fromat) { const formatedTime = time && dayjs(time).isValid() && dayjs(time).format(fromat); return formatedTime || "β€”"; } +export function timeFormat(time) { + return timeFormater(time, DATE_TIME_FORMAT_SIMPLE); +} export function formatDate(date, format = "DD MMM YYYY, HH:mm:ss") { if (!dayjs(date).isValid()) return null; @@ -69,14 +36,6 @@ export function formatDate(date, format = "DD MMM YYYY, HH:mm:ss") { return dayjs(date).format(format); } -/** - * - * ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ использовании Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ…Π΅Π»ΠΏΠ΅Ρ€Π° - */ -// export function formatDate(date) { -// return date.toISOString(); -// } - export function dateToIso(date) { return date.toISOString(); } @@ -90,9 +49,18 @@ export function formatSex(sex) { ); } +export function formatFaceSize(facesize) { + if (facesize !== 0 && !facesize) return null; + + let fs = Math.floor(facesize / 1000); + + return fs >= 100 ? (fs = "99k+") : fs + "k"; +} + +// ARRAY export function toggleInArray(arr = [], item) { return arr.includes(item) - ? arr.filter(disabled => item !== disabled) + ? arr.filter((disabled) => item !== disabled) : arr.concat(item); } @@ -112,40 +80,6 @@ export function searchInList(list, query, keys) { : list; } -export function formatFaceSize(facesize) { - if (facesize !== 0 && !facesize) return null; - - let fs = Math.floor(facesize / 1000); - - return fs >= 100 ? (fs = "99k+") : fs + "k"; -} - -export function filtersToString(filters) { - return Object.keys(filters).join(); -} - -export function parseFilters(filters) { - if (filters && filters.conf) { - const confArray = filters.conf.split(","); - const confObj = confArray.reduce((obj, value) => { - obj[value] = true; - return obj; - }, {}); - - const mappedFilters = { - offset: Number(filters.offset || 0), - limit: Number(filters.limit), - }; - - return { - ...filters, - ...mappedFilters, - conf: { ...defaultConfValues, ...confObj }, - }; - } - return {}; -} - export function isNotEmpty(value, isZeroEmpty) { return ( typeof value !== "undefined" && @@ -155,44 +89,20 @@ export function isNotEmpty(value, isZeroEmpty) { ); } -export function getBase64(file) { - return new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.readAsDataURL(file); - reader.onload = () => resolve(reader.result); - reader.onerror = error => reject(error); - }); -} - export function findOptionByValue(options, value) { - return options.find(option => isEqual(option.value, value)); -} - -export function transformFilters(filters) { - const confString = - filters.conf && - Object.keys(filters.conf) - .filter(prop => filters.conf[prop] === true) - .join(); - return { ...filters, conf: confString }; + return options.find((option) => isEqual(option.value, value)); } export function mapDataToGetParams(data) { return ( "?" + Object.keys(data) - .filter(key => data[key] !== null) - .map(key => `${key}=${data[key]}`) + .filter((key) => data[key] !== null) + .map((key) => `${key}=${data[key]}`) .join("&") ); } -export function mapFiltersToGetParams(filters) { - const transformedFilters = transformFilters(filters); - - return mapDataToGetParams(transformedFilters); -} - export function getStringShort( string, maxLength = 10, @@ -212,6 +122,22 @@ export function getStringShort( )}...${string.slice(-(lastPartCount || defaultPartCount), stringLength)}`; } +export function getFilenameShort(filename, maxLength = 10) { + if (filename.length < maxLength) { + return filename; + } + + const extention = filename.split(".").pop(); + + const firstPart = filename.slice(0, 4); + const lastPart = filename.slice( + -extention.length - 4, + filename.length - extention.length - 1 + ); + + return `${firstPart}...${lastPart}.${extention}`; +} + export function capitalize(s) { if (typeof s !== "string") return ""; @@ -222,6 +148,7 @@ export function hasProperty(obj, property) { return Object.prototype.hasOwnProperty.call(obj, property); } +// DATE/TIME export function isSameDate(d1, d2) { if (!d1 || !d2) return false; @@ -241,3 +168,70 @@ export function isValidDate(date, format) { return dayjs(date).isValid(); } + +export function getFromMapByIds(map, ids) { + return ids.map((id) => map[id]).filter(Boolean); +} + +export function removeKeyFromMap(map, key) { + // eslint-disable-next-line no-unused-vars + const { [key]: removed, ...restMap } = map; + + return restMap; +} + +export function scrollToTop(options = {}) { + document.querySelector("#app-container").scrollIntoView({ + behavior: "smooth", + ...options, + }); +} + +export function scrollToItem(selector, itemHeight, onScroll, options = {}) { + const node = document.querySelector(selector); + + if (node) { + // 200 сСкунд - Ρ‚Π°ΠΉΠΌΠΈΠ½Π³ анимация фэйда ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ страницами + setTimeout(() => { + jump(node, { + offset: -(window.innerHeight / 2) + itemHeight, + duration: 500, + callback: onScroll, + ...options, + }); + }, 200); + } +} + +export function processFormValues(values) { + return Object.entries(values).reduce((values, [key, value]) => { + if (value && value.value !== undefined) { + return { ...values, [key]: value.value }; + } else if (value instanceof Array) { + const mapValue = value.map((value) => get(value, "value", value)); + + return { ...values, [key]: mapValue }; + } else { + return { ...values, [key]: value }; + } + }, {}); +} + +export function isNumeric(x) { + return (typeof x === "number" || typeof x === "string") && !isNaN(Number(x)); +} + +export function setNativeValue(element, value) { + const valueSetter = Object.getOwnPropertyDescriptor(element, "value").set; + const prototype = Object.getPrototypeOf(element); + const prototypeValueSetter = Object.getOwnPropertyDescriptor( + prototype, + "value" + ).set; + + if (valueSetter && valueSetter !== prototypeValueSetter) { + prototypeValueSetter.call(element, value); + } else { + valueSetter.call(element, value); + } +} diff --git a/src/utils/index.js b/src/utils/index.js index c516aaf3..d4e09d7b 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,3 +1 @@ -export * from "./cookie-service"; export * from "./helpers"; -export * from "./storage"; diff --git a/src/utils/storage.js b/src/utils/storage.js deleted file mode 100644 index 457e1968..00000000 --- a/src/utils/storage.js +++ /dev/null @@ -1,52 +0,0 @@ -import { cookie } from "browser-cookie-lite"; - -let storage = window.localStorage; - -const NAME = "localStorageFallback"; -const TTL = 365 * 24 * 60 * 60; -const PATH = "/"; -const DOMAIN = null; - -export const SECURE = window.location.protocol.startsWith("https"); - -try { - if (!window.localStorage) { - throw new Error("localStorage not supported"); - } - const keyProbe = "___test-local-stoage___"; - storage.setItem(keyProbe, keyProbe); - storage.removeItem(keyProbe); -} catch (e) { - storage = { - getItem: key => { - const data = get(); - return data[key]; - }, - - setItem: (key, item) => { - const data = get(); - data[key] = item.toString(); - save(data); - }, - - removeItem: key => { - const data = get(); - delete data[key]; - save(data); - }, - - clear: () => { - cookie(NAME, "", -1); - }, - }; -} - -function get() { - return JSON.parse(cookie(NAME) || "{}"); -} - -function save(data) { - cookie(NAME, JSON.stringify(data), TTL, PATH, DOMAIN, SECURE); -} - -export default storage; diff --git a/test/__mocks__/react-i18next.js b/test/__mocks__/react-i18next.js new file mode 100644 index 00000000..35a1ca45 --- /dev/null +++ b/test/__mocks__/react-i18next.js @@ -0,0 +1,58 @@ +// https://github.com/i18next/react-i18next/tree/master/example/test-jest +const React = require("react"); +const reactI18next = require("react-i18next"); + +const hasChildren = (node) => + node && (node.children || (node.props && node.props.children)); + +const getChildren = (node) => + node && node.children ? node.children : node.props && node.props.children; + +const renderNodes = (reactNodes) => { + if (typeof reactNodes === "string") { + return reactNodes; + } + + return Object.keys(reactNodes).map((key, i) => { + const child = reactNodes[key]; + const isElement = React.isValidElement(child); + + if (typeof child === "string") { + return child; + } + if (hasChildren(child)) { + const inner = renderNodes(getChildren(child)); + return React.cloneElement(child, { ...child.props, key: i }, inner); + } + if (typeof child === "object" && !isElement) { + return Object.keys(child).reduce( + (str, childKey) => `${str}${child[childKey]}`, + "" + ); + } + + return child; + }); +}; + +const useMock = [(k) => k, {}]; +useMock.t = (k) => k; +useMock.i18n = { addResourceBundle: () => {} }; + +module.exports = { + // this mock makes sure any components using the translate HoC receive the t function as a prop + withTranslation: () => (Component) => (props) => ( + k} {...props} /> + ), + Trans: ({ children }) => renderNodes(children), + Translation: ({ children }) => children((k) => k, { i18n: {} }), + useTranslation: () => useMock, + + // mock if needed + I18nextProvider: reactI18next.I18nextProvider, + initReactI18next: reactI18next.initReactI18next, + setDefaults: reactI18next.setDefaults, + getDefaults: reactI18next.getDefaults, + setI18n: reactI18next.setI18n, + getI18n: reactI18next.getI18n, +}; diff --git a/test/generate.js b/test/generate.js index b806871f..97b553e0 100644 --- a/test/generate.js +++ b/test/generate.js @@ -18,7 +18,7 @@ function getRandomInt(min, max) { } function getRandomName() { - return sequence(x => fake(f => f.hacker.verb() + `_${x}`)); + return sequence((x) => fake((f) => f.hacker.verb() + `_${x}`)); } const licenseTypes = ["basic", "standard", "standard+", "advanced"]; @@ -52,7 +52,7 @@ const sourceBuilder = build("Source") manual_create_liveness_only: bool(), manual_check_liveness: bool(), }) - .map(source => ({ + .map((source) => ({ ...source, store_images_for_confs: uniq(source.store_images_for_confs), })); @@ -78,8 +78,8 @@ const sourceStatsBuilder = build("Source Stats").fields({ }); const userBuilder = build("User").fields({ - username: fake(f => f.internet.userName()), - password: fake(f => f.internet.password()), + username: fake((f) => f.internet.userName()), + password: fake((f) => f.internet.password()), }); function generateSources(count) { diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 27aa49fd..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,128 +0,0 @@ -const path = require("path"); -const webpack = require("webpack"); - -const { CleanWebpackPlugin } = require("clean-webpack-plugin"); - -const MiniCssExtractPlugin = require("mini-css-extract-plugin"); -const OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin"); - -// -------- -// environment variables -const { NODE_ENV, npm_package_version: VERSION } = process.env; - -console.group("Build info"); -console.log(`Release version is ${VERSION}`); -console.log(`Webpack version is ${webpack.version}`); -console.log(`Webpack running in ${NODE_ENV} environment`); -console.groupEnd(); - -// app paths -const PATHS = { - src: path.resolve(__dirname, "src"), - build: path.resolve(__dirname, "dist"), - node_modules: path.resolve(__dirname, "node_modules"), -}; -// -------- - -const config = { - context: PATHS.src, - - mode: NODE_ENV, - - devtool: "hidden-source-map", - - entry: { - client: [path.join(PATHS.src, "index.js")], - }, - - output: { - path: PATHS.build, - publicPath: "/", - filename: "index.js", - }, - - resolve: { - modules: [PATHS.src, "node_modules"], - extensions: [".js", ".jsx"], - }, - - module: { - rules: [ - { - test: /\.jsx?$/i, - exclude: /node_modules/, - use: [ - { - loader: "babel-loader", - }, - ], - }, - - { - test: /\.css$/, - use: [ - { loader: MiniCssExtractPlugin.loader }, - { loader: "css-loader" }, - ], - }, - - { - test: /\.(jpg|jpe?g|png|gif)$/, - use: [ - { - loader: "url-loader", - options: { - limit: 4000, - name: "images/[name].[ext]", - }, - }, - "image-webpack-loader", - ], - }, - - { - test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, - use: [ - { - loader: "url-loader", - options: { - mimetype: "image/svg+xml", - name: "images/[name].[ext]", - }, - }, - ], - }, - - { - test: /\.(ttf|eot|woff|woff2)$/, - use: { - loader: "file-loader", - options: { - name: "fonts/[name].[ext]", - }, - }, - }, - ], - }, - - plugins: [ - new webpack.DefinePlugin({ - "process.env": { - VERSION: JSON.stringify(VERSION), - NODE_ENV: JSON.stringify(NODE_ENV), - }, - }), - - new CleanWebpackPlugin(), - - new MiniCssExtractPlugin({ - filename: `styles/main.css`, - }), - - new OptimizeCssAssetsPlugin({ - assetNameRegExp: /\.css$/g, - }), - ], -}; - -module.exports = config;