diff --git a/.babelrc b/.babelrc deleted file mode 100644 index faab8aa..0000000 --- a/.babelrc +++ /dev/null @@ -1,29 +0,0 @@ -{ - "presets": [ - "@babel/react", - [ - "@babel/env", - { - "modules": false, - "loose": true, - "targets": { "browsers": [">2%"] } - } - ] - ], - "plugins": ["add-react-displayname"], - "env": { - "test": { - "presets": [ - "@babel/react", - [ - "@babel/env", - { - "modules": "commonjs", - "loose": true, - "targets": { "browsers": [">2%"] } - } - ] - ] - } - } -} diff --git a/.circleci/config.yml b/.circleci/config.yml index b656cae..9da353d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,24 +5,17 @@ version: 2 defaults: &defaults working_directory: ~/tailwind-react-ui docker: - - image: circleci/node:stretch - -setupGit: &setupGit - run: | - git config user.email "$GH_EMAIL" && - git config user.name "$GH_USERNAME" + - image: circleci/node:lts jobs: - build: + install: <<: *defaults steps: - checkout - # Download and cache dependencies - restore_cache: keys: - - v1-dependencies-{{ checksum "package.json" }} - # fallback to using the latest cache if no exact match is found + - v1-dependencies-{{ checksum "package-lock.json" }} - v1-dependencies- - run: @@ -32,7 +25,17 @@ jobs: - save_cache: paths: - node_modules - key: v1-dependencies-{{ checksum "package.json" }} + key: v1-dependencies-{{ checksum "package-lock.json" }} + + - persist_to_workspace: + root: ~/tailwind-react-ui + paths: . + + test: + <<: *defaults + steps: + - attach_workspace: + at: ~/tailwind-react-ui - run: name: Lint code @@ -42,6 +45,12 @@ jobs: name: Run unit tests command: npm test + build: + <<: *defaults + steps: + - attach_workspace: + at: ~/tailwind-react-ui + - run: name: Run build command: npm run build @@ -51,14 +60,14 @@ jobs: command: npm run docs - persist_to_workspace: - root: ./ + root: ~/tailwind-react-ui paths: . - deploy-and-publish: + publish: <<: *defaults steps: - attach_workspace: - at: ./ + at: ~/tailwind-react-ui - run: name: Deploy to GitHub @@ -66,52 +75,32 @@ jobs: - run: name: Authenticate with registry - command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc + command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/tailwind-react-ui/.npmrc - run: name: Publish package command: npm publish - greenkeeperUpdateLockFile: - <<: *defaults - steps: - - checkout - - - restore_cache: - keys: - - v1-dependencies-{{ checksum "package.json" }} - - v1-dependencies- - - - run: - name: Update package-lock.json - command: npm install - - - <<: *setupGit - - - run: - name: Commit lockfile if changed - command: | - if ! git diff-index --quiet HEAD --; then - git add package-lock.json && - git commit -m "chore(package): update lockfile [skip ci]" && - export URL=$(echo $CIRCLE_REPOSITORY_URL | cut -c 4- | tr : /) && - git push https://${GH_TOKEN}${URL} $CIRCLE_BRANCH --quiet - fi - workflows: version: 2 - build-and-deploy: + ci: jobs: - - build: + - install: filters: tags: only: /^v.*/ - - greenkeeperUpdateLockFile: + - test: + requires: + - install + - build: + requires: + - install filters: - branches: - only: /^greenkeeper\/.*/ - - deploy-and-publish: + tags: + only: /^v.*/ + - publish: + context: npm requires: - build filters: diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 27a2ca9..0000000 --- a/.eslintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "parser": "babel-eslint", - "env": { - "browser": true, - "jest": true - }, - "extends": ["airbnb", "plugin:prettier/recommended", "prettier/react"], - "settings": { - "import/parser": "babel-eslint", - "import/resolver": { - "node": { - "extensions": [".js", ".jsx"] - } - } - }, - "rules": { - "import/prefer-default-export": "off" - } -} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..78bb380 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,10 @@ +module.exports = { + extends: [ + 'react-app', + 'plugin:jsx-a11y/recommended', + 'prettier/@typescript-eslint', + 'plugin:prettier/recommended', + 'prettier/react', + ], + plugins: ['jsx-a11y'], +} diff --git a/.gitignore b/.gitignore index 941b389..cd3b1da 100644 --- a/.gitignore +++ b/.gitignore @@ -65,12 +65,12 @@ stats # build directories /dist -/components -/plugins -/tools # Idea directory .idea # Styleguide styleguide + +# Build cache +.cache diff --git a/.nvmrc b/.nvmrc index 41c4217..b009dfb 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v8.11.3 +lts/* diff --git a/README.md b/README.md index 4de86d5..2e0fe4c 100644 --- a/README.md +++ b/README.md @@ -54,61 +54,75 @@ Tailwind React UI's suite of components are highly composable allowing for a lar ### Using Utility Components ```jsx - - - - - Hello World - +import { Box, Flex, Text, Touchable } from 'tailwind-react-primitives' +;<> + + + + + Hello World + + + + + Foo + + + Bar + + - - - Foo - - - Bar - - - + ``` ### Using UI Components ```jsx - - - - - Hello World - - - - - Foo - - - Bar - - - - +import { + Container, + Card, + CardBody, + CardFooter, + Title, + FillButton, + OutlineButton, +} from 'tailwind-react-ui' +;<> + + + + + Hello World + + + + + Foo + + + Bar + + + + + ``` ## Useful Links diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..29db2c5 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,12 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + loose: true, + modules: false, + targets: '>2%', + }, + ], + ], +} diff --git a/build/jest/setup/enzyme.js b/build/jest/setup/enzyme.js deleted file mode 100644 index 3d6cd1d..0000000 --- a/build/jest/setup/enzyme.js +++ /dev/null @@ -1,4 +0,0 @@ -import { configure } from 'enzyme' -import Adapter from 'enzyme-adapter-react-16' - -configure({ adapter: new Adapter() }) diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..acb0a96 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'jsdom', + testMatch: ['/src/**/*.(spec|test).{ts,tsx,js,jsx}'], + collectCoverageFrom: ['/src/**/*.{ts,tsx,js,jsx}'], + testURL: 'http://localhost', +} diff --git a/package-lock.json b/package-lock.json index 944d3f9..8ee4d37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,13 +130,77 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", - "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", "dev": true, "requires": { - "@babel/types": "^7.0.0", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", + "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/types": "^7.10.5" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-call-delegate": { @@ -507,12 +571,20 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz", - "integrity": "sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -835,43 +907,133 @@ } }, "@babel/plugin-transform-react-display-name": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", - "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", + "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } } }, "@babel/plugin-transform-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz", - "integrity": "sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", + "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", "dev": true, "requires": { - "@babel/helper-builder-react-jsx": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", + "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz", - "integrity": "sha512-pymy+AK12WO4safW1HmBpwagUQRl9cevNX+82AIAtU1pIdugqcH+nuYP03Ja6B+N4gliAaKWAegIBL/ymALPHA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", + "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz", - "integrity": "sha512-OSeEpFJEH5dw/TtxTg4nijl4nHBbhqbKL94Xo/Y17WKIf2qJWeIk/QeXACF19lG1vMezkxqruwnTjVizaW7u7w==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", + "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", + "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-regenerator": { @@ -894,6 +1056,52 @@ } } }, + "@babel/plugin-transform-runtime": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", + "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "@babel/plugin-transform-shorthand-properties": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz", @@ -1068,16 +1276,26 @@ } }, "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", + "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.10.4", + "@babel/plugin-transform-react-jsx-development": "^7.10.4", + "@babel/plugin-transform-react-jsx-self": "^7.10.4", + "@babel/plugin-transform-react-jsx-source": "^7.10.4", + "@babel/plugin-transform-react-pure-annotations": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } } }, "@babel/runtime": { @@ -1097,6 +1315,24 @@ } } }, + "@babel/runtime-corejs3": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz", + "integrity": "sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + } + } + }, "@babel/template": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0.tgz", @@ -3028,46 +3264,276 @@ } } }, - "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } + "@mortlock/prettier-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mortlock/prettier-config/-/prettier-config-1.1.0.tgz", + "integrity": "sha512-vwqjK0Jhen5VC5JVMY8RvAIHV9XvWkxe1yzLgH9Mx+Oq4WUE9kQ4CC5hFNIbL73/7TLCojEtw/7v9n0c+16xNQ==", + "dev": true }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, - "@types/babel__core": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", - "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@rollup/plugin-babel": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.0.tgz", + "integrity": "sha512-CPABsajaKjINgBQ3it+yMnfVO3ibsrMBxRzbUOUw2cL1hsZJ7aogU8mgglQm3S2hHJgjnAmxPz0Rq7DVdmHsTw==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" }, "dependencies": { - "@babel/parser": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", - "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", - "dev": true - } - } - }, - "@types/babel__generator": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/plugin-node-resolve": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", + "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + }, + "dependencies": { + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "@rollup/plugin-replace": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.3.tgz", + "integrity": "sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8", + "magic-string": "^0.25.5" + } + }, + "@rollup/plugin-typescript": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-5.0.2.tgz", + "integrity": "sha512-CkS028Itwjqm1uLbFVfpJgtVtnNvZ+og/m6UlNRR5wOOnNTWPcVQzOu5xGdEX+WWJxdvWIqUq2uR/RBt2ZipWg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.1", + "resolve": "^1.14.1" + }, + "dependencies": { + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@sinonjs/commons": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", + "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@testing-library/dom": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.23.0.tgz", + "integrity": "sha512-H5m090auYH+obdZmsaYLrSWC5OauWD2CvNbz88KBxQJoXgkJzbU0DpAG8BS7Evj5WqCC3nAAKrLS6vw0ljUYLg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.3", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "dom-accessibility-api": "^0.5.1", + "pretty-format": "^26.4.2" + }, + "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 + }, + "pretty-format": { + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.4.2.tgz", + "integrity": "sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==", + "dev": true, + "requires": { + "@jest/types": "^26.3.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, + "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==", + "dev": true + } + } + }, + "@testing-library/react": { + "version": "10.4.9", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.4.9.tgz", + "integrity": "sha512-pHZKkqUy0tmiD81afs8xfiuseXfU/N7rAX3iKjeZYje86t9VaB0LrxYVa+OOsvkrveX5jCK3IjajVn2MbePvqA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.3", + "@testing-library/dom": "^7.22.3" + } + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true + }, + "@types/aria-query": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz", + "integrity": "sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.9", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", + "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + }, + "dependencies": { + "@babel/parser": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", + "dev": true + } + } + }, + "@types/babel__generator": { "version": "7.6.1", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", @@ -3116,12 +3582,30 @@ } } }, + "@types/classnames": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.10.tgz", + "integrity": "sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==", + "dev": true + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "@types/debug": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", + "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", + "dev": true + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -3171,1543 +3655,2409 @@ "@types/istanbul-lib-report": "*" } }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", - "dev": true - }, - "@types/node": { - "version": "10.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.7.tgz", - "integrity": "sha512-VkKcfuitP+Nc/TaTFH0B8qNmn+6NbI6crLkQonbedViVz7O2w8QV/GERPlkJ4bg42VGHiEWa31CoTOPs1q6z1w==", - "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/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/prettier": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.2.tgz", - "integrity": "sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", - "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "@vxna/mini-html-webpack-template": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@vxna/mini-html-webpack-template/-/mini-html-webpack-template-0.1.7.tgz", - "integrity": "sha512-qV2VslV48ECPwyuG7c4O6JpYgjnvdm88YYkMncIXzakXXwVUxhcg6YipXxWK7U+pixHkWWSnDX/8DIOmWeh+PQ==", - "dev": true, - "requires": { - "common-tags": "^1.7.2" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "@types/jest": { + "version": "26.0.10", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.10.tgz", + "integrity": "sha512-i2m0oyh8w/Lum7wWK/YOZJakYF8Mx08UaKA1CtbmFeDquVhAEdA7znacsVSf2hJ1OQ/OfVMGN90pw/AtzF8s/Q==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "jest-diff": "^25.2.1", + "pretty-format": "^25.2.1" + }, + "dependencies": { + "@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "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" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "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" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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 + }, + "diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "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.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + } + }, + "jest-get-type": { + "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 + }, + "pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, + "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==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "@webassemblyjs/floating-point-hex-parser": { - "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==", + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", "dev": true }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "@webassemblyjs/helper-buffer": { - "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 + "@types/lodash": { + "version": "4.14.161", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.161.tgz", + "integrity": "sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA==" }, - "@webassemblyjs/helper-code-frame": { - "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==", + "@types/lodash.get": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/lodash.get/-/lodash.get-4.4.6.tgz", + "integrity": "sha512-E6zzjR3GtNig8UJG/yodBeJeIOtgPkMgsLjDU3CbgCAPC++vJ0eCMnJhVpRZb/ENqEFlov1+3K9TKtY4UdWKtQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.9.0" + "@types/lodash": "*" } }, - "@webassemblyjs/helper-fsm": { - "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.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==", + "@types/lodash.includes": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/lodash.includes/-/lodash.includes-4.3.6.tgz", + "integrity": "sha512-YzujoN0s409VTzdsQc7JYa7jHGV9YuYhGWIhzuEaZNSCKFuJD636tghbjq7R9xdjjbTnmiDeV/DnCurVSxVVxQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0" + "@types/lodash": "*" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "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.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, + "@types/lodash.merge": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.6.tgz", + "integrity": "sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ==", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@types/lodash": "*" } }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "@types/lodash.uniqueid": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/lodash.uniqueid/-/lodash.uniqueid-4.0.6.tgz", + "integrity": "sha512-WXXsDm7Q1SiAeCG9ubCiDxOuLEDi5x+Crx8SgwTFgBtofATwK1jAeSbGz2bHlfqWezi7mcjynenlBFCeDLhHlw==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "@types/lodash": "*" } }, - "@webassemblyjs/leb128": { - "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" - } + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", "dev": true }, - "@webassemblyjs/wasm-edit": { - "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.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" - } + "@types/node": { + "version": "10.5.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.7.tgz", + "integrity": "sha512-VkKcfuitP+Nc/TaTFH0B8qNmn+6NbI6crLkQonbedViVz7O2w8QV/GERPlkJ4bg42VGHiEWa31CoTOPs1q6z1w==", + "dev": true }, - "@webassemblyjs/wasm-gen": { - "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.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } + "@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 }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "@types/param-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/param-case/-/param-case-1.1.2.tgz", + "integrity": "sha1-4frBW1nH2c2MLdFZYsetPPlgMl8=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "param-case": "*" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prettier": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.2.tgz", + "integrity": "sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true + }, + "@types/react": { + "version": "16.9.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.48.tgz", + "integrity": "sha512-4ykBVswgYitPGMXFRxJCHkxJDU2rjfU3/zw67f8+dB7sNdVJXsrwqoYxz/stkAucymnEEbRPFmX7Ce5Mc/kJCw==", "dev": true, "requires": { - "@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" + "@types/prop-types": "*", + "csstype": "^3.0.2" } }, - "@webassemblyjs/wast-parser": { - "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==", + "@types/react-transition-group": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz", + "integrity": "sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==", "dev": true, "requires": { - "@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" + "@types/react": "*" } }, - "@webassemblyjs/wast-printer": { - "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==", + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "@types/node": "*" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", + "@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", "dev": true }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "@types/uglify-js": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", + "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", "dev": true }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "@types/webpack": { + "version": "4.41.21", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.21.tgz", + "integrity": "sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" }, "dependencies": { - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "acorn-jsx": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", - "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", - "dev": true, - "requires": { - "acorn": "^5.0.3" - } - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "@types/webpack-sources": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz", + "integrity": "sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw==", "dev": true, "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" }, "dependencies": { - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", - "dev": true - }, - "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", - "dev": true - }, - "ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "@types/yargs": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", + "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" + "@types/yargs-parser": "*" } }, - "ajv-errors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz", - "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", - "dev": true - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "ansi-colors": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz", - "integrity": "sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==", - "dev": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + } } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@typescript-eslint/parser": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", + "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.10.1", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } } }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", "dev": true, "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "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 + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } }, - "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } }, - "array-ify": { + "@vxna/mini-html-webpack-template": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true + "resolved": "https://registry.npmjs.org/@vxna/mini-html-webpack-template/-/mini-html-webpack-template-1.0.0.tgz", + "integrity": "sha512-cwlmP9CoWyZYtI33DUKOjS6Hyn3yNrXZQtP+QxPjaRpYNYcbrg+u7EZQZmvB/Mi7qwiDbeTU7UtMT0C5ouRTNA==", + "dev": true, + "requires": { + "common-tags": "^1.8.0" + } }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "@webassemblyjs/ast": { + "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": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "@webassemblyjs/floating-point-hex-parser": { + "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 }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "@webassemblyjs/helper-api-error": { + "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 }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@webassemblyjs/helper-buffer": { + "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.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": { - "array-uniq": "^1.0.1" + "@webassemblyjs/wast-printer": "1.9.0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "@webassemblyjs/helper-fsm": { + "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 }, - "array.prototype.flat": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", - "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "@webassemblyjs/helper-module-context": { + "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": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", - "function-bind": "^1.1.1" + "@webassemblyjs/ast": "1.9.0" } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "@webassemblyjs/helper-wasm-bytecode": { + "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 }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "@webassemblyjs/helper-wasm-section": { + "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": { - "safer-buffer": "~2.1.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "@xtuc/ieee754": "^1.2.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "@xtuc/long": "4.2.2" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.6.tgz", - "integrity": "sha512-nHiuV14upVGl7MWwFUYbzJ6YlfwWS084CU9EA8HajfYQjMSli5TQi3UTRygGF58LFWVkXxS1rbgRhROEqlQkXg==", - "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=", + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "@webassemblyjs/wasm-edit": { + "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": { - "lodash": "^4.17.10" + "@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" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "@webassemblyjs/wasm-gen": { + "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.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "@webassemblyjs/wasm-opt": { + "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.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "@webassemblyjs/wasm-parser": { + "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.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" + } }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", - "dev": true + "@webassemblyjs/wast-parser": { + "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.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" + } }, - "autoprefixer": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.3.tgz", - "integrity": "sha512-No9xrkPCGIHc9I52e+u1MuvkwfTOIXQt3tu+jGSONAJf4awvQmqOTWmk7JhA9Q3BTvBYIRdpS9PLFtrmpZcImg==", + "@webassemblyjs/wast-printer": { + "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": { - "browserslist": "^4.0.2", - "caniuse-lite": "^1.0.30000878", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.2", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "browserslist": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.0.tgz", - "integrity": "sha512-kQBKB8hnq1SRfSpwHDpM1JNHAyk9fydW8hIDvndR2ijTFKIlBPEvkJkCt8JznOugdm12/YCaRgyq/sqDGz9PwA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000878", - "electron-to-chromium": "^1.3.61", - "node-releases": "^1.0.0-alpha.11" - } - }, - "electron-to-chromium": { - "version": "1.3.62", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.62.tgz", - "integrity": "sha512-x09ndL/Gjnuk3unlAyoGyUg3wbs4w/bXurgL7wL913vXHAOWmMhrLf1VNGRaMLngmadd5Q8gsV9BFuIr6rP+Xg==", - "dev": true - } + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.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=", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "axobject-query": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.1.tgz", - "integrity": "sha1-Bd+nBa2orZ25k/polvItOVsLCgc=", + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { - "ast-types-flow": "0.0.7" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, - "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=", + "abab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", + "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "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" + "mime-db": "1.44.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true }, - "babel-eslint": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.0.tgz", - "integrity": "sha512-GDQOtoj8CFtEe1HlbuEb6rwdbxRr4Y5DWyddivdsriEj6ulDda+fS43Zfe/Ku0tuMNnxC9JK1bmIovsLq5+hUA==", + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" }, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true } } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" }, "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true } } }, - "babel-jest": { - "version": "23.4.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.4.2.tgz", - "integrity": "sha512-wg1LJ2tzsafXqPFVgAsYsMCVD5U7kwJZAvbZIxVm27iOewsQw1BR7VZifDlMTEWVo3wasoPPyMdKXWCsfFPr3Q==", - "dev": true, - "requires": { - "babel-plugin-istanbul": "^4.1.6", - "babel-preset-jest": "^23.2.0" - } + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true }, - "babel-loader": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.0.tgz", - "integrity": "sha512-lBUGBz411lSfT+8MHPEaqIVQ44odS1D/wxuTMhijqHc9arZR6jhJEaJa0RpZlCSITZoeK6xoDXTaVTrSoFD7IQ==", + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, - "babel-plugin-add-react-displayname": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=", + "ajv-errors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz", + "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", "dev": true }, - "babel-plugin-istanbul": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", - "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "find-up": "^2.1.0", - "istanbul-lib-instrument": "^1.10.1", - "test-exclude": "^4.2.1" - } - }, - "babel-plugin-jest-hoist": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", - "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", "dev": true }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, - "babel-preset-current-node-syntax": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz", - "integrity": "sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==", + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "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-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "type-fest": "^0.11.0" }, "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } } } }, - "babel-preset-jest": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", - "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^23.2.0", - "babel-plugin-syntax-object-rest-spread": "^6.13.0" + "color-convert": "^1.9.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - } + "sprintf-js": "~1.0.2" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - } + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, - "babylon": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz", - "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg==", + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "bail": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", - "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", + "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 }, - "balanced-match": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "object-keys": "^1.0.12" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true } } }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { + "array-union": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "tweetnacl": "^0.14.3" + "array-uniq": "^1.0.1" } }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + } + } }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "safer-buffer": "~2.1.0" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "util": "0.10.3" }, "dependencies": { - "extend-shallow": { + "inherits": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "inherits": "2.0.1" } } } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "browser-process-hrtime": { + "assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "tslib": "^2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "dev": true + } } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } + "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=", + "dev": true }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "lodash": "^4.17.10" } }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } + "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 }, - "browserslist": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", - "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000884", - "electron-to-chromium": "^1.3.62", - "node-releases": "^1.0.0-alpha.11" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30000898", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000898.tgz", - "integrity": "sha512-ytlTZqO4hYe4rNAJhMynUAIUI33jsP2Bb1two/9OVC39wZjPZ8exIO0eCLw5mqAtegOGiGF0kkTWTn3B02L+mw==", - "dev": true - } - } + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, - "bser": { + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true }, - "buble": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.4.tgz", - "integrity": "sha512-xaTfnWdx80TiajGDZoSYB17nEDqjGnVxeug5W7tvXIAMn61yMa5AfTuWu3F4nLL2Fv/hK8T6GktZvQ6yvPZMpA==", + "autoprefixer": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.3.tgz", + "integrity": "sha512-No9xrkPCGIHc9I52e+u1MuvkwfTOIXQt3tu+jGSONAJf4awvQmqOTWmk7JhA9Q3BTvBYIRdpS9PLFtrmpZcImg==", "dev": true, "requires": { - "acorn": "^5.4.1", - "acorn-dynamic-import": "^3.0.0", - "acorn-jsx": "^4.1.1", - "chalk": "^2.3.1", - "magic-string": "^0.22.4", - "minimist": "^1.2.0", - "os-homedir": "^1.0.1", - "regexpu-core": "^4.1.3", - "vlq": "^1.0.0" + "browserslist": "^4.0.2", + "caniuse-lite": "^1.0.30000878", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.2", + "postcss-value-parser": "^3.2.3" }, "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 - }, - "regexpu-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz", - "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==", + "browserslist": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.0.tgz", + "integrity": "sha512-kQBKB8hnq1SRfSpwHDpM1JNHAyk9fydW8hIDvndR2ijTFKIlBPEvkJkCt8JznOugdm12/YCaRgyq/sqDGz9PwA==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", - "regjsgen": "^0.4.0", - "regjsparser": "^0.3.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" + "caniuse-lite": "^1.0.30000878", + "electron-to-chromium": "^1.3.61", + "node-releases": "^1.0.0-alpha.11" } }, - "regjsgen": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.4.0.tgz", - "integrity": "sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==", + "electron-to-chromium": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.62.tgz", + "integrity": "sha512-x09ndL/Gjnuk3unlAyoGyUg3wbs4w/bXurgL7wL913vXHAOWmMhrLf1VNGRaMLngmadd5Q8gsV9BFuIr6rP+Xg==", "dev": true - }, - "regjsparser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.3.0.tgz", - "integrity": "sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } } } }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "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 }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", "dev": true }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "axe-core": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", + "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", "dev": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "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": { - "callsites": "^2.0.0" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { - "callsites": { + "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" + } + }, + "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", + "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/parser": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", + "dev": true + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-jest": { + "version": "23.4.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.4.2.tgz", + "integrity": "sha512-wg1LJ2tzsafXqPFVgAsYsMCVD5U7kwJZAvbZIxVm27iOewsQw1BR7VZifDlMTEWVo3wasoPPyMdKXWCsfFPr3Q==", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" + } + }, + "babel-loader": { + "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.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.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "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 + }, + "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.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "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" + } + }, + "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.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=", + "dev": true + }, + "babel-plugin-annotate-pure-calls": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz", + "integrity": "sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==", + "dev": true + }, + "babel-plugin-istanbul": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" + } + }, + "babel-plugin-jest-hoist": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-transform-rename-import": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz", + "integrity": "sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==", + "dev": true + }, + "babel-preset-current-node-syntax": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz", + "integrity": "sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==", + "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-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + } + } + }, + "babel-preset-jest": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", + "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + } + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } + }, + "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", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "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": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001119", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001119.tgz", + "integrity": "sha512-Hpwa4obv7EGP+TjkCh/wVvbtNJewxmtg4yVJBLFnxo35vbPapBr138bUWENkb5j5L9JZJ9RXLn4OrXRG/cecPQ==", + "dev": true + }, + "node-releases": { + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "dev": true + } + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buble": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.8.tgz", + "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==", + "dev": true, + "requires": { + "acorn": "^6.1.1", + "acorn-dynamic-import": "^4.0.0", + "acorn-jsx": "^5.0.1", + "chalk": "^2.4.2", + "magic-string": "^0.25.3", + "minimist": "^1.2.0", + "os-homedir": "^2.0.0", + "regexpu-core": "^4.5.4" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regexpu-core": { + "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.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.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" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + } + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "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", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "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": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -4753,9 +6103,9 @@ "dev": true }, "ccount": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", - "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", "dev": true }, "chalk": { @@ -4776,55 +6126,40 @@ "dev": true }, "character-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", - "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, "character-entities-html4": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", - "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", + "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.2", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", - "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, "character-reference-invalid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", - "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - } - }, "chokidar": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, - "optional": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.0", @@ -4842,9 +6177,9 @@ } }, "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chrome-trace-event": { @@ -4872,12 +6207,6 @@ "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -4923,13 +6252,20 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "clean-webpack-plugin": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", - "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", + "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": { - "rimraf": "^2.6.1" + "@types/webpack": "^4.4.31", + "del": "^4.1.1" } }, "cli-cursor": { @@ -4942,9 +6278,9 @@ } }, "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz", + "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", "dev": true }, "cli-width": { @@ -4953,10 +6289,22 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "clipboard": { + "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": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "clipboard-copy": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-2.0.1.tgz", - "integrity": "sha512-/JBr7ryeWwl2w33SRMYGfOZU5SWPVNtpB9oTxUzFp7olKKd2HM+cnhSMeETblJMnjgqtL581ncI/pcZX7o7Big==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-3.1.0.tgz", + "integrity": "sha512-Xsu1NddBXB89IUauda5BIq3Zq73UWkjkaQlPQbLNvNsd5WBMnTWPNKYR6HGaySOxGYZ+BKxP2E9X4ElnI3yiPA==", "dev": true }, "cliui": { @@ -5016,22 +6364,22 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "dev": true + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "codemirror": { - "version": "5.40.2", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.40.2.tgz", - "integrity": "sha1-9KQf7i2E5nlUNZGzaAryWdkDMws=", - "dev": true - }, "collapse-white-space": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", - "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", + "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": { @@ -5206,18 +6554,18 @@ } }, "common-dir": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/common-dir/-/common-dir-2.0.2.tgz", - "integrity": "sha512-AiVcdIuevkFWyqrcHhpOWJbaFBLm+OLPiaRy3QikrMypalgA4ehU1SugZO2rPawgdzkTAycXGs3F65PGPA2DWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-dir/-/common-dir-3.0.0.tgz", + "integrity": "sha512-DxMoyyrXEEGpzpLHs5UvcuXHYyUOe+weMVXgmM0cQerf/NbLzOgZuNpBh7mKbt69pgtSNjjZnEQh3CEnIIxhKQ==", "dev": true, "requires": { - "common-sequence": "^1.0.2" + "common-sequence": "^2.0.0" } }, "common-sequence": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz", - "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-2.0.0.tgz", + "integrity": "sha512-f0QqPLpRTgMQn/pQIynf+SdE73Lw5Q1jn4hjirHLgH/NJ71TiHjXusV16BmOyuK5rRQ1W2f++II+TFZbQOh4hA==", "dev": true }, "common-tags": { @@ -5248,6 +6596,49 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + } + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5266,6 +6657,18 @@ "typedarray": "^0.0.6" } }, + "confusing-browser-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -5287,6 +6690,15 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -5906,6 +7318,12 @@ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -5933,19 +7351,190 @@ "dev": true }, "copy-webpack-plugin": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz", - "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "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 + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "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" + } + }, + "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" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.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 + } + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "core-js": { @@ -5954,6 +7543,12 @@ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", "dev": true }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -6063,12 +7658,14 @@ } }, "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=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } @@ -6093,9 +7690,9 @@ } }, "css-initials": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/css-initials/-/css-initials-0.2.0.tgz", - "integrity": "sha512-t80yjg0pi4VAIc5itIqLh6M+ZlA+cB+gUXEQkDR09+ExTDwLMGfJ8YviBsGW+DklIrb2k9fwB75Io8ooWXDxxw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/css-initials/-/css-initials-0.3.1.tgz", + "integrity": "sha512-fkshKv9vV8AmcxkAWVQ9DmEAKiqe09GHdnFaXecp0NIfsGnXIHVJAHfsxdRy9KXV0/KiWdjBqrCYto2fYIO4xQ==", "dev": true }, "css-loader": { @@ -6137,18 +7734,6 @@ } } }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", @@ -6166,12 +7751,6 @@ "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", "dev": true }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -6201,6 +7780,12 @@ } } }, + "csstype": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", + "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==", + "dev": true + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -6217,9 +7802,9 @@ "dev": true }, "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", "dev": true }, "dargs": { @@ -6306,10 +7891,26 @@ "dev": true }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "dependencies": { + "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 + } + } }, "deep-is": { "version": "0.1.3", @@ -6323,6 +7924,16 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -6389,12 +8000,89 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "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": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "dev": true, + "optional": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -6496,21 +8184,14 @@ } }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "arrify": "^1.0.1", "path-type": "^3.0.0" } }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -6537,49 +8218,31 @@ } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, + "dom-accessibility-api": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.2.tgz", + "integrity": "sha512-k7hRNKAiPJXD2aBqfahSo4/01cTsKWXf+LqJgglnkN2Nz8TsxXKQBXHhKe0Ye9fEfHEZY49uSA5Sr3AqP/sWKA==", + "dev": true + }, "dom-helpers": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg==" }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -6597,25 +8260,6 @@ } } }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "dot-prop": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", @@ -6689,9 +8333,9 @@ } }, "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "duplexify": { @@ -6723,9 +8367,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.80", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.80.tgz", - "integrity": "sha512-WClidEWEUNx7OfwXehB0qaxCuetjbKjev2SmXWgybWPLKAThBiMTF/2Pd8GSUDtoGOavxVzdkKwfFAPRSWlkLw==", + "version": "1.3.555", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.555.tgz", + "integrity": "sha512-/55x3nF2feXFZ5tdGUOr00TxnUjUgdxhrn+eCJ1FAcoAt+cKQTjQkUC5XF4frMWE1R5sjHk+JueuBalimfe5Pg==", "dev": true }, "elliptic": { @@ -6773,15 +8417,6 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -6814,74 +8449,6 @@ } } }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "enzyme": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.6.0.tgz", - "integrity": "sha512-onsINzVLGqKIapTVfWkkw6bYvm1o4CyJ9s8POExtQhAkVa4qFDW6DGCQGRy/5bfZYk+gmUbMNyayXiWDzTkHFQ==", - "dev": true, - "requires": { - "array.prototype.flat": "^1.2.1", - "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.4", - "is-number-object": "^1.0.3", - "is-string": "^1.0.4", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "raf": "^3.4.0", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.1.2" - } - }, - "enzyme-adapter-react-16": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.4.0.tgz", - "integrity": "sha512-sn2zE3g5/LrSNueLFBNOP0ID/YqOJEJb1qyyZ2VdSWbjzbiNDva3IBEntrBP29Wg/EBeSP5yYt5W+nvQ2oeDKg==", - "dev": true, - "requires": { - "enzyme-adapter-utils": "^1.6.0", - "function.prototype.name": "^1.1.0", - "object.assign": "^4.1.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.2", - "react-is": "^16.4.2", - "react-test-renderer": "^16.0.0-0" - } - }, - "enzyme-adapter-utils": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.6.1.tgz", - "integrity": "sha512-MH8Tbe/e6UlVGBTxO5vb2gHv/wqAU2j/I72nuVGHyb0TxzfZOttJopJea7/5ZgmwBSeqqcaRnd/B87//RDJ9/w==", - "dev": true, - "requires": { - "function.prototype.name": "^1.1.0", - "object.assign": "^4.1.0", - "prop-types": "^15.6.2" - } - }, - "enzyme-to-json": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.3.4.tgz", - "integrity": "sha1-Z8YEDpMRgvGDQYry659DIyWKp38=", - "dev": true, - "requires": { - "lodash": "^4.17.4" - } - }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -6901,27 +8468,62 @@ } }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "dependencies": { + "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 + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "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 + } } }, "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "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.1", + "is-callable": "^1.1.4", "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "is-symbol": "^1.0.2" } }, "es6-object-assign": { @@ -6931,9 +8533,9 @@ "dev": true }, "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "escalade": { @@ -6955,24 +8557,18 @@ "dev": true }, "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6983,144 +8579,197 @@ } }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", + "optionator": "^0.8.3", "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "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-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 + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "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": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "is-glob": "^4.0.1" + }, + "dependencies": { + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" } }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "strip-ansi": { + "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "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 + }, + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, - "eslint-config-airbnb": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-17.0.0.tgz", - "integrity": "sha512-FLaAYKpu9gLw/ca0qXQRT150Nbfvwc8eaCITaJCU25H9x+5CHsBPW1pFB6EF3r3T2PZTnXrHKisLh+GT43ZY5Q==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^13.0.0", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" - } - }, - "eslint-config-airbnb-base": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.0.0.tgz", - "integrity": "sha512-hUFXRlE6AY84z0qYh4wKdtSF4EqDnyT8sxrvTpcXCV4ENSLF8li5yNA1yDM26iinH8Ierbpc4lv8Rp62uX6VSQ==", - "dev": true, - "requires": { - "eslint-restricted-globals": "^0.1.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" - } - }, "eslint-config-prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.0.1.tgz", - "integrity": "sha512-vA0TB8HCx/idHXfKHYcg9J98p0Q8nkfNwNAoP7e+ywUidn6ScaFS5iqncZAHPz+/a0A/tp657ulFHFx/2JDP4Q==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -7134,43 +8783,23 @@ } } }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "eslint-config-react-app": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "dev": true, "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "confusing-browser-globals": "^1.0.9" } }, - "eslint-import-resolver-webpack": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.10.1.tgz", - "integrity": "sha512-RN49nnyQpBCP3TqVhct+duJjH8kaVg08fFevWvA+4Cr1xeN7OFQRse4wMvzBto9/4VmOJWvqPfdmNTEG3jc8SQ==", + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { - "array-find": "^1.0.0", - "debug": "^2.6.8", - "enhanced-resolve": "~0.9.0", - "find-root": "^1.1.0", - "has": "^1.0.1", - "interpret": "^1.0.0", - "lodash": "^4.17.4", - "node-libs-browser": "^1.0.0 || ^2.0.0", - "resolve": "^1.4.0", - "semver": "^5.3.0" + "debug": "^2.6.9", + "resolve": "^1.13.1" }, "dependencies": { "debug": { @@ -7182,39 +8811,25 @@ "ms": "2.0.0" } }, - "enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" + "path-parse": "^1.0.6" } - }, - "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", - "dev": true - }, - "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", - "dev": true } } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "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.8", - "pkg-dir": "^1.0.0" + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { @@ -7226,72 +8841,57 @@ "ms": "2.0.0" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "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" - } - }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^1.0.0" + "find-up": "^2.1.0" } } } }, - "eslint-plugin-es": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz", - "integrity": "sha512-9XcVyZiQRVeFjqHw8qHNDAZcQLqaHlOGGpeYqzYh8S4JYCWTCO3yzyen8yVmA5PratfzTRWDwCOFphtDEG+w/w==", + "eslint-plugin-flowtype": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.7.0.tgz", + "integrity": "sha512-M+hxhSCk5QBEValO5/UqrS4UunT+MgplIJK5wA1sCtXjzBcZkpTGRwxmLHhGpbHcrmQecgt6ZL/KDdXWqGB7VA==", "dev": true, "requires": { - "eslint-utils": "^1.3.0", - "regexpp": "^2.0.0" - }, - "dependencies": { - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - } + "lodash": "^4.17.15" } }, "eslint-plugin-import": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz", - "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", + "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", "dev": true, "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", + "eslint-import-resolver-node": "^0.3.3", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7301,6 +8901,15 @@ "ms": "2.0.0" } }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -7323,6 +8932,18 @@ "strip-bom": "^3.0.0" } }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -7359,6 +8980,15 @@ "read-pkg": "^2.0.0" } }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -7368,76 +8998,133 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz", - "integrity": "sha512-JsxNKqa3TwmPypeXNnI75FntkUktGzI1wSa1LgNZdSOMI+B4sxnr1lSF8m8lPiz4mKiC+14ysZQM4scewUrP7A==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", + "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", "dev": true, "requires": { - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", + "@babel/runtime": "^7.10.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.1", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^6.5.1", + "axe-core": "^3.5.4", + "axobject-query": "^2.1.2", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" + "jsx-ast-utils": "^2.4.1", + "language-tags": "^1.0.5" }, "dependencies": { "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", - "dev": true - } - } - }, - "eslint-plugin-node": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.0.tgz", - "integrity": "sha512-Y+ln8iQ52scz9+rSPnSWRaAxeWaoJZ4wIveDR0vLHkuSZGe44Vk1J4HX7WvEP5Cm+iXPE8ixo7OM7gAO3/OKpQ==", - "dev": true, - "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^5.0.2", - "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" - }, - "dependencies": { - "ignore": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.2.tgz", - "integrity": "sha512-ilxkgh36cTqJxlipxQdCOxkbQae5dIeCwo5fSw6pBDW8m8GiMTnadClKST2+aATqjs9BTHsi0IqOsTp0jiihAw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.0.0.tgz", + "integrity": "sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w==", "dev": true } } }, "eslint-plugin-prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz", - "integrity": "sha512-4g11opzhqq/8+AMmo5Vc2Gn7z9alZ4JqrbZ+D4i8KlSyxeQhZHlmIrY8U9Akf514MoEhogPa87Jgkq87aZ2Ohw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.10.0.tgz", - "integrity": "sha512-18rzWn4AtbSUxFKKM7aCVcj5LXOhOKdwBino3KKWy4psxfPW0YtIbE8WNRDUdyHFL50BeLb6qFd4vpvNYyp7hw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz", + "integrity": "sha512-kidMTE5HAEBSLu23CUDvj8dc3LdBU0ri1scwHBZjI41oDv4tjsWZKU7MQccFzH1QYPYhsnTF2ovh7JlcIcmxgg==", "dev": true, "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" + "jsx-ast-utils": "^2.4.1", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "eslint-plugin-react-hooks": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz", + "integrity": "sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==", "dev": true }, "eslint-scope": { @@ -7468,53 +9155,43 @@ } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - }, - "dependencies": { - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - } + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "esrecurse": { @@ -7532,12 +9209,6 @@ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, - "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -7550,19 +9221,19 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": ">=0.0.5" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -7661,66 +9332,6 @@ } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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": "26.4.1", "resolved": "https://registry.npmjs.org/expect/-/expect-26.4.1.tgz", @@ -7762,6 +9373,67 @@ } } }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -7790,13 +9462,13 @@ } }, "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, @@ -7878,11 +9550,25 @@ "dev": true }, "fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -7902,9 +9588,9 @@ "dev": true }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -7919,29 +9605,6 @@ "bser": "2.1.1" } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "dev": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -7958,21 +9621,14 @@ } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "filename-reserved-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", @@ -8029,23 +9685,43 @@ } } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "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": "^1.0.0", - "pkg-dir": "^2.0.0" + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -8074,54 +9750,47 @@ } }, "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" }, "dependencies": { - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "glob": "^7.1.3" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true } } }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "flush-write-stream": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", @@ -8133,13 +9802,10 @@ } }, "follow-redirects": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", - "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", - "dev": true, - "requires": { - "debug": "=3.1.0" - } + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true }, "for-in": { "version": "1.0.2", @@ -8147,15 +9813,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -8168,6 +9825,30 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, + "fork-ts-checker-webpack-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "chalk": "^2.4.1", + "chokidar": "^2.0.4", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -8212,7 +9893,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -8238,6 +9919,15 @@ } } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -8822,17 +10512,6 @@ "integrity": "sha512-ejQivNFbBPTY5O/waFta6D5AzV8GJiM/fMDaT6LrsYax1cb4eipxuQqKNlugF2jlcXIjifsqvju3wsgV35TELg==", "dev": true }, - "function.prototype.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", - "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "is-callable": "^1.1.3" - } - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -8852,9 +10531,9 @@ "dev": true }, "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, "get-package-type": { @@ -8884,7 +10563,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -8915,7 +10594,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -9097,7 +10776,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -9131,9 +10810,9 @@ } }, "github-slugger": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.0.tgz", - "integrity": "sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", "dev": true, "requires": { "emoji-regex": ">=6.0.0 <=6.1.1" @@ -9333,51 +11012,15 @@ "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } - }, - "yargs-parser": { - "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": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -9403,6 +11046,12 @@ } } }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -9413,27 +11062,23 @@ } }, "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "^3.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=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "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" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } }, "globals": { @@ -9443,28 +11088,45 @@ "dev": true }, "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "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", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "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 + } } }, "glogg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", "dev": true, "requires": { "sparkles": "^1.0.0" } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "dev": true, + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -9479,15 +11141,29 @@ "optional": true }, "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, "requires": { "duplexer": "^0.1.1", - "pify": "^3.0.0" + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, "handlebars": { "version": "4.7.6", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", @@ -9623,6 +11299,12 @@ "safe-buffer": "^5.0.1" } }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -9633,12 +11315,6 @@ "minimalistic-assert": "^1.0.1" } }, - "highlight.js": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", - "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", - "dev": true - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -9650,15 +11326,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -9686,26 +11353,18 @@ "whatwg-encoding": "^1.0.5" } }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -9713,21 +11372,22 @@ "dev": true }, "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", "dev": true }, "http-proxy": { @@ -9739,14 +11399,18 @@ "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { @@ -9978,15 +11642,15 @@ } }, "hyphenate-style-name": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", - "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==", "dev": true }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -10044,6 +11708,12 @@ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, + "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", @@ -10186,12 +11856,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -10221,44 +11885,198 @@ "dev": true }, "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" }, "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" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, - "strip-ansi": { + "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 + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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 + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + } + }, "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", @@ -10286,6 +12104,12 @@ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, "is-absolute-url": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", @@ -10313,9 +12137,9 @@ } }, "is-alphabetical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", - "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumeric": { @@ -10325,15 +12149,21 @@ "dev": true }, "is-alphanumerical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", - "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -10349,12 +12179,6 @@ "binary-extensions": "^1.0.0" } }, - "is-boolean-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", - "dev": true - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -10371,9 +12195,9 @@ } }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", "dev": true }, "is-ci": { @@ -10412,9 +12236,9 @@ "dev": true }, "is-decimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", - "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-descriptor": { @@ -10443,26 +12267,11 @@ "dev": true }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true, - "optional": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } + "optional": true }, "is-extendable": { "version": "0.1.1", @@ -10507,9 +12316,9 @@ } }, "is-hexadecimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", - "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-in-browser": { @@ -10518,12 +12327,24 @@ "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=", "dev": true }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -10544,42 +12365,12 @@ } } }, - "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -10595,24 +12386,12 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, "is-potential-custom-element-name": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", "dev": true }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -10634,16 +12413,10 @@ "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-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", - "integrity": "sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", "dev": true }, "is-stream": { @@ -10652,23 +12425,22 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "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" + }, + "dependencies": { + "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 + } + } }, "is-text-path": { "version": "1.0.1", @@ -10692,9 +12464,9 @@ "dev": true }, "is-whitespace-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", - "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", + "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-windows": { @@ -10704,9 +12476,9 @@ "dev": true }, "is-word-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", - "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", + "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": { @@ -10733,16 +12505,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -10878,9 +12640,9 @@ } }, "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.1.tgz", + "integrity": "sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==", "dev": true }, "jest": { @@ -13193,9 +14955,9 @@ "dev": true }, "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", "dev": true }, "json5": { @@ -13213,12 +14975,6 @@ "graceful-fs": "^4.1.6" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -13238,71 +14994,89 @@ } }, "jss": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz", - "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.4.0.tgz", + "integrity": "sha512-l7EwdwhsDishXzqTc3lbsbyZ83tlUl5L/Hb16pHCvZliA9lRDdNBZmHzeJHP0sxqD0t1mrMmMR8XroR12JBYzw==", "dev": true, "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^3.0.2", "is-in-browser": "^1.1.3", - "symbol-observable": "^1.1.0", - "warning": "^3.0.0" + "tiny-warning": "^1.0.2" } }, - "jss-camel-case": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz", - "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==", + "jss-plugin-camel-case": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.4.0.tgz", + "integrity": "sha512-9oDjsQ/AgdBbMyRjc06Kl3P8lDCSEts2vYZiPZfGAxbGCegqE4RnMob3mDaBby5H9vL9gWmyyImhLRWqIkRUCw==", "dev": true, "requires": { - "hyphenate-style-name": "^1.0.2" + "@babel/runtime": "^7.3.1", + "hyphenate-style-name": "^1.0.3", + "jss": "10.4.0" } }, - "jss-compose": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jss-compose/-/jss-compose-5.0.0.tgz", - "integrity": "sha512-YofRYuiA0+VbeOw0VjgkyO380sA4+TWDrW52nSluD9n+1FWOlDzNbgpZ/Sb3Y46+DcAbOS21W5jo6SAqUEiuwA==", + "jss-plugin-compose": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-compose/-/jss-plugin-compose-10.4.0.tgz", + "integrity": "sha512-m1MKZQDH/48W2NHqgsfhYBAObVHzDzSCULLLqrc8nZh1fYGvEBUND82oqd6Jh95pJbMhTzx3E9st63MivEuvAw==", "dev": true, "requires": { - "warning": "^3.0.0" + "@babel/runtime": "^7.3.1", + "jss": "10.4.0", + "tiny-warning": "^1.0.2" } }, - "jss-default-unit": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-8.0.2.tgz", - "integrity": "sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==", - "dev": true + "jss-plugin-default-unit": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.4.0.tgz", + "integrity": "sha512-BYJ+Y3RUYiMEgmlcYMLqwbA49DcSWsGgHpVmEEllTC8MK5iJ7++pT9TnKkKBnNZZxTV75ycyFCR5xeLSOzVm4A==", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.4.0" + } }, - "jss-global": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-3.0.0.tgz", - "integrity": "sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==", - "dev": true + "jss-plugin-global": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.4.0.tgz", + "integrity": "sha512-b8IHMJUmv29cidt3nI4bUI1+Mo5RZE37kqthaFpmxf5K7r2aAegGliAw4hXvA70ca6ckAoXMUl4SN/zxiRcRag==", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.4.0" + } }, - "jss-isolate": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/jss-isolate/-/jss-isolate-5.1.0.tgz", - "integrity": "sha512-8OVa/SObXRMaKvFeCqzpDOZY8So4fAcTH0K6LsITiYpEQNABICSx1NCmubnt/JbPQaqnnQsF5F47uG86uQ9ZRA==", + "jss-plugin-isolate": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-isolate/-/jss-plugin-isolate-10.4.0.tgz", + "integrity": "sha512-WR0IqdTNW0XgeLefqmOF9CS1GQlXszXv4tHCFH4AjGJG1dUk1VGGX1Wr+TKccFgViKgzXaTo6G96EPYjSGi8Kw==", "dev": true, "requires": { - "css-initials": "^0.2.0" + "@babel/runtime": "^7.3.1", + "css-initials": "^0.3.1", + "jss": "10.4.0" } }, - "jss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-6.0.1.tgz", - "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==", + "jss-plugin-nested": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.4.0.tgz", + "integrity": "sha512-cKgpeHIxAP0ygeWh+drpLbrxFiak6zzJ2toVRi/NmHbpkNaLjTLgePmOz5+67ln3qzJiPdXXJB1tbOyYKAP4Pw==", "dev": true, "requires": { - "warning": "^3.0.0" + "@babel/runtime": "^7.3.1", + "jss": "10.4.0", + "tiny-warning": "^1.0.2" } }, "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", "dev": true, "requires": { - "array-includes": "^3.0.3" + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" } }, "killable": { @@ -13318,15 +15092,30 @@ "dev": true }, "kleur": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.1.tgz", - "integrity": "sha512-Zq/jyANIJ2uX8UZjWlqLwbyhcxSXJtT/Y89lClyeZd3l++3ztL1I5SSCYrbcbwSunTjC88N3WuMk0kRDQD6gzA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==", "dev": true }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { @@ -13346,9 +15135,9 @@ "dev": true }, "listify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/listify/-/listify-1.0.0.tgz", - "integrity": "sha1-A8p7otFQ1CZ3c/dOV1WNEFPSvuM=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/listify/-/listify-1.0.3.tgz", + "integrity": "sha512-083swF7iH7bx8666zdzBColpgEuy46HjN3r1isD4zV6Ix7FuHfb/2/WVnl4CH8hjuoWeFF7P5KkKNXUnJCFEJg==", "dev": true }, "load-json-file": { @@ -13421,19 +15210,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true, - "optional": true - }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "lodash.get": { @@ -13446,18 +15222,18 @@ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, "lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -13500,18 +15276,37 @@ "integrity": "sha1-MmjyanyI5PSxdY1nknGBTjH6WyY=" }, "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^2.4.2" + }, + "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" + } + } } }, + "loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "dev": true + }, "longest-streak": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", - "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", + "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": { @@ -13538,46 +15333,49 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "sourcemap-codec": "^1.4.4" } }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "vlq": "^0.2.2" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": 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, - "requires": { - "pify": "^3.0.0" - } + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "makeerror": { "version": "1.0.11", @@ -13610,15 +15408,15 @@ } }, "markdown-escapes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", - "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", + "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": "1.1.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", - "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "dev": true }, "markdown-to-jsx": { @@ -13631,12 +15429,6 @@ "unquote": "^1.1.0" } }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -13648,12 +15440,23 @@ } }, "mdast-util-compact": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz", - "integrity": "sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + } } }, "media-typer": { @@ -13826,12 +15629,24 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -13863,6 +15678,12 @@ "brorand": "^1.0.1" } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, "mime-db": { "version": "1.35.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", @@ -13915,12 +15736,30 @@ } }, "mini-html-webpack-plugin": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mini-html-webpack-plugin/-/mini-html-webpack-plugin-0.2.3.tgz", - "integrity": "sha512-wfkLf+CmyDg++K1S0QdAvUvS29DfVHe9SQ63syX8aX375mInzC5uwHxb/1+3exiiv84xnPrf6zsOnReRe15rjg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mini-html-webpack-plugin/-/mini-html-webpack-plugin-2.2.1.tgz", + "integrity": "sha512-0OS1FieM/c2w7INXjWA1kHCJP4NzJBFN0hOWK3Bz2/j4UOKBQYj4jQiFzfOxf+DnpUNi5I3xGEz86ho3YANdZg==", "dev": true, "requires": { - "webpack-sources": "^1.1.0" + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, "minimalistic-assert": { @@ -13961,10 +15800,54 @@ "kind-of": "^6.0.3" } }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -13973,10 +15856,22 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^2.0.1", + "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "mixin-deep": { @@ -14023,12 +15918,6 @@ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, - "moo": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", - "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", - "dev": true - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -14043,6 +15932,12 @@ "run-queue": "^1.0.3" } }, + "mri": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", + "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14103,23 +15998,10 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "nearley": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz", - "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==", - "dev": true, - "requires": { - "moo": "^0.4.3", - "nomnom": "~1.6.2", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6", - "semver": "^5.4.1" - } - }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { @@ -14160,61 +16042,18 @@ "lodash.toarray": "^4.4.0" } }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", @@ -14281,24 +16120,6 @@ "semver": "^5.3.0" } }, - "nomnom": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", - "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", - "dev": true, - "requires": { - "colors": "0.5.x", - "underscore": "~1.4.4" - }, - "dependencies": { - "colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true - } - } - }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -14353,15 +16174,6 @@ "path-key": "^2.0.0" } }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", @@ -14434,12 +16246,6 @@ "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", "dev": true }, - "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", - "dev": true - }, "object-is": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", @@ -14473,36 +16279,27 @@ "object-keys": "^1.0.11" } }, - "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", "dev": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + } } }, "object.pick": { @@ -14514,18 +16311,6 @@ "isobject": "^3.0.1" } }, - "object.values": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", - "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -14541,6 +16326,12 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -14559,10 +16350,19 @@ "mimic-fn": "^1.0.0" } }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -14583,32 +16383,124 @@ } }, "ora": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "dev": true, "requires": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", "wcwidth": "^1.0.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 + }, + "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" + } + }, + "chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.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 }, - "strip-ansi": { + "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } @@ -14629,9 +16521,9 @@ "dev": true }, "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-2.0.0.tgz", + "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==", "dev": true }, "os-tmpdir": { @@ -14681,6 +16573,12 @@ "p-limit": "^1.1.0" } }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, "p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -14752,9 +16650,9 @@ } }, "parse-entities": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", - "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", "dev": true, "requires": { "character-entities": "^1.0.0", @@ -14771,35 +16669,6 @@ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", "dev": true }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -14809,25 +16678,10 @@ "error-ex": "^1.2.0" } }, - "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": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -14836,12 +16690,6 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -14949,12 +16797,57 @@ } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } } }, "pkg-up": { @@ -14975,12 +16868,43 @@ "semver-compare": "^1.0.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -15373,16 +17297,10 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "prettier": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.2.tgz", - "integrity": "sha512-McHPg0n1pIke+A/4VcaS2en+pTNjy4xF+Uuq86u/5dyDO59/TtFZtQ708QIRkEZ3qwKz3GVkVa6mpxK/CpB8Rg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", + "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", "dev": true }, "prettier-linter-helpers": { @@ -15451,6 +17369,15 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, + "prismjs": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz", + "integrity": "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==", + "dev": true, + "requires": { + "clipboard": "^2.0.0" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -15470,20 +17397,11 @@ "dev": true }, "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -15517,18 +17435,22 @@ "object-assign": "^4.1.1" } }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -15576,27 +17498,288 @@ "dev": true }, "purgecss": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz", - "integrity": "sha512-hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", "dev": true, "requires": { - "glob": "^7.1.3", - "postcss": "^7.0.14", - "postcss-selector-parser": "^6.0.0", - "yargs": "^14.0.0" + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "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" + } + } + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "purgecss-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss-webpack-plugin/-/purgecss-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-I9IMWFq4sHRg/FuuD38upRZdQ0EHuyrv+dFTKcPRjugJWkIU6S5lzKdZqO4cFo+ApcA5gqHnAEIk1ncPabZITg==", + "dev": true, + "requires": { + "purgecss": "^2.3.0", + "webpack": "^4.42.1", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "q-i": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/q-i/-/q-i-2.0.1.tgz", + "integrity": "sha512-tr7CzPNxkBDBuPzqi/HDUS4uBOppb91akNTeh56TYio8TiIeXp2Yp8ea9NmDu2DmGH35ZjJDq6C3E4SepVZ4bQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "is-plain-object": "^2.0.4", + "stringify-object": "^3.2.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "qss": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/qss/-/qss-2.0.3.tgz", + "integrity": "sha512-j48ZBT5IZbSqJiSU8EX4XrN8nXiflHvmMvv2XpFc31gh7n6EpSs75bNr6+oj3FOLWyT8m09pTmqLNl34L7/uPQ==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "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 + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "react": { + "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", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-dev-utils": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.1.0.tgz", + "integrity": "sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.5.5", + "address": "1.1.2", + "browserslist": "4.7.0", + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "1.0.5", + "filesize": "3.6.1", + "find-up": "3.0.0", + "fork-ts-checker-webpack-plugin": "1.5.0", + "global-modules": "2.0.0", + "globby": "8.0.2", + "gzip-size": "5.1.1", + "immer": "1.10.0", + "inquirer": "6.5.0", + "is-root": "2.1.0", + "loader-utils": "1.2.3", + "open": "^6.3.0", + "pkg-up": "2.0.0", + "react-error-overlay": "^6.0.3", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "sockjs-client": "1.4.0", + "strip-ansi": "5.2.0", + "text-table": "0.2.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-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==", + "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 }, "chalk": { @@ -15608,35 +17791,47 @@ "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" - } - } } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } }, "find-up": { "version": "3.0.0", @@ -15644,681 +17839,883 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^3.0.0" + } + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "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.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "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" + } + } + } + }, + "react-docgen": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.3.0.tgz", + "integrity": "sha512-hUrv69k6nxazOuOmdGeOpC/ldiKy7Qj/UFpxaQi0eDMrUFUTIPGtY5HJu7BggSmiyAMfREaESbtBL9UzdQ+hyg==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.13.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", + "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.4", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", + "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" } }, - "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 - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@babel/types": "^7.11.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "@babel/parser": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", "dev": true }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "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 - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "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==", + "@babel/traverse": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "safe-buffer": "~5.1.1" } }, - "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==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ms": "^2.1.1" } }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" + "esutils": "^2.0.2" } }, - "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "minimist": "^1.2.5" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "purgecss-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/purgecss-webpack-plugin/-/purgecss-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-wG7SzEu7FWCrvc2Xo5gxuTj7k0Thzkcks1GcySHdGicr4iXxc8KVAmZYni6WdWgqa6lUm8NXlYZ6Q0bsg/1G2g==", - "dev": true, - "requires": { - "purgecss": "^1.0.1", - "webpack-sources": "^1.1.0" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "q-i": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/q-i/-/q-i-2.0.1.tgz", - "integrity": "sha512-tr7CzPNxkBDBuPzqi/HDUS4uBOppb91akNTeh56TYio8TiIeXp2Yp8ea9NmDu2DmGH35ZjJDq6C3E4SepVZ4bQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "is-plain-object": "^2.0.4", - "stringify-object": "^3.2.0" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "react-docgen-annotation-resolver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-docgen-annotation-resolver/-/react-docgen-annotation-resolver-2.0.0.tgz", + "integrity": "sha512-0rNR0SZAjd4eHTYP3Iq/pi0zTznHtXSLAKOXbK6tGjwd9bTaXUaKQK7hihRvGvqxNjUy0WGTcFgX+lT64vIXBg==", "dev": true }, - "raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "react-docgen-displayname-handler": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-docgen-displayname-handler/-/react-docgen-displayname-handler-3.0.1.tgz", + "integrity": "sha512-fBH3OjzI7I4NkvQ/8PES48uO8jqeBwbH20yrdgJK76RllxKLHOO2oYeBxsCgY2Hhr0pUffITIc7RdWG+2R7+7g==", "dev": true, "requires": { - "performance-now": "^2.1.0" + "ast-types": "0.13.3" + }, + "dependencies": { + "ast-types": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==", + "dev": true + } } }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "react-docgen-typescript": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.20.3.tgz", + "integrity": "sha512-ISdbO2O5BbD62trroxGmcQXlkFzARRL8ylK0tdnzllGuxcMu3IbnPOFOY/dOfRl8K4LVG9U8yulEVwpyGxGNYA==", "dev": true }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "react-dom": { + "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": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" } }, - "randomatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", - "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "react-error-overlay": { + "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-group": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-group/-/react-group-3.0.2.tgz", + "integrity": "sha512-0Jy99MD27jHSJ0PeynomUM0WArxywdcqQUKLttBWV6KYH+zlKWT/RhDwVxrODtMkRxf644BzuJFie1Hvfun7jA==", "dev": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "prop-types": "^15.7.2" }, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true } } }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "react-icons": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-3.11.0.tgz", + "integrity": "sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "camelcase": "^5.0.0" } }, - "react": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.4.2.tgz", - "integrity": "sha512-dMv7YrbxO4y2aqnvA7f/ik9ibeLSHQJTI6TrYAenPSaQ6OXfb+Oti+oJiy8WBxgRzlKatYqtCjphTgDSCEiWFg==", - "dev": true, - "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" - } + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "react-codemirror2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-5.1.0.tgz", - "integrity": "sha512-Cksbgbviuf2mJfMyrKmcu7ycK6zX/ukuQO8dvRZdFWqATf5joalhjFc6etnBdGCcPA2LbhIwz+OPnQxLN/j1Fw==", + "react-simple-code-editor": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz", + "integrity": "sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA==", "dev": true }, - "react-dev-utils": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-6.0.5.tgz", - "integrity": "sha512-X3/q2y8GHvcn6qzqlFhFNoIQgU4TfyerYpBTc5BrMtrSO0q1ctIheAaxDQawNeRgsm2W7L3QSQ9po+YLAGcYFQ==", + "react-styleguidist": { + "version": "11.0.8", + "resolved": "https://registry.npmjs.org/react-styleguidist/-/react-styleguidist-11.0.8.tgz", + "integrity": "sha512-ckqBfipqgFmCl5/Lk5AnaLRbizOwd34YEUCsGLYvMwinzeemoDt6jUgojJhZDnytFzvaIutEqCaXSW72c6X4TQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "address": "1.0.3", - "browserslist": "4.1.1", - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "1.0.5", - "filesize": "3.6.1", - "find-up": "3.0.0", - "global-modules": "1.0.0", - "gzip-size": "5.0.0", - "inquirer": "6.2.0", - "is-root": "2.0.0", - "loader-utils": "1.1.0", - "opn": "5.4.0", - "pkg-up": "2.0.0", - "react-error-overlay": "^5.0.5", - "recursive-readdir": "2.2.2", - "shell-quote": "1.6.1", - "sockjs-client": "1.1.5", - "strip-ansi": "4.0.0", - "text-table": "0.2.0" + "@vxna/mini-html-webpack-template": "^1.0.0", + "acorn": "^6.4.1", + "acorn-jsx": "^5.1.0", + "ast-types": "~0.13.2", + "buble": "0.19.8", + "clean-webpack-plugin": "^3.0.0", + "clipboard-copy": "^3.1.0", + "clsx": "^1.0.4", + "common-dir": "^3.0.0", + "copy-webpack-plugin": "^5.1.0", + "core-js": "^3.6.4", + "doctrine": "^3.0.0", + "es6-object-assign": "~1.1.0", + "es6-promise": "^4.2.8", + "escodegen": "^1.12.0", + "estree-walker": "~0.9.0", + "findup": "^0.1.5", + "function.name-polyfill": "^1.0.6", + "github-slugger": "^1.2.1", + "glob": "^7.1.5", + "glogg": "^1.0.2", + "hash-sum": "^2.0.0", + "is-directory": "^0.3.1", + "javascript-stringify": "^2.0.0", + "jss": "^10.0.0", + "jss-plugin-camel-case": "^10.0.0", + "jss-plugin-compose": "^10.0.0", + "jss-plugin-default-unit": "^10.0.0", + "jss-plugin-global": "^10.0.0", + "jss-plugin-isolate": "^10.0.0", + "jss-plugin-nested": "^10.0.0", + "kleur": "^3.0.3", + "leven": "^3.1.0", + "listify": "^1.0.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.15", + "lowercase-keys": "^2.0.0", + "markdown-to-jsx": "^6.11.4", + "mini-html-webpack-plugin": "^2.0.0", + "mri": "^1.1.4", + "ora": "^4.0.2", + "prismjs": "^1.17.1", + "prop-types": "^15.7.2", + "q-i": "^2.0.1", + "qss": "^2.0.3", + "react-dev-utils": "^9.1.0", + "react-docgen": "^5.0.0", + "react-docgen-annotation-resolver": "^2.0.0", + "react-docgen-displayname-handler": "^3.0.0", + "react-group": "^3.0.2", + "react-icons": "^3.8.0", + "react-simple-code-editor": "^0.10.0", + "recast": "~0.18.5", + "remark": "^11.0.1", + "strip-html-comments": "^1.0.0", + "terser-webpack-plugin": "^2.2.1", + "to-ast": "^1.0.0", + "type-detect": "^4.0.8", + "unist-util-visit": "^2.0.0", + "webpack-dev-server": "^3.9.0", + "webpack-merge": "^4.2.2" }, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "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 + }, + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "dev": true, "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" } }, - "ansi-regex": { + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true + }, + "doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.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 }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "estree-walker": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.9.0.tgz", + "integrity": "sha512-12U47o7XHUX329+x3FzNVjCx3SHEzMF0nkDv7r/HnBzX/xNTKxajBk6gyygaxrAFtLj39219oMfbtxv4KpaOiA==", "dev": true }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "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" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" } }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "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": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "p-limit": "^2.2.0" } }, - "find-up": { + "p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "aggregate-error": "^3.0.0" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "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": { - "safer-buffer": ">= 2.1.2 < 3" + "find-up": "^4.0.0" } }, - "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "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==", "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "glob": "^7.1.3" } }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" } }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "has-flag": "^4.0.0" } - } - } - }, - "react-docgen": { - "version": "3.0.0-beta12", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-3.0.0-beta12.tgz", - "integrity": "sha1-EoWDkpbWthZxW3XJ1X8I0XxQC+k=", - "dev": true, - "requires": { - "async": "^2.1.4", - "babel-runtime": "^6.9.2", - "babylon": "7.0.0-beta.40", - "commander": "^2.9.0", - "doctrine": "^2.0.0", - "node-dir": "^0.1.10", - "recast": "^0.13.0" - } - }, - "react-docgen-annotation-resolver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-docgen-annotation-resolver/-/react-docgen-annotation-resolver-1.1.0.tgz", - "integrity": "sha512-wTUI7IqWkV+BNRmEh1eHkU+Ijwh0XcFUdbgktynWVqe++MgtovdlbfMehFAw5b49mv8NN2DK0NF/G8x+UdIyNw==", - "dev": true - }, - "react-docgen-displayname-handler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-docgen-displayname-handler/-/react-docgen-displayname-handler-2.1.1.tgz", - "integrity": "sha512-Dmu+WnQt5TRDokaQ6uGvgcxrIh92c6uhuljsuueEphTcy/1nKh8/Ep6RUmpd77G1iN2rqg5+4ztGAT7LJjVdpg==", - "dev": true, - "requires": { - "ast-types": "0.11.5" - }, - "dependencies": { - "ast-types": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", - "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", - "dev": true - } - } - }, - "react-dom": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.2.tgz", - "integrity": "sha512-Usl73nQqzvmJN+89r97zmeUpQDKDlh58eX6Hbs/ERdDHzeBzWy+ENk7fsGQ+5KxArV1iOFPT46/VneklK9zoWw==", - "dev": true, - "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" - } - }, - "react-error-overlay": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.0.5.tgz", - "integrity": "sha512-ab0HWBgxdIsngHtMGU8+8gYFdTBXpUGd4AE4lN2VZvOIlBmWx9dtaWEViihuGSIGosCKPeHCnzFoRWB42UtnLg==", - "dev": true - }, - "react-group": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-group/-/react-group-1.0.6.tgz", - "integrity": "sha1-jdfADDs10FzhZAIUWLsH1YDjABo=", - "dev": true, - "requires": { - "prop-types": "^15.6.0" - } - }, - "react-icon-base": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-icon-base/-/react-icon-base-2.1.0.tgz", - "integrity": "sha1-oZbjP98eeqof2jrvu2i9rZ6Cp50=", - "dev": true - }, - "react-icons": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-2.2.7.tgz", - "integrity": "sha512-0n4lcGqzJFcIQLoQytLdJCE0DKSA9dkwEZRYoGrIDJZFvIT6Hbajx5mv9geqhqFiNjUgtxg8kPyDfjlhymbGFg==", - "dev": true, - "requires": { - "react-icon-base": "2.1.0" - } - }, - "react-is": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.4.2.tgz", - "integrity": "sha512-rI3cGFj/obHbBz156PvErrS5xc6f1eWyTwyV4mo0vF2lGgXgS+mm7EKD5buLJq6jNgIagQescGSVG2YzgXt8Yg==", - "dev": true - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-styleguidist": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/react-styleguidist/-/react-styleguidist-8.0.0.tgz", - "integrity": "sha512-D7Ed/bydCGweY+25/F2q5FLH5KvjMchOna97UzL8Yu7t21gURdImaLinHEYNkuNSfyFgi16lsGXelZnFXbH85g==", - "dev": true, - "requires": { - "@vxna/mini-html-webpack-template": "^0.1.7", - "acorn": "^5.7.1", - "ast-types": "^0.11.6", - "buble": "0.19.4", - "classnames": "^2.2.6", - "clean-webpack-plugin": "^0.1.19", - "clipboard-copy": "^2.0.0", - "codemirror": "^5.39.0", - "common-dir": "^2.0.2", - "copy-webpack-plugin": "^4.5.4", - "css-loader": "^1.0.0", - "doctrine": "^2.1.0", - "es6-object-assign": "~1.1.0", - "es6-promise": "^4.2.4", - "escodegen": "^1.10.0", - "findup": "^0.1.5", - "function.name-polyfill": "^1.0.6", - "github-slugger": "^1.2.0", - "glob": "^7.1.2", - "glogg": "^1.0.1", - "highlight.js": "^9.12.0", - "is-directory": "^0.3.1", - "javascript-stringify": "^1.6.0", - "jss": "^9.8.7", - "jss-camel-case": "^6.1.0", - "jss-compose": "^5.0.0", - "jss-default-unit": "^8.0.2", - "jss-global": "^3.0.0", - "jss-isolate": "^5.1.0", - "jss-nested": "^6.0.1", - "kleur": "^2.0.1", - "leven": "^2.1.0", - "listify": "^1.0.0", - "loader-utils": "^1.1.0", - "lodash": "^4.17.10", - "lowercase-keys": "^1.0.1", - "markdown-to-jsx": "^6.6.8", - "mini-html-webpack-plugin": "^0.2.3", - "minimist": "^1.2.0", - "ora": "^2.1.0", - "prop-types": "^15.6.2", - "q-i": "^2.0.1", - "react-codemirror2": "^5.1.0", - "react-dev-utils": "^6.0.5", - "react-docgen": "3.0.0-beta12", - "react-docgen-annotation-resolver": "^1.0.0", - "react-docgen-displayname-handler": "^2.1.0", - "react-group": "^1.0.6", - "react-icons": "^2.2.7", - "react-lifecycles-compat": "^3.0.4", - "recast": "^0.13.0", - "remark": "^9.0.0", - "style-loader": "^0.23.1", - "terser-webpack-plugin": "^1.1.0", - "to-ast": "^1.0.0", - "type-detect": "^4.0.8", - "unist-util-visit": "^1.4.0", - "walkes": "^0.2.1", - "webpack-dev-server": "^3.1.10", - "webpack-merge": "^4.1.4" - }, - "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 }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "terser-webpack-plugin": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", + "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" } }, - "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, - "react-test-renderer": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.4.2.tgz", - "integrity": "sha512-vdTPnRMDbxfv4wL4lzN4EkVGXyYs7LE2uImOsqh1FKiP6L5o1oJl8nore5sFi9vxrP9PK3l4rgb/fZ4PVUaWSA==", - "dev": true, - "requires": { - "fbjs": "^0.8.16", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0", - "react-is": "^16.4.2" - } - }, "react-transition-group": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.4.0.tgz", @@ -16411,7 +18808,6 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, - "optional": true, "requires": { "graceful-fs": "^4.1.2", "minimatch": "^3.0.2", @@ -16420,27 +18816,21 @@ } }, "recast": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.13.2.tgz", - "integrity": "sha512-Xqo0mKljGUWGUhnkdbODk7oJGFrMcpgKQ9cCyZ4y+G9VfoTKdum8nHbf/SxIdKx5aBSZ29VpVy20bTyt7jyC8w==", + "version": "0.18.10", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.18.10.tgz", + "integrity": "sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ==", "dev": true, "requires": { - "ast-types": "0.10.2", + "ast-types": "0.13.3", "esprima": "~4.0.0", - "private": "~0.1.5", + "private": "^0.1.8", "source-map": "~0.6.1" }, "dependencies": { "ast-types": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.2.tgz", - "integrity": "sha512-ufWX953VU1eIuWqxS0nRDMYlGyFH+yxln5CsmIHlpzEt3fdYqUnRtsFt0XAsQot8OaVCwFqxT1RiwvtzYjeYeg==", - "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==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==", "dev": true }, "source-map": { @@ -16510,15 +18900,6 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -16529,10 +18910,105 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "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" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "dependencies": { + "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 + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "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 + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "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" + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + } + } + }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "regexpu-core": { @@ -16562,20 +19038,20 @@ } }, "remark": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-9.0.0.tgz", - "integrity": "sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/remark/-/remark-11.0.2.tgz", + "integrity": "sha512-bh+eJgn8wgmbHmIBOuwJFdTVRVpl3fcVP6HxmpPWO0ULGP9Qkh6INJh0N5Uy7GqlV7DQYGoqaKiEIpM5LLvJ8w==", "dev": true, "requires": { - "remark-parse": "^5.0.0", - "remark-stringify": "^5.0.0", - "unified": "^6.0.0" + "remark-parse": "^7.0.0", + "remark-stringify": "^7.0.0", + "unified": "^8.2.0" } }, "remark-parse": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", - "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", + "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", "dev": true, "requires": { "collapse-white-space": "^1.0.2", @@ -16596,9 +19072,9 @@ } }, "remark-stringify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-5.0.0.tgz", - "integrity": "sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-7.0.4.tgz", + "integrity": "sha512-qck+8NeA1D0utk1ttKcWAoHRrJxERYQzkHDyn+pF5Z4whX1ug98uCNPPSeFgLSaNERRxnD6oxIug6DzZQth6Pg==", "dev": true, "requires": { "ccount": "^1.0.0", @@ -16612,7 +19088,7 @@ "parse-entities": "^1.0.2", "repeat-string": "^1.5.4", "state-toggle": "^1.0.0", - "stringify-entities": "^1.0.1", + "stringify-entities": "^2.0.0", "unherit": "^1.0.4", "xtend": "^4.0.1" } @@ -16740,24 +19216,6 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -16782,16 +19240,6 @@ "resolve-from": "^3.0.0" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -16855,155 +19303,60 @@ } }, "rollup": { - "version": "0.67.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.1.tgz", - "integrity": "sha512-BfwL9pw5VyxrAWx/G1tP8epgG+NH4KcR78aoWacV7+dFp1Mj6ynH8QTIC/lDQ3KlwzDakqZmJQ4LQ7TmLg+pBA==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "@types/node": "*" - } - }, - "rollup-plugin-babel": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.0.2.tgz", - "integrity": "sha512-Mtlsgatsu5t0tW+6ZQNxD7kNWI80MS9dXR5t4Lrjvl6FWzGE6PS+drhM8IUDn61PqTNOlqOt2HgHcTPMy9b1GA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.3.0" - } - }, - "rollup-plugin-node-resolve": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz", - "integrity": "sha512-9zHGr3oUJq6G+X0oRMYlzid9fXicBdiydhwGChdyeNRGPcN/majtegApRKHLR5drboUvEWU+QeUmGTyEZQs3WA==", + "version": "2.26.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.8.tgz", + "integrity": "sha512-li9WaJYc5z9WzV1jhZbPQCrsOpGNsI+Li1qyrn5n745ZNSnlkRlBtj1Hs+Z0Dc2N1+P7HT34UKAEASqN9Th8cg==", "dev": true, "requires": { - "builtin-modules": "^2.0.0", - "is-module": "^1.0.0", - "resolve": "^1.1.6" + "fsevents": "~2.1.2" }, "dependencies": { - "builtin-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", - "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", - "dev": true + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true } } }, - "rollup-pluginutils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.1.tgz", - "integrity": "sha512-JZS8aJMHEHhqmY2QVPMXwKP6lsD1ShkrcGYjhAIvqKKdXQyPHw/9NF0tl3On/xOJ4ACkxfeG7AF+chfCN1NpBg==", + "rollup-plugin-terser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.1.tgz", + "integrity": "sha512-HL0dgzSxBYG/Ly9i/E5Sc+PuKKZ0zBzk11VmLCfdUtpqH4yYqkLclPkTqRy85FU9246yetImOClaQ/ufnj08vg==", "dev": true, "requires": { - "estree-walker": "^0.5.2", - "micromatch": "^2.3.11" + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "terser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.2.1.tgz", + "integrity": "sha512-/AOtjRtAMNGO0fIF6m8HfcvXTw/2AKpsOzDn36tA5RfhRdeXyb4RvHxJ5Pah7iL6dFkLk+gOnCaNHGwJPl6TrQ==", "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" } } } }, - "rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", - "dev": true, - "requires": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -17034,25 +19387,10 @@ "aproba": "^1.1.1" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17105,6 +19443,16 @@ "xmlchars": "^2.2.0" } }, + "scheduler": { + "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", + "object-assign": "^4.1.1" + } + }, "schema-utils": { "version": "0.4.7", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", @@ -17115,12 +19463,28 @@ "ajv-keywords": "^3.1.0" } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "dev": true, + "optional": true + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", "dev": true }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", @@ -17133,11 +19497,71 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + }, + "dependencies": { + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + } + } }, "serve-index": { "version": "1.9.1", @@ -17162,9 +19586,39 @@ "requires": { "ms": "2.0.0" } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true } } }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -17175,8 +19629,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "optional": true + "dev": true }, "set-value": { "version": "2.0.1", @@ -17208,9 +19661,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { @@ -17239,16 +19692,10 @@ "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true }, "shelljs": { "version": "0.8.4", @@ -17268,6 +19715,65 @@ "dev": true, "optional": true }, + "side-channel": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "dev": true, + "requires": { + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", + "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "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 + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "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 + } + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -17304,11 +19810,13 @@ "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -17423,33 +19931,76 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" } } } }, "sockjs-client": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", "json3": "^3.3.2", - "url-parse": "^1.1.8" + "url-parse": "^1.4.3" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, @@ -17511,6 +20062,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "sparkles": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", @@ -17549,6 +20106,78 @@ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -17600,12 +20229,12 @@ } }, "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "figgy-pudding": "^3.5.1" } }, "stack-utils": { @@ -17732,9 +20361,9 @@ } }, "state-toggle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", - "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", + "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": { @@ -17759,9 +20388,9 @@ } }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stealthy-require": { @@ -17869,15 +20498,225 @@ } } }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "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 + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "dependencies": { + "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 + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "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 + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "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" + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "dependencies": { + "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 + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "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 + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "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" + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + } } }, "string_decoder": { @@ -17890,14 +20729,15 @@ } }, "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-2.0.0.tgz", + "integrity": "sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==", "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" } }, @@ -17948,6 +20788,12 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-html-comments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-html-comments/-/strip-html-comments-1.0.0.tgz", + "integrity": "sha1-Cuff8DAKYHWkwpP7YRG0yx0Mt7c=", + "dev": true + }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -17958,9 +20804,9 @@ } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "strip-outer": { @@ -18024,12 +20870,6 @@ } } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -18037,48 +20877,92 @@ "dev": true }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "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 }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true + }, + "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" + } + } + } + }, + "tailwind-react-primitives": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/tailwind-react-primitives/-/tailwind-react-primitives-0.8.11.tgz", + "integrity": "sha512-7LuQIZfrQyG5kLVdK8gO33YngkB/0k9l5CVREVDpdlR/yuagD9geH9nU6KH5bbBojw/NBZ6NAOkVSD8Xo41UZQ==", + "requires": { + "classnames": "^2.2.6", + "debug": "^4.1.1", + "lodash.includes": "^4.3.0", + "param-case": "^2.1.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -18314,6 +21198,31 @@ } } }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -18672,9 +21581,9 @@ } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "timers-browserify": { @@ -18686,6 +21595,19 @@ "setimmediate": "^1.0.4" } }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "dev": true, + "optional": true + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -18722,6 +21644,12 @@ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk=", "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true } } }, @@ -18833,23 +21761,167 @@ "dev": true }, "trim-trailing-lines": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", - "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", + "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 }, "trough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", - "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, + "ts-jest": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.3.0.tgz", + "integrity": "sha512-Jq2uKfx6bPd9+JDpZNMBJMdMQUC3sJ08acISj8NXlVgR2d5OqslEHOR2KHMgwymu8h50+lKIm0m0xj/ioYdW2Q==", + "dev": true, + "requires": { + "@types/jest": "26.x", + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "26.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "18.x" + }, + "dependencies": { + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "ts-loader": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.3.tgz", + "integrity": "sha512-wsqfnVdB7xQiqhqbz2ZPLGHLPZbHVV5Qn/MNFZkCFxRU1miDyxKORucDGxKtsQJ63Rfza0udiUxWF5nHY6bpdQ==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -18892,6 +21964,33 @@ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + } + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -18907,10 +22006,10 @@ "is-typedarray": "^1.0.0" } }, - "ua-parser-js": { - "version": "0.7.18", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", - "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==", + "typescript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", "dev": true }, "uglify-js": { @@ -18920,20 +22019,14 @@ "dev": true, "optional": true }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", - "dev": true - }, "unherit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", - "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", + "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.1", - "xtend": "^4.0.1" + "inherits": "^2.0.0", + "xtend": "^4.0.0" } }, "unicode-canonical-property-names-ecmascript": { @@ -18965,17 +22058,24 @@ "dev": true }, "unified": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", - "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", "dev": true, "requires": { "bail": "^1.0.0", "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", + "is-plain-obj": "^2.0.0", "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" + "vfile": "^4.0.0" + }, + "dependencies": { + "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": { @@ -18997,9 +22097,9 @@ "dev": true }, "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { "unique-slug": "^2.0.0" @@ -19015,42 +22115,76 @@ } }, "unist-util-is": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", - "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", "dev": true }, "unist-util-remove-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", - "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + } } }, "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true + "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": "1.4.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", - "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "dependencies": { + "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-visit-parents": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", + "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } } }, "unist-util-visit-parents": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", - "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, "requires": { - "unist-util-is": "^2.1.2" + "unist-util-is": "^3.0.0" } }, "universalify": { @@ -19115,8 +22249,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true, - "optional": true + "dev": true }, "uri-js": { "version": "4.2.2", @@ -19152,12 +22285,12 @@ } }, "url-parse": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", - "integrity": "sha1-v67kVciJAjIZ11fgRfpqaE7DbBU=", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -19167,31 +22300,12 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -19204,6 +22318,12 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, "v8-to-istanbul": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz", @@ -19260,45 +22380,40 @@ } }, "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", "dev": true, "requires": { - "is-buffer": "^1.1.4", + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^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": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz", - "integrity": "sha1-CDuoDlCWjo1CC+Sd0eqamSEx33c=", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", "dev": true }, "vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha1-UaLM2Ka5enmAuzTvueveljLpNnc=", - "dev": true, - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - }, - "vlq": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.0.tgz", - "integrity": "sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g==", - "dev": true - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "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": { - "indexof": "0.0.1" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, "w3c-hr-time": { @@ -19322,25 +22437,10 @@ "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "walkes": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/walkes/-/walkes-0.2.1.tgz", - "integrity": "sha1-fsoUT+Z+0yeC//5ujpX7RIGGR5Y=", - "dev": true - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "makeerror": "1.0.x" } }, "watchpack": { @@ -19765,6 +22865,27 @@ } } }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + } + } + }, "webpack-dev-server": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", @@ -19812,62 +22933,6 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "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" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", @@ -19910,83 +22975,6 @@ } } }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -19994,39 +22982,6 @@ "dev": true, "requires": { "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "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" } }, "emoji-regex": { @@ -20035,124 +22990,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "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" - } - } - } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -20165,140 +23002,18 @@ "fsevents": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "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 - } - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "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" - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-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" - } + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true }, - "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==", + "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": { - "path-is-inside": "^1.0.2" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, "locate-path": { @@ -20311,43 +23026,10 @@ "path-exists": "^3.0.0" } }, - "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "normalize-path": { @@ -20356,21 +23038,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -20389,30 +23056,12 @@ "p-limit": "^2.0.0" } }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "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 - }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -20422,86 +23071,6 @@ "find-up": "^3.0.0" } }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } - } - }, "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", @@ -20519,31 +23088,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -20555,182 +23099,12 @@ "ajv-keywords": "^3.1.0" } }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "dev": true, - "requires": { - "node-forge": "0.9.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 }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "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" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -20762,58 +23136,12 @@ "has-flag": "^3.0.0" } }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true, - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -20886,12 +23214,12 @@ } }, "webpack-merge": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", - "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", "dev": true, "requires": { - "lodash": "^4.17.5" + "lodash": "^4.17.15" } }, "webpack-sources": { @@ -20913,19 +23241,20 @@ } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-encoding": { @@ -20948,12 +23277,6 @@ } } }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true - }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -20994,12 +23317,27 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dev": true, + "requires": { + "microevent.ts": "~0.1.1" + } + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -21083,9 +23421,9 @@ "dev": true }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" @@ -21109,12 +23447,6 @@ "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", "dev": true }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -21139,12 +23471,6 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, "yaml": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", diff --git a/package.json b/package.json index 0c14ea3..037388d 100644 --- a/package.json +++ b/package.json @@ -10,57 +10,19 @@ "main": "./dist/index.cjs.js", "module": "./dist/index.js", "scripts": { - "build:cjs": "cross-env MODULE_FORMAT=cjs rollup -c", - "build:es": "cross-env MODULE_FORMAT=es rollup -c", - "build": "rimraf dist components plugins tools && npm run build:es && npm run build:cjs", + "build": "rollup -c", "commit": "commit", "docs:deploy": "node ./build/deploy", "docs": "rimraf styleguide && styleguidist --config ./site build", "lint:fix": "npm run lint -- --fix", - "lint": "eslint \"src/**/*.{js,jsx}\"", + "lint": "eslint src --ext .ts,.tsx", "release": "standard-version", "start": "styleguidist --config ./site server --open", "test": "cross-env BABEL_ENV=test jest" }, "engines": { - "node": ">=8.11.3", - "npm": ">=5.0.0" - }, - "jest": { - "collectCoverageFrom": [ - "src/**/*.js", - "src/**/*.jsx" - ], - "moduleDirectories": [ - "node_modules", - "src" - ], - "setupFiles": [ - "./build/jest/setup/enzyme.js" - ], - "moduleNameMapper": { - "^.+\\.(svg)$": "/build/jest/mocks/svg.jsx", - "^.+\\.(s?css)$": "/build/jest/mocks/file.js", - "^.+\\.(jpg|jpeg|png|gif|bmp)$": "/build/jest/mocks/file.js", - "^.+\\.(eot|otf|webp|ttf|woff|woff2)$": "/build/jest/mocks/file.js" - }, - "resetModules": true, - "testPathIgnorePatterns": [ - "/.next/", - "/node_modules/" - ], - "snapshotSerializers": [ - "enzyme-to-json/serializer" - ], - "transform": { - "^.+\\.jsx?$": "babel-jest" - }, - "testURL": "http://localhost" - }, - "prettier": { - "semi": false, - "singleQuote": true, - "trailingComma": "all" + "node": ">=12.0.0", + "npm": ">=6.0.0" }, "husky": { "hooks": { @@ -73,6 +35,7 @@ "tailwindcss": "0.x" }, "dependencies": { + "@types/lodash.merge": "^4.6.6", "classnames": "^2.2.6", "lodash.get": "^4.4.2", "lodash.includes": "^4.3.0", @@ -80,36 +43,56 @@ "lodash.uniqueid": "^4.0.1", "param-case": "^2.1.1", "prop-types": "^15.6.2", - "react-transition-group": "^2.4.0" + "react-transition-group": "^2.4.0", + "tailwind-react-primitives": "^0.8.11" }, "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.11.0", "@babel/polyfill": "^7.0.0", "@babel/preset-env": "^7.0.0", - "@babel/preset-react": "^7.0.0", + "@babel/preset-react": "^7.10.4", "@commitlint/config-conventional": "^7.1.2", + "@mortlock/prettier-config": "^1.1.0", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "@rollup/plugin-replace": "^2.3.3", + "@rollup/plugin-typescript": "^5.0.2", + "@testing-library/react": "^10.4.9", + "@types/classnames": "^2.2.10", + "@types/debug": "^4.1.5", + "@types/jest": "^26.0.10", + "@types/lodash.get": "^4.4.6", + "@types/lodash.includes": "^4.3.6", + "@types/lodash.uniqueid": "^4.0.6", + "@types/param-case": "^1.1.2", + "@types/prop-types": "^15.7.3", + "@types/react": "^16.9.46", + "@types/react-transition-group": "^4.4.0", + "@typescript-eslint/eslint-plugin": "^2.34.0", + "@typescript-eslint/parser": "^3.10.1", "autoprefixer": "^9.1.3", "babel-core": "^7.0.0-bridge.0", - "babel-eslint": "^10.0.0", + "babel-eslint": "^10.1.0", "babel-jest": "^23.4.2", - "babel-loader": "^8.0.0", + "babel-loader": "^8.1.0", "babel-plugin-add-react-displayname": "0.0.5", + "babel-plugin-annotate-pure-calls": "^0.4.0", + "babel-plugin-transform-rename-import": "^2.3.0", "commitlint": "^10.0.0", "cross-env": "^5.2.0", "css-loader": "^1.0.0", - "enzyme": "^3.6.0", - "enzyme-adapter-react-16": "^1.4.0", - "enzyme-to-json": "^3.2.2", - "eslint": "4.19.1", - "eslint-config-airbnb": "^17.0.0", - "eslint-config-prettier": "^3.0.0", - "eslint-import-resolver-webpack": "^0.10.1", - "eslint-plugin-import": "^2.13.0", - "eslint-plugin-jsx-a11y": "^6.1.0", - "eslint-plugin-node": "^8.0.0", - "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.10.0", + "eslint": "^6.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-config-react-app": "^5.2.1", + "eslint-plugin-flowtype": "^4.7.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-react": "^7.20.6", + "eslint-plugin-react-hooks": "^2.5.1", "gh-pages": "^2.0.0", "glob-all": "^3.2.1", "husky": "^1.1.4", @@ -118,18 +101,21 @@ "postcss": "^7.0.2", "postcss-clean": "^1.1.0", "postcss-loader": "^3.0.0", - "prettier": "^1.13.7", - "purgecss-webpack-plugin": "^1.2.1", - "react": "^16.4.2", - "react-dom": "^16.4.2", - "react-styleguidist": "^8.0.0", + "prettier": "^2.1.0", + "purgecss-webpack-plugin": "^2.3.0", + "react": "^16.13.1", + "react-docgen-typescript": "^1.20.2", + "react-dom": "^16.13.1", + "react-styleguidist": "^11.0.8", "rimraf": "^2.6.2", - "rollup": "^0.67.1", - "rollup-plugin-babel": "^4.0.0", - "rollup-plugin-node-resolve": "^3.3.0", + "rollup": "^2.26.5", + "rollup-plugin-terser": "^7.0.0", "standard-version": "^9.0.0", "style-loader": "^0.23.0", "tailwindcss": "^1.7.3", + "ts-jest": "^26.2.0", + "ts-loader": "^8.0.3", + "typescript": "^4.0.2", "webpack": "^4.44.1" }, "author": "Ed Mortlock", diff --git a/plugins/index.js b/plugins/index.js new file mode 100644 index 0000000..3131ca2 --- /dev/null +++ b/plugins/index.js @@ -0,0 +1 @@ +module.exports = require('tailwind-react-primitives/plugins') diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..9971982 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,3 @@ +const config = require('@mortlock/prettier-config') + +module.exports = config diff --git a/rollup.config.js b/rollup.config.js index 6e5044b..726b703 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,53 +1,131 @@ -import babel from 'rollup-plugin-babel' -import resolve from 'rollup-plugin-node-resolve' +import babel from '@rollup/plugin-babel' +import typescript from '@rollup/plugin-typescript' +import json from '@rollup/plugin-json' +import replace from '@rollup/plugin-replace' +import resolve from '@rollup/plugin-node-resolve' +import { terser } from 'rollup-plugin-terser' -import { dependencies, peerDependencies } from './package.json' +import { name } from './package.json' -const { MODULE_FORMAT } = process.env +const { NODE_ENV } = process.env -const suffix = MODULE_FORMAT === 'cjs' ? '.cjs' : '' +const shebang = {} -const externalDeps = [ - ...Object.keys(dependencies), - ...Object.keys(peerDependencies), -] - -const createConfig = (input, outputFile) => ({ +export function createRollupConfig({ input, - output: { - file: outputFile, - format: MODULE_FORMAT, - }, - external: module => { - let isExternal = /node_module/.test(module) - - if (!isExternal) { - externalDeps.forEach(dep => { - if (new RegExp(`^${dep}`).test(module)) { - isExternal = true - } - }) - } - - return isExternal - }, - plugins: [ - resolve({ - extensions: ['.js', '.jsx'], - }), - babel({ - exclude: 'node_modules/**', - }), - ], -}) + outputDir, + outputSuffix = '', + format, + noMinify = false, +} = {}) { + const env = NODE_ENV || 'production' + const isDev = env === 'development' -const config = [createConfig('./src/index.js', `dist/index${suffix}.js`)] + return { + // Tell Rollup the entry point to the package + input, + // Tell Rollup which packages to ignore + external: (id) => !id.startsWith('.') && !id.startsWith('/'), + // Establish Rollup output + output: { + // Set filenames of the consumer's package + file: [`${outputDir}/index`, outputSuffix, 'js'] + .filter(Boolean) + .join('.'), + // Pass through the file format + format, + // Do not let Rollup call Object.freeze() on namespace import objects + // (i.e. import * as namespaceImportObject from...) that are accessed dynamically. + freeze: false, + // Do not let Rollup add a `__esModule: true` property when generating exports for non-ESM formats. + esModule: false, + // Rollup has treeshaking by default, but we can optimize it further... + name, + sourcemap: true, + globals: { 'react': 'React', 'react-native': 'ReactNative' }, + exports: 'named', + }, + plugins: [ + resolve({ + mainFields: ['module', 'main', 'browser'], + }), + json(), + { + // Custom plugin that removes shebang from code + // See: https://github.com/Rich-Harris/buble/pull/165 + transform(code) { + const reg = /^#!(.*)/ + const match = code.match(reg) -if (MODULE_FORMAT === 'cjs') { - config.push( - createConfig('./src/plugins/index.js', `plugins/index.js`), - createConfig('./src/tools/index.js', `tools/index.js`), - ) + shebang[name] = match ? `#!${match[1]}` : '' + + return { + code: code.replace(reg, ''), + map: null, + } + }, + }, + replace({ + __BUILD_ENV__: JSON.stringify(env), + }), + typescript(), + babel({ + exclude: /node_modules/, + extensions: ['.js', '.jsx', '.es6', '.es', '.mjs', '.ts', '.tsx'], + babelHelpers: 'runtime', + inputSourceMap: true, + plugins: [ + require.resolve('@babel/plugin-transform-runtime'), + !noMinify && require.resolve('babel-plugin-annotate-pure-calls'), + format === 'esm' && [ + require.resolve('babel-plugin-transform-rename-import'), + { + replacements: [{ original: 'lodash', replacement: 'lodash-es' }], + }, + ], + ].filter(Boolean), + }), + !noMinify && + !isDev && + terser({ + output: { comments: false }, + compress: { + keep_infinity: true, + pure_getters: true, + collapse_vars: false, + }, + ecma: 5, + toplevel: format === 'cjs', + warnings: true, + }), + ].filter(Boolean), + } } -export default config +const entryPoints = [ + { + input: './src/index.ts', + outputDir: 'dist', + outputs: ['esm', 'cjs'], + }, +] + +export default entryPoints.filter(Boolean).reduce( + (entryPointConfigs, { input, outputDir, outputs, noMinify }) => [ + ...entryPointConfigs, + ...outputs.reduce( + (config, format, formatIdx) => [ + ...config, + createRollupConfig({ + input, + outputDir, + format, + outputSuffix: format.length > 1 && formatIdx > 0 ? format : '', + noMinify, + }), + ], + [], + ), + ], + [], +) diff --git a/site/addComponents.js b/site/addComponents.js deleted file mode 100644 index d5e1082..0000000 --- a/site/addComponents.js +++ /dev/null @@ -1,5 +0,0 @@ -import * as library from '../src' - -Object.keys(library).forEach(key => { - global[key] = library[key] -}) diff --git a/site/components/Wrapper.jsx b/site/components/Wrapper.tsx similarity index 86% rename from site/components/Wrapper.jsx rename to site/components/Wrapper.tsx index 439a846..757a76a 100644 --- a/site/components/Wrapper.jsx +++ b/site/components/Wrapper.tsx @@ -1,7 +1,7 @@ import React from 'react' import PropTypes from 'prop-types' -const Wrapper = ({ children }) => ( +const Wrapper: React.FC = ({ children }) => (
{children}
diff --git a/site/docs/theming.md b/site/docs/theming.md index 51e27ad..2e9677e 100644 --- a/site/docs/theming.md +++ b/site/docs/theming.md @@ -19,15 +19,18 @@ const MyApp = () => ( Which would change the default blue colouring on the button to instead use the `.bg-red` class. ```jsx - - Red button - +import { TailwindThemeProvider, FillButton } from 'tailwind-react-ui' +;<> + + Red button + + ``` ### Default theme @@ -37,7 +40,10 @@ Obviously there's a fair bit more customisation on offer than just a button colo See below for the default values used by components: ```jsx noeditor - - {JSON.stringify(defaultTheme, null, 1)} - +import { Card, CardBody, defaultTheme } from 'tailwind-react-ui' +;<> + + {JSON.stringify(defaultTheme, null, 1)} + + ``` diff --git a/site/docs/usage.md b/site/docs/usage.md index 354426c..2249df0 100644 --- a/site/docs/usage.md +++ b/site/docs/usage.md @@ -10,7 +10,10 @@ const MyButton = () => Submit Which when output on the page would give you the following. ```jsx -Submit +import { FillButton } from 'tailwind-react-ui' +;<> + Submit + ``` ### Tailwind Props @@ -18,18 +21,21 @@ Which when output on the page would give you the following. Each of the components make use of a shared `Base` component which translates the TailwindCSS class structure into a React props api. Take a look at the example below to see how common attributes can be compiled together: ```jsx - - Hello World - +import { Base } from 'tailwind-react-primitives' +;<> + + Hello World + + ``` #### Responsive and State Variants @@ -37,24 +43,27 @@ Each of the components make use of a shared `Base` component which translates th By adding a suffix to the above properties with a breakpoint or state separated with a `-` you can tie a particular prop to a variant qualifier. The below example will change colour as the screen size changes along with interacting to being hovered. ```jsx - - - Tailwind +import { Base } from 'tailwind-react-primitives' +;<> + + + Tailwind + - + ``` diff --git a/site/index.js b/site/index.js index 931488f..eac9012 100644 --- a/site/index.js +++ b/site/index.js @@ -1,20 +1,21 @@ const fs = require('fs') const path = require('path') -// const glob = require('glob-all') -// const PurgecssPlugin = require('purgecss-webpack-plugin') +const glob = require('glob-all') +const PurgecssPlugin = require('purgecss-webpack-plugin') const MiniCssExtractPlugin = require('mini-css-extract-plugin') const { version } = require('../package.json') -// const { getWhitelist, TailwindReactExtractor } = require('../tools') +const { getPaths, purgeFromTailwindReact } = require('../tools') const isDev = process.env.NODE_ENV === 'development' -const components = fs.readdirSync( - path.resolve(__dirname, '..', 'src/components'), -) +const components = fs.readdirSync(path.resolve(__dirname, '..', 'src')) module.exports = { title: `Tailwind React UI`, version, + propsParser: require('react-docgen-typescript').withCustomConfig( + './tsconfig.json', + ), sections: [ { name: '', @@ -35,19 +36,19 @@ module.exports = { name: 'Theming', content: './site/docs/theming.md', }, + { + name: 'Contributing', + content: './site/docs/contributing.md', + }, ], }, - { - name: 'Component Primitives', - components: ['./src/components/primitives/*.jsx'], - }, { name: 'UI Components', sections: components - .map(component => { + .map((component) => { const readme = path.resolve( __dirname, - '../src/components', + '../src', component, 'readme.md', ) @@ -57,28 +58,19 @@ module.exports = { 1, )}`, content: fs.existsSync(readme) - ? path.resolve( - __dirname, - '../src/components', - component, - 'readme.md', - ) + ? path.resolve(__dirname, '../src', component, 'readme.md') : undefined, - components: [`./src/components/${component}/[A-Z]*.jsx`], + components: [`./src/${component}/[A-Z]*.jsx`], usageMode: 'expand', } }) - .filter(section => !!section), - }, - { - name: 'Contributing', - content: './site/docs/contributing.md', + .filter((section) => !!section), }, ], skipComponentsWithoutExample: true, getExampleFilename(componentPath) { - if (path.extname(componentPath) === '.jsx') { - const componentMdPath = componentPath.replace('.jsx', '.md') + if (path.extname(componentPath) === '.tsx') { + const componentMdPath = componentPath.replace('.tsx', '.md') if (fs.existsSync(componentMdPath)) return componentMdPath return path.resolve(__dirname, 'defaultReadme.md') } @@ -86,10 +78,10 @@ module.exports = { return path.resolve(path.dirname(componentPath), 'readme.md') }, getComponentPathLine(componentPath) { - if (!componentPath.endsWith('.jsx')) { + if (!componentPath.endsWith('.tsx')) { return componentPath } - const name = path.basename(componentPath, '.jsx') + const name = path.basename(componentPath, '.tsx') return `import { ${name} } from 'tailwind-react-ui'` }, styles: { @@ -109,20 +101,22 @@ module.exports = { }, }, styleguideComponents: { - Wrapper: path.resolve(__dirname, './components/Wrapper.jsx'), + Wrapper: path.resolve(__dirname, './components/Wrapper.tsx'), }, - require: [ - '@babel/polyfill', - './site/style/main.css', - './site/addComponents.js', - ], + require: ['@babel/polyfill', './site/style/main.css'], webpackConfig: { + devtool: isDev && 'inline-source-map', module: { rules: [ { - test: /\.jsx?$/, + test: /\.(js|mjs|jsx|ts|tsx)$/, + use: 'babel-loader?cacheDirectory', + exclude: /node_modules/, + }, + { + test: /\.tsx?$/, + use: require.resolve('ts-loader'), exclude: /node_modules/, - loader: 'babel-loader?cacheDirectory', }, { test: /\.css$/, @@ -145,30 +139,51 @@ module.exports = { }, ], }, - plugins: isDev - ? [] - : [ - // new PurgecssPlugin({ - // whitelist: getWhitelist({}, [ - // 'flex-col-reverse', - // 'flex-wrap-reverse', - // 'max-w-md', - // 'sm:w-1/5', - // ]), - // paths: glob.sync([ - // path.join(__dirname, 'docs/*.md'), - // path.join(__dirname, '../', '/src/components/**/*.md'), - // ]), - // extractors: [ - // { - // extractor: TailwindReactExtractor, - // extensions: ['md'], - // }, - // ], - // }), - new MiniCssExtractPlugin({ - filename: 'main.[contenthash].css', - }), - ], + plugins: [ + !isDev && + new MiniCssExtractPlugin({ + filename: 'main.[contenthash].css', + }), + !isDev && + new PurgecssPlugin({ + whitelist: [], + paths: glob.sync([ + path.join(__dirname, '../README.md'), + path.join(__dirname, 'components/*.tsx'), + path.join(__dirname, 'docs/*.md'), + ...components.map((component) => + path.join(__dirname, '..', `src/components/${component}/*.md`), + ), + ...getPaths(), + ]), + extractors: [ + { + extractor: purgeFromTailwindReact, + extensions: ['md', 'tsx'], + }, + ], + }), + ].filter(Boolean), + resolve: { + extensions: [ + 'web.mjs', + 'mjs', + 'web.js', + 'js', + 'web.ts', + 'ts', + 'web.tsx', + 'tsx', + 'json', + 'web.jsx', + 'jsx', + ], + alias: { + 'tailwind-react-ui': path.resolve(__dirname, '..', './src/'), + }, + }, + }, + moduleAliases: { + 'tailwind-react-ui': path.resolve(__dirname, '..', './src/'), }, } diff --git a/site/style/tailwind.js b/site/style/tailwind.js deleted file mode 100644 index 141cf96..0000000 --- a/site/style/tailwind.js +++ /dev/null @@ -1,921 +0,0 @@ -/* eslint-disable */ -/* -Tailwind - The Utility-First CSS Framework - -A project by Adam Wathan (@adamwathan), Jonathan Reinink (@reinink), -David Hemphill (@davidhemphill) and Steve Schoger (@steveschoger). - -Welcome to the Tailwind config file. This is where you can customize -Tailwind specifically for your project. Don't be intimidated by the -length of this file. It's really just a big JavaScript object and -we've done our very best to explain each section. - -View the full documentation at https://tailwindcss.com. - - -|------------------------------------------------------------------------------- -| The default config -|------------------------------------------------------------------------------- -| -| This variable contains the default Tailwind config. You don't have -| to use it, but it can sometimes be helpful to have available. For -| example, you may choose to merge your custom configuration -| values with some of the Tailwind defaults. -| -*/ - -// let defaultConfig = require('tailwindcss/defaultConfig')() - -/* -|------------------------------------------------------------------------------- -| Colors https://tailwindcss.com/docs/colors -|------------------------------------------------------------------------------- -| -| Here you can specify the colors used in your project. To get you started, -| we've provided a generous palette of great looking colors that are perfect -| for prototyping, but don't hesitate to change them for your project. You -| own these colors, nothing will break if you change everything about them. -| -| We've used literal color names ("red", "blue", etc.) for the default -| palette, but if you'd rather use functional names like "primary" and -| "secondary", or even a numeric scale like "100" and "200", go for it. -| -*/ - -const plugins = require('../../src/plugins') - -let colors = { - transparent: 'transparent', - - black: '#22292f', - 'grey-darkest': '#3d4852', - 'grey-darker': '#606f7b', - 'grey-dark': '#8795a1', - grey: '#b8c2cc', - 'grey-light': '#dae1e7', - 'grey-lighter': '#f1f5f8', - 'grey-lightest': '#f8fafc', - white: '#ffffff', - - 'red-darkest': '#3b0d0c', - 'red-darker': '#621b18', - 'red-dark': '#cc1f1a', - red: '#e3342f', - 'red-light': '#ef5753', - 'red-lighter': '#f9acaa', - 'red-lightest': '#fcebea', - - 'orange-darkest': '#462a16', - 'orange-darker': '#613b1f', - 'orange-dark': '#de751f', - orange: '#f6993f', - 'orange-light': '#faad63', - 'orange-lighter': '#fcd9b6', - 'orange-lightest': '#fff5eb', - - 'yellow-darkest': '#453411', - 'yellow-darker': '#684f1d', - 'yellow-dark': '#f2d024', - yellow: '#ffed4a', - 'yellow-light': '#fff382', - 'yellow-lighter': '#fff9c2', - 'yellow-lightest': '#fcfbeb', - - 'green-darkest': '#0f2f21', - 'green-darker': '#1a4731', - 'green-dark': '#1f9d55', - green: '#38c172', - 'green-light': '#51d88a', - 'green-lighter': '#a2f5bf', - 'green-lightest': '#e3fcec', - - 'teal-darkest': '#0d3331', - 'teal-darker': '#20504f', - 'teal-dark': '#38a89d', - teal: '#4dc0b5', - 'teal-light': '#64d5ca', - 'teal-lighter': '#a0f0ed', - 'teal-lightest': '#e8fffe', - - 'blue-darkest': '#12283a', - 'blue-darker': '#1c3d5a', - 'blue-dark': '#2779bd', - blue: '#3490dc', - 'blue-light': '#6cb2eb', - 'blue-lighter': '#bcdefa', - 'blue-lightest': '#eff8ff', - - 'indigo-darkest': '#191e38', - 'indigo-darker': '#2f365f', - 'indigo-dark': '#5661b3', - indigo: '#6574cd', - 'indigo-light': '#7886d7', - 'indigo-lighter': '#b2b7ff', - 'indigo-lightest': '#e6e8ff', - - 'purple-darkest': '#21183c', - 'purple-darker': '#382b5f', - 'purple-dark': '#794acf', - purple: '#9561e2', - 'purple-light': '#a779e9', - 'purple-lighter': '#d6bbfc', - 'purple-lightest': '#f3ebff', - - 'pink-darkest': '#451225', - 'pink-darker': '#6f213f', - 'pink-dark': '#eb5286', - pink: '#f66d9b', - 'pink-light': '#fa7ea8', - 'pink-lighter': '#ffbbca', - 'pink-lightest': '#ffebef', -} - -module.exports = { - future: { - removeDeprecatedGapUtilities: true, - }, - - /* - |----------------------------------------------------------------------------- - | Colors https://tailwindcss.com/docs/colors - |----------------------------------------------------------------------------- - | - | The color palette defined above is also assigned to the "colors" key of - | your Tailwind config. This makes it easy to access them in your CSS - | using Tailwind's config helper. For example: - | - | .error { color: config('colors.red') } - | - */ - - colors: colors, - - /* - |----------------------------------------------------------------------------- - | Screens https://tailwindcss.com/docs/responsive-design - |----------------------------------------------------------------------------- - | - | Screens in Tailwind are translated to CSS media queries. They define the - | responsive breakpoints for your project. By default Tailwind takes a - | "mobile first" approach, where each screen size represents a minimum - | viewport width. Feel free to have as few or as many screens as you - | want, naming them in whatever way you'd prefer for your project. - | - | Tailwind also allows for more complex screen definitions, which can be - | useful in certain situations. Be sure to see the full responsive - | documentation for a complete list of options. - | - | Class name: .{screen}:{utility} - | - */ - - screens: { - sm: '576px', - md: '768px', - lg: '992px', - xl: '1200px', - }, - - /* - |----------------------------------------------------------------------------- - | Fonts https://tailwindcss.com/docs/fonts - |----------------------------------------------------------------------------- - | - | Here is where you define your project's font stack, or font families. - | Keep in mind that Tailwind doesn't actually load any fonts for you. - | If you're using custom fonts you'll need to import them prior to - | defining them here. - | - | By default we provide a native font stack that works remarkably well on - | any device or OS you're using, since it just uses the default fonts - | provided by the platform. - | - | Class name: .font-{name} - | - */ - - fonts: { - sans: [ - 'system-ui', - 'BlinkMacSystemFont', - '-apple-system', - 'Segoe UI', - 'Roboto', - 'Oxygen', - 'Ubuntu', - 'Cantarell', - 'Fira Sans', - 'Droid Sans', - 'Helvetica Neue', - 'sans-serif', - ], - serif: [ - 'Constantia', - 'Lucida Bright', - 'Lucidabright', - 'Lucida Serif', - 'Lucida', - 'DejaVu Serif', - 'Bitstream Vera Serif', - 'Liberation Serif', - 'Georgia', - 'serif', - ], - mono: [ - 'Menlo', - 'Monaco', - 'Consolas', - 'Liberation Mono', - 'Courier New', - 'monospace', - ], - }, - - /* - |----------------------------------------------------------------------------- - | Text sizes https://tailwindcss.com/docs/text-sizing - |----------------------------------------------------------------------------- - | - | Here is where you define your text sizes. Name these in whatever way - | makes the most sense to you. We use size names by default, but - | you're welcome to use a numeric scale or even something else - | entirely. - | - | By default Tailwind uses the "rem" unit type for most measurements. - | This allows you to set a root font size which all other sizes are - | then based on. That said, you are free to use whatever units you - | prefer, be it rems, ems, pixels or other. - | - | Class name: .text-{size} - | - */ - - textSizes: { - xs: '.75rem', // 12px - sm: '.875rem', // 14px - base: '1rem', // 16px - lg: '1.125rem', // 18px - xl: '1.25rem', // 20px - '2xl': '1.5rem', // 24px - '3xl': '1.875rem', // 30px - '4xl': '2.25rem', // 36px - '5xl': '3rem', // 48px - }, - - /* - |----------------------------------------------------------------------------- - | Font weights https://tailwindcss.com/docs/font-weight - |----------------------------------------------------------------------------- - | - | Here is where you define your font weights. We've provided a list of - | common font weight names with their respective numeric scale values - | to get you started. It's unlikely that your project will require - | all of these, so we recommend removing those you don't need. - | - | Class name: .font-{weight} - | - */ - - fontWeights: { - hairline: 100, - thin: 200, - light: 300, - normal: 400, - medium: 500, - semibold: 600, - bold: 700, - extrabold: 800, - black: 900, - }, - - /* - |----------------------------------------------------------------------------- - | Leading (line height) https://tailwindcss.com/docs/line-height - |----------------------------------------------------------------------------- - | - | Here is where you define your line height values, or as we call - | them in Tailwind, leadings. - | - | Class name: .leading-{size} - | - */ - - leading: { - none: 1, - tight: 1.25, - normal: 1.5, - loose: 2, - }, - - /* - |----------------------------------------------------------------------------- - | Tracking (letter spacing) https://tailwindcss.com/docs/letter-spacing - |----------------------------------------------------------------------------- - | - | Here is where you define your letter spacing values, or as we call - | them in Tailwind, tracking. - | - | Class name: .tracking-{size} - | - */ - - tracking: { - tight: '-0.05em', - normal: '0', - wide: '0.05em', - }, - - /* - |----------------------------------------------------------------------------- - | Text colors https://tailwindcss.com/docs/text-color - |----------------------------------------------------------------------------- - | - | Here is where you define your text colors. By default these use the - | color palette we defined above, however you're welcome to set these - | independently if that makes sense for your project. - | - | Class name: .text-{color} - | - */ - - textColors: colors, - - /* - |----------------------------------------------------------------------------- - | Background colors https://tailwindcss.com/docs/background-color - |----------------------------------------------------------------------------- - | - | Here is where you define your background colors. By default these use - | the color palette we defined above, however you're welcome to set - | these independently if that makes sense for your project. - | - | Class name: .bg-{color} - | - */ - - backgroundColors: colors, - - /* - |----------------------------------------------------------------------------- - | Background sizes https://tailwindcss.com/docs/background-size - |----------------------------------------------------------------------------- - | - | Here is where you define your background sizes. We provide some common - | values that are useful in most projects, but feel free to add other sizes - | that are specific to your project here as well. - | - | Class name: .bg-{size} - | - */ - - backgroundSize: { - auto: 'auto', - cover: 'cover', - contain: 'contain', - }, - - /* - |----------------------------------------------------------------------------- - | Border widths https://tailwindcss.com/docs/border-width - |----------------------------------------------------------------------------- - | - | Here is where you define your border widths. Take note that border - | widths require a special "default" value set as well. This is the - | width that will be used when you do not specify a border width. - | - | Class name: .border{-side?}{-width?} - | - */ - - borderWidths: { - default: '1px', - '0': '0', - '2': '2px', - '4': '4px', - '8': '8px', - }, - - /* - |----------------------------------------------------------------------------- - | Border colors https://tailwindcss.com/docs/border-color - |----------------------------------------------------------------------------- - | - | Here is where you define your border colors. By default these use the - | color palette we defined above, however you're welcome to set these - | independently if that makes sense for your project. - | - | Take note that border colors require a special "default" value set - | as well. This is the color that will be used when you do not - | specify a border color. - | - | Class name: .border-{color} - | - */ - - borderColors: global.Object.assign({ default: colors['grey-light'] }, colors), - - /* - |----------------------------------------------------------------------------- - | Border radius https://tailwindcss.com/docs/border-radius - |----------------------------------------------------------------------------- - | - | Here is where you define your border radius values. If a `default` radius - | is provided, it will be made available as the non-suffixed `.rounded` - | utility. - | - | If your scale includes a `0` value to reset already rounded corners, it's - | a good idea to put it first so other values are able to override it. - | - | Class name: .rounded{-side?}{-size?} - | - */ - - borderRadius: { - none: '0', - sm: '.125rem', - default: '.25rem', - lg: '.5rem', - full: '9999px', - }, - - /* - |----------------------------------------------------------------------------- - | Width https://tailwindcss.com/docs/width - |----------------------------------------------------------------------------- - | - | Here is where you define your width utility sizes. These can be - | percentage based, pixels, rems, or any other units. By default - | we provide a sensible rem based numeric scale, a percentage - | based fraction scale, plus some other common use-cases. You - | can, of course, modify these values as needed. - | - | - | It's also worth mentioning that Tailwind automatically escapes - | invalid CSS class name characters, which allows you to have - | awesome classes like .w-2/3. - | - | Class name: .w-{size} - | - */ - - width: { - auto: 'auto', - px: '1px', - '1': '0.25rem', - '2': '0.5rem', - '3': '0.75rem', - '4': '1rem', - '5': '1.25rem', - '6': '1.5rem', - '8': '2rem', - '10': '2.5rem', - '12': '3rem', - '16': '4rem', - '24': '6rem', - '32': '8rem', - '48': '12rem', - '64': '16rem', - '1/2': '50%', - '1/3': '33.33333%', - '2/3': '66.66667%', - '1/4': '25%', - '3/4': '75%', - '1/5': '20%', - '2/5': '40%', - '3/5': '60%', - '4/5': '80%', - '1/6': '16.66667%', - '5/6': '83.33333%', - full: '100%', - screen: '100vw', - }, - - /* - |----------------------------------------------------------------------------- - | Height https://tailwindcss.com/docs/height - |----------------------------------------------------------------------------- - | - | Here is where you define your height utility sizes. These can be - | percentage based, pixels, rems, or any other units. By default - | we provide a sensible rem based numeric scale plus some other - | common use-cases. You can, of course, modify these values as - | needed. - | - | Class name: .h-{size} - | - */ - - height: { - auto: 'auto', - px: '1px', - '1': '0.25rem', - '2': '0.5rem', - '3': '0.75rem', - '4': '1rem', - '5': '1.25rem', - '6': '1.5rem', - '8': '2rem', - '10': '2.5rem', - '12': '3rem', - '16': '4rem', - '24': '6rem', - '32': '8rem', - '48': '12rem', - '64': '16rem', - full: '100%', - screen: '100vh', - }, - - /* - |----------------------------------------------------------------------------- - | Minimum width https://tailwindcss.com/docs/min-width - |----------------------------------------------------------------------------- - | - | Here is where you define your minimum width utility sizes. These can - | be percentage based, pixels, rems, or any other units. We provide a - | couple common use-cases by default. You can, of course, modify - | these values as needed. - | - | Class name: .min-w-{size} - | - */ - - minWidth: { - '0': '0', - full: '100%', - }, - - /* - |----------------------------------------------------------------------------- - | Minimum height https://tailwindcss.com/docs/min-height - |----------------------------------------------------------------------------- - | - | Here is where you define your minimum height utility sizes. These can - | be percentage based, pixels, rems, or any other units. We provide a - | few common use-cases by default. You can, of course, modify these - | values as needed. - | - | Class name: .min-h-{size} - | - */ - - minHeight: { - '0': '0', - full: '100%', - screen: '100vh', - }, - - /* - |----------------------------------------------------------------------------- - | Maximum width https://tailwindcss.com/docs/max-width - |----------------------------------------------------------------------------- - | - | Here is where you define your maximum width utility sizes. These can - | be percentage based, pixels, rems, or any other units. By default - | we provide a sensible rem based scale and a "full width" size, - | which is basically a reset utility. You can, of course, - | modify these values as needed. - | - | Class name: .max-w-{size} - | - */ - - maxWidth: { - xs: '20rem', - sm: '30rem', - md: '40rem', - lg: '50rem', - xl: '60rem', - '2xl': '70rem', - '3xl': '80rem', - '4xl': '90rem', - '5xl': '100rem', - full: '100%', - }, - - /* - |----------------------------------------------------------------------------- - | Maximum height https://tailwindcss.com/docs/max-height - |----------------------------------------------------------------------------- - | - | Here is where you define your maximum height utility sizes. These can - | be percentage based, pixels, rems, or any other units. We provide a - | couple common use-cases by default. You can, of course, modify - | these values as needed. - | - | Class name: .max-h-{size} - | - */ - - maxHeight: { - full: '100%', - screen: '100vh', - }, - - /* - |----------------------------------------------------------------------------- - | Padding https://tailwindcss.com/docs/padding - |----------------------------------------------------------------------------- - | - | Here is where you define your padding utility sizes. These can be - | percentage based, pixels, rems, or any other units. By default we - | provide a sensible rem based numeric scale plus a couple other - | common use-cases like "1px". You can, of course, modify these - | values as needed. - | - | Class name: .p{side?}-{size} - | - */ - - padding: { - px: '1px', - '0': '0', - '1': '0.25rem', - '2': '0.5rem', - '3': '0.75rem', - '4': '1rem', - '5': '1.25rem', - '6': '1.5rem', - '8': '2rem', - '10': '2.5rem', - '12': '3rem', - '16': '4rem', - '20': '5rem', - '24': '6rem', - '32': '8rem', - }, - - /* - |----------------------------------------------------------------------------- - | Margin https://tailwindcss.com/docs/margin - |----------------------------------------------------------------------------- - | - | Here is where you define your margin utility sizes. These can be - | percentage based, pixels, rems, or any other units. By default we - | provide a sensible rem based numeric scale plus a couple other - | common use-cases like "1px". You can, of course, modify these - | values as needed. - | - | Class name: .m{side?}-{size} - | - */ - - margin: { - auto: 'auto', - px: '1px', - '0': '0', - '1': '0.25rem', - '2': '0.5rem', - '3': '0.75rem', - '4': '1rem', - '5': '1.25rem', - '6': '1.5rem', - '8': '2rem', - '10': '2.5rem', - '12': '3rem', - '16': '4rem', - '20': '5rem', - '24': '6rem', - '32': '8rem', - }, - - /* - |----------------------------------------------------------------------------- - | Negative margin https://tailwindcss.com/docs/negative-margin - |----------------------------------------------------------------------------- - | - | Here is where you define your negative margin utility sizes. These can - | be percentage based, pixels, rems, or any other units. By default we - | provide matching values to the padding scale since these utilities - | generally get used together. You can, of course, modify these - | values as needed. - | - | Class name: .-m{side?}-{size} - | - */ - - negativeMargin: { - px: '1px', - '0': '0', - '1': '0.25rem', - '2': '0.5rem', - '3': '0.75rem', - '4': '1rem', - '5': '1.25rem', - '6': '1.5rem', - '8': '2rem', - '10': '2.5rem', - '12': '3rem', - '16': '4rem', - '20': '5rem', - '24': '6rem', - '32': '8rem', - }, - - /* - |----------------------------------------------------------------------------- - | Shadows https://tailwindcss.com/docs/shadows - |----------------------------------------------------------------------------- - | - | Here is where you define your shadow utilities. As you can see from - | the defaults we provide, it's possible to apply multiple shadows - | per utility using comma separation. - | - | If a `default` shadow is provided, it will be made available as the non- - | suffixed `.shadow` utility. - | - | Class name: .shadow-{size?} - | - */ - - shadows: { - default: '0 2px 4px 0 rgba(0,0,0,0.10)', - md: '0 4px 8px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.08)', - lg: '0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08)', - inner: 'inset 0 2px 4px 0 rgba(0,0,0,0.06)', - outline: '0 0 0 3px rgba(52,144,220,0.5)', - none: 'none', - }, - - /* - |----------------------------------------------------------------------------- - | Z-index https://tailwindcss.com/docs/z-index - |----------------------------------------------------------------------------- - | - | Here is where you define your z-index utility values. By default we - | provide a sensible numeric scale. You can, of course, modify these - | values as needed. - | - | Class name: .z-{index} - | - */ - - zIndex: { - auto: 'auto', - '0': 0, - '10': 10, - '20': 20, - '30': 30, - '40': 40, - '50': 50, - }, - - /* - |----------------------------------------------------------------------------- - | Opacity https://tailwindcss.com/docs/opacity - |----------------------------------------------------------------------------- - | - | Here is where you define your opacity utility values. By default we - | provide a sensible numeric scale. You can, of course, modify these - | values as needed. - | - | Class name: .opacity-{name} - | - */ - - opacity: { - '0': '0', - '25': '.25', - '50': '.5', - '75': '.75', - '100': '1', - }, - - /* - |----------------------------------------------------------------------------- - | SVG fill https://tailwindcss.com/docs/svg - |----------------------------------------------------------------------------- - | - | Here is where you define your SVG fill colors. By default we just provide - | `fill-current` which sets the fill to the current text color. This lets you - | specify a fill color using existing text color utilities and helps keep the - | generated CSS file size down. - | - | Class name: .fill-{name} - | - */ - - svgFill: { - current: 'currentColor', - }, - - /* - |----------------------------------------------------------------------------- - | SVG stroke https://tailwindcss.com/docs/svg - |----------------------------------------------------------------------------- - | - | Here is where you define your SVG stroke colors. By default we just provide - | `stroke-current` which sets the stroke to the current text color. This lets - | you specify a stroke color using existing text color utilities and helps - | keep the generated CSS file size down. - | - | Class name: .stroke-{name} - | - */ - - svgStroke: { - current: 'currentColor', - }, - - /* - |----------------------------------------------------------------------------- - | Modules https://tailwindcss.com/docs/configuration#modules - |----------------------------------------------------------------------------- - | - | Here is where you control which modules are generated and what variants are - | generated for each of those modules. - | - | Currently supported variants: - | - responsive - | - hover - | - focus - | - active - | - group-hover - | - | To disable a module completely, use `false` instead of an array. - | - */ - - modules: { - appearance: ['responsive'], - backgroundAttachment: ['responsive'], - backgroundColors: ['responsive', 'hover', 'focus'], - backgroundPosition: ['responsive'], - backgroundRepeat: ['responsive'], - backgroundSize: ['responsive'], - borderCollapse: [], - borderColors: ['responsive', 'hover', 'focus'], - borderRadius: ['responsive'], - borderStyle: ['responsive'], - borderWidths: ['responsive'], - cursor: ['responsive'], - display: ['responsive'], - flexbox: ['responsive'], - float: ['responsive'], - fonts: ['responsive'], - fontWeights: ['responsive', 'hover', 'focus'], - height: ['responsive'], - leading: ['responsive'], - lists: ['responsive'], - margin: ['responsive'], - maxHeight: ['responsive'], - maxWidth: ['responsive'], - minHeight: ['responsive'], - minWidth: ['responsive'], - negativeMargin: ['responsive'], - opacity: ['responsive'], - outline: ['focus'], - overflow: ['responsive'], - padding: ['responsive'], - pointerEvents: ['responsive'], - position: ['responsive'], - resize: ['responsive'], - shadows: ['responsive', 'hover', 'focus'], - svgFill: [], - svgStroke: [], - tableLayout: ['responsive'], - textAlign: ['responsive'], - textColors: ['responsive', 'hover', 'focus'], - textSizes: ['responsive'], - textStyle: ['responsive', 'hover', 'focus'], - tracking: ['responsive'], - userSelect: ['responsive'], - verticalAlign: ['responsive'], - visibility: ['responsive'], - whitespace: ['responsive'], - width: ['responsive'], - zIndex: ['responsive'], - }, - - /* - |----------------------------------------------------------------------------- - | Plugins https://tailwindcss.com/docs/plugins - |----------------------------------------------------------------------------- - | - | Here is where you can register any plugins you'd like to use in your - | project. Tailwind's built-in `container` plugin is enabled by default to - | give you a Bootstrap-style responsive container component out of the box. - | - | Be sure to view the complete plugin documentation to learn more about how - | the plugin system works. - | - */ - - plugins: [...Object.keys(plugins).map(name => plugins[name]())], - - /* - |----------------------------------------------------------------------------- - | Advanced Options https://tailwindcss.com/docs/configuration#options - |----------------------------------------------------------------------------- - | - | Here is where you can tweak advanced configuration options. We recommend - | leaving these options alone unless you absolutely need to change them. - | - */ - - options: { - prefix: '', - important: false, - separator: ':', - }, -} diff --git a/src/components/button/Button.md b/src/button/Button.md similarity index 100% rename from src/components/button/Button.md rename to src/button/Button.md diff --git a/src/button/Button.test.tsx b/src/button/Button.test.tsx new file mode 100644 index 0000000..a56ddfa --- /dev/null +++ b/src/button/Button.test.tsx @@ -0,0 +1,33 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawButton as Button } from './Button' + +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render() + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Button', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ + buttonStyle: 'fill', + bg: 'blue-400', + text: 'white', + }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/components/button/Button.jsx b/src/button/Button.tsx similarity index 52% rename from src/components/button/Button.jsx rename to src/button/Button.tsx index e611509..4238338 100644 --- a/src/components/button/Button.jsx +++ b/src/button/Button.tsx @@ -1,17 +1,31 @@ +import type { TailwindProps, TouchableProps } from 'tailwind-react-primitives' +import type { Theme, WithTheme } from '../theme' + import React from 'react' -import PropTypes from 'prop-types' -import { withTheme } from '../theme' -import { Touchable } from '../primitives' -import { getColorShade } from '../tailwind' +import { + getAsArray, + RawTouchable as Touchable, +} from 'tailwind-react-primitives' +import { withTheme, getColorShade } from '../theme' + +export interface ButtonProps + extends WithTheme, + TouchableProps { + buttonStyle?: 'fill' | 'outline' | 'text' | 'link' + large?: boolean + small?: boolean + fullWidth?: boolean + brand?: keyof Theme['brandColors'] +} -const Button = ({ +export const RawButton = ({ theme, - is, + as = 'button', children, - color, - type, - buttonStyle, + color = 'primary', + type = 'button', + buttonStyle = 'fill', disabled, large, small, @@ -21,8 +35,8 @@ const Button = ({ border, brand, ...rest -}) => { - const props = { +}: ButtonProps) => { + const props: TouchableProps = { border: [true, 'transparent'], leading: 'tight', p: { x: theme.spacing.md, y: theme.spacing.sm }, @@ -45,10 +59,16 @@ const Button = ({ ) break case 'outline': - // eslint-disable-next-line react/prop-types - props.border.push(brand ? theme.brandColors[brand] : border) - props.text = brand ? theme.brandColors[brand] : border - props['bg-hocus'] = brand ? theme.brandColors[brand] : border + props.border = [ + ...getAsArray(props.border), + brand ? theme.brandColors[brand] : border, + ].filter(Boolean) as TailwindProps['border'] + props.text = (brand + ? theme.brandColors[brand] + : border) as TailwindProps['text'] + props['bg-hocus'] = (brand + ? theme.brandColors[brand] + : border) as TailwindProps['bg'] props['text-hocus'] = brand ? theme.textColors.on[brand] : text break case 'text': @@ -73,7 +93,7 @@ const Button = ({ break } - if (is === 'button') { + if (as === 'button') { props.type = type } else { props.role = 'button' @@ -88,44 +108,10 @@ const Button = ({ } return ( - + as={as} inlineBlock {...props} {...rest}> {children} ) } -Button.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - color: PropTypes.string, - type: PropTypes.string, - buttonStyle: PropTypes.oneOf(['fill', 'outline', 'text', 'link']), - disabled: PropTypes.bool, - large: PropTypes.bool, - small: PropTypes.bool, - fullWidth: PropTypes.bool, - brand: PropTypes.string, - bg: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - text: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - border: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), -} - -Button.defaultProps = { - is: 'button', - children: undefined, - color: 'primary', - type: 'button', - buttonStyle: 'fill', - disabled: false, - large: false, - small: false, - fullWidth: false, - brand: undefined, - bg: undefined, - text: undefined, - border: undefined, -} - -export { Button as component } -export default withTheme(Button) +export const Button = withTheme(RawButton) diff --git a/src/button/FillButton.md b/src/button/FillButton.md new file mode 100644 index 0000000..e58f814 --- /dev/null +++ b/src/button/FillButton.md @@ -0,0 +1,20 @@ +```jsx +import { List, FillButton } from 'tailwind-react-ui' +;<> + + Primary + + Secondary + + Danger + + Warning + + Info + + + Custom + + + +``` diff --git a/src/button/FillButton.tsx b/src/button/FillButton.tsx new file mode 100644 index 0000000..b63d740 --- /dev/null +++ b/src/button/FillButton.tsx @@ -0,0 +1,14 @@ +import type { ButtonProps } from './Button' + +import React from 'react' + +import { Button } from './Button' + +export type FillButtonProps = Omit + +/** + * @see See [Button](#button-2) for API. Sets `buttonStyle` prop to `fill`. + */ +export const FillButton = (props: FillButtonProps) => ( + + +`; diff --git a/src/button/index.ts b/src/button/index.ts new file mode 100644 index 0000000..9e3783a --- /dev/null +++ b/src/button/index.ts @@ -0,0 +1,5 @@ +export * from './Button' +export * from './FillButton' +export * from './OutlineButton' +export * from './TextButton' +export * from './LinkButton' diff --git a/src/card/Card.md b/src/card/Card.md new file mode 100644 index 0000000..2afadef --- /dev/null +++ b/src/card/Card.md @@ -0,0 +1,45 @@ +Standard card functionality made up of: + +- `` — wrapping component with overflow hidden to allow for full size image headers +- `` — padded element for main content of the card +- `` — right aligns, reverses order & squares corners of elements to have CTAs in priority tab order + +### Simple Example + +```jsx +import { Card, CardBody } from 'tailwind-react-ui' +;<> + + +

Hello World

+
+
+ +``` + +### Full Example + +```jsx +import { Image } from 'tailwind-react-primitives' +import { + Card, + CardBody, + CardFooter, + FillButton, + OutlineButton, +} from 'tailwind-react-ui' +;<> + + Example image + Hello World + + Read + Bookmark + + + +``` diff --git a/src/card/Card.test.tsx b/src/card/Card.test.tsx new file mode 100644 index 0000000..9d355b1 --- /dev/null +++ b/src/card/Card.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawCard as Card } from './Card' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(Hello World!) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Card', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/card/Card.tsx b/src/card/Card.tsx new file mode 100644 index 0000000..b1f0976 --- /dev/null +++ b/src/card/Card.tsx @@ -0,0 +1,41 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { WithTheme, Theme } from '../theme' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface CardProps + extends WithTheme, + BoxProps { + surface?: keyof Theme['surfaceColors'] | keyof Theme['brandColors'] +} + +export const RawCard = ({ + as = 'div', + children, + theme, + surface = 'default', + ...rest +}: CardProps) => ( + + as={as} + overflow="hidden" + rounded={theme.radius} + bg={ + theme.surfaceColors[surface as keyof Theme['surfaceColors']] || + theme.brandColors[surface as keyof Theme['brandColors']] + } + text={ + surface !== 'default' + ? theme.textColors.on[surface as keyof Theme['textColors']['on']] + : undefined + } + {...rest} + > + {children} +
+) + +export const Card = withTheme(RawCard) diff --git a/src/components/card/CardBody.md b/src/card/CardBody.md similarity index 100% rename from src/components/card/CardBody.md rename to src/card/CardBody.md diff --git a/src/card/CardBody.test.tsx b/src/card/CardBody.test.tsx new file mode 100644 index 0000000..e98ffe5 --- /dev/null +++ b/src/card/CardBody.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawCardBody as CardBody } from './CardBody' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(Hello World!) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('CardBody', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/card/CardBody.tsx b/src/card/CardBody.tsx new file mode 100644 index 0000000..f3b7813 --- /dev/null +++ b/src/card/CardBody.tsx @@ -0,0 +1,23 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export type CardBodyProps = WithTheme & + BoxProps + +export const RawCardBody = ({ + theme, + as = 'div', + children, + ...rest +}: CardBodyProps) => ( + as={as} p={theme.spacing.md} {...rest}> + {children} +
+) + +export const CardBody = withTheme(RawCardBody) diff --git a/src/components/card/CardFooter.md b/src/card/CardFooter.md similarity index 100% rename from src/components/card/CardFooter.md rename to src/card/CardFooter.md diff --git a/src/card/CardFooter.test.tsx b/src/card/CardFooter.test.tsx new file mode 100644 index 0000000..9930206 --- /dev/null +++ b/src/card/CardFooter.test.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawCardFooter as CardFooter } from './' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign(testProps) + + const wrapper = render(Hello World!) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('CardFooter', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/card/CardFooter.tsx b/src/card/CardFooter.tsx new file mode 100644 index 0000000..a4c9585 --- /dev/null +++ b/src/card/CardFooter.tsx @@ -0,0 +1,28 @@ +import type { FlexProps, BaseProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { RawFlex as Flex } from 'tailwind-react-primitives' + +export type CardFooterProps< + E extends HTMLElement = HTMLDivElement +> = WithTheme & FlexProps + +export const RawCardFooter = ({ + as = 'div', + children, + ...rest +}: CardFooterProps) => ( + as={as} reverse items="end" {...rest}> + {React.Children.map(children, (child) => + React.isValidElement(child) + ? React.cloneElement(child, { + rounded: 'none', + }) + : child, + )} + +) + +export const CardFooter = RawCardFooter diff --git a/src/card/__snapshots__/Card.test.tsx.snap b/src/card/__snapshots__/Card.test.tsx.snap new file mode 100644 index 0000000..18f6201 --- /dev/null +++ b/src/card/__snapshots__/Card.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Card renders matching snapshot 1`] = ` + +
+ Hello World! +
+
+`; diff --git a/src/components/card/__tests__/__snapshots__/CardBody.jsx.snap b/src/card/__snapshots__/CardBody.test.tsx.snap similarity index 51% rename from src/components/card/__tests__/__snapshots__/CardBody.jsx.snap rename to src/card/__snapshots__/CardBody.test.tsx.snap index cbe20b8..3abeee5 100644 --- a/src/components/card/__tests__/__snapshots__/CardBody.jsx.snap +++ b/src/card/__snapshots__/CardBody.test.tsx.snap @@ -1,12 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CardBody renders matching snapshot 1`] = ` - - Hello World! - + +
+ Hello World! +
+
`; diff --git a/src/card/__snapshots__/CardFooter.test.tsx.snap b/src/card/__snapshots__/CardFooter.test.tsx.snap new file mode 100644 index 0000000..11ef4ad --- /dev/null +++ b/src/card/__snapshots__/CardFooter.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CardFooter renders matching snapshot 1`] = ` + +
+ Hello World! +
+
+`; diff --git a/src/card/index.ts b/src/card/index.ts new file mode 100644 index 0000000..2e8dee3 --- /dev/null +++ b/src/card/index.ts @@ -0,0 +1,3 @@ +export * from './Card' +export * from './CardBody' +export * from './CardFooter' diff --git a/src/components/button/FillButton.jsx b/src/components/button/FillButton.jsx deleted file mode 100644 index 33baef5..0000000 --- a/src/components/button/FillButton.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' - -import Button from './Button' - -/** - * @see See [Button](#button-2) for API. Sets `buttonStyle` prop to `fill`. - */ -const FillButton = props => ) - - return { - props, - wrapper, - } -} - -describe('Button', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ - buttonStyle: 'fill', - bg: 'blue-400', - text: 'white', - }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/button/__tests__/__snapshots__/Button.jsx.snap b/src/components/button/__tests__/__snapshots__/Button.jsx.snap deleted file mode 100644 index e27bc77..0000000 --- a/src/components/button/__tests__/__snapshots__/Button.jsx.snap +++ /dev/null @@ -1,29 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Button renders matching snapshot 1`] = ` - - Submit - -`; diff --git a/src/components/button/index.js b/src/components/button/index.js deleted file mode 100644 index 6e59f99..0000000 --- a/src/components/button/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as Button } from './Button' -export { default as FillButton } from './FillButton' -export { default as OutlineButton } from './OutlineButton' -export { default as TextButton } from './TextButton' -export { default as LinkButton } from './LinkButton' diff --git a/src/components/card/Card.jsx b/src/components/card/Card.jsx deleted file mode 100644 index b624f5b..0000000 --- a/src/components/card/Card.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Box } from '../primitives' - -const Card = ({ is, children, theme, surface, ...rest }) => ( - - {children} - -) - -Card.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - theme: PropTypes.shape({}).isRequired, - children: PropTypes.node, - surface: PropTypes.string, -} - -Card.defaultProps = { - is: 'section', - children: undefined, - surface: 'default', -} - -export { Card as component } -export default withTheme(Card) diff --git a/src/components/card/Card.md b/src/components/card/Card.md deleted file mode 100644 index 90ff7a5..0000000 --- a/src/components/card/Card.md +++ /dev/null @@ -1,32 +0,0 @@ -Standard card functionality made up of: - -- `` — wrapping component with overflow hidden to allow for full size image headers -- `` — padded element for main content of the card -- `` — right aligns, reverses order & squares corners of elements to have CTAs in priority tab order - -### Simple Example - -```jsx - - -

Hello World

-
-
-``` - -### Full Example - -```jsx - - Example image - Hello World - - Read - Bookmark - - -``` diff --git a/src/components/card/CardBody.jsx b/src/components/card/CardBody.jsx deleted file mode 100644 index 3a1afb9..0000000 --- a/src/components/card/CardBody.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Box } from '../primitives' - -const CardBody = ({ theme, is, children, ...rest }) => ( - - {children} - -) - -CardBody.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, -} - -CardBody.defaultProps = { - is: 'div', - children: undefined, -} - -export { CardBody as component } -export default withTheme(CardBody) diff --git a/src/components/card/CardFooter.jsx b/src/components/card/CardFooter.jsx deleted file mode 100644 index d91b8d3..0000000 --- a/src/components/card/CardFooter.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Flex } from '../primitives' - -const CardFooter = ({ is, children, ...rest }) => ( - - {React.Children.map(children, child => - React.cloneElement(child, { - rounded: 'none', - }), - )} - -) - -CardFooter.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, -} - -CardFooter.defaultProps = { - is: 'div', - children: undefined, -} - -export default CardFooter diff --git a/src/components/card/__tests__/Card.jsx b/src/components/card/__tests__/Card.jsx deleted file mode 100644 index f9477e4..0000000 --- a/src/components/card/__tests__/Card.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Card } from '../Card' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(Hello World!) - - return { - props, - wrapper, - } -} - -describe('Card', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/card/__tests__/CardBody.jsx b/src/components/card/__tests__/CardBody.jsx deleted file mode 100644 index 6400d79..0000000 --- a/src/components/card/__tests__/CardBody.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as CardBody } from '../CardBody' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(Hello World!) - - return { - props, - wrapper, - } -} - -describe('CardBody', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/card/__tests__/CardFooter.jsx b/src/components/card/__tests__/CardFooter.jsx deleted file mode 100644 index ff4c7ff..0000000 --- a/src/components/card/__tests__/CardFooter.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { CardFooter } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign(testProps) - - const wrapper = shallow(Hello World!) - - return { - props, - wrapper, - } -} - -describe('CardFooter', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/card/__tests__/__snapshots__/Card.jsx.snap b/src/components/card/__tests__/__snapshots__/Card.jsx.snap deleted file mode 100644 index d17ea5b..0000000 --- a/src/components/card/__tests__/__snapshots__/Card.jsx.snap +++ /dev/null @@ -1,14 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Card renders matching snapshot 1`] = ` - - Hello World! - -`; diff --git a/src/components/card/__tests__/__snapshots__/CardFooter.jsx.snap b/src/components/card/__tests__/__snapshots__/CardFooter.jsx.snap deleted file mode 100644 index 398a7a1..0000000 --- a/src/components/card/__tests__/__snapshots__/CardFooter.jsx.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`CardFooter renders matching snapshot 1`] = ` - - - -`; diff --git a/src/components/card/index.js b/src/components/card/index.js deleted file mode 100644 index 23381b4..0000000 --- a/src/components/card/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { default as Card } from './Card' -export { default as CardBody } from './CardBody' -export { default as CardFooter } from './CardFooter' diff --git a/src/components/container/Container.jsx b/src/components/container/Container.jsx deleted file mode 100644 index 963b45e..0000000 --- a/src/components/container/Container.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Box } from '../primitives' - -const Container = ({ theme, is, children, leftAlign, padding, ...rest }) => ( - - {children} - -) - -Container.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - leftAlign: PropTypes.bool, - padding: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), -} - -Container.defaultProps = { - is: 'div', - children: undefined, - leftAlign: false, - padding: false, -} - -export { Container as component } -export default withTheme(Container) diff --git a/src/components/container/Container.md b/src/components/container/Container.md deleted file mode 100644 index 628837e..0000000 --- a/src/components/container/Container.md +++ /dev/null @@ -1,9 +0,0 @@ -Makes use of the Tailwind CSS [`container plugin`](https://tailwindcss.com/docs/container). - -### Example - -```jsx - - - -``` diff --git a/src/components/container/__tests__/Container.jsx b/src/components/container/__tests__/Container.jsx deleted file mode 100644 index a3c0da5..0000000 --- a/src/components/container/__tests__/Container.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Container } from '../Container' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(Content) - - return { - props, - wrapper, - } -} - -describe('Container', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ padding: 'lg' }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/container/__tests__/__snapshots__/Container.jsx.snap b/src/components/container/__tests__/__snapshots__/Container.jsx.snap deleted file mode 100644 index 2abf496..0000000 --- a/src/components/container/__tests__/__snapshots__/Container.jsx.snap +++ /dev/null @@ -1,22 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Container renders matching snapshot 1`] = ` - - Content - -`; diff --git a/src/components/container/index.js b/src/components/container/index.js deleted file mode 100644 index 6b1e163..0000000 --- a/src/components/container/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as Container } from './Container' diff --git a/src/components/content/Article.jsx b/src/components/content/Article.jsx deleted file mode 100644 index 20af907..0000000 --- a/src/components/content/Article.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import ContentBlock from './ContentBlock' - -const Article = ({ is, ...rest }) => - -Article.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), -} - -Article.defaultProps = { - is: 'article', -} - -export default Article diff --git a/src/components/content/Article.md b/src/components/content/Article.md deleted file mode 100644 index 5baad1c..0000000 --- a/src/components/content/Article.md +++ /dev/null @@ -1,13 +0,0 @@ -```jsx -
- Article Title - - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat - non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -
-``` diff --git a/src/components/content/Aside.jsx b/src/components/content/Aside.jsx deleted file mode 100644 index 03c7ea6..0000000 --- a/src/components/content/Aside.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import ContentBlock from './ContentBlock' - -const Aside = ({ is, ...rest }) => - -Aside.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), -} - -Aside.defaultProps = { - is: 'aside', -} - -export default Aside diff --git a/src/components/content/Aside.md b/src/components/content/Aside.md deleted file mode 100644 index da52007..0000000 --- a/src/components/content/Aside.md +++ /dev/null @@ -1,13 +0,0 @@ -```jsx - -``` diff --git a/src/components/content/ContentBlock.jsx b/src/components/content/ContentBlock.jsx deleted file mode 100644 index d9cf44b..0000000 --- a/src/components/content/ContentBlock.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import React, { PureComponent } from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' -import { withTheme } from '../theme' -import { getUniqueID } from '../utils' - -import ContentTitle from './ContentTitle' - -class ContentBlock extends PureComponent { - constructor(props) { - super(props) - this.id = getUniqueID('content') - } - - render() { - const { theme, is, children, ...rest } = this.props - - return ( - - {React.Children.map(children, (child, index) => { - if (child.type === ContentTitle) { - return React.cloneElement(child, { content: { id: this.id } }) - } - - if (index === React.Children.count(children) - 1) { - return React.cloneElement(child, { m: { b: 0 } }) - } - - return child - })} - - ) - } -} - -ContentBlock.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, -} - -ContentBlock.defaultProps = { - is: 'section', - children: undefined, -} - -export { ContentBlock as component } -export default withTheme(ContentBlock) diff --git a/src/components/content/ContentTitle.jsx b/src/components/content/ContentTitle.jsx deleted file mode 100644 index 7d93629..0000000 --- a/src/components/content/ContentTitle.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Title } from '../typography' - -const ContentTitle = ({ content: { id }, visuallyHidden, ...rest }) => ( - -) - -ContentTitle.propTypes = { - content: PropTypes.shape({ - id: PropTypes.string, - }), - visuallyHidden: PropTypes.bool, -} - -ContentTitle.defaultProps = { - content: {}, - visuallyHidden: false, -} - -export default ContentTitle diff --git a/src/components/content/Section.jsx b/src/components/content/Section.jsx deleted file mode 100644 index acdd839..0000000 --- a/src/components/content/Section.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import ContentBlock from './ContentBlock' - -const Section = ({ is, ...rest }) => <ContentBlock is={is} {...rest} /> - -Section.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), -} - -Section.defaultProps = { - is: 'section', -} - -export default Section diff --git a/src/components/content/Section.md b/src/components/content/Section.md deleted file mode 100644 index 9fc1175..0000000 --- a/src/components/content/Section.md +++ /dev/null @@ -1,13 +0,0 @@ -```jsx -<Section> - <ContentTitle size={4}>Section Title</ContentTitle> - <Text is="p"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat - non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - </Text> -</Section> -``` diff --git a/src/components/content/__tests__/Article.jsx b/src/components/content/__tests__/Article.jsx deleted file mode 100644 index a450036..0000000 --- a/src/components/content/__tests__/Article.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import Article from '../Article' - -const setup = (testProps = {}) => { - const props = Object.assign(testProps) - - const wrapper = shallow(<Article {...props}>Lorem ipsum...</Article>) - - return { - props, - wrapper, - } -} - -describe('Article', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/content/__tests__/Aside.jsx b/src/components/content/__tests__/Aside.jsx deleted file mode 100644 index 334a0a5..0000000 --- a/src/components/content/__tests__/Aside.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import Aside from '../Aside' - -const setup = (testProps = {}) => { - const props = Object.assign(testProps) - - const wrapper = shallow(<Aside {...props}>Lorem ipsum...</Aside>) - - return { - props, - wrapper, - } -} - -describe('Aside', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/content/__tests__/ContentBlock.jsx b/src/components/content/__tests__/ContentBlock.jsx deleted file mode 100644 index 272f166..0000000 --- a/src/components/content/__tests__/ContentBlock.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as ContentBlock } from '../ContentBlock' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow( - <ContentBlock {...props}>Lorem ipsum...</ContentBlock>, - ) - - return { - props, - wrapper, - } -} - -describe('ContentBlock', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/content/__tests__/ContentTitle.jsx b/src/components/content/__tests__/ContentTitle.jsx deleted file mode 100644 index 649726a..0000000 --- a/src/components/content/__tests__/ContentTitle.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as ContentTitle } from '../ContentBlock' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(<ContentTitle {...props}>Title</ContentTitle>) - - return { - props, - wrapper, - } -} - -describe('ContentBlock', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/content/__tests__/Section.jsx b/src/components/content/__tests__/Section.jsx deleted file mode 100644 index b6ced00..0000000 --- a/src/components/content/__tests__/Section.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import Section from '../Section' - -const setup = (testProps = {}) => { - const props = Object.assign(testProps) - - const wrapper = shallow(<Section {...props}>Lorem ipsum...</Section>) - - return { - props, - wrapper, - } -} - -describe('Section', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/content/__tests__/__snapshots__/Article.jsx.snap b/src/components/content/__tests__/__snapshots__/Article.jsx.snap deleted file mode 100644 index b6cfc9b..0000000 --- a/src/components/content/__tests__/__snapshots__/Article.jsx.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Article renders matching snapshot 1`] = ` -<WithTheme(ContentBlock) - is="article" -> - Lorem ipsum... -</WithTheme(ContentBlock)> -`; diff --git a/src/components/content/__tests__/__snapshots__/Aside.jsx.snap b/src/components/content/__tests__/__snapshots__/Aside.jsx.snap deleted file mode 100644 index b5dd831..0000000 --- a/src/components/content/__tests__/__snapshots__/Aside.jsx.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Aside renders matching snapshot 1`] = ` -<WithTheme(ContentBlock) - is="aside" -> - Lorem ipsum... -</WithTheme(ContentBlock)> -`; diff --git a/src/components/content/__tests__/__snapshots__/ContentBlock.jsx.snap b/src/components/content/__tests__/__snapshots__/ContentBlock.jsx.snap deleted file mode 100644 index 86bc499..0000000 --- a/src/components/content/__tests__/__snapshots__/ContentBlock.jsx.snap +++ /dev/null @@ -1,20 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ContentBlock renders matching snapshot 1`] = ` -<Box - aria-labelledby="content-1" - inline={false} - inlineBlock={false} - is="section" - p={4} -> - <Component - key=".0" - m={ - Object { - "b": 0, - } - } - /> -</Box> -`; diff --git a/src/components/content/__tests__/__snapshots__/ContentTitle.jsx.snap b/src/components/content/__tests__/__snapshots__/ContentTitle.jsx.snap deleted file mode 100644 index 86bc499..0000000 --- a/src/components/content/__tests__/__snapshots__/ContentTitle.jsx.snap +++ /dev/null @@ -1,20 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ContentBlock renders matching snapshot 1`] = ` -<Box - aria-labelledby="content-1" - inline={false} - inlineBlock={false} - is="section" - p={4} -> - <Component - key=".0" - m={ - Object { - "b": 0, - } - } - /> -</Box> -`; diff --git a/src/components/content/__tests__/__snapshots__/Section.jsx.snap b/src/components/content/__tests__/__snapshots__/Section.jsx.snap deleted file mode 100644 index 9c9d8ac..0000000 --- a/src/components/content/__tests__/__snapshots__/Section.jsx.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Section renders matching snapshot 1`] = ` -<WithTheme(ContentBlock) - is="section" -> - Lorem ipsum... -</WithTheme(ContentBlock)> -`; diff --git a/src/components/content/index.js b/src/components/content/index.js deleted file mode 100644 index d362d5f..0000000 --- a/src/components/content/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as ContentTitle } from './ContentTitle' -export { default as ContentBlock } from './ContentBlock' -export { default as Article } from './Article' -export { default as Aside } from './Aside' -export { default as Section } from './Section' diff --git a/src/components/footer/Footer.jsx b/src/components/footer/Footer.jsx deleted file mode 100644 index 41079e7..0000000 --- a/src/components/footer/Footer.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' -import { withTheme } from '../theme' -import { Container } from '../container' - -const Footer = ({ theme, is, children, ...rest }) => ( - <Box - is={is} - role="contentinfo" - p={{ t: theme.spacing.lg, b: theme.spacing.xl }} - bg={theme.brandColors.secondary} - text={theme.textColors.on.secondary} - {...rest} - > - <Container padding>{children}</Container> - </Box> -) - -Footer.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, -} - -Footer.defaultProps = { - is: 'footer', - children: undefined, -} - -export { Footer as component } -export default withTheme(Footer) diff --git a/src/components/footer/Footer.md b/src/components/footer/Footer.md deleted file mode 100644 index 6f14fcf..0000000 --- a/src/components/footer/Footer.md +++ /dev/null @@ -1,17 +0,0 @@ -Simple wrapper around the `<footer />` element - -### Example - -```jsx -<Footer> - <Text is="p">© E Corp {new Date().getFullYear()}</Text> - <Text size="sm"> - Cookies are used by our fictional third party partners to track your - browsing habits, DNA and thoughts. View our{' '} - <Text is="a" href="#footer" text="white" text-hover="purple-dark"> - privacy policy - </Text>{' '} - to attempt to manage your preferences. - </Text> -</Footer> -``` diff --git a/src/components/footer/__tests__/Footer.jsx b/src/components/footer/__tests__/Footer.jsx deleted file mode 100644 index bbd4237..0000000 --- a/src/components/footer/__tests__/Footer.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Footer } from '../Footer' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(<Footer {...props}>© E Corp</Footer>) - - return { - props, - wrapper, - } -} - -describe('Footer', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/footer/__tests__/__snapshots__/Footer.jsx.snap b/src/components/footer/__tests__/__snapshots__/Footer.jsx.snap deleted file mode 100644 index 4e00646..0000000 --- a/src/components/footer/__tests__/__snapshots__/Footer.jsx.snap +++ /dev/null @@ -1,24 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Footer renders matching snapshot 1`] = ` -<Box - bg="gray-500" - inline={false} - inlineBlock={false} - is="footer" - p={ - Object { - "b": 12, - "t": 8, - } - } - role="contentinfo" - text="white" -> - <WithTheme(Container) - padding={true} - > - © E Corp - </WithTheme(Container)> -</Box> -`; diff --git a/src/components/footer/index.js b/src/components/footer/index.js deleted file mode 100644 index 30f92eb..0000000 --- a/src/components/footer/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as Footer } from './Footer' diff --git a/src/components/form/Checkbox.jsx b/src/components/form/Checkbox.jsx deleted file mode 100644 index 75922c2..0000000 --- a/src/components/form/Checkbox.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import OptionInput from './OptionInput' - -const Checkbox = props => <OptionInput {...props} checkbox /> - -export default Checkbox diff --git a/src/components/form/Checkbox.md b/src/components/form/Checkbox.md deleted file mode 100644 index 093af65..0000000 --- a/src/components/form/Checkbox.md +++ /dev/null @@ -1,6 +0,0 @@ -```jsx -<Checkbox checkbox name="option-input-3" value="unselected" label="Unselected" /> -<Checkbox checkbox name="option-input-3" value="selected" label="Selected" defaultChecked /> -<Checkbox checkbox name="option-input-4" value="unselected" label="Unselected disabled" disabled /> -<Checkbox checkbox name="option-input-4" value="selected" label="Selected disabled" disabled defaultChecked /> -``` diff --git a/src/components/form/CheckboxList.jsx b/src/components/form/CheckboxList.jsx deleted file mode 100644 index e4cdd4d..0000000 --- a/src/components/form/CheckboxList.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import OptionList from './OptionList' - -const CheckboxList = props => <OptionList {...props} checkbox /> - -export default CheckboxList diff --git a/src/components/form/CheckboxList.md b/src/components/form/CheckboxList.md deleted file mode 100644 index 0d5e3e2..0000000 --- a/src/components/form/CheckboxList.md +++ /dev/null @@ -1,23 +0,0 @@ -```jsx -<OptionField> - <OptionLabel>How should we contact you?</OptionLabel> - <CheckboxList name="contact"> - <Checkbox value="email" label="Email" /> - <Checkbox value="tel" label="Telephone" /> - <Checkbox value="post" label="Post" /> - </CheckboxList> -</OptionField> -``` - -### Inline - -```jsx -<OptionField> - <OptionLabel>Do you agree to us contacting you?</OptionLabel> - <CheckboxList inline name="agree"> - <Checkbox value="yes" label="Yes" /> - <Checkbox value="no" label="No" /> - <Checkbox value="maybe" label="Maybe" /> - </CheckboxList> -</OptionField> -``` diff --git a/src/components/form/ErrorText.jsx b/src/components/form/ErrorText.jsx deleted file mode 100644 index 96c64a9..0000000 --- a/src/components/form/ErrorText.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' -import { DangerText } from '../typography' - -/** - * @see Renders as [DangerText](#dangertext) component by default - */ -const ErrorText = ({ field: { errorId }, is, ...rest }) => ( - <Box is={is} id={errorId} aria-live="assertive" {...rest} /> -) - -ErrorText.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - field: PropTypes.shape({ - errorId: PropTypes.string, - }), - size: PropTypes.number, -} - -ErrorText.defaultProps = { - is: DangerText, - field: {}, - size: 1, -} - -export default ErrorText diff --git a/src/components/form/Field.jsx b/src/components/form/Field.jsx deleted file mode 100644 index 7a10c1d..0000000 --- a/src/components/form/Field.jsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { PureComponent } from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Box } from '../primitives' -import { getUniqueID, filterProps } from '../utils' - -class Field extends PureComponent { - constructor(props) { - const { id } = props - - super(props) - - this.id = id || getUniqueID('field') - } - - render() { - const { - theme, - is, - children, - className, - hasHelp, - hasError, - disabled, - optionList, - ...rest - } = this.props - - const fieldProps = { - inputId: `${this.id}-input`, - helpId: hasHelp ? `${this.id}-help` : undefined, - errorId: hasError ? `${this.id}-error` : undefined, - labelId: optionList ? `${this.id}-label` : undefined, - invalid: hasError, - disabled, - } - - return ( - <Box - is={is} - id={this.id} - m={{ b: theme.spacing.md }} - maxW="sm" - {...filterProps(rest, ['id'])} - > - {React.Children.map(children, child => - React.cloneElement(child, { field: fieldProps }), - )} - </Box> - ) - } -} - -Field.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - className: PropTypes.string, - hasHelp: PropTypes.bool, - hasError: PropTypes.bool, - disabled: PropTypes.bool, - id: PropTypes.string, - optionList: PropTypes.bool, -} - -Field.defaultProps = { - is: 'div', - children: undefined, - className: undefined, - hasHelp: false, - hasError: false, - disabled: false, - id: undefined, - optionList: false, -} - -export { Field as component } -export default withTheme(Field) diff --git a/src/components/form/HelpText.jsx b/src/components/form/HelpText.jsx deleted file mode 100644 index d6e0b0d..0000000 --- a/src/components/form/HelpText.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' -import { InfoText } from '../typography' - -/** - * @see Renders as [InfoText](#infotext) component by default - */ -const HelpText = ({ is, field: { helpId }, ...rest }) => ( - <Box is={is} id={helpId} {...rest} /> -) - -HelpText.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - field: PropTypes.shape({ - helpId: PropTypes.string, - }), - size: PropTypes.number, -} - -HelpText.defaultProps = { - is: InfoText, - field: {}, - size: 1, -} - -export default HelpText diff --git a/src/components/form/Label.jsx b/src/components/form/Label.jsx deleted file mode 100644 index 4d909a7..0000000 --- a/src/components/form/Label.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Text } from '../primitives' - -const Label = ({ - theme, - is, - id, - field: { labelId, inputId, disabled }, - children, - htmlFor, - optionList, - ...rest -}) => ( - <Text - is={is} - id={labelId || id} - inlineBlock - htmlFor={!optionList ? inputId || htmlFor : undefined} - m={{ b: theme.spacing.sm }} - opacity={disabled ? 50 : undefined} - weight="bold" - {...rest} - > - {children} - </Text> -) - -Label.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - id: PropTypes.string, - field: PropTypes.shape({ - inputId: PropTypes.string, - disabled: PropTypes.bool, - }), - children: PropTypes.node, - htmlFor: PropTypes.string, - optionList: PropTypes.bool, -} - -Label.defaultProps = { - is: 'label', - id: undefined, - field: { - disabled: false, - }, - children: undefined, - htmlFor: undefined, - optionList: false, -} - -export { Label as component } -export default withTheme(Label) diff --git a/src/components/form/NumberInput.jsx b/src/components/form/NumberInput.jsx deleted file mode 100644 index 40eb9a8..0000000 --- a/src/components/form/NumberInput.jsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Touchable } from '../primitives' - -const NumberInput = ({ - theme, - is, - field, - children, - id, - name, - disabled, - readOnly, - invalid, - ...rest -}) => { - const describedBy = [field.errorId, field.helpId].filter(by => by) - const isInvalid = field.invalid || invalid - - return ( - <Touchable - is={is} - inputMode="numeric" - pattern="[0-9]*" - appearance="none" - bg="white" - rounded={theme.radius} - text={theme.textColors.body} - p={{ x: theme.spacing.md, y: theme.spacing.sm }} - m={{ b: theme.spacing.sm }} - border={!isInvalid ? true : [true, theme.brandColors.danger]} - w="full" - leading="tight" - id={field.inputId || id || name} - name={name} - disabled={field.disabled || disabled} - readOnly={readOnly} - aria-invalid={isInvalid || undefined} - aria-describedby={describedBy.length ? describedBy.join(' ') : undefined} - {...rest} - /> - ) -} - -NumberInput.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - field: PropTypes.shape({ - inputId: PropTypes.string, - invalid: PropTypes.bool, - disabled: PropTypes.bool, - }), - children: PropTypes.node, - id: PropTypes.string, - name: PropTypes.string.isRequired, - disabled: PropTypes.bool, - readOnly: PropTypes.bool, - invalid: PropTypes.bool, -} - -NumberInput.defaultProps = { - is: 'input', - field: {}, - children: undefined, - id: undefined, - disabled: false, - readOnly: false, - invalid: false, -} - -export { NumberInput as component } -export default withTheme(NumberInput) diff --git a/src/components/form/NumberInput.md b/src/components/form/NumberInput.md deleted file mode 100644 index 540c601..0000000 --- a/src/components/form/NumberInput.md +++ /dev/null @@ -1,6 +0,0 @@ -```jsx -<Field> - <Label>Username</Label> - <NumberInput name="number" placeholder="Card Number" /> -</Field> -``` diff --git a/src/components/form/OptionField.jsx b/src/components/form/OptionField.jsx deleted file mode 100644 index 45da0ca..0000000 --- a/src/components/form/OptionField.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import Field from './Field' - -const OptionField = props => <Field {...props} is="fieldset" optionList /> - -export default OptionField diff --git a/src/components/form/OptionInput.jsx b/src/components/form/OptionInput.jsx deleted file mode 100644 index ddc0a19..0000000 --- a/src/components/form/OptionInput.jsx +++ /dev/null @@ -1,160 +0,0 @@ -import React, { PureComponent } from 'react' -import PropTypes from 'prop-types' - -import { Touchable, Flex, Box } from '../primitives' -import { withTheme } from '../theme' - -import Label from './Label' - -class OptionInput extends PureComponent { - constructor(props) { - super(props) - - const { defaultChecked, checked } = props - - this.state = { - checked: defaultChecked || !!checked, - } - - this.inputRef = null - - this.handleChange = this.handleChange.bind(this) - this.handleUpdate = this.handleUpdate.bind(this) - } - - componentDidUpdate(prevProps) { - this.handleUpdate(prevProps) - } - - handleChange(e) { - const { checkbox, onChange, checked } = this.props - - if (checked === undefined) { - this.setState(({ checked: checkedState }) => ({ - checked: checkbox ? !checkedState : true, - })) - } - - if (onChange) onChange({ ...e, target: this.inputRef.current }) - - e.preventDefault() - } - - handleUpdate() { - const { checked } = this.props - const { checked: checkedState } = this.state - - if (checked !== undefined && checked !== checkedState) { - this.setState({ checked }) - } - } - - render() { - const { - theme, - name, - value, - label, - hideLabel, - checkbox, - id, - ...rest - } = this.props - const { checked } = this.state - - this.inputRef = React.createRef() - - return ( - <Touchable - is={Label} - flex - items="center" - onTouch={this.handleChange} - {...rest} - > - <Box - is="input" - id={id} - visuallyHidden - name={name} - type={checkbox ? 'checkbox' : 'radio'} - value={value} - checked={checked} - tabIndex="-1" - innerRef={this.inputRef} - onChange={() => {}} - /> - <Flex - items="center" - justify="center" - inlineBlock - rounded={checkbox ? theme.radius : 'full'} - h={4} - w={4} - border={[true, checked ? theme.brandColors.primary : false].filter( - prop => !!prop, - )} - bg={checkbox && checked ? theme.brandColors.primary : undefined} - m={{ r: theme.spacing.sm }} - > - {checked && - (checkbox ? ( - <Box - is="svg" - xmlns="http://www.w3.org/2000/svg" - viewBox="0 0 24 24" - h={3} - w={3} - text="white" - fill="current" - > - <path d="M0 0h24v24H0z" fill="none" /> - <path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" /> - </Box> - ) : ( - <Box - inlineBlock - rounded="full" - h={2} - w={2} - bg={theme.brandColors.primary} - /> - ))} - </Flex> - <Box - inlineBlock - visuallyHidden={hideLabel} - leading="tight" - font="normal" - > - {label} - </Box> - </Touchable> - ) - } -} - -OptionInput.propTypes = { - theme: PropTypes.shape({}).isRequired, - name: PropTypes.string.isRequired, - value: PropTypes.string.isRequired, - label: PropTypes.string.isRequired, - hideLabel: PropTypes.bool, - defaultChecked: PropTypes.bool, - checked: PropTypes.bool, - onChange: PropTypes.func, - checkbox: PropTypes.bool, - id: PropTypes.string, -} - -OptionInput.defaultProps = { - hideLabel: false, - defaultChecked: undefined, - checked: undefined, - onChange: undefined, - checkbox: false, - id: undefined, -} - -export { OptionInput as component } -export default withTheme(OptionInput) diff --git a/src/components/form/OptionLabel.jsx b/src/components/form/OptionLabel.jsx deleted file mode 100644 index f944db5..0000000 --- a/src/components/form/OptionLabel.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import Label from './Label' - -const OptionLabel = props => <Label {...props} is="legend" optionList /> - -export default OptionLabel diff --git a/src/components/form/OptionList.jsx b/src/components/form/OptionList.jsx deleted file mode 100644 index 3d87c70..0000000 --- a/src/components/form/OptionList.jsx +++ /dev/null @@ -1,94 +0,0 @@ -import React, { PureComponent } from 'react' -import PropTypes from 'prop-types' - -import { List } from '../list' -import { withTheme } from '../theme' - -class OptionList extends PureComponent { - constructor(props) { - super(props) - - this.state = { - checked: [], - } - - this.handleChange = this.handleChange.bind(this) - } - - handleChange(e) { - const { checkbox } = this.props - const { checked } = this.state - const { value } = e.target - - if (checkbox) { - return this.setState({ - checked: checked.includes(value) - ? checked.filter(checkedVal => checkedVal !== value) - : [...checked, value], - }) - } - - return this.setState({ - checked: [e.target.value], - }) - } - - render() { - const { - theme, - children, - name, - checkbox, - field, - invalid, - ...rest - } = this.props - const { checked } = this.state - const describedBy = [field.labelId, field.errorId, field.helpId].filter( - by => by, - ) - const isInvalid = field.invalid || invalid - - return ( - <List reset m={{ b: 0 }} {...rest}> - {React.Children.map(children, child => { - const value = child.props && child.props.value - - return React.cloneElement(child, { - id: `${field.inputId}-${value}`, - name: checkbox ? `${name}[]` : name, - checked: checked.includes(value), - onChange: this.handleChange, - 'aria-invalid': isInvalid || undefined, - 'aria-describedby': describedBy.length - ? describedBy.join(' ') - : undefined, - }) - })} - </List> - ) - } -} - -OptionList.propTypes = { - theme: PropTypes.shape({}).isRequired, - children: PropTypes.node, - name: PropTypes.string.isRequired, - field: PropTypes.shape({ - inputId: PropTypes.string, - invalid: PropTypes.bool, - disabled: PropTypes.bool, - }), - checkbox: PropTypes.bool, - invalid: PropTypes.bool, -} - -OptionList.defaultProps = { - children: undefined, - checkbox: false, - field: {}, - invalid: false, -} - -export { OptionList as component } -export default withTheme(OptionList) diff --git a/src/components/form/Radio.jsx b/src/components/form/Radio.jsx deleted file mode 100644 index 955cef4..0000000 --- a/src/components/form/Radio.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import OptionInput from './OptionInput' - -const Radio = props => <OptionInput {...props} checkbox={false} /> - -export default Radio diff --git a/src/components/form/Radio.md b/src/components/form/Radio.md deleted file mode 100644 index f5bd8a2..0000000 --- a/src/components/form/Radio.md +++ /dev/null @@ -1,6 +0,0 @@ -```jsx -<Radio name="option-input" value="unselected" label="Unselected" /> -<Radio name="option-input" value="selected" label="Selected" defaultChecked /> -<Radio name="option-input-2" value="unselected" label="Unselected disabled" disabled /> -<Radio name="option-input-2" value="selected" label="Selected disabled" disabled defaultChecked /> -``` diff --git a/src/components/form/RadioList.jsx b/src/components/form/RadioList.jsx deleted file mode 100644 index 481df4c..0000000 --- a/src/components/form/RadioList.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import OptionList from './OptionList' - -const RadioList = props => <OptionList {...props} /> - -export default RadioList diff --git a/src/components/form/RadioList.md b/src/components/form/RadioList.md deleted file mode 100644 index fcfd3d4..0000000 --- a/src/components/form/RadioList.md +++ /dev/null @@ -1,23 +0,0 @@ -```jsx -<OptionField> - <OptionLabel>Do you agree to us contacting you?</OptionLabel> - <RadioList name="agree"> - <Radio value="yes" label="Yes" /> - <Radio value="no" label="No" /> - <Radio value="maybe" label="Maybe" /> - </RadioList> -</OptionField> -``` - -#### Inline list - -```jsx -<OptionField> - <OptionLabel>Do you agree to us contacting you?</OptionLabel> - <RadioList inline name="agree"> - <Radio value="yes" label="Yes" /> - <Radio value="no" label="No" /> - <Radio value="maybe" label="Maybe" /> - </RadioList> -</OptionField> -``` diff --git a/src/components/form/Select.md b/src/components/form/Select.md deleted file mode 100644 index b831418..0000000 --- a/src/components/form/Select.md +++ /dev/null @@ -1,14 +0,0 @@ -```jsx -<Field> - <Label>Favourite Ninja Turtle</Label> - <Select - name="select" - options={[ - { value: 'leo', label: 'Leonardo' }, - { value: 'mike', label: 'Michelangelo' }, - { value: 'don', label: 'Donatello' }, - { value: 'raph', label: 'Raphael' }, - ]} - /> -</Field> -``` diff --git a/src/components/form/TextArea.jsx b/src/components/form/TextArea.jsx deleted file mode 100644 index c15f2ef..0000000 --- a/src/components/form/TextArea.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Touchable } from '../primitives' - -const TextArea = ({ - theme, - is, - field, - children, - id, - name, - disabled, - readOnly, - invalid, - ...rest -}) => { - const describedBy = [field.errorId, field.helpId].filter(by => by) - const isInvalid = field.invalid || invalid - - return ( - <Touchable - is={is} - appearance="none" - bg="white" - rounded={theme.radius} - text={theme.textColors.body} - p={{ x: theme.spacing.md, y: theme.spacing.sm }} - m={{ b: theme.spacing.sm }} - border={!isInvalid ? true : [true, theme.brandColors.danger]} - w="full" - leading="tight" - id={field.inputId || id || name} - name={name} - disabled={field.disabled || disabled} - readOnly={readOnly} - aria-invalid={isInvalid || undefined} - aria-describedby={describedBy.length ? describedBy.join(' ') : undefined} - {...rest} - /> - ) -} - -TextArea.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - field: PropTypes.shape({ - inputId: PropTypes.string, - invalid: PropTypes.bool, - disabled: PropTypes.bool, - }), - children: PropTypes.node, - id: PropTypes.string, - name: PropTypes.string.isRequired, - disabled: PropTypes.bool, - readOnly: PropTypes.bool, - invalid: PropTypes.bool, -} - -TextArea.defaultProps = { - is: 'textarea', - field: {}, - children: undefined, - id: undefined, - disabled: false, - readOnly: false, - invalid: false, -} - -export { TextArea as component } -export default withTheme(TextArea) diff --git a/src/components/form/TextArea.md b/src/components/form/TextArea.md deleted file mode 100644 index f2b5287..0000000 --- a/src/components/form/TextArea.md +++ /dev/null @@ -1,6 +0,0 @@ -```jsx -<Field> - <Label>Comments</Label> - <TextArea name="comments" /> -</Field> -``` diff --git a/src/components/form/TextInput.jsx b/src/components/form/TextInput.jsx deleted file mode 100644 index f05939f..0000000 --- a/src/components/form/TextInput.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Touchable } from '../primitives' - -const TextInput = ({ - theme, - is, - field, - children, - id, - name, - type, - disabled, - readOnly, - invalid, - ...rest -}) => { - const describedBy = [field.errorId, field.helpId].filter(by => by) - const isInvalid = field.invalid || invalid - - return ( - <Touchable - is={is} - appearance="none" - bg="white" - rounded={theme.radius} - text={theme.textColors.body} - p={{ x: theme.spacing.md, y: theme.spacing.sm }} - m={{ b: theme.spacing.sm }} - border={!isInvalid ? true : [true, theme.brandColors.danger]} - w="full" - leading="tight" - id={field.inputId || id || name} - name={name} - type={type} - disabled={field.disabled || disabled} - readOnly={readOnly} - aria-invalid={isInvalid || undefined} - aria-describedby={describedBy.length ? describedBy.join(' ') : undefined} - {...rest} - /> - ) -} - -TextInput.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - field: PropTypes.shape({ - inputId: PropTypes.string, - invalid: PropTypes.bool, - disabled: PropTypes.bool, - }), - children: PropTypes.node, - id: PropTypes.string, - name: PropTypes.string.isRequired, - type: PropTypes.string, - disabled: PropTypes.bool, - readOnly: PropTypes.bool, - invalid: PropTypes.bool, -} - -TextInput.defaultProps = { - is: 'input', - field: {}, - children: undefined, - id: undefined, - type: 'text', - disabled: false, - readOnly: false, - invalid: false, -} - -export { TextInput as component } -export default withTheme(TextInput) diff --git a/src/components/form/TextInput.md b/src/components/form/TextInput.md deleted file mode 100644 index 81e0b59..0000000 --- a/src/components/form/TextInput.md +++ /dev/null @@ -1,6 +0,0 @@ -```jsx -<Field> - <Label>Name</Label> - <TextInput name="name" /> -</Field> -``` diff --git a/src/components/form/__tests__/Label.jsx b/src/components/form/__tests__/Label.jsx deleted file mode 100644 index 179260f..0000000 --- a/src/components/form/__tests__/Label.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Label } from '../Label' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { theme: defaultTheme, htmlFor: 'input' }, - testProps, - ) - - const wrapper = shallow(<Label {...props}>Username</Label>) - - return { - props, - wrapper, - } -} - -describe('Label', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/form/__tests__/NumberInput.jsx b/src/components/form/__tests__/NumberInput.jsx deleted file mode 100644 index c6fe30b..0000000 --- a/src/components/form/__tests__/NumberInput.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as NumberInput } from '../NumberInput' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { theme: defaultTheme, name: 'username' }, - testProps, - ) - - const wrapper = shallow(<NumberInput {...props} />) - - return { - props, - wrapper, - } -} - -describe('NumberInput', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/form/__tests__/OptionInput.jsx b/src/components/form/__tests__/OptionInput.jsx deleted file mode 100644 index 4f8aeb3..0000000 --- a/src/components/form/__tests__/OptionInput.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as OptionInput } from '../OptionInput' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { theme: defaultTheme, name: 'test', value: 'test-1', label: 'Test?' }, - testProps, - ) - - const wrapper = shallow(<OptionInput {...props} />) - - return { - props, - wrapper, - } -} - -describe('OptionInput', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ defaultChecked: true }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/form/__tests__/OptionList.jsx b/src/components/form/__tests__/OptionList.jsx deleted file mode 100644 index c5a4ea2..0000000 --- a/src/components/form/__tests__/OptionList.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as OptionList } from '../OptionList' -import { defaultTheme } from '../../theme' - -import { Radio } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme, name: 'test' }, testProps) - - const wrapper = shallow( - <OptionList {...props}> - <Radio value="yes" label="Yes" /> - <Radio value="no" label="No" /> - <Radio value="maybe" label="Maybe" /> - </OptionList>, - ) - - return { - props, - wrapper, - } -} - -describe('OptionList', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/form/__tests__/Select.jsx b/src/components/form/__tests__/Select.jsx deleted file mode 100644 index 4d3e23e..0000000 --- a/src/components/form/__tests__/Select.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as TextInput } from '../TextInput' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { - theme: defaultTheme, - name: 'username', - options: [ - { value: 'one', label: 'single' }, - { value: 'two', label: 'double' }, - ], - }, - testProps, - ) - - const wrapper = shallow(<TextInput {...props} />) - - return { - props, - wrapper, - } -} - -describe('TextInput', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/form/__tests__/TextArea.jsx b/src/components/form/__tests__/TextArea.jsx deleted file mode 100644 index da76e8a..0000000 --- a/src/components/form/__tests__/TextArea.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as TextArea } from '../TextArea' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { theme: defaultTheme, name: 'username' }, - testProps, - ) - - const wrapper = shallow(<TextArea {...props} />) - - return { - props, - wrapper, - } -} - -describe('TextArea', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/form/__tests__/TextInput.jsx b/src/components/form/__tests__/TextInput.jsx deleted file mode 100644 index 8df8cfa..0000000 --- a/src/components/form/__tests__/TextInput.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as TextInput } from '../TextInput' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { theme: defaultTheme, name: 'username' }, - testProps, - ) - - const wrapper = shallow(<TextInput {...props} />) - - return { - props, - wrapper, - } -} - -describe('TextInput', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/form/__tests__/__snapshots__/Field.jsx.snap b/src/components/form/__tests__/__snapshots__/Field.jsx.snap deleted file mode 100644 index c683eaf..0000000 --- a/src/components/form/__tests__/__snapshots__/Field.jsx.snap +++ /dev/null @@ -1,81 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Field renders matching snapshot 1`] = ` -<Box - id="field-1" - inline={false} - inlineBlock={false} - is="div" - m={ - Object { - "b": 4, - } - } - maxW="sm" -> - <WithTheme(Label) - field={ - Object { - "disabled": false, - "errorId": "field-1-error", - "helpId": "field-1-help", - "inputId": "field-1-input", - "invalid": true, - "labelId": undefined, - } - } - key=".0" - > - Password - </WithTheme(Label)> - <HelpText - field={ - Object { - "disabled": false, - "errorId": "field-1-error", - "helpId": "field-1-help", - "inputId": "field-1-input", - "invalid": true, - "labelId": undefined, - } - } - is={[Function]} - key=".1" - size={1} - > - Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji. - </HelpText> - <WithTheme(TextInput) - field={ - Object { - "disabled": false, - "errorId": "field-1-error", - "helpId": "field-1-help", - "inputId": "field-1-input", - "invalid": true, - "labelId": undefined, - } - } - key=".2" - name="password" - type="password" - /> - <ErrorText - field={ - Object { - "disabled": false, - "errorId": "field-1-error", - "helpId": "field-1-help", - "inputId": "field-1-input", - "invalid": true, - "labelId": undefined, - } - } - is={[Function]} - key=".3" - size={1} - > - Please complete - </ErrorText> -</Box> -`; diff --git a/src/components/form/__tests__/__snapshots__/Label.jsx.snap b/src/components/form/__tests__/__snapshots__/Label.jsx.snap deleted file mode 100644 index fe30758..0000000 --- a/src/components/form/__tests__/__snapshots__/Label.jsx.snap +++ /dev/null @@ -1,21 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Label renders matching snapshot 1`] = ` -<Text - bold={false} - htmlFor="input" - inlineBlock={true} - is="label" - leading="normal" - loose={false} - m={ - Object { - "b": 2, - } - } - tight={false} - weight="bold" -> - Username -</Text> -`; diff --git a/src/components/form/__tests__/__snapshots__/NumberInput.jsx.snap b/src/components/form/__tests__/__snapshots__/NumberInput.jsx.snap deleted file mode 100644 index 11ce91c..0000000 --- a/src/components/form/__tests__/__snapshots__/NumberInput.jsx.snap +++ /dev/null @@ -1,31 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NumberInput renders matching snapshot 1`] = ` -<Touchable - appearance="none" - bg="white" - border={true} - disabled={false} - id="username" - inputMode="numeric" - is="input" - leading="tight" - m={ - Object { - "b": 2, - } - } - name="username" - p={ - Object { - "x": 4, - "y": 2, - } - } - pattern="[0-9]*" - readOnly={false} - rounded="rounded" - text="gray-900" - w="full" -/> -`; diff --git a/src/components/form/__tests__/__snapshots__/OptionInput.jsx.snap b/src/components/form/__tests__/__snapshots__/OptionInput.jsx.snap deleted file mode 100644 index 638a361..0000000 --- a/src/components/form/__tests__/__snapshots__/OptionInput.jsx.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`OptionInput renders matching snapshot 1`] = ` -<Touchable - defaultChecked={true} - disabled={false} - flex={true} - is={[Function]} - items="center" - onTouch={[Function]} -> - <Box - checked={true} - inline={false} - inlineBlock={false} - innerRef={ - Object { - "current": null, - } - } - is="input" - name="test" - onChange={[Function]} - tabIndex="-1" - type="radio" - value="test-1" - visuallyHidden={true} - /> - <Flex - border={ - Array [ - true, - "blue-400", - ] - } - col={false} - h={4} - inline={false} - inlineBlock={true} - inlineFlex={false} - is="div" - items="center" - justify="center" - m={ - Object { - "r": 2, - } - } - reverse={false} - rounded="full" - w={4} - wrap={false} - wrapReverse={false} - > - <Box - bg="blue-400" - h={2} - inline={false} - inlineBlock={true} - is="div" - rounded="full" - w={2} - /> - </Flex> - <Box - font="normal" - inline={false} - inlineBlock={true} - is="div" - leading="tight" - visuallyHidden={false} - > - Test? - </Box> -</Touchable> -`; diff --git a/src/components/form/__tests__/__snapshots__/OptionList.jsx.snap b/src/components/form/__tests__/__snapshots__/OptionList.jsx.snap deleted file mode 100644 index d5f1da7..0000000 --- a/src/components/form/__tests__/__snapshots__/OptionList.jsx.snap +++ /dev/null @@ -1,40 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`OptionList renders matching snapshot 1`] = ` -<WithTheme(List) - m={ - Object { - "b": 0, - } - } - reset={true} -> - <Radio - checked={false} - id="undefined-yes" - key=".0" - label="Yes" - name="test" - onChange={[Function]} - value="yes" - /> - <Radio - checked={false} - id="undefined-no" - key=".1" - label="No" - name="test" - onChange={[Function]} - value="no" - /> - <Radio - checked={false} - id="undefined-maybe" - key=".2" - label="Maybe" - name="test" - onChange={[Function]} - value="maybe" - /> -</WithTheme(List)> -`; diff --git a/src/components/form/__tests__/__snapshots__/Select.jsx.snap b/src/components/form/__tests__/__snapshots__/Select.jsx.snap deleted file mode 100644 index 1135593..0000000 --- a/src/components/form/__tests__/__snapshots__/Select.jsx.snap +++ /dev/null @@ -1,42 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`TextInput renders matching snapshot 1`] = ` -<Touchable - appearance="none" - bg="white" - border={true} - disabled={false} - id="username" - is="input" - leading="tight" - m={ - Object { - "b": 2, - } - } - name="username" - options={ - Array [ - Object { - "label": "single", - "value": "one", - }, - Object { - "label": "double", - "value": "two", - }, - ] - } - p={ - Object { - "x": 4, - "y": 2, - } - } - readOnly={false} - rounded="rounded" - text="gray-900" - type="text" - w="full" -/> -`; diff --git a/src/components/form/__tests__/__snapshots__/TextArea.jsx.snap b/src/components/form/__tests__/__snapshots__/TextArea.jsx.snap deleted file mode 100644 index 966bddb..0000000 --- a/src/components/form/__tests__/__snapshots__/TextArea.jsx.snap +++ /dev/null @@ -1,29 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`TextArea renders matching snapshot 1`] = ` -<Touchable - appearance="none" - bg="white" - border={true} - disabled={false} - id="username" - is="textarea" - leading="tight" - m={ - Object { - "b": 2, - } - } - name="username" - p={ - Object { - "x": 4, - "y": 2, - } - } - readOnly={false} - rounded="rounded" - text="gray-900" - w="full" -/> -`; diff --git a/src/components/form/__tests__/__snapshots__/TextInput.jsx.snap b/src/components/form/__tests__/__snapshots__/TextInput.jsx.snap deleted file mode 100644 index f4d8668..0000000 --- a/src/components/form/__tests__/__snapshots__/TextInput.jsx.snap +++ /dev/null @@ -1,30 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`TextInput renders matching snapshot 1`] = ` -<Touchable - appearance="none" - bg="white" - border={true} - disabled={false} - id="username" - is="input" - leading="tight" - m={ - Object { - "b": 2, - } - } - name="username" - p={ - Object { - "x": 4, - "y": 2, - } - } - readOnly={false} - rounded="rounded" - text="gray-900" - type="text" - w="full" -/> -`; diff --git a/src/components/form/index.js b/src/components/form/index.js deleted file mode 100644 index e9e1df9..0000000 --- a/src/components/form/index.js +++ /dev/null @@ -1,9 +0,0 @@ -export { default as ErrorText } from './ErrorText' -export { default as Field } from './Field' -export { default as HelpText } from './HelpText' -export { default as Label } from './Label' -export { default as Select } from './Select' -export { default as TextInput } from './TextInput' -export { default as Radio } from './Radio' -export { default as Checkbox } from './Checkbox' -export { default as OptionList } from './OptionList' diff --git a/src/components/form/readme.md b/src/components/form/readme.md deleted file mode 100644 index 00e6759..0000000 --- a/src/components/form/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -Common behaviour can be provided through the use of the `Field` component. - -### Help - -```jsx -<Field hasHelp> - <Label>Password</Label> - <HelpText> - Your password must be 8-20 characters long, contain letters and numbers, and - must not contain spaces, special characters, or emoji. - </HelpText> - <TextInput name="password" type="password" /> -</Field> -``` - -#### Disabled - -```jsx -<Field disabled> - <Label>Username</Label> - <TextInput name="disabled" placeholder="Username" /> -</Field> -``` - -### Errors - -```jsx -<Field hasError> - <Label>Username</Label> - <TextInput name="invalid" placeholder="Username" /> - <ErrorText>Please enter a valid username</ErrorText> -</Field> -``` diff --git a/src/components/grid/Col.jsx b/src/components/grid/Col.jsx deleted file mode 100644 index f737a8f..0000000 --- a/src/components/grid/Col.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' - -const getWidthProps = width => { - if (typeof width === 'object') { - return Object.keys(width).reduce((props, breakpoint) => { - const breakpointSuffix = breakpoint === 'def' ? '' : `-${breakpoint}` - if (width === 'auto') { - return { ...props, [`flex${breakpointSuffix}`]: 1 } - } - return { ...props, [`w${breakpointSuffix}`]: width[breakpoint] } - }, {}) - } - - return width === 'auto' ? { flex: 1 } : { w: width } -} - -const Col = ({ is, children, w, ...rest }) => ( - <Box is={is} {...getWidthProps(w)} {...rest}> - {children} - </Box> -) - -Col.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - w: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), -} - -Col.defaultProps = { - is: 'li', - children: undefined, - w: 'full', -} - -export default Col diff --git a/src/components/grid/Row.jsx b/src/components/grid/Row.jsx deleted file mode 100644 index 9efb59c..0000000 --- a/src/components/grid/Row.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Flex } from '../primitives' - -const Row = ({ is, children, nowrap, gutter, theme, ...rest }) => { - const gutterSpacing = - gutter && (gutter === true ? theme.spacing.md : theme.spacing[gutter]) - - return ( - <Flex - is={is} - wrap={!nowrap} - nm={ - gutter - ? { l: gutterSpacing, b: !nowrap ? gutterSpacing : undefined } - : undefined - } - listReset - {...rest} - > - {gutter - ? React.Children.map(children, child => - React.cloneElement(child, { - p: { l: gutterSpacing }, - m: { b: gutterSpacing }, - }), - ) - : children} - </Flex> - ) -} - -Row.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - nowrap: PropTypes.bool, - gutter: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), -} - -Row.defaultProps = { - is: 'ul', - children: undefined, - nowrap: false, - gutter: false, -} - -export { Row as component } -export default withTheme(Row) diff --git a/src/components/grid/Row.md b/src/components/grid/Row.md deleted file mode 100644 index a6930a0..0000000 --- a/src/components/grid/Row.md +++ /dev/null @@ -1,132 +0,0 @@ -```jsx -<Row> - <Col bg="gray-400" text="center" p="4"> - 1/1 - </Col> - <Col w="1/2" bg="gray-300" text="center" p="4"> - 1/2 - </Col> - <Col w="1/2" bg="gray-400" text="center" p="4"> - 1/2 - </Col> - <Col w="1/3" bg="gray-300" text="center" p="4"> - 1/3 - </Col> - <Col w="1/3" bg="gray-400" text="center" p="4"> - 1/3 - </Col> - <Col w="1/3" bg="gray-300" text="center" p="4"> - 1/3 - </Col> - <Col w="1/4" bg="gray-400" text="center" p="4"> - 1/4 - </Col> - <Col w="1/4" bg="gray-300" text="center" p="4"> - 1/4 - </Col> - <Col w="1/4" bg="gray-400" text="center" p="4"> - 1/4 - </Col> - <Col w="1/4" bg="gray-300" text="center" p="4"> - 1/4 - </Col> -</Row> -``` - -### Gutters - -```jsx -<Row gutter> - <Col> - <Card bg="gray-400" text="center" p="4" rounded="none"> - 1/1 - </Card> - </Col> - <Col w="1/2"> - <Card bg="gray-300" text="center" p="4" rounded="none"> - 1/2 - </Card> - </Col> - <Col w="1/2"> - <Card bg="gray-400" text="center" p="4" rounded="none"> - 1/2 - </Card> - </Col> - <Col w="1/3"> - <Card bg="gray-300" text="center" p="4" rounded="none"> - 1/3 - </Card> - </Col> - <Col w="1/3"> - <Card bg="gray-400" text="center" p="4" rounded="none"> - 1/3 - </Card> - </Col> - <Col w="1/3"> - <Card bg="gray-300" text="center" p="4" rounded="none"> - 1/3 - </Card> - </Col> - <Col w="1/4"> - <Card bg="gray-400" text="center" p="4" rounded="none"> - 1/4 - </Card> - </Col> - <Col w="1/4"> - <Card bg="gray-300" text="center" p="4" rounded="none"> - 1/4 - </Card> - </Col> - <Col w="1/4"> - <Card bg="gray-400" text="center" p="4" rounded="none"> - 1/4 - </Card> - </Col> - <Col w="1/4"> - <Card bg="gray-300" text="center" p="4" rounded="none"> - 1/4 - </Card> - </Col> -</Row> -``` - -### Responsive Columns - -```jsx -<Row gutter> - <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> - <Card bg="gray-400" p={4} h={12} rounded="none" /> - </Col> - <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> - <Card bg="gray-300" p={4} h={12} rounded="none" /> - </Col> - <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> - <Card bg="gray-400" p={4} h={12} rounded="none" /> - </Col> - <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> - <Card bg="gray-300" p={4} h={12} rounded="none" /> - </Col> - <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> - <Card bg="gray-400" p={4} h={12} rounded="none" /> - </Col> - <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> - <Card bg="gray-300" p={4} h={12} rounded="none" /> - </Col> -</Row> -``` - -### Auto Sized Columns - -```jsx -<Row nowrap> - <Col w="auto"> - <Card bg="gray-400" p={4} h={12} rounded="none" /> - </Col> - <Col w="auto"> - <Card bg="gray-300" p={4} h={12} rounded="none" /> - </Col> - <Col w="auto"> - <Card bg="gray-400" p={4} h={12} rounded="none" /> - </Col> -</Row> -``` diff --git a/src/components/grid/__tests__/Col.jsx b/src/components/grid/__tests__/Col.jsx deleted file mode 100644 index 48c86c8..0000000 --- a/src/components/grid/__tests__/Col.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { Col } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({}, testProps) - - const wrapper = shallow(<Col {...props}>Content</Col>) - - return { - props, - wrapper, - } -} - -describe('Col', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ size: { def: 'full', sm: '1/2', md: '1/4' } }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/grid/__tests__/Row.jsx b/src/components/grid/__tests__/Row.jsx deleted file mode 100644 index e159c54..0000000 --- a/src/components/grid/__tests__/Row.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Row } from '../Row' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(<Row {...props} />) - - return { - props, - wrapper, - } -} - -describe('Row', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ gutter: true }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/grid/__tests__/__snapshots__/Col.jsx.snap b/src/components/grid/__tests__/__snapshots__/Col.jsx.snap deleted file mode 100644 index 07c283d..0000000 --- a/src/components/grid/__tests__/__snapshots__/Col.jsx.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Col renders matching snapshot 1`] = ` -<Box - inline={false} - inlineBlock={false} - is="li" - size={ - Object { - "def": "full", - "md": "1/4", - "sm": "1/2", - } - } - w="full" -> - Content -</Box> -`; diff --git a/src/components/grid/__tests__/__snapshots__/Row.jsx.snap b/src/components/grid/__tests__/__snapshots__/Row.jsx.snap deleted file mode 100644 index 4175adb..0000000 --- a/src/components/grid/__tests__/__snapshots__/Row.jsx.snap +++ /dev/null @@ -1,20 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Row renders matching snapshot 1`] = ` -<Flex - col={false} - inline={false} - inlineFlex={false} - is="ul" - listReset={true} - nm={ - Object { - "b": 4, - "l": 4, - } - } - reverse={false} - wrap={true} - wrapReverse={false} -/> -`; diff --git a/src/components/grid/index.js b/src/components/grid/index.js deleted file mode 100644 index cc58754..0000000 --- a/src/components/grid/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Col } from './Col' -export { default as Row } from './Row' diff --git a/src/components/header/Header.jsx b/src/components/header/Header.jsx deleted file mode 100644 index 908a844..0000000 --- a/src/components/header/Header.jsx +++ /dev/null @@ -1,112 +0,0 @@ -import React, { PureComponent } from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Box, Flex } from '../primitives' -import { getUniqueID, filterProps } from '../utils' -import { Container } from '../container' - -class Header extends PureComponent { - constructor(props) { - const { id, screen } = props - - super(props) - - this.state = { - open: false, - collapsable: !!screen, - } - - this.mql = null - this.id = id || getUniqueID('header') - - this.handleMatch = this.handleMatch.bind(this) - this.handleToggle = this.handleToggle.bind(this) - } - - componentDidMount() { - const { theme, screen } = this.props - - if (screen && window.matchMedia) { - this.mql = window.matchMedia(`(min-width: ${theme.breakpoints[screen]})`) - this.mql.addListener(this.handleMatch) - - if (this.mql.matches) { - this.handleMatch(this.mql) - } - } - } - - componentWillUnmount() { - if (this.mql) this.mql.removeListener(this.handleMatch) - } - - handleToggle(forceState) { - const { open } = this.state - - this.setState({ - open: forceState || !open, - }) - } - - handleMatch(mql) { - this.setState({ collapsable: !mql.matches }) - } - - render() { - const { open, collapsable } = this.state - const { theme, is, children, bg, text, screen, ...rest } = this.props - - const headerProps = { - id: this.id, - style: { - bg: bg || theme.brandColors.primary, - text: text || theme.textColors.on.primary, - }, - open, - collapsable, - onToggle: this.handleToggle, - screen, - } - - return ( - <Box - is={is} - id={headerProps.id} - bg={headerProps.style.bg} - text={headerProps.style.text} - p={{ y: theme.spacing.md }} - role="banner" - {...filterProps(rest, ['id'])} - > - <Container is={Flex} wrap items="center" justify="between" padding> - {React.Children.map(children, child => - React.cloneElement(child, { header: headerProps }), - )} - </Container> - </Box> - ) - } -} - -Header.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - bg: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - text: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - id: PropTypes.string, - screen: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), -} - -Header.defaultProps = { - is: 'header', - children: undefined, - bg: undefined, - text: undefined, - id: undefined, - screen: 'lg', -} - -export { Header as component } -export default withTheme(Header) diff --git a/src/components/header/Header.md b/src/components/header/Header.md deleted file mode 100644 index 5593a99..0000000 --- a/src/components/header/Header.md +++ /dev/null @@ -1,75 +0,0 @@ -### Example - -```jsx -<Header> - <NavBrand is="a" href="#header" font="semibold" text={['white', 'xl']}> - <Box - is="svg" - fill="current" - h={8} - w={8} - m={{ r: 2 }} - width="54" - height="54" - viewBox="0 0 54 54" - xmlns="http://www.w3.org/2000/svg" - > - <path d="M13.5 22.1c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05zM0 38.3c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05z" /> - </Box> - <Box inlineBlock>Tailwind React UI</Box> - </NavBrand> - <NavToggle /> - <NavMenu> - <NavItem is="a" href="#header" active> - Docs - </NavItem> - <NavItem is="a" href="#header"> - Examples - </NavItem> - <NavItem is="a" href="#header"> - Blog - </NavItem> - <OutlineButton border="white" text="white" text-hocus="blue-400"> - Download - </OutlineButton> - </NavMenu> -</Header> -``` - -### Custom Example: - -```jsx -<Header bg="purple-400" text="white" screen="md"> - <NavBrand is="a" href="#header" font="semibold" text={['white', 'xl']}> - <Box - is="svg" - fill="current" - h={8} - w={8} - m={{ r: 2 }} - width="54" - height="54" - viewBox="0 0 54 54" - xmlns="http://www.w3.org/2000/svg" - > - <path d="M13.5 22.1c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05zM0 38.3c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05z" /> - </Box> - <Box inlineBlock>Tailwind React UI</Box> - </NavBrand> - <NavToggle /> - <NavMenu> - <NavItem is="a" href="#header" active> - Docs - </NavItem> - <NavItem is="a" href="#header"> - Examples - </NavItem> - <NavItem is="a" href="#header"> - Blog - </NavItem> - <OutlineButton border="white" text="white" text-hocus="blue-400"> - Download - </OutlineButton> - </NavMenu> -</Header> -``` diff --git a/src/components/header/NavBrand.jsx b/src/components/header/NavBrand.jsx deleted file mode 100644 index acc5c84..0000000 --- a/src/components/header/NavBrand.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Box } from '../primitives' - -const NavBrand = ({ - theme, - header: { style, screen }, - is, - children, - ...rest -}) => { - const responsive = screen - ? { - [`m-${screen}`]: { r: theme.spacing.lg }, - } - : {} - - const aria = !(typeof is === 'string' && is.startsWith('h')) - ? { - role: 'heading', - 'aria-level': 1, - } - : {} - - return ( - <Box - is={is} - inlineBlock - flex={[true, 'no-shrink']} - items="center" - h={12} - text={style.text || theme.textColors.on.primary} - {...responsive} - {...aria} - {...rest} - > - {children} - </Box> - ) -} - -NavBrand.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - header: PropTypes.shape({ - style: PropTypes.object, - screen: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), - }), -} - -NavBrand.defaultProps = { - is: 'div', - children: undefined, - header: { style: {}, screen: 'lg' }, -} - -export { NavBrand as component } -export default withTheme(NavBrand) diff --git a/src/components/header/NavItem.jsx b/src/components/header/NavItem.jsx deleted file mode 100644 index bac43bf..0000000 --- a/src/components/header/NavItem.jsx +++ /dev/null @@ -1,64 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Touchable } from '../primitives' - -const NavItem = ({ - theme, - is, - children, - header: { style, screen }, - active, - ...rest -}) => { - const textColor = style.text || theme.textColors.on.primary - const bgColor = style.bg || theme.brandColors.primary - - const responsive = screen - ? { - [`m-${screen}`]: { t: 0, r: theme.spacing.sm }, - } - : {} - - return ( - <Touchable - is={is} - focusable - text={!active ? style.text : style.bg} - bg={active ? textColor : undefined} - bg-hocus={textColor} - text-hocus={bgColor} - p={{ x: theme.spacing.md, y: theme.spacing.sm }} - m={{ t: theme.spacing.sm }} - rounded={theme.radius} - block - aria-current={active ? 'page' : undefined} - {...responsive} - {...rest} - > - {children} - </Touchable> - ) -} - -NavItem.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - header: PropTypes.shape({ - style: PropTypes.object, - screen: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), - }), - active: PropTypes.bool, -} - -NavItem.defaultProps = { - is: 'a', - children: undefined, - header: { style: {}, screen: 'lg' }, - active: false, -} - -export { NavItem as component } -export default withTheme(NavItem) diff --git a/src/components/header/NavMenu.jsx b/src/components/header/NavMenu.jsx deleted file mode 100644 index 2729f51..0000000 --- a/src/components/header/NavMenu.jsx +++ /dev/null @@ -1,117 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Box } from '../primitives' -import { Title } from '../typography' -import { withTransition } from '../utils' -import { List } from '../list' - -import NavItem from './NavItem' - -const NavItemWrapper = props => <li role="none" {...props} /> - -const NavMenu = ({ - theme, - transition, - is, - children, - header, - list, - ...rest -}) => { - const transitionStyles = { - entering: { maxHeight: '0', position: 'absolute' }, - entered: { maxHeight: '100vh' }, - } - const headingId = `${header.id}-menu` - - const responsive = { - nav: header.screen - ? { - [`w-${header.screen}`]: 'auto', - [`flex-${header.screen}`]: true, - } - : {}, - menu: header.screen - ? { - [`flex-${header.screen}`]: true, - [`m-${header.screen}`]: { b: 0 }, - } - : {}, - } - - return ( - <Box - is={is} - overflow="hidden" - w="full" - flex="grow" - items="center" - h={!header.collapsable ? 12 : undefined} - style={ - header.collapsable - ? { - transition: 'max-height 500ms', - maxHeight: '0', - ...transitionStyles[transition], - } - : undefined - } - id={`${header.id}-nav`} - aria-labelledby={headingId} - aria-expanded={header.collapsable ? header.open : undefined} - role="navigation" - {...responsive.nav} - {...rest} - > - <Title level={2} id={headingId} visuallyHidden> - Site menu - - - {React.Children.map( - children, - child => - child.type === NavItem && - React.cloneElement(child, { header, role: 'menuitem' }), - )} - - {React.Children.map(children, child => child.type !== NavItem && child)} - - ) -} - -NavMenu.propTypes = { - theme: PropTypes.shape({}).isRequired, - transition: PropTypes.string, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - header: PropTypes.shape({ - open: PropTypes.bool, - collapsable: PropTypes.bool, - screen: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), - }), - list: PropTypes.shape({}), -} - -NavMenu.defaultProps = { - is: 'nav', - children: undefined, - header: { - open: false, - collapsable: false, - screen: 'lg', - }, - transition: 'entering', - list: {}, -} - -export { NavMenu as component } -export default withTheme(withTransition(NavMenu, { inState: 'header.open' })) diff --git a/src/components/header/NavToggle.jsx b/src/components/header/NavToggle.jsx deleted file mode 100644 index d89ed8d..0000000 --- a/src/components/header/NavToggle.jsx +++ /dev/null @@ -1,84 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' -import { Button } from '../button' -import { withTheme } from '../theme' - -const Bar = () => ( - -) - -const NavToggle = ({ - theme, - children, - onClick, - header: { onToggle, style, id, screen }, - ...rest -}) => { - const handleClick = e => { - onToggle() - if (onClick) onClick(e) - } - - const responsive = screen - ? { - [`hidden-${screen}`]: true, - } - : {} - - return ( - - ) -} - -NavToggle.propTypes = { - theme: PropTypes.shape({}).isRequired, - children: PropTypes.node, - header: PropTypes.shape({ - onToggle: PropTypes.func.isRequired, - screen: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), - style: PropTypes.object, - }), - onClick: PropTypes.func, -} - -NavToggle.defaultProps = { - children: undefined, - onClick: undefined, - header: { - style: {}, - screen: 'lg', - }, -} - -export { NavToggle as component } -export default withTheme(NavToggle) diff --git a/src/components/header/__tests__/Header.jsx b/src/components/header/__tests__/Header.jsx deleted file mode 100644 index f568597..0000000 --- a/src/components/header/__tests__/Header.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Header } from '../Header' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(
Content
) - - return { - props, - wrapper, - } -} - -describe('Header', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ bg: 'blue-400', text: 'white' }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/header/__tests__/NavBrand.jsx b/src/components/header/__tests__/NavBrand.jsx deleted file mode 100644 index 1f151a4..0000000 --- a/src/components/header/__tests__/NavBrand.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as NavBrand } from '../NavBrand' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { theme: defaultTheme, header: { style: { text: 'white' } } }, - testProps, - ) - - const wrapper = shallow(Tailwind React UI) - - return { - props, - wrapper, - } -} - -describe('NavBrand', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/header/__tests__/NavItem.jsx b/src/components/header/__tests__/NavItem.jsx deleted file mode 100644 index 5b45d19..0000000 --- a/src/components/header/__tests__/NavItem.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as NavItem } from '../NavItem' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { - theme: defaultTheme, - header: { style: { bg: 'blue-400', text: 'white' } }, - }, - testProps, - ) - - const wrapper = shallow(Link) - - return { - props, - wrapper, - } -} - -describe('NavItem', () => { - it('renders matching snapshot', () => { - // eslint-disable-next-line - const { wrapper } = setup({ is: props => }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/header/__tests__/NavMenu.jsx b/src/components/header/__tests__/NavMenu.jsx deleted file mode 100644 index 76a0b01..0000000 --- a/src/components/header/__tests__/NavMenu.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as NavMenu } from '../NavMenu' -import NavItem from '../NavItem' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { - header: { open: true, collapsable: true }, - transition: 'entered', - theme: defaultTheme, - }, - testProps, - ) - - const wrapper = shallow( - - About - Blog - - , - ) - - return { - props, - wrapper, - } -} - -describe('NavMenu', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/header/__tests__/NavToggle.jsx b/src/components/header/__tests__/NavToggle.jsx deleted file mode 100644 index 71239f5..0000000 --- a/src/components/header/__tests__/NavToggle.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as NavToggle } from '../NavToggle' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign( - { - header: { onToggle: jest.fn(), style: { text: 'white' } }, - theme: defaultTheme, - }, - testProps, - ) - - const wrapper = shallow() - - return { - props, - wrapper, - } -} - -describe('NavToggle', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/header/__tests__/__snapshots__/Header.jsx.snap b/src/components/header/__tests__/__snapshots__/Header.jsx.snap deleted file mode 100644 index 4b4b7ed..0000000 --- a/src/components/header/__tests__/__snapshots__/Header.jsx.snap +++ /dev/null @@ -1,43 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Header renders matching snapshot 1`] = ` - - - - - -`; diff --git a/src/components/header/__tests__/__snapshots__/NavBrand.jsx.snap b/src/components/header/__tests__/__snapshots__/NavBrand.jsx.snap deleted file mode 100644 index 83f336f..0000000 --- a/src/components/header/__tests__/__snapshots__/NavBrand.jsx.snap +++ /dev/null @@ -1,22 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NavBrand renders matching snapshot 1`] = ` - - Tailwind React UI - -`; diff --git a/src/components/header/__tests__/__snapshots__/NavItem.jsx.snap b/src/components/header/__tests__/__snapshots__/NavItem.jsx.snap deleted file mode 100644 index 285c96e..0000000 --- a/src/components/header/__tests__/__snapshots__/NavItem.jsx.snap +++ /dev/null @@ -1,27 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NavItem renders matching snapshot 1`] = ` - - Link - -`; diff --git a/src/components/header/__tests__/__snapshots__/NavMenu.jsx.snap b/src/components/header/__tests__/__snapshots__/NavMenu.jsx.snap deleted file mode 100644 index b037125..0000000 --- a/src/components/header/__tests__/__snapshots__/NavMenu.jsx.snap +++ /dev/null @@ -1,68 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NavMenu renders matching snapshot 1`] = ` - - - Site menu - - - - About - - - Blog - - - - -`; diff --git a/src/components/header/__tests__/__snapshots__/NavToggle.jsx.snap b/src/components/header/__tests__/__snapshots__/NavToggle.jsx.snap deleted file mode 100644 index b50b5dd..0000000 --- a/src/components/header/__tests__/__snapshots__/NavToggle.jsx.snap +++ /dev/null @@ -1,37 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`NavToggle renders matching snapshot 1`] = ` - - - - - - - -`; diff --git a/src/components/header/index.js b/src/components/header/index.js deleted file mode 100644 index 4510110..0000000 --- a/src/components/header/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as Header } from './Header' -export { default as NavBrand } from './NavBrand' -export { default as NavItem } from './NavItem' -export { default as NavMenu } from './NavMenu' -export { default as NavToggle } from './NavToggle' diff --git a/src/components/list/List.jsx b/src/components/list/List.jsx deleted file mode 100644 index 0727609..0000000 --- a/src/components/list/List.jsx +++ /dev/null @@ -1,98 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' -import { withTheme } from '../theme' - -const List = ({ - theme, - is, - children, - padding, - list, - inline, - justified, - fullWidth, - ordered, - listItemIs, - ...rest -}) => { - let listStyle = list - if (listStyle === true) { - listStyle = ordered ? 'decimal' : 'disc' - } - - return ( - - {React.Children.map( - children, - child => - child && ( - - {child} - - ), - )} - - ) -} - -List.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - padding: PropTypes.bool, - list: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.oneOf(['disc', 'decimal']), - ]), - inline: PropTypes.bool, - justified: PropTypes.bool, - fullWidth: PropTypes.bool, - ordered: PropTypes.bool, - listItemIs: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.func, - PropTypes.object, - ]), -} - -List.defaultProps = { - is: 'ul', - children: undefined, - padding: false, - list: undefined, - inline: false, - justified: false, - fullWidth: false, - ordered: false, - listItemIs: 'li', -} - -export { List as component } -export default withTheme(List) diff --git a/src/components/list/List.md b/src/components/list/List.md deleted file mode 100644 index 16b6296..0000000 --- a/src/components/list/List.md +++ /dev/null @@ -1,45 +0,0 @@ -### Simple Example - -```jsx - - One - Two - Three - -``` - -### Inline - -```jsx - - One - Two - Three - -``` - -### Justified - -```jsx - - One - Two - Three - -``` - -### Full Width - -```jsx - - - One - - - Two - - - Three - - -``` diff --git a/src/components/list/__tests__/List.jsx b/src/components/list/__tests__/List.jsx deleted file mode 100644 index b627c47..0000000 --- a/src/components/list/__tests__/List.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as List } from '../List' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow( - - One - Two - Three - , - ) - - return { - props, - wrapper, - } -} - -describe('List', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/list/__tests__/__snapshots__/List.jsx.snap b/src/components/list/__tests__/__snapshots__/List.jsx.snap deleted file mode 100644 index 495b279..0000000 --- a/src/components/list/__tests__/__snapshots__/List.jsx.snap +++ /dev/null @@ -1,70 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`List renders matching snapshot 1`] = ` - - - - One - - - - - Two - - - - - Three - - - -`; diff --git a/src/components/list/index.js b/src/components/list/index.js deleted file mode 100644 index f12006c..0000000 --- a/src/components/list/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as List } from './List' diff --git a/src/components/main/Main.jsx b/src/components/main/Main.jsx deleted file mode 100644 index bb602ef..0000000 --- a/src/components/main/Main.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' - -const Main = ({ children, is, id, ...rest }) => ( - - {children} - -) - -Main.propTypes = { - children: PropTypes.node, - id: PropTypes.string, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), -} - -Main.defaultProps = { - children: undefined, - id: 'main', - is: 'main', -} - -export default Main diff --git a/src/components/main/Main.md b/src/components/main/Main.md deleted file mode 100644 index c65a3f4..0000000 --- a/src/components/main/Main.md +++ /dev/null @@ -1,17 +0,0 @@ -Simple wrapper around the standard `
` element which adds an ID for use with an access friendly skip link. - -### Example - -Tab onto the example below to see this behaviour in action. - -```jsx - - - Some interceding content, e.g. a header / navigation - -
- This is the main body of my app... disappointing isn't it. -
-``` - -Note that the ID's were set for this example to avoid conflict with the auto-generated styleguide. With no values specificied the components will default to using `main`. diff --git a/src/components/main/SkipLink.jsx b/src/components/main/SkipLink.jsx deleted file mode 100644 index 94337a0..0000000 --- a/src/components/main/SkipLink.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Box } from '../primitives' -import { FillButton } from '../button' - -const SkipLink = ({ children, href, ...rest }) => ( - - - {children || 'Skip to main content'} - - -) - -SkipLink.propTypes = { - children: PropTypes.node, - href: PropTypes.string, -} - -SkipLink.defaultProps = { - children: undefined, - href: '#main', -} - -export default SkipLink diff --git a/src/components/main/__tests__/Main.jsx b/src/components/main/__tests__/Main.jsx deleted file mode 100644 index f32b9da..0000000 --- a/src/components/main/__tests__/Main.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import Main from '../Main' - -const setup = (testProps = {}) => { - const props = Object.assign(testProps) - - const wrapper = shallow(
Lorem ipsum
) - - return { - props, - wrapper, - } -} - -describe('Main', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/main/__tests__/SkipLink.jsx b/src/components/main/__tests__/SkipLink.jsx deleted file mode 100644 index f49d5a3..0000000 --- a/src/components/main/__tests__/SkipLink.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import SkipLink from '../SkipLink' - -const setup = (testProps = {}) => { - const props = Object.assign(testProps) - - const wrapper = shallow() - - return { - props, - wrapper, - } -} - -describe('SkipLink', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/main/__tests__/__snapshots__/Main.jsx.snap b/src/components/main/__tests__/__snapshots__/Main.jsx.snap deleted file mode 100644 index 7d91a29..0000000 --- a/src/components/main/__tests__/__snapshots__/Main.jsx.snap +++ /dev/null @@ -1,13 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Main renders matching snapshot 1`] = ` - - Lorem ipsum - -`; diff --git a/src/components/main/__tests__/__snapshots__/SkipLink.jsx.snap b/src/components/main/__tests__/__snapshots__/SkipLink.jsx.snap deleted file mode 100644 index 5117224..0000000 --- a/src/components/main/__tests__/__snapshots__/SkipLink.jsx.snap +++ /dev/null @@ -1,21 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`SkipLink renders matching snapshot 1`] = ` - - - Skip to main content - - -`; diff --git a/src/components/main/index.js b/src/components/main/index.js deleted file mode 100644 index 41d346c..0000000 --- a/src/components/main/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Main } from './Main' -export { default as SkipLink } from './SkipLink' diff --git a/src/components/primitives/Base.jsx b/src/components/primitives/Base.jsx deleted file mode 100644 index 38899e0..0000000 --- a/src/components/primitives/Base.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import classnames from 'classnames' - -import { withTheme } from '../theme' -import { filterProps } from '../utils' -import { getTailwindClassNames, tailwindProps, propTypes } from '../tailwind' - -const Base = ({ - theme, - is, - children, - className, - focusable, - innerRef, - ...rest -}) => { - const Component = is - - return ( - - {children} - - ) -} - -Base.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - className: PropTypes.string, - innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - ...propTypes, -} - -Base.defaultProps = { - is: 'div', - children: undefined, - className: undefined, - innerRef: undefined, -} - -export { Base as component } -export default withTheme(Base) diff --git a/src/components/primitives/Box.jsx b/src/components/primitives/Box.jsx deleted file mode 100644 index 4aabd49..0000000 --- a/src/components/primitives/Box.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Base from './Base' - -const Box = ({ is, children, inline, inlineBlock, ...rest }) => { - const el = is === 'div' && (inline || inlineBlock) ? 'span' : is - - return ( - - {children} - - ) -} - -Box.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - inline: PropTypes.bool, - inlineBlock: PropTypes.bool, -} - -Box.defaultProps = { - is: 'div', - children: undefined, - inline: false, - inlineBlock: false, -} - -export default Box diff --git a/src/components/primitives/Box.md b/src/components/primitives/Box.md deleted file mode 100644 index d25be56..0000000 --- a/src/components/primitives/Box.md +++ /dev/null @@ -1,15 +0,0 @@ -```jsx - - Box - -``` - -```jsx - - Box inlineBlock - - - - Box inline - -``` diff --git a/src/components/primitives/Flex.jsx b/src/components/primitives/Flex.jsx deleted file mode 100644 index dcd738a..0000000 --- a/src/components/primitives/Flex.jsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Box from './Box' - -const Flex = ({ - is, - children, - inline, - inlineFlex, - col, - reverse, - wrap, - wrapReverse, - ...rest -}) => { - const el = is === 'div' && (inline || inlineFlex) ? 'span' : is - - const flex = [true] - - if (col) { - flex.push(reverse ? 'col-reverse' : 'col') - } else if (reverse) { - flex.push('row-reverse') - } - - if (wrap || wrapReverse) { - flex.push(wrap ? 'wrap' : 'wrap-reverse') - } - - return ( - - {children} - - ) -} - -Flex.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - inline: PropTypes.bool, - inlineFlex: PropTypes.bool, - col: PropTypes.bool, - reverse: PropTypes.bool, - wrap: PropTypes.bool, - wrapReverse: PropTypes.bool, -} - -Flex.defaultProps = { - is: 'div', - children: undefined, - inline: false, - inlineFlex: false, - col: false, - reverse: false, - wrap: false, - wrapReverse: false, -} - -export default Flex diff --git a/src/components/primitives/Flex.md b/src/components/primitives/Flex.md deleted file mode 100644 index a9291a6..0000000 --- a/src/components/primitives/Flex.md +++ /dev/null @@ -1,67 +0,0 @@ -Extends `Box` with helper props to manage flex layouts - -```jsx - - - 1 - - - 2 - - -``` - -Can set the direction by using the `col` prop - -```jsx - - - 1 - - - 2 - - -``` - -Can switch the order using `reverse` - -```jsx - - 1 - 2 - - - - 1 - 2 - -``` - -Use `wrap` or `wrapReverse` to control how overflow content is handled - -```jsx - - - 1 - - - 2 - - - 3 - - - - - - 1 - - - 2 - - - 3 - - -``` diff --git a/src/components/primitives/Image.jsx b/src/components/primitives/Image.jsx deleted file mode 100644 index ad1445f..0000000 --- a/src/components/primitives/Image.jsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Base from './Base' -import Box from './Box' - -import { propTypes } from '../tailwind' - -const Image = ({ is, children, aspectRatio, bg, w, text, ...rest }) => ( - - - - {children && ( - - {children} - - )} - -) - -Image.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - aspectRatio: PropTypes.number, - bg: propTypes.bg, - w: propTypes.w, - text: propTypes.text, -} - -Image.defaultProps = { - is: 'img', - aspectRatio: 1, - children: undefined, - bg: 'gray-light', - w: 'full', - text: undefined, -} - -export default Image diff --git a/src/components/primitives/Image.md b/src/components/primitives/Image.md deleted file mode 100644 index 6c5b4f4..0000000 --- a/src/components/primitives/Image.md +++ /dev/null @@ -1,32 +0,0 @@ -```jsx -Example image -``` - -Displays a placeholder whilst loading, use the `aspectRatio`, `bg` & `text` props to customise how that looks: - -```jsx -Example image that fails to load -``` - -You can pass `children` to the component in order to have content overlay the image which will render inside a `flex` container - -```jsx -Example image - - Hello - - -``` diff --git a/src/components/primitives/Text.jsx b/src/components/primitives/Text.jsx deleted file mode 100644 index 7a5d393..0000000 --- a/src/components/primitives/Text.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Base from './Base' -import { propTypes } from '../tailwind' -import { getAsArray } from '../utils' - -const Text = ({ - children, - is, - bold, - font, - text, - color, - size, - weight, - tight, - loose, - leading, - ...rest -}) => { - const fontValue = [...getAsArray(font), bold ? 'bold' : weight] - const textValue = [...getAsArray(text), color, size] - let leadingValue = leading - if (tight || loose) { - leadingValue = tight ? 'tight' : 'loose' - } - - return ( - !!value)} - text={textValue.filter(value => !!value)} - leading={leadingValue} - {...rest} - > - {children} - - ) -} - -Text.propTypes = { - children: PropTypes.node, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - font: propTypes.font, - text: propTypes.text, - bold: PropTypes.bool, - color: PropTypes.string, - size: PropTypes.string, - weight: PropTypes.string, - leading: propTypes.leading, - tight: PropTypes.bool, - loose: PropTypes.bool, -} - -Text.defaultProps = { - children: undefined, - is: 'span', - font: undefined, - text: undefined, - bold: false, - color: undefined, - size: undefined, - weight: undefined, - leading: 'normal', - tight: false, - loose: false, -} - -export default Text diff --git a/src/components/primitives/Text.md b/src/components/primitives/Text.md deleted file mode 100644 index c002779..0000000 --- a/src/components/primitives/Text.md +++ /dev/null @@ -1,15 +0,0 @@ -```jsx - - - Lorem ipsum dolor sit amet - - , consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore - magna aliqua. - Ut enim ad minim veniam - , quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum - dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident - , sunt in culpa qui officia deserunt mollit anim id est laborum. - -``` diff --git a/src/components/primitives/Touchable.jsx b/src/components/primitives/Touchable.jsx deleted file mode 100644 index a7b32f4..0000000 --- a/src/components/primitives/Touchable.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import React, { PureComponent } from 'react' -import PropTypes from 'prop-types' - -import Base from './Base' - -const focusableElements = ['input', 'select', 'textarea', 'button', 'a'] - -class Touchable extends PureComponent { - constructor(props) { - super(props) - - this.handleKeyPress = this.handleKeyPress.bind(this) - } - - handleKeyPress(e) { - const { onTouch } = this.props - if ( - onTouch && - ((e.key && - (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar')) || - (e.keyCode && (e.keyCode === 13 || e.keyCode === 32))) - ) { - e.preventDefault() - onTouch(e) - } - } - - render() { - const { is, children, tabIndex, disabled, onTouch, ...rest } = this.props - const isSemantic = focusableElements.includes(is) - - return ( - - {children} - - ) - } -} - -Touchable.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - children: PropTypes.node, - disabled: PropTypes.bool, - tabIndex: PropTypes.number, - onTouch: PropTypes.func, -} - -Touchable.defaultProps = { - is: 'button', - children: undefined, - disabled: false, - tabIndex: undefined, - onTouch: undefined, -} - -export default Touchable diff --git a/src/components/primitives/Touchable.md b/src/components/primitives/Touchable.md deleted file mode 100644 index f47b29c..0000000 --- a/src/components/primitives/Touchable.md +++ /dev/null @@ -1,27 +0,0 @@ -```jsx -initialState = { clicked: 0 } -;
- setState({ clicked: state.clicked + 1 })} - m={{ r: 4, b: 4 }} - > - Example image - - - setState({ clicked: state.clicked + 1 })} - m={{ r: 4, b: 4 }} - > - Example image - - -
- You have clicked {state.clicked} {state.clicked === 1 ? 'time' : 'times'} -
-
-``` diff --git a/src/components/primitives/__tests__/Base.jsx b/src/components/primitives/__tests__/Base.jsx deleted file mode 100644 index 35f8f84..0000000 --- a/src/components/primitives/__tests__/Base.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Base } from '../Base' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(Hello World) - - return { - props, - wrapper, - } -} - -describe('Base', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/primitives/__tests__/Box.jsx b/src/components/primitives/__tests__/Box.jsx deleted file mode 100644 index 5fa30dd..0000000 --- a/src/components/primitives/__tests__/Box.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { Box } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({}, testProps) - - const wrapper = shallow(Hello World) - - return { - props, - wrapper, - } -} - -describe('Box', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/primitives/__tests__/Flex.jsx b/src/components/primitives/__tests__/Flex.jsx deleted file mode 100644 index 56873d7..0000000 --- a/src/components/primitives/__tests__/Flex.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { Flex } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({}, testProps) - - const wrapper = shallow(Hello World) - - return { - props, - wrapper, - } -} - -describe('Flex', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/primitives/__tests__/Image.jsx b/src/components/primitives/__tests__/Image.jsx deleted file mode 100644 index c2e2d8f..0000000 --- a/src/components/primitives/__tests__/Image.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { Image } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({ src: '/static/assets/tubgirl.gif' }, testProps) - - const wrapper = shallow() - - return { - props, - wrapper, - } -} - -describe('Image', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/primitives/__tests__/Text.jsx b/src/components/primitives/__tests__/Text.jsx deleted file mode 100644 index f25f031..0000000 --- a/src/components/primitives/__tests__/Text.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { Text } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({}, testProps) - - const wrapper = shallow(Hello World) - - return { - props, - wrapper, - } -} - -describe('Text', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/primitives/__tests__/Touchable.jsx b/src/components/primitives/__tests__/Touchable.jsx deleted file mode 100644 index 7dcd8db..0000000 --- a/src/components/primitives/__tests__/Touchable.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { Touchable } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({}, testProps) - - const wrapper = shallow(Hello World) - - return { - props, - wrapper, - } -} - -describe('Touchable', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/primitives/__tests__/__snapshots__/Base.jsx.snap b/src/components/primitives/__tests__/__snapshots__/Base.jsx.snap deleted file mode 100644 index 7540d98..0000000 --- a/src/components/primitives/__tests__/__snapshots__/Base.jsx.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Base renders matching snapshot 1`] = ` -
- Hello World -
-`; diff --git a/src/components/primitives/__tests__/__snapshots__/Box.jsx.snap b/src/components/primitives/__tests__/__snapshots__/Box.jsx.snap deleted file mode 100644 index 61085a5..0000000 --- a/src/components/primitives/__tests__/__snapshots__/Box.jsx.snap +++ /dev/null @@ -1,11 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Box renders matching snapshot 1`] = ` - - Hello World - -`; diff --git a/src/components/primitives/__tests__/__snapshots__/Flex.jsx.snap b/src/components/primitives/__tests__/__snapshots__/Flex.jsx.snap deleted file mode 100644 index dae54a5..0000000 --- a/src/components/primitives/__tests__/__snapshots__/Flex.jsx.snap +++ /dev/null @@ -1,17 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Flex renders matching snapshot 1`] = ` - - Hello World - -`; diff --git a/src/components/primitives/__tests__/__snapshots__/Image.jsx.snap b/src/components/primitives/__tests__/__snapshots__/Image.jsx.snap deleted file mode 100644 index 00f8036..0000000 --- a/src/components/primitives/__tests__/__snapshots__/Image.jsx.snap +++ /dev/null @@ -1,30 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Image renders matching snapshot 1`] = ` - - - - -`; diff --git a/src/components/primitives/__tests__/__snapshots__/Text.jsx.snap b/src/components/primitives/__tests__/__snapshots__/Text.jsx.snap deleted file mode 100644 index 90a788f..0000000 --- a/src/components/primitives/__tests__/__snapshots__/Text.jsx.snap +++ /dev/null @@ -1,12 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Text renders matching snapshot 1`] = ` - - Hello World - -`; diff --git a/src/components/primitives/__tests__/__snapshots__/Touchable.jsx.snap b/src/components/primitives/__tests__/__snapshots__/Touchable.jsx.snap deleted file mode 100644 index ab2023f..0000000 --- a/src/components/primitives/__tests__/__snapshots__/Touchable.jsx.snap +++ /dev/null @@ -1,13 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Touchable renders matching snapshot 1`] = ` - - Hello World - -`; diff --git a/src/components/primitives/index.js b/src/components/primitives/index.js deleted file mode 100644 index 25bae2a..0000000 --- a/src/components/primitives/index.js +++ /dev/null @@ -1,6 +0,0 @@ -export { default as Base } from './Base' -export { default as Box } from './Box' -export { default as Flex } from './Flex' -export { default as Image } from './Image' -export { default as Text } from './Text' -export { default as Touchable } from './Touchable' diff --git a/src/components/siteWrap/SiteWrap.jsx b/src/components/siteWrap/SiteWrap.jsx deleted file mode 100644 index 05c43a4..0000000 --- a/src/components/siteWrap/SiteWrap.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { Flex, Box } from '../primitives' -import Footer, { component as FooterComponent } from '../footer/Footer' -import { withTheme } from '../theme' - -const SiteWrap = ({ is, theme, children, ...rest }) => { - let footer - - React.Children.forEach(children, child => { - const { type } = child - if ( - type && - (type === Footer || type.displayName === FooterComponent.displayName) - ) { - footer = child - } - }) - - return ( - - - {React.Children.map(children, child => { - if (child === footer) return false - return child - })} - - - {footer} - - - ) -} - -SiteWrap.propTypes = { - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - theme: PropTypes.shape({}).isRequired, - children: PropTypes.node, -} - -SiteWrap.defaultProps = { - is: 'div', - children: undefined, -} - -export { SiteWrap as component } -export default withTheme(SiteWrap) diff --git a/src/components/siteWrap/SiteWrap.md b/src/components/siteWrap/SiteWrap.md deleted file mode 100644 index 0c1690a..0000000 --- a/src/components/siteWrap/SiteWrap.md +++ /dev/null @@ -1,10 +0,0 @@ -By default will fill the full screen size regardless of child content lenght to create a sticky footer. Also applies baseline body text styling. - -### Example - -```jsx - -

Some short page content

-
Footer pinned to the bottom of the screen
-
-``` diff --git a/src/components/siteWrap/__tests__/SiteWrap.jsx b/src/components/siteWrap/__tests__/SiteWrap.jsx deleted file mode 100644 index 03bafb1..0000000 --- a/src/components/siteWrap/__tests__/SiteWrap.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { defaultTheme } from '../../theme' -import { component as SiteWrap } from '../SiteWrap' -import { Header } from '../../header' -import { Footer } from '../../footer' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow( - -
Header
-

Body

-
Footer
-
, - ) - - return { - props, - wrapper, - } -} - -describe('SiteWrap', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup() - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/siteWrap/__tests__/__snapshots__/SiteWrap.jsx.snap b/src/components/siteWrap/__tests__/__snapshots__/SiteWrap.jsx.snap deleted file mode 100644 index 502023f..0000000 --- a/src/components/siteWrap/__tests__/__snapshots__/SiteWrap.jsx.snap +++ /dev/null @@ -1,66 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`SiteWrap renders matching snapshot 1`] = ` - - - - Header - -

- Body -

-
- - - Footer - - -
-`; diff --git a/src/components/siteWrap/index.js b/src/components/siteWrap/index.js deleted file mode 100644 index ccb3c44..0000000 --- a/src/components/siteWrap/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as SiteWrap } from './SiteWrap' diff --git a/src/components/tailwind/getTailwindClassNames.js b/src/components/tailwind/getTailwindClassNames.js deleted file mode 100644 index d7d16c8..0000000 --- a/src/components/tailwind/getTailwindClassNames.js +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-disable react/destructuring-assignment */ -import paramCase from 'param-case' - -import tailwindPropToClassName from './tailwindPropToClassName' -import tailwindProps, { propVariants } from './tailwindProps' - -const hasUpperCase = str => str.toLowerCase() !== str - -export default (props, { ignore = [], prefix } = {}) => - !!props && - Object.keys(props).reduce((twClasses, key) => { - if ( - ignore.includes(key) || - props[key] === false || - typeof props[key] === 'undefined' - ) - return twClasses - - let type = key.indexOf('-') > 0 ? key.substring(0, key.indexOf('-')) : key - const variant = - key.indexOf('-') > 0 ? key.substring(key.indexOf('-') + 1) : key - - if (!tailwindProps.includes(type)) return twClasses - - if (hasUpperCase(type)) { - type = paramCase(type) - } - - if (propVariants.includes(variant)) { - if (variant === 'hocus') { - return [ - ...twClasses, - tailwindPropToClassName(`hover:${type}`, props[key], prefix), - tailwindPropToClassName(`focus:${type}`, props[key], prefix), - ] - } - - return [ - ...twClasses, - tailwindPropToClassName(`${variant}:${type}`, props[key], prefix), - ] - } - - return [...twClasses, tailwindPropToClassName(type, props[key], prefix)] - }, []) diff --git a/src/components/tailwind/index.js b/src/components/tailwind/index.js deleted file mode 100644 index 7a9bdbf..0000000 --- a/src/components/tailwind/index.js +++ /dev/null @@ -1,9 +0,0 @@ -export { default as getColorShade } from './getColorShade' -export { default as getTailwindClassNames } from './getTailwindClassNames' -export { - default as tailwindProps, - propTypes, - propVariants, -} from './tailwindProps' -export { default as tailwindPropToClassName } from './tailwindPropToClassName' -export { default as withTailwind } from './withTailwind' diff --git a/src/components/tailwind/tailwindPropToClassName.js b/src/components/tailwind/tailwindPropToClassName.js deleted file mode 100644 index e2eaae2..0000000 --- a/src/components/tailwind/tailwindPropToClassName.js +++ /dev/null @@ -1,57 +0,0 @@ -const getArray = value => (Array.isArray(value) ? value : [value]) - -const splitProp = prop => { - const utility = prop.substring(prop.indexOf(':') + 1) - - return prop.indexOf(':') !== -1 - ? { utility, variant: prop.substring(0, prop.indexOf(':')) } - : { utility } -} - -const createClassName = ({ utility, value, variant, prefix = '' }) => - `${variant ? `${variant}:` : ''}${prefix}${utility}${ - value !== false && value !== undefined ? `-${value}` : '' - }` - -export default (prop, values, prefix) => { - const propType = typeof values - - if (!propType) return '' - - const { utility, variant } = splitProp(prop) - - if (propType === 'boolean') { - return createClassName({ utility, variant, prefix }) - } - - if (propType === 'object' && !Array.isArray(values)) { - return Object.keys(values).map(key => - createClassName({ - prefix, - utility: `${utility}${key}`, - variant, - value: values[key], - }), - ) - } - - return getArray(values) - .map(value => { - if (value === false || typeof value === 'undefined') { - return '' - } - - if (typeof value === 'boolean') { - return createClassName({ utility, variant, prefix }) - } - - return createClassName({ - prefix, - utility, - variant, - value: utility !== value ? value : undefined, - }) - }) - .filter(value => !!value) - .join(' ') -} diff --git a/src/components/tailwind/tailwindProps.js b/src/components/tailwind/tailwindProps.js deleted file mode 100644 index bc6f1dc..0000000 --- a/src/components/tailwind/tailwindProps.js +++ /dev/null @@ -1,208 +0,0 @@ -/* eslint-disable react/destructuring-assignment */ -import PropTypes from 'prop-types' - -const display = { - block: PropTypes.bool, - hidden: PropTypes.bool, - inline: PropTypes.bool, - inlineBlock: PropTypes.bool, - table: PropTypes.bool, - tableCell: PropTypes.bool, - tableRow: PropTypes.bool, -} - -const floats = { - clearfix: PropTypes.bool, - float: PropTypes.oneOf(['none', 'right', 'left']), -} - -const overflow = { - overflow: PropTypes.oneOf(['hidden', 'auto', 'scroll']), - overflowX: PropTypes.oneOf(['hidden', 'auto', 'scroll']), - overflowY: PropTypes.oneOf(['hidden', 'auto', 'scroll']), -} - -const position = { - absolute: PropTypes.bool, - fixed: PropTypes.bool, - inset: PropTypes.oneOfType([ - PropTypes.oneOf(['0', 'y-0', 'x-0', 'auto']), - PropTypes.number, - ]), - top: PropTypes.number, - bottom: PropTypes.number, - left: PropTypes.number, - right: PropTypes.number, - relative: PropTypes.bool, - static: PropTypes.bool, -} - -const zIndex = { - z: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), -} - -const typography = { - align: PropTypes.string, - break: PropTypes.oneOf(['words', 'normal']), - capitalize: PropTypes.bool, - font: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - italic: PropTypes.bool, - text: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - tracking: PropTypes.string, - leading: PropTypes.string, - lineThrough: PropTypes.bool, - lowercase: PropTypes.bool, - normalCase: PropTypes.bool, - noUnderline: PropTypes.bool, - notItalic: PropTypes.bool, - truncate: PropTypes.bool, - underline: PropTypes.bool, - uppercase: PropTypes.bool, - whitespace: PropTypes.oneOf([ - 'normal', - 'no-wrap', - 'pre', - 'pre-line', - 'pre-wrap', - ]), -} - -const backgrounds = { - bg: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), -} - -const borders = { - border: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.bool, - PropTypes.array, - ]), - borderB: PropTypes.number, - borderL: PropTypes.number, - borderR: PropTypes.number, - borderT: PropTypes.number, - rounded: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedB: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedBl: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedBr: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedL: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedR: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedT: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedTl: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - roundedTr: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), -} - -const flexValues = [ - true, - 'row', - 'row-reverse', - 'col', - 'col-reverse', - 'no-wrap', - 'wrap', - 'wrap-reverse', - 'initial', - 1, - 'auto', - 'none', - 'grow', - 'shrink', - 'grow-0', - 'shrink-0', -] - -const flexAlignment = ['start', 'center', 'end'] - -const flex = { - content: PropTypes.oneOf([...flexAlignment, 'between', 'around']), - flex: PropTypes.oneOfType([ - PropTypes.oneOf(flexValues), - PropTypes.arrayOf(PropTypes.oneOf(flexValues)), - ]), - inlineFlex: PropTypes.bool, - items: PropTypes.oneOf([...flexAlignment, 'stretch', 'baseline']), - self: PropTypes.oneOf([...flexAlignment, 'auto', 'stretch']), - justify: PropTypes.oneOf([...flexAlignment, 'between', 'around']), -} - -const spacingShape = { - t: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - r: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - b: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - l: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - x: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - y: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), -} - -const spacing = { - m: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.shape(spacingShape), - ]), - nm: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.shape(spacingShape), - ]), - p: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.shape(spacingShape), - ]), -} - -const sizing = { - h: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - maxH: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - minH: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - maxW: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - minW: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - w: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), -} - -const misc = { - opacity: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - shadow: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - list: PropTypes.oneOf(['none', 'list', 'decimal']), - outline: PropTypes.string, - appearance: PropTypes.string, - select: PropTypes.string, - pointerEvents: PropTypes.string, - fill: PropTypes.string, -} - -const plugins = { - visuallyHidden: PropTypes.bool, - visuallyHiddenFocusable: PropTypes.bool, - container: PropTypes.bool, -} - -export const propTypes = { - ...display, - ...floats, - ...overflow, - ...position, - ...zIndex, - ...typography, - ...backgrounds, - ...borders, - ...flex, - ...spacing, - ...sizing, - ...misc, - ...plugins, -} - -export const propVariants = ['hover', 'focus', 'hocus', 'sm', 'md', 'lg', 'xl'] - -export default [ - ...Object.keys(propTypes), - ...propVariants.reduce( - (variantProps, variant) => [ - ...variantProps, - ...Object.keys(propTypes).map(prop => `${prop}-${variant}`), - ], - [], - ), -] diff --git a/src/components/tailwind/withTailwind.jsx b/src/components/tailwind/withTailwind.jsx deleted file mode 100644 index f26a049..0000000 --- a/src/components/tailwind/withTailwind.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import classnames from 'classnames' - -import { filterProps } from '../utils' - -import tailwindProps, { propTypes } from './tailwindProps' -import getTailwindClassNames from './getTailwindClassNames' - -const withTailwind = (Component, { ignore = [] } = {}) => { - const WithTailwind = ({ className, ...props }) => ( - !ignore.includes(prop)), - )} - className={classnames([ - getTailwindClassNames(props, { ignore }), - className, - ])} - /> - ) - - WithTailwind.displayName = `WithTailwind(${Component.displayName})` - - WithTailwind.propTypes = { - className: PropTypes.string, - ...propTypes, - } - - WithTailwind.defaultProps = { - className: undefined, - } - - return WithTailwind -} - -export default withTailwind diff --git a/src/components/theme/TailwindTheme.js b/src/components/theme/TailwindTheme.js deleted file mode 100644 index 47bc51d..0000000 --- a/src/components/theme/TailwindTheme.js +++ /dev/null @@ -1,4 +0,0 @@ -import React from 'react' -import defaultTheme from './defaultTheme' - -export default React.createContext(defaultTheme) diff --git a/src/components/theme/TailwindThemeProvider.jsx b/src/components/theme/TailwindThemeProvider.jsx deleted file mode 100644 index f6daa56..0000000 --- a/src/components/theme/TailwindThemeProvider.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import merge from 'lodash.merge' - -import defaultTheme from './defaultTheme' -import TailwindTheme from './TailwindTheme' - -const TailwindThemeProvider = ({ theme, children }) => { - const mergedTheme = merge({}, defaultTheme, theme) - - return ( - - {children} - - ) -} - -TailwindThemeProvider.propTypes = { - theme: PropTypes.shape({}), - children: PropTypes.node, -} - -TailwindThemeProvider.defaultProps = { - theme: {}, - children: undefined, -} - -export default TailwindThemeProvider diff --git a/src/components/theme/index.js b/src/components/theme/index.js deleted file mode 100644 index 327412b..0000000 --- a/src/components/theme/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as defaultTheme } from './defaultTheme' -export { default as TailwindTheme } from './TailwindTheme' -export { default as TailwindThemeProvider } from './TailwindThemeProvider' -export { default as withTheme } from './withTheme' -export { default as useThemeValue } from './useThemeValue' diff --git a/src/components/theme/useThemeValue.js b/src/components/theme/useThemeValue.js deleted file mode 100644 index b3e45ab..0000000 --- a/src/components/theme/useThemeValue.js +++ /dev/null @@ -1,9 +0,0 @@ -import { tailwindPropToClassName } from '../tailwind' - -export default (prefix, value, userClassNames = '') => { - if (userClassNames.includes(prefix)) { - return false - } - - return tailwindPropToClassName(prefix, value) -} diff --git a/src/components/theme/withTheme.jsx b/src/components/theme/withTheme.jsx deleted file mode 100644 index 01dd121..0000000 --- a/src/components/theme/withTheme.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' - -import TailwindTheme from './TailwindTheme' - -const withTheme = Component => { - const WithTheme = props => ( - - {theme => } - - ) - - WithTheme.displayName = `WithTheme(${Component.displayName})` - - return WithTheme -} - -export default withTheme diff --git a/src/components/typography/BrandText.jsx b/src/components/typography/BrandText.jsx deleted file mode 100644 index 7b3d29a..0000000 --- a/src/components/typography/BrandText.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { getColorShade } from '../tailwind' -import { withTheme } from '../theme' - -import Paragraph from './Paragraph' - -const BrandText = ({ theme, textOnly, type, ...rest }) => { - const alertProps = !textOnly - ? { - bg: getColorShade(theme.brandColors[type], '100'), - border: [`l-${theme.accentSize}`, theme.brandColors[type]], - p: { x: theme.spacing.md, y: theme.spacing.sm }, - text: theme.textColors.body, - rounded: 'r', - } - : {} - - return ( - - ) -} - -BrandText.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - textOnly: PropTypes.bool, - type: PropTypes.string.isRequired, -} - -BrandText.defaultProps = { - is: 'p', - textOnly: false, -} - -export default withTheme(BrandText) diff --git a/src/components/typography/DangerText.jsx b/src/components/typography/DangerText.jsx deleted file mode 100644 index c31f3d8..0000000 --- a/src/components/typography/DangerText.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import BrandText from './BrandText' - -/** - * @see See [BrandText](#brandtext) for API. Sets `type` prop to `danger`. - */ -const DangerText = props => - -export default DangerText diff --git a/src/components/typography/DangerText.md b/src/components/typography/DangerText.md deleted file mode 100644 index c15cd01..0000000 --- a/src/components/typography/DangerText.md +++ /dev/null @@ -1,5 +0,0 @@ -```jsx -Simple danger text - -Simple danger text -``` diff --git a/src/components/typography/InfoText.jsx b/src/components/typography/InfoText.jsx deleted file mode 100644 index 5fd0184..0000000 --- a/src/components/typography/InfoText.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import BrandText from './BrandText' - -/** - * @see See [BrandText](#brandtext) for API. Sets `type` prop to `info`. - */ -const InfoText = props => - -export default InfoText diff --git a/src/components/typography/InfoText.md b/src/components/typography/InfoText.md deleted file mode 100644 index cd6a62a..0000000 --- a/src/components/typography/InfoText.md +++ /dev/null @@ -1,5 +0,0 @@ -```jsx -Simple info text - -Simple info text -``` diff --git a/src/components/typography/Paragraph.jsx b/src/components/typography/Paragraph.jsx deleted file mode 100644 index 6541dff..0000000 --- a/src/components/typography/Paragraph.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Text } from '../primitives' -import { propTypes } from '../tailwind' -import { getAsArray } from '../utils' - -const Paragraph = ({ - theme, - children, - is, - size, - lead, - brand, - paragraph, - text, - ...rest -}) => ( - - {children} - -) - -Paragraph.propTypes = { - theme: PropTypes.shape({}).isRequired, - children: PropTypes.node, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - size: PropTypes.number, - lead: PropTypes.bool, - brand: PropTypes.bool, - paragraph: PropTypes.bool, - text: propTypes.text, -} - -Paragraph.defaultProps = { - children: undefined, - is: 'p', - size: undefined, - paragraph: false, - lead: false, - brand: false, - text: undefined, -} - -export { Paragraph as component } -export default withTheme(Paragraph) diff --git a/src/components/typography/Paragraph.md b/src/components/typography/Paragraph.md deleted file mode 100644 index 0c18cac..0000000 --- a/src/components/typography/Paragraph.md +++ /dev/null @@ -1,11 +0,0 @@ -```jsx - - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor - incididunt ut labore et dolore magna aliqua. - - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor - incididunt ut labore et dolore magna aliqua. - -``` diff --git a/src/components/typography/Subtitle.jsx b/src/components/typography/Subtitle.jsx deleted file mode 100644 index 8805547..0000000 --- a/src/components/typography/Subtitle.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import Title from './Title' - -/** - * @see See [Title](#title) for prop type definitions. Sets `subtitle` to `true`. - */ -const Subtitle = props => - -export default Subtitle diff --git a/src/components/typography/Subtitle.md b/src/components/typography/Subtitle.md deleted file mode 100644 index 33e0651..0000000 --- a/src/components/typography/Subtitle.md +++ /dev/null @@ -1,8 +0,0 @@ -```jsx -<Title size={6} subtitle>Subtitle 6 -Subtitle 5 -Subtitle 4 -Subtitle 3 -Subtitle 2 -Subtitle 1 -``` diff --git a/src/components/typography/Title.jsx b/src/components/typography/Title.jsx deleted file mode 100644 index 47282f1..0000000 --- a/src/components/typography/Title.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withTheme } from '../theme' -import { Text } from '../primitives' - -const Title = ({ - theme, - children, - is, - size, - subtitle, - flush, - level, - ...rest -}) => { - const hLevel = level || Math.max(7 - size, 1) - const element = is || `h${hLevel}` - - let ariaProps = {} - - if (!subtitle && element !== 'string' && !/h[1-6]/i.test(element)) { - ariaProps = { - role: 'heading', - 'aria-level': hLevel, - } - } - - return ( - - {children} - - ) -} - -Title.propTypes = { - theme: PropTypes.shape({}).isRequired, - children: PropTypes.node, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - size: PropTypes.number, - subtitle: PropTypes.bool, - flush: PropTypes.bool, - level: PropTypes.number, -} - -Title.defaultProps = { - children: undefined, - is: undefined, - size: 4, - subtitle: false, - flush: false, - level: undefined, -} - -export { Title as component } -export default withTheme(Title) diff --git a/src/components/typography/Title.md b/src/components/typography/Title.md deleted file mode 100644 index 9eff5ac..0000000 --- a/src/components/typography/Title.md +++ /dev/null @@ -1,8 +0,0 @@ -```jsx -Title 6 -Title 5 -Title 4 -Title 3 -Title 2 -Title 1 -``` diff --git a/src/components/typography/WarningText.jsx b/src/components/typography/WarningText.jsx deleted file mode 100644 index 6b69503..0000000 --- a/src/components/typography/WarningText.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import BrandText from './BrandText' - -/** - * @see See [BrandText](#brandtext) for API. Sets `type` prop to `warning`. - */ -const WarningText = props => - -export default WarningText diff --git a/src/components/typography/WarningText.md b/src/components/typography/WarningText.md deleted file mode 100644 index a72fb74..0000000 --- a/src/components/typography/WarningText.md +++ /dev/null @@ -1,5 +0,0 @@ -```jsx -Simple warning text - -Simple warning text -``` diff --git a/src/components/typography/__tests__/Paragraph.jsx b/src/components/typography/__tests__/Paragraph.jsx deleted file mode 100644 index 4bf5001..0000000 --- a/src/components/typography/__tests__/Paragraph.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Paragraph } from '../Paragraph' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow( - Lorem ipsum dolor sit amet, - ) - - return { - props, - wrapper, - } -} - -describe('Paragraph', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ is: 'p' }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/typography/__tests__/Subtitle.jsx b/src/components/typography/__tests__/Subtitle.jsx deleted file mode 100644 index e959f57..0000000 --- a/src/components/typography/__tests__/Subtitle.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { Subtitle } from '..' - -const setup = (testProps = {}) => { - const props = Object.assign({}, testProps) - - const wrapper = shallow(Subtitle) - - return { - props, - wrapper, - } -} - -describe('Subtitle', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ size: 3 }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/typography/__tests__/Title.jsx b/src/components/typography/__tests__/Title.jsx deleted file mode 100644 index 5c69655..0000000 --- a/src/components/typography/__tests__/Title.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' - -import { component as Title } from '../Title' -import { defaultTheme } from '../../theme' - -const setup = (testProps = {}) => { - const props = Object.assign({ theme: defaultTheme }, testProps) - - const wrapper = shallow(Title) - - return { - props, - wrapper, - } -} - -describe('Title', () => { - it('renders matching snapshot', () => { - const { wrapper } = setup({ size: 3 }) - - expect(wrapper).toMatchSnapshot() - }) -}) diff --git a/src/components/typography/__tests__/__snapshots__/Paragraph.jsx.snap b/src/components/typography/__tests__/__snapshots__/Paragraph.jsx.snap deleted file mode 100644 index 1aad371..0000000 --- a/src/components/typography/__tests__/__snapshots__/Paragraph.jsx.snap +++ /dev/null @@ -1,23 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Paragraph renders matching snapshot 1`] = ` - - Lorem ipsum dolor sit amet - -`; diff --git a/src/components/typography/__tests__/__snapshots__/Subtitle.jsx.snap b/src/components/typography/__tests__/__snapshots__/Subtitle.jsx.snap deleted file mode 100644 index 21c8c1b..0000000 --- a/src/components/typography/__tests__/__snapshots__/Subtitle.jsx.snap +++ /dev/null @@ -1,10 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Subtitle renders matching snapshot 1`] = ` - - Subtitle - -`; diff --git a/src/components/typography/__tests__/__snapshots__/Title.jsx.snap b/src/components/typography/__tests__/__snapshots__/Title.jsx.snap deleted file mode 100644 index 7fc591c..0000000 --- a/src/components/typography/__tests__/__snapshots__/Title.jsx.snap +++ /dev/null @@ -1,30 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Title renders matching snapshot 1`] = ` - - Title - -`; diff --git a/src/components/typography/index.js b/src/components/typography/index.js deleted file mode 100644 index 874ac79..0000000 --- a/src/components/typography/index.js +++ /dev/null @@ -1,8 +0,0 @@ -export { default as Subtitle } from './Subtitle' -export { default as Paragraph } from './Paragraph' -export { default as Title } from './Title' - -export { default as BrandText } from './BrandText' -export { default as DangerText } from './DangerText' -export { default as InfoText } from './InfoText' -export { default as WarningText } from './WarningText' diff --git a/src/components/utils/filterProps.js b/src/components/utils/filterProps.js deleted file mode 100644 index 33d499b..0000000 --- a/src/components/utils/filterProps.js +++ /dev/null @@ -1,12 +0,0 @@ -import includes from 'lodash.includes' - -export default (componentProps, filterList) => - Object.keys(componentProps).reduce((newProps, prop) => { - if (includes(filterList, prop)) { - return newProps - } - return { - ...newProps, - [prop]: componentProps[prop], - } - }, {}) diff --git a/src/components/utils/getAsArray.js b/src/components/utils/getAsArray.js deleted file mode 100644 index 19a9d2f..0000000 --- a/src/components/utils/getAsArray.js +++ /dev/null @@ -1,5 +0,0 @@ -export default value => { - if (!value) return [] - - return Array.isArray(value) ? value : [value] -} diff --git a/src/components/utils/getUniqueID.js b/src/components/utils/getUniqueID.js deleted file mode 100644 index 74bd4c0..0000000 --- a/src/components/utils/getUniqueID.js +++ /dev/null @@ -1,3 +0,0 @@ -import uniqueId from 'lodash.uniqueid' - -export default prefix => uniqueId(`${prefix}-`) diff --git a/src/components/utils/index.js b/src/components/utils/index.js deleted file mode 100644 index 1702e51..0000000 --- a/src/components/utils/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as getAsArray } from './getAsArray' -export { default as filterProps } from './filterProps' -export { default as getUniqueID } from './getUniqueID' -export { default as withTransition } from './withTransition' diff --git a/src/components/utils/withTransition.jsx b/src/components/utils/withTransition.jsx deleted file mode 100644 index ac2f0f4..0000000 --- a/src/components/utils/withTransition.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import { Transition } from 'react-transition-group' -import get from 'lodash.get' - -const withTheme = (Component, { inState, ...rest }) => { - const WithTransition = componentProps => ( - - {state => } - - ) - - WithTransition.displayName = `WithTransition(${Component.displayName})` - - return WithTransition -} - -export default withTheme diff --git a/src/container/Container.md b/src/container/Container.md new file mode 100644 index 0000000..ca3ce37 --- /dev/null +++ b/src/container/Container.md @@ -0,0 +1,12 @@ +Makes use of the Tailwind CSS [`container plugin`](https://tailwindcss.com/docs/container). + +### Example + +```jsx +import { Container, Card } from 'tailwind-react-ui' +;<> + + + + +``` diff --git a/src/container/Container.test.tsx b/src/container/Container.test.tsx new file mode 100644 index 0000000..5173399 --- /dev/null +++ b/src/container/Container.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawContainer as Container } from './Container' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(Content) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Container', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ padding: 'lg' }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/container/Container.tsx b/src/container/Container.tsx new file mode 100644 index 0000000..95842c4 --- /dev/null +++ b/src/container/Container.tsx @@ -0,0 +1,35 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface ContainerProps + extends WithTheme, + BoxProps { + leftAlign?: boolean + padding?: boolean +} + +export const RawContainer = ({ + theme, + as, + children, + leftAlign, + padding, + ...rest +}: ContainerProps) => ( + + as={as} + m={!leftAlign ? { x: 'auto' } : undefined} + p={padding ? { x: theme.spacing.md } : undefined} + container + {...rest} + > + {children} +
+) + +export const Container = withTheme(RawContainer) diff --git a/src/container/__snapshots__/Container.test.tsx.snap b/src/container/__snapshots__/Container.test.tsx.snap new file mode 100644 index 0000000..7ffc3ed --- /dev/null +++ b/src/container/__snapshots__/Container.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Container renders matching snapshot 1`] = ` + +
+ Content +
+
+`; diff --git a/src/container/index.ts b/src/container/index.ts new file mode 100644 index 0000000..fe8a50b --- /dev/null +++ b/src/container/index.ts @@ -0,0 +1 @@ +export * from './Container' diff --git a/src/content/Article.md b/src/content/Article.md new file mode 100644 index 0000000..81498b2 --- /dev/null +++ b/src/content/Article.md @@ -0,0 +1,18 @@ +```jsx +import { Text } from 'tailwind-react-primitives' +import { Article, ContentTitle } from 'tailwind-react-ui' +;<> +
+ Article Title + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate + velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. + +
+ +``` diff --git a/src/content/Article.test.tsx b/src/content/Article.test.tsx new file mode 100644 index 0000000..5079b27 --- /dev/null +++ b/src/content/Article.test.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { Article } from './Article' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign(testProps) + + const wrapper = render(
Lorem ipsum...
) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Article', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/content/Article.tsx b/src/content/Article.tsx new file mode 100644 index 0000000..4088715 --- /dev/null +++ b/src/content/Article.tsx @@ -0,0 +1,9 @@ +import type { ContentBlockProps } from './ContentBlock' + +import React from 'react' + +import { ContentBlock } from './ContentBlock' + +export const Article = ({ as = 'article', ...rest }: ContentBlockProps) => ( + +) diff --git a/src/content/Aside.md b/src/content/Aside.md new file mode 100644 index 0000000..cbc0f54 --- /dev/null +++ b/src/content/Aside.md @@ -0,0 +1,18 @@ +```jsx +import { Text } from 'tailwind-react-primitives' +import { Aside, ContentTitle } from 'tailwind-react-ui' +;<> + + +``` diff --git a/src/content/Aside.test.tsx b/src/content/Aside.test.tsx new file mode 100644 index 0000000..a29f028 --- /dev/null +++ b/src/content/Aside.test.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { Aside } from './Aside' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign(testProps) + + const wrapper = render() + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Aside', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/content/Aside.tsx b/src/content/Aside.tsx new file mode 100644 index 0000000..a8e8555 --- /dev/null +++ b/src/content/Aside.tsx @@ -0,0 +1,9 @@ +import type { ContentBlockProps } from './ContentBlock' + +import React from 'react' + +import { ContentBlock } from './ContentBlock' + +export const Aside = ({ as = 'aside', ...rest }: ContentBlockProps) => ( + +) diff --git a/src/components/content/ContentBlock.md b/src/content/ContentBlock.md similarity index 100% rename from src/components/content/ContentBlock.md rename to src/content/ContentBlock.md diff --git a/src/content/ContentBlock.test.tsx b/src/content/ContentBlock.test.tsx new file mode 100644 index 0000000..e20bd54 --- /dev/null +++ b/src/content/ContentBlock.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawContentBlock as ContentBlock } from './ContentBlock' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(Lorem ipsum...) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('ContentBlock', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/content/ContentBlock.tsx b/src/content/ContentBlock.tsx new file mode 100644 index 0000000..e1a6254 --- /dev/null +++ b/src/content/ContentBlock.tsx @@ -0,0 +1,62 @@ +import type { BaseProps, BoxProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { ContentTitleProps } from './ContentTitle' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { getUniqueID } from '../utils' +import { withTheme } from '../theme' + +import { ContentTitle } from './ContentTitle' + +export type ContentBlockProps< + E extends HTMLElement = HTMLDivElement +> = WithTheme & BoxProps + +export const RawContentBlock = ({ + theme, + as = 'section', + id, + children, + ...rest +}: ContentBlockProps) => { + const [contentId, setContentId] = React.useState(id) + + React.useEffect(() => { + if (contentId) return + + setContentId(getUniqueID('content')) + }) + + return ( + as={as} p={theme.spacing.md} aria-labelledby={contentId} {...rest}> + {React.Children.map(children, (child, index) => { + if (!child) return false + + if ( + React.isValidElement(child) && + 'type' in child && + child.type === ContentTitle + ) { + return React.cloneElement(child, { + content: { id: contentId }, + }) + } + + if ( + React.isValidElement(child) && + index === React.Children.count(children) - 1 + ) { + return React.cloneElement(child as any, { + m: { b: 0 }, + }) + } + + return child + })} +
+ ) +} + +export const ContentBlock = withTheme(RawContentBlock) diff --git a/src/components/content/ContentTitle.md b/src/content/ContentTitle.md similarity index 100% rename from src/components/content/ContentTitle.md rename to src/content/ContentTitle.md diff --git a/src/content/ContentTitle.test.tsx b/src/content/ContentTitle.test.tsx new file mode 100644 index 0000000..80eb7e2 --- /dev/null +++ b/src/content/ContentTitle.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawContentTitle as ContentTitle } from './ContentTitle' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(Title) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('ContentBlock', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/content/ContentTitle.tsx b/src/content/ContentTitle.tsx new file mode 100644 index 0000000..8c89f03 --- /dev/null +++ b/src/content/ContentTitle.tsx @@ -0,0 +1,23 @@ +import type { TitleProps } from '../typography' + +import React from 'react' + +import { Title } from '../typography' + +export interface ContentTitleProps + extends Omit { + content?: { + id?: string + } + visuallyHidden?: boolean +} + +export const RawContentTitle = ({ + content: { id = undefined } = {}, + visuallyHidden, + ...rest +}: ContentTitleProps) => ( + +) + +export const ContentTitle = RawContentTitle diff --git a/src/content/Section.md b/src/content/Section.md new file mode 100644 index 0000000..4c8abaa --- /dev/null +++ b/src/content/Section.md @@ -0,0 +1,18 @@ +```jsx +import { Text } from 'tailwind-react-primitives' +import { Section, ContentTitle } from 'tailwind-react-ui' +;<> + <Section> + <ContentTitle size={4}>Section Title</ContentTitle> + <Text as="p"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate + velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. + </Text> + </Section> +</> +``` diff --git a/src/content/Section.test.tsx b/src/content/Section.test.tsx new file mode 100644 index 0000000..5476890 --- /dev/null +++ b/src/content/Section.test.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawSection as Section } from './Section' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign(testProps) + + const wrapper = render(<Section {...props}>Lorem ipsum...</Section>) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Section', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/content/Section.tsx b/src/content/Section.tsx new file mode 100644 index 0000000..2d4d1e4 --- /dev/null +++ b/src/content/Section.tsx @@ -0,0 +1,11 @@ +import type { ContentBlockProps } from './ContentBlock' + +import React from 'react' + +import { ContentBlock } from './ContentBlock' + +export const RawSection = ({ as = 'section', ...rest }: ContentBlockProps) => ( + <ContentBlock as={as} {...rest} /> +) + +export const Section = RawSection diff --git a/src/content/__snapshots__/Article.test.tsx.snap b/src/content/__snapshots__/Article.test.tsx.snap new file mode 100644 index 0000000..bfb6f94 --- /dev/null +++ b/src/content/__snapshots__/Article.test.tsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Article renders matching snapshot 1`] = ` +<DocumentFragment> + <article + aria-labelledby="content-1" + class="p-4" + > + Lorem ipsum... + </article> +</DocumentFragment> +`; diff --git a/src/content/__snapshots__/Aside.test.tsx.snap b/src/content/__snapshots__/Aside.test.tsx.snap new file mode 100644 index 0000000..77b0c5d --- /dev/null +++ b/src/content/__snapshots__/Aside.test.tsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Aside renders matching snapshot 1`] = ` +<DocumentFragment> + <aside + aria-labelledby="content-1" + class="p-4" + > + Lorem ipsum... + </aside> +</DocumentFragment> +`; diff --git a/src/content/__snapshots__/ContentBlock.test.tsx.snap b/src/content/__snapshots__/ContentBlock.test.tsx.snap new file mode 100644 index 0000000..11ed370 --- /dev/null +++ b/src/content/__snapshots__/ContentBlock.test.tsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContentBlock renders matching snapshot 1`] = ` +<DocumentFragment> + <section + aria-labelledby="content-1" + class="p-4" + > + Lorem ipsum... + </section> +</DocumentFragment> +`; diff --git a/src/content/__snapshots__/ContentTitle.test.tsx.snap b/src/content/__snapshots__/ContentTitle.test.tsx.snap new file mode 100644 index 0000000..b6df8bf --- /dev/null +++ b/src/content/__snapshots__/ContentTitle.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContentBlock renders matching snapshot 1`] = ` +<DocumentFragment> + <h1 + class="font-sans font-bold text-3xl text-black leading-tight mb-4" + > + Title + </h1> +</DocumentFragment> +`; diff --git a/src/content/__snapshots__/Section.test.tsx.snap b/src/content/__snapshots__/Section.test.tsx.snap new file mode 100644 index 0000000..a017ce2 --- /dev/null +++ b/src/content/__snapshots__/Section.test.tsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Section renders matching snapshot 1`] = ` +<DocumentFragment> + <section + aria-labelledby="content-1" + class="p-4" + > + Lorem ipsum... + </section> +</DocumentFragment> +`; diff --git a/src/content/index.ts b/src/content/index.ts new file mode 100644 index 0000000..b989290 --- /dev/null +++ b/src/content/index.ts @@ -0,0 +1,5 @@ +export * from './ContentTitle' +export * from './ContentBlock' +export * from './Article' +export * from './Aside' +export * from './Section' diff --git a/src/components/content/readme.md b/src/content/readme.md similarity index 100% rename from src/components/content/readme.md rename to src/content/readme.md diff --git a/src/footer/Footer.md b/src/footer/Footer.md new file mode 100644 index 0000000..67f8da2 --- /dev/null +++ b/src/footer/Footer.md @@ -0,0 +1,21 @@ +Simple wrapper around the `<footer />` element + +### Example + +```jsx +import { Text } from 'tailwind-react-primitives' +import { Footer } from 'tailwind-react-ui' +;<> + <Footer> + <Text as="p">© E Corp {new Date().getFullYear()}</Text> + <Text size="sm"> + Cookies are used by our fictional third party partners to track your + browsing habits, DNA and thoughts. View our{' '} + <Text as="a" href="#footer" text="white" text-hover="purple-dark"> + privacy policy + </Text>{' '} + to attempt to manage your preferences. + </Text> + </Footer> +</> +``` diff --git a/src/footer/Footer.tsx b/src/footer/Footer.tsx new file mode 100644 index 0000000..ec983fb --- /dev/null +++ b/src/footer/Footer.tsx @@ -0,0 +1,33 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' +import { Container } from '../container' + +export type FooterProps<E extends HTMLElement = HTMLDivElement> = WithTheme & + BoxProps<E> + +export const RawFooter = <E extends HTMLElement = HTMLDivElement>({ + theme, + as = 'footer', + children, + ...rest +}: FooterProps<E>) => ( + <Box<E> + as={as} + role="contentinfo" + p={{ t: theme.spacing.lg, b: theme.spacing.xl }} + bg={theme.brandColors.secondary} + text={theme.textColors.on.secondary} + {...rest} + > + <Container padding>{children}</Container> + </Box> +) + +RawFooter.displayName = 'Footer' + +export const Footer = withTheme<FooterProps>(RawFooter) diff --git a/src/footer/__tests__/Footer.test.tsx b/src/footer/__tests__/Footer.test.tsx new file mode 100644 index 0000000..19656c8 --- /dev/null +++ b/src/footer/__tests__/Footer.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawFooter as Footer } from '../Footer' +import { defaultTheme } from '../../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(<Footer {...props}>© E Corp</Footer>) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Footer', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/footer/__tests__/__snapshots__/Footer.test.tsx.snap b/src/footer/__tests__/__snapshots__/Footer.test.tsx.snap new file mode 100644 index 0000000..9863966 --- /dev/null +++ b/src/footer/__tests__/__snapshots__/Footer.test.tsx.snap @@ -0,0 +1,16 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Footer renders matching snapshot 1`] = ` +<DocumentFragment> + <footer + class="pt-8 pb-12 bg-gray-500 text-white" + role="contentinfo" + > + <div + class="mx-auto px-4 container" + > + © E Corp + </div> + </footer> +</DocumentFragment> +`; diff --git a/src/footer/index.ts b/src/footer/index.ts new file mode 100644 index 0000000..bd2c119 --- /dev/null +++ b/src/footer/index.ts @@ -0,0 +1 @@ +export * from './Footer' diff --git a/src/form/Checkbox.md b/src/form/Checkbox.md new file mode 100644 index 0000000..6b58833 --- /dev/null +++ b/src/form/Checkbox.md @@ -0,0 +1,33 @@ +```jsx +import { Checkbox } from 'tailwind-react-ui' +;<> + <Checkbox + checkbox + name="option-input-3" + value="unselected" + label="Unselected" + /> + <Checkbox + checkbox + name="option-input-3" + value="selected" + label="Selected" + defaultChecked + /> + <Checkbox + checkbox + name="option-input-4" + value="unselected" + label="Unselected disabled" + disabled + /> + <Checkbox + checkbox + name="option-input-4" + value="selected" + label="Selected disabled" + disabled + defaultChecked + /> +</> +``` diff --git a/src/form/Checkbox.tsx b/src/form/Checkbox.tsx new file mode 100644 index 0000000..ce8536d --- /dev/null +++ b/src/form/Checkbox.tsx @@ -0,0 +1,10 @@ +import type { OptionInputProps } from './OptionInput' + +import React from 'react' +import { OptionInput } from './OptionInput' + +export type CheckboxProps = Omit<OptionInputProps, 'checkbox' | 'theme'> + +export const Checkbox = (props: CheckboxProps) => ( + <OptionInput {...props} checkbox /> +) diff --git a/src/form/CheckboxList.md b/src/form/CheckboxList.md new file mode 100644 index 0000000..a5d1843 --- /dev/null +++ b/src/form/CheckboxList.md @@ -0,0 +1,39 @@ +```jsx +import { + OptionField, + OptionLabel, + CheckboxList, + Checkbox, +} from 'tailwind-react-ui' +;<> + <OptionField> + <OptionLabel>How should we contact you?</OptionLabel> + <CheckboxList name="contact"> + <Checkbox value="email" label="Email" /> + <Checkbox value="tel" label="Telephone" /> + <Checkbox value="post" label="Post" /> + </CheckboxList> + </OptionField> +</> +``` + +### Inline + +```jsx +import { + OptionField, + OptionLabel, + CheckboxList, + Checkbox, +} from 'tailwind-react-ui' +;<> + <OptionField> + <OptionLabel>Do you agree to us contacting you?</OptionLabel> + <CheckboxList inline name="agree"> + <Checkbox value="yes" label="Yes" /> + <Checkbox value="no" label="No" /> + <Checkbox value="maybe" label="Maybe" /> + </CheckboxList> + </OptionField> +</> +``` diff --git a/src/form/CheckboxList.tsx b/src/form/CheckboxList.tsx new file mode 100644 index 0000000..97ec4e9 --- /dev/null +++ b/src/form/CheckboxList.tsx @@ -0,0 +1,10 @@ +import type { OptionListProps } from './OptionList' + +import React from 'react' +import { OptionList } from './OptionList' + +export type CheckboxListProps = Omit<OptionListProps, 'checkbox' | 'theme'> + +export const CheckboxList = (props: CheckboxListProps) => ( + <OptionList {...props} checkbox /> +) diff --git a/src/components/form/ErrorText.md b/src/form/ErrorText.md similarity index 100% rename from src/components/form/ErrorText.md rename to src/form/ErrorText.md diff --git a/src/form/ErrorText.tsx b/src/form/ErrorText.tsx new file mode 100644 index 0000000..99bf888 --- /dev/null +++ b/src/form/ErrorText.tsx @@ -0,0 +1,19 @@ +import type { DangerTextProps } from '../typography' +import type { WithField } from './Field' + +import React from 'react' + +import { DangerText } from '../typography' + +export type ErrorTextProps = DangerTextProps & WithField + +/** + * @see [DangerText](#dangertext) + */ +export const ErrorText = ({ + field: { errorId = undefined } = {}, + size = 1, + ...rest +}: ErrorTextProps) => ( + <DangerText id={errorId} aria-live="assertive" size={size} {...rest} /> +) diff --git a/src/components/form/Field.md b/src/form/Field.md similarity index 100% rename from src/components/form/Field.md rename to src/form/Field.md diff --git a/src/components/form/__tests__/Field.jsx b/src/form/Field.test.tsx similarity index 52% rename from src/components/form/__tests__/Field.jsx rename to src/form/Field.test.tsx index 8b091f5..a939c63 100644 --- a/src/components/form/__tests__/Field.jsx +++ b/src/form/Field.test.tsx @@ -1,21 +1,23 @@ import React from 'react' -import { shallow } from 'enzyme' +import { render, RenderResult } from '@testing-library/react' -import { component as Field } from '../Field' -import { defaultTheme } from '../../theme' +import { RawField as Field } from './Field' +import { defaultTheme } from '../theme' -import Label from '../Label' -import TextInput from '../TextInput' -import HelpText from '../HelpText' -import ErrorText from '../ErrorText' +import { Label } from './Label' +import { TextInput } from './TextInput' +import { HelpText } from './HelpText' +import { ErrorText } from './ErrorText' -const setup = (testProps = {}) => { +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { const props = Object.assign( { theme: defaultTheme, hasError: true, hasHelp: true }, testProps, ) - const wrapper = shallow( + const wrapper = render( <Field {...props}> <Label>Password</Label> <HelpText> @@ -27,16 +29,18 @@ const setup = (testProps = {}) => { </Field>, ) - return { - props, + return [ wrapper, - } + { + props, + }, + ] } describe('Field', () => { it('renders matching snapshot', () => { - const { wrapper } = setup() + const [{ asFragment }] = setup() - expect(wrapper).toMatchSnapshot() + expect(asFragment()).toMatchSnapshot() }) }) diff --git a/src/form/Field.tsx b/src/form/Field.tsx new file mode 100644 index 0000000..d2e059a --- /dev/null +++ b/src/form/Field.tsx @@ -0,0 +1,76 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' +import { getUniqueID } from '../utils' + +export interface WithField { + field?: { + inputId?: string + invalid?: boolean + disabled?: boolean + labelId?: string + errorId?: string + helpId?: string + } +} + +export interface FieldProps<E extends HTMLElement = HTMLDivElement> + extends WithTheme, + BoxProps<E> { + hasHelp?: boolean + hasError?: boolean + disabled?: boolean + optionList?: boolean +} + +export const RawField = <E extends HTMLElement = HTMLDivElement>({ + id, + theme, + as, + children, + className, + hasHelp, + hasError, + disabled, + optionList, + ...rest +}: FieldProps<E>) => { + const [fieldId, setFieldId] = React.useState(id) + + React.useEffect(() => { + if (fieldId) return + + setFieldId(getUniqueID('field')) + }) + + const fieldProps: WithField['field'] = { + inputId: `${fieldId}-input`, + helpId: hasHelp ? `${fieldId}-help` : undefined, + errorId: hasError ? `${fieldId}-error` : undefined, + labelId: optionList ? `${fieldId}-label` : undefined, + invalid: hasError, + disabled, + } + + return ( + <Box<E> + as={as} + id={fieldId} + m={{ b: theme.spacing.md }} + maxW="sm" + {...rest} + > + {React.Children.map(children, (child) => + React.isValidElement(child) + ? React.cloneElement<WithField>(child, { field: fieldProps }) + : child, + )} + </Box> + ) +} + +export const Field = withTheme<FieldProps>(RawField) diff --git a/src/components/form/HelpText.md b/src/form/HelpText.md similarity index 100% rename from src/components/form/HelpText.md rename to src/form/HelpText.md diff --git a/src/form/HelpText.tsx b/src/form/HelpText.tsx new file mode 100644 index 0000000..5b1a98a --- /dev/null +++ b/src/form/HelpText.tsx @@ -0,0 +1,18 @@ +import type { InfoTextProps } from '../typography' +import type { WithField } from './Field' + +import React from 'react' + +import { InfoText } from '../typography' + +export type HelpTextProps = InfoTextProps & WithField + +/** + * @see [InfoText](#infotext) + */ +export const HelpText = ({ + as, + field: { helpId = undefined } = {}, + size = 1, + ...rest +}: HelpTextProps) => <InfoText as={as} id={helpId} {...rest} /> diff --git a/src/components/form/Label.md b/src/form/Label.md similarity index 100% rename from src/components/form/Label.md rename to src/form/Label.md diff --git a/src/form/Label.test.tsx b/src/form/Label.test.tsx new file mode 100644 index 0000000..bdb2b12 --- /dev/null +++ b/src/form/Label.test.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawLabel as Label } from './Label' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { theme: defaultTheme, htmlFor: 'input' }, + testProps, + ) + + const wrapper = render(<Label {...props}>Username</Label>) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Label', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/form/Label.tsx b/src/form/Label.tsx new file mode 100644 index 0000000..e681dc5 --- /dev/null +++ b/src/form/Label.tsx @@ -0,0 +1,49 @@ +import type { TextProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { WithField } from './Field' + +import React from 'react' + +import { RawText as Text } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface LabelProps<E extends HTMLElement = HTMLLabelElement> + extends WithTheme, + WithField, + TextProps<E> { + hasHelp?: boolean + hasError?: boolean + disabled?: boolean + optionList?: boolean + htmlFor?: string +} + +export const RawLabel = <E extends HTMLElement = HTMLLabelElement>({ + theme, + as = 'label', + id, + field: { + labelId = undefined, + inputId = undefined, + disabled = undefined, + } = {}, + children, + htmlFor, + optionList, + ...rest +}: LabelProps<E>) => ( + <Text<E> + as={as} + id={labelId || id} + inlineBlock + htmlFor={!optionList ? inputId || htmlFor : undefined} + m={{ b: theme.spacing.sm }} + opacity={disabled ? 50 : undefined} + weight="bold" + {...rest} + > + {children} + </Text> +) + +export const Label = withTheme<LabelProps>(RawLabel) diff --git a/src/form/NumberInput.md b/src/form/NumberInput.md new file mode 100644 index 0000000..8b6dbf1 --- /dev/null +++ b/src/form/NumberInput.md @@ -0,0 +1,9 @@ +```jsx +import { Field, Label, NumberInput } from 'tailwind-react-ui' +;<> + <Field> + <Label>Username</Label> + <NumberInput name="number" placeholder="Card Number" /> + </Field> +</> +``` diff --git a/src/form/NumberInput.test.tsx b/src/form/NumberInput.test.tsx new file mode 100644 index 0000000..33f9da5 --- /dev/null +++ b/src/form/NumberInput.test.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawNumberInput as NumberInput } from './NumberInput' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { theme: defaultTheme, name: 'username' }, + testProps, + ) + + const wrapper = render(<NumberInput {...props} />) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('NumberInput', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/form/NumberInput.tsx b/src/form/NumberInput.tsx new file mode 100644 index 0000000..0f56c8b --- /dev/null +++ b/src/form/NumberInput.tsx @@ -0,0 +1,59 @@ +import type { TouchableProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { WithField } from './Field' + +import React from 'react' + +import { RawTouchable as Touchable } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface NumberInputProps<E extends HTMLElement = HTMLInputElement> + extends WithTheme, + WithField, + TouchableProps<E> { + name: string + readOnly?: boolean + invalid?: boolean +} + +export const RawNumberInput = <E extends HTMLElement = HTMLInputElement>({ + theme, + as = 'input', + field = {}, + children, + id, + name, + disabled, + readOnly, + invalid, + ...rest +}: NumberInputProps<E>) => { + const describedBy = [field.errorId, field.helpId].filter((by) => by) + const isInvalid = field.invalid || invalid + + return ( + <Touchable<E> + as={as} + inputMode="numeric" + pattern="[0-9]*" + appearance="none" + bg="white" + rounded={theme.radius} + text={theme.textColors.body} + p={{ x: theme.spacing.md, y: theme.spacing.sm }} + m={{ b: theme.spacing.sm }} + border={!isInvalid ? true : [true, theme.brandColors.danger]} + w="full" + leading="tight" + id={field.inputId || id || name} + name={name} + disabled={field.disabled || disabled} + readOnly={readOnly} + aria-invalid={isInvalid || undefined} + aria-describedby={describedBy.length ? describedBy.join(' ') : undefined} + {...rest} + /> + ) +} + +export const NumberInput = withTheme<NumberInputProps>(RawNumberInput) diff --git a/src/components/form/OptionField.md b/src/form/OptionField.md similarity index 100% rename from src/components/form/OptionField.md rename to src/form/OptionField.md diff --git a/src/form/OptionField.tsx b/src/form/OptionField.tsx new file mode 100644 index 0000000..7005fa9 --- /dev/null +++ b/src/form/OptionField.tsx @@ -0,0 +1,13 @@ +import type { FieldProps } from './Field' + +import React from 'react' +import { withTheme } from '../theme' +import { RawField } from './Field' + +export type OptionFieldProps = FieldProps<HTMLFieldSetElement> + +export const RawOptionField = (props: OptionFieldProps) => ( + <RawField<HTMLFieldSetElement> {...props} as="fieldset" optionList /> +) + +export const OptionField = withTheme<OptionFieldProps>(RawOptionField) diff --git a/src/components/form/OptionInput.md b/src/form/OptionInput.md similarity index 100% rename from src/components/form/OptionInput.md rename to src/form/OptionInput.md diff --git a/src/form/OptionInput.test.tsx b/src/form/OptionInput.test.tsx new file mode 100644 index 0000000..5818d9a --- /dev/null +++ b/src/form/OptionInput.test.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawOptionInput as OptionInput } from './OptionInput' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { theme: defaultTheme, name: 'test', value: 'test-1', label: 'Test?' }, + testProps, + ) + + const wrapper = render(<OptionInput {...props} />) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('OptionInput', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ defaultChecked: true }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/form/OptionInput.tsx b/src/form/OptionInput.tsx new file mode 100644 index 0000000..8aeb906 --- /dev/null +++ b/src/form/OptionInput.tsx @@ -0,0 +1,135 @@ +import type { TouchableProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { + RawTouchable as Touchable, + RawFlex as Flex, + RawBox as Box, + Svg, +} from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +import { Label } from './Label' + +export interface OptionInputProps<E extends HTMLElement = HTMLLabelElement> + extends Omit<TouchableProps<E>, 'onChange'>, + WithTheme { + name: string + value: string + label: string + hideLabel?: boolean + defaultChecked?: boolean + checked?: boolean + onChange?: (e: React.ChangeEvent<HTMLElement>) => void + checkbox?: boolean + id?: string +} + +export const RawOptionInput = <E extends HTMLElement = HTMLLabelElement>({ + defaultChecked, + checked: externalChecked, + theme, + name, + value, + label, + hideLabel, + checkbox, + id, + onChange, + ...rest +}: OptionInputProps<E>) => { + const [checked, setChecked] = React.useState( + defaultChecked || externalChecked, + ) + const inputRef = React.useRef<HTMLInputElement | null>(null) + + React.useEffect(() => { + if (externalChecked === undefined) return + + setChecked(externalChecked) + }, [externalChecked]) + + const handleChange = React.useCallback( + (e: React.MouseEvent<E> | React.KeyboardEvent<E>) => { + if (externalChecked === undefined) { + setChecked((currentState) => (checkbox ? !currentState : true)) + } + + if (onChange && inputRef.current) + onChange({ + ...e, + target: inputRef.current, + }) + + e.preventDefault() + }, + [], + ) + + return ( + <Touchable<E> + as={Label} + flex + items="center" + onTouch={handleChange} + {...rest} + > + <Box<HTMLInputElement> + as="input" + id={id} + visuallyHidden + name={name} + type={checkbox ? 'checkbox' : 'radio'} + value={value} + checked={checked} + tabIndex={-1} + innerRef={inputRef} + onChange={() => {}} + /> + <Flex + items="center" + justify="center" + inlineBlock + rounded={checkbox ? theme.radius : 'full'} + h={4} + w={4} + border={[true, checked ? theme.brandColors.primary : false].filter( + (prop) => !!prop, + )} + bg={checkbox && checked ? theme.brandColors.primary : undefined} + m={{ r: theme.spacing.sm }} + > + {checked && + (checkbox ? ( + <Svg + as="svg" + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + h={3} + w={3} + text="white" + fill="current" + > + <path d="M0 0h24v24H0z" fill="none" /> + <path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" /> + </Svg> + ) : ( + <Box + inlineBlock + rounded="full" + h={2} + w={2} + bg={theme.brandColors.primary} + /> + ))} + </Flex> + <Box inlineBlock visuallyHidden={hideLabel} leading="tight" font="normal"> + {label} + </Box> + </Touchable> + ) +} + +export const OptionInput = withTheme<OptionInputProps>(RawOptionInput) diff --git a/src/components/form/OptionLabel.md b/src/form/OptionLabel.md similarity index 100% rename from src/components/form/OptionLabel.md rename to src/form/OptionLabel.md diff --git a/src/form/OptionLabel.tsx b/src/form/OptionLabel.tsx new file mode 100644 index 0000000..74c6f42 --- /dev/null +++ b/src/form/OptionLabel.tsx @@ -0,0 +1,13 @@ +import type { LabelProps } from './Label' + +import React from 'react' +import { withTheme } from '../theme' +import { RawLabel as Label } from './Label' + +export type OptionLabelProps = LabelProps<HTMLLegendElement> + +export const RawOptionLabel = (props: OptionLabelProps) => ( + <Label<HTMLLegendElement> {...props} as="legend" optionList /> +) + +export const OptionLabel = withTheme<OptionLabelProps>(RawOptionLabel) diff --git a/src/components/form/OptionList.md b/src/form/OptionList.md similarity index 100% rename from src/components/form/OptionList.md rename to src/form/OptionList.md diff --git a/src/form/OptionList.test.tsx b/src/form/OptionList.test.tsx new file mode 100644 index 0000000..9ff925a --- /dev/null +++ b/src/form/OptionList.test.tsx @@ -0,0 +1,36 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawOptionList as OptionList } from './OptionList' +import { defaultTheme } from '../theme' + +import { Radio } from '.' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign({ theme: defaultTheme, name: 'test' }, testProps) + + const wrapper = render( + <OptionList {...props}> + <Radio name="option-input" value="yes" label="Yes" /> + <Radio name="option-input" value="no" label="No" /> + <Radio name="option-input" value="maybe" label="Maybe" /> + </OptionList>, + ) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('OptionList', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/form/OptionList.tsx b/src/form/OptionList.tsx new file mode 100644 index 0000000..ef1e86e --- /dev/null +++ b/src/form/OptionList.tsx @@ -0,0 +1,74 @@ +import type { ListProps } from '../list' +import type { WithTheme } from '../theme' +import type { WithField } from './Field' + +import React from 'react' + +import { RawList as List } from '../list' +import { withTheme } from '../theme' + +export interface OptionListProps<E extends HTMLElement = HTMLUListElement> + extends WithTheme, + WithField, + ListProps<E> { + name: string + checkbox?: boolean + invalid?: boolean +} + +export const RawOptionList = <E extends HTMLElement = HTMLUListElement>({ + theme, + children, + name, + checkbox, + field = {}, + invalid, + ...rest +}: OptionListProps<E>) => { + const [checked, setChecked] = React.useState<string[]>([]) + + const handleChange = React.useCallback( + (e: React.ChangeEvent<HTMLInputElement>) => { + const { value } = e.target + + if (checkbox) { + return setChecked( + checked.includes(value) + ? checked.filter((checkedVal) => checkedVal !== value) + : [...checked, value], + ) + } + + return setChecked([value]) + }, + [checked], + ) + + const describedBy = [field.labelId, field.errorId, field.helpId].filter( + Boolean, + ) + const isInvalid = field.invalid || invalid + + return ( + <List<E> theme={theme} m={{ b: 0 }} {...rest}> + {React.Children.map(children, (child) => { + if (!child || !React.isValidElement(child)) return child + + const value = child.props && child.props.value + + return React.cloneElement(child, { + 'id': `${field.inputId}-${value}`, + 'name': checkbox ? `${name}[]` : name, + 'checked': checked.includes(value), + 'onChange': handleChange, + 'aria-invalid': isInvalid || undefined, + 'aria-describedby': describedBy.length + ? describedBy.join(' ') + : undefined, + }) + })} + </List> + ) +} + +export const OptionList = withTheme<OptionListProps>(RawOptionList) diff --git a/src/form/Radio.md b/src/form/Radio.md new file mode 100644 index 0000000..19b9c5d --- /dev/null +++ b/src/form/Radio.md @@ -0,0 +1,20 @@ +```jsx +import { Radio } from 'tailwind-react-ui' +;<> + <Radio name="option-input" value="unselected" label="Unselected" /> + <Radio name="option-input" value="selected" label="Selected" defaultChecked /> + <Radio + name="option-input-2" + value="unselected" + label="Unselected disabled" + disabled + /> + <Radio + name="option-input-2" + value="selected" + label="Selected disabled" + disabled + defaultChecked + /> +</> +``` diff --git a/src/form/Radio.tsx b/src/form/Radio.tsx new file mode 100644 index 0000000..95a0384 --- /dev/null +++ b/src/form/Radio.tsx @@ -0,0 +1,10 @@ +import type { OptionInputProps } from './OptionInput' + +import React from 'react' +import { OptionInput } from './OptionInput' + +export type RadioProps = Omit<OptionInputProps, 'checkbox' | 'theme'> + +export const Radio = (props: RadioProps) => ( + <OptionInput {...props} checkbox={false} /> +) diff --git a/src/form/RadioList.md b/src/form/RadioList.md new file mode 100644 index 0000000..d7f83c3 --- /dev/null +++ b/src/form/RadioList.md @@ -0,0 +1,41 @@ +```jsx +import { + OptionField, + OptionLabel, + RadioList, + Radio, + Checkbox, +} from 'tailwind-react-ui' +;<> + <OptionField> + <OptionLabel>Do you agree to us contacting you?</OptionLabel> + <RadioList name="agree"> + <Radio value="yes" label="Yes" /> + <Radio value="no" label="No" /> + <Radio value="maybe" label="Maybe" /> + </RadioList> + </OptionField> +</> +``` + +#### Inline list + +```jsx +import { + OptionField, + OptionLabel, + RadioList, + Radio, + Checkbox, +} from 'tailwind-react-ui' +;<> + <OptionField> + <OptionLabel>Do you agree to us contacting you?</OptionLabel> + <RadioList inline name="agree"> + <Radio value="yes" label="Yes" /> + <Radio value="no" label="No" /> + <Radio value="maybe" label="Maybe" /> + </RadioList> + </OptionField> +</> +``` diff --git a/src/form/RadioList.tsx b/src/form/RadioList.tsx new file mode 100644 index 0000000..a8db489 --- /dev/null +++ b/src/form/RadioList.tsx @@ -0,0 +1,10 @@ +import type { OptionListProps } from './OptionList' + +import React from 'react' +import { OptionList } from './OptionList' + +export type RadioListProps = Omit<OptionListProps, 'checkbox' | 'theme'> + +export const RadioList = (props: RadioListProps) => ( + <OptionList {...props} checkbox={false} /> +) diff --git a/src/form/Select.md b/src/form/Select.md new file mode 100644 index 0000000..6c44221 --- /dev/null +++ b/src/form/Select.md @@ -0,0 +1,17 @@ +```jsx +import { Field, OptionLabel, Label, Select } from 'tailwind-react-ui' +;<> + <Field> + <Label>Favourite Ninja Turtle</Label> + <Select + name="select" + options={[ + { value: 'leo', label: 'Leonardo' }, + { value: 'mike', label: 'Michelangelo' }, + { value: 'don', label: 'Donatello' }, + { value: 'raph', label: 'Raphael' }, + ]} + /> + </Field> +</> +``` diff --git a/src/form/Select.test.tsx b/src/form/Select.test.tsx new file mode 100644 index 0000000..a18250e --- /dev/null +++ b/src/form/Select.test.tsx @@ -0,0 +1,38 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawSelect as Select } from './Select' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { + theme: defaultTheme, + name: 'username', + options: [ + { value: 'one', label: 'single' }, + { value: 'two', label: 'double' }, + ], + }, + testProps, + ) + + const wrapper = render(<Select {...props} />) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('TextInput', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/components/form/Select.jsx b/src/form/Select.tsx similarity index 52% rename from src/components/form/Select.jsx rename to src/form/Select.tsx index 34fc670..aaf86ce 100644 --- a/src/components/form/Select.jsx +++ b/src/form/Select.tsx @@ -1,11 +1,17 @@ +import type { TouchableProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { WithField } from './Field' + import React from 'react' -import PropTypes from 'prop-types' +import { Box, RawTouchable as Touchable } from 'tailwind-react-primitives' import { withTheme } from '../theme' -import { Box, Touchable } from '../primitives' // https://material.io/tools/icons/?style=baseline -const ExpandMore = props => ( +const ExpandMore: React.FC<Omit< + React.SVGProps<SVGSVGElement>, + 'aria-relevant' // TODO: Types of property 'aria-relevant' are incompatible. Why? +>> = (props) => ( <svg xmlns="http://www.w3.org/2000/svg" width="24" @@ -18,29 +24,37 @@ const ExpandMore = props => ( </svg> ) -const Select = ({ +export interface SelectProps<E extends HTMLElement = HTMLSelectElement> + extends WithTheme, + WithField, + TouchableProps<E> { + invalid?: boolean + options: { value: string; label: React.ReactNode }[] + icon?: React.ElementType +} + +export const RawSelect = <E extends HTMLElement = HTMLSelectElement>({ theme, - is, - field, + as = 'select', + field = {}, children, id, name, - type, disabled, readOnly, invalid, - placeholder, - options, - icon, + placeholder = 'Please select', + options = [], + icon = ExpandMore, ...rest -}) => { - const describedBy = [field.errorId, field.helpId].filter(by => by) +}: SelectProps<E>) => { + const describedBy = [field.errorId, field.helpId].filter((by) => by) const isInvalid = field.invalid || invalid return ( <Box relative m={{ b: theme.spacing.sm }}> - <Touchable - is={is} + <Touchable<E> + as={as} appearance="none" bg="white" rounded={theme.radius} @@ -51,7 +65,6 @@ const Select = ({ leading="tight" id={field.inputId || id || name} name={name} - type={type} disabled={field.disabled || disabled} readOnly={readOnly} aria-invalid={isInvalid || undefined} @@ -61,7 +74,7 @@ const Select = ({ {...rest} > {!!placeholder && <option value="">{placeholder}</option>} - {options.map(option => ( + {options.map((option) => ( <option key={`${name}-${option.value}`} value={option.value}> {option.label} </option> @@ -76,54 +89,10 @@ const Select = ({ p={{ x: theme.spacing.sm }} pointerEvents="none" > - <Box is={icon} h={6} w={6} /> + <Box as={icon} h={6} w={6} /> </Box> </Box> ) } -Select.propTypes = { - theme: PropTypes.shape({}).isRequired, - is: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]), - field: PropTypes.shape({ - inputId: PropTypes.string, - invalid: PropTypes.bool, - disabled: PropTypes.bool, - }), - children: PropTypes.node, - id: PropTypes.string, - name: PropTypes.string.isRequired, - type: PropTypes.string, - disabled: PropTypes.bool, - readOnly: PropTypes.bool, - invalid: PropTypes.bool, - placeholder: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - icon: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.func, - PropTypes.object, - ]), - options: PropTypes.arrayOf( - PropTypes.shape({ - label: PropTypes.string, - value: PropTypes.string, - }), - ), -} - -Select.defaultProps = { - is: 'select', - field: {}, - children: undefined, - id: undefined, - type: 'text', - disabled: false, - readOnly: false, - invalid: false, - placeholder: 'Please select', - icon: ExpandMore, - options: [], -} - -export { Select as component } -export default withTheme(Select) +export const Select = withTheme<SelectProps>(RawSelect) diff --git a/src/form/TextArea.md b/src/form/TextArea.md new file mode 100644 index 0000000..0848520 --- /dev/null +++ b/src/form/TextArea.md @@ -0,0 +1,9 @@ +```jsx +import { Field, Label, TextArea } from 'tailwind-react-ui' +;<> + <Field> + <Label>Comments</Label> + <TextArea name="comments" /> + </Field> +</> +``` diff --git a/src/form/TextArea.test.tsx b/src/form/TextArea.test.tsx new file mode 100644 index 0000000..dd15ae4 --- /dev/null +++ b/src/form/TextArea.test.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawTextArea as TextArea } from './TextArea' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { theme: defaultTheme, name: 'username' }, + testProps, + ) + + const wrapper = render(<TextArea {...props} />) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('TextArea', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/form/TextArea.tsx b/src/form/TextArea.tsx new file mode 100644 index 0000000..999ac68 --- /dev/null +++ b/src/form/TextArea.tsx @@ -0,0 +1,55 @@ +import type { TouchableProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { WithField } from './Field' + +import React from 'react' + +import { RawTouchable as Touchable } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface TextAreaProps<E extends HTMLElement = HTMLTextAreaElement> + extends WithTheme, + WithField, + TouchableProps<E> { + invalid?: boolean +} + +export const RawTextArea = <E extends HTMLElement = HTMLTextAreaElement>({ + theme, + as = 'textarea', + field = {}, + children, + id, + name, + disabled, + readOnly, + invalid, + ...rest +}: TextAreaProps<E>) => { + const describedBy = [field.errorId, field.helpId].filter((by) => by) + const isInvalid = field.invalid || invalid + + return ( + <Touchable<E> + as={as} + appearance="none" + bg="white" + rounded={theme.radius} + text={theme.textColors.body} + p={{ x: theme.spacing.md, y: theme.spacing.sm }} + m={{ b: theme.spacing.sm }} + border={!isInvalid ? true : [true, theme.brandColors.danger]} + w="full" + leading="tight" + id={field.inputId || id || name} + name={name} + disabled={field.disabled || disabled} + readOnly={readOnly} + aria-invalid={isInvalid || undefined} + aria-describedby={describedBy.length ? describedBy.join(' ') : undefined} + {...rest} + /> + ) +} + +export const TextArea = withTheme<TextAreaProps>(RawTextArea) diff --git a/src/form/TextInput.md b/src/form/TextInput.md new file mode 100644 index 0000000..f9392ea --- /dev/null +++ b/src/form/TextInput.md @@ -0,0 +1,9 @@ +```jsx +import { Field, OptionLabel, Label, TextInput } from 'tailwind-react-ui' +;<> + <Field> + <Label>Name</Label> + <TextInput name="name" /> + </Field> +</> +``` diff --git a/src/form/TextInput.test.tsx b/src/form/TextInput.test.tsx new file mode 100644 index 0000000..f0ba91a --- /dev/null +++ b/src/form/TextInput.test.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawTextInput as TextInput } from './TextInput' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { theme: defaultTheme, name: 'username' }, + testProps, + ) + + const wrapper = render(<TextInput {...props} />) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('TextInput', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/form/TextInput.tsx b/src/form/TextInput.tsx new file mode 100644 index 0000000..5742862 --- /dev/null +++ b/src/form/TextInput.tsx @@ -0,0 +1,57 @@ +import type { TouchableProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { WithField } from './Field' + +import React from 'react' + +import { RawTouchable as Touchable } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface TextInputProps<E extends HTMLElement = HTMLInputElement> + extends WithTheme, + WithField, + TouchableProps<E> { + invalid?: boolean +} + +export const RawTextInput = <E extends HTMLElement = HTMLInputElement>({ + theme, + as, + field = {}, + children, + id, + name, + type = 'text', + disabled, + readOnly, + invalid, + ...rest +}: TextInputProps<E>) => { + const describedBy = [field.errorId, field.helpId].filter((by) => by) + const isInvalid = field.invalid || invalid + + return ( + <Touchable<E> + as={as} + appearance="none" + bg="white" + rounded={theme.radius} + text={theme.textColors.body} + p={{ x: theme.spacing.md, y: theme.spacing.sm }} + m={{ b: theme.spacing.sm }} + border={!isInvalid ? true : [true, theme.brandColors.danger]} + w="full" + leading="tight" + id={field.inputId || id || name} + name={name} + type={type} + disabled={field.disabled || disabled} + readOnly={readOnly} + aria-invalid={isInvalid || undefined} + aria-describedby={describedBy.length ? describedBy.join(' ') : undefined} + {...rest} + /> + ) +} + +export const TextInput = withTheme<TextInputProps>(RawTextInput) diff --git a/src/form/__snapshots__/Field.test.tsx.snap b/src/form/__snapshots__/Field.test.tsx.snap new file mode 100644 index 0000000..3a08022 --- /dev/null +++ b/src/form/__snapshots__/Field.test.tsx.snap @@ -0,0 +1,38 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Field renders matching snapshot 1`] = ` +<DocumentFragment> + <div + class="mb-4 max-w-sm" + id="field-1" + > + <label + class="font-bold leading-normal inline-block mb-2" + for="field-1-input" + > + Password + </label> + <p + class="text-gray-900 leading-normal mb-2 rounded-r bg-teal-100 border-l-4 border-teal-400 px-4 py-2" + id="field-1-help" + > + Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji. + </p> + <button + aria-describedby="field-1-error field-1-help" + aria-invalid="true" + class="select-none cursor-pointer appearance-none bg-white rounded text-gray-900 px-4 py-2 mb-2 border border-red-400 w-full leading-tight focus:outline-none focus:shadow-outline" + id="field-1-input" + name="password" + type="password" + /> + <p + aria-live="assertive" + class="text-base text-gray-900 leading-normal mb-2 rounded-r bg-red-100 border-l-4 border-red-400 px-4 py-2" + id="field-1-error" + > + Please complete + </p> + </div> +</DocumentFragment> +`; diff --git a/src/form/__snapshots__/Label.test.tsx.snap b/src/form/__snapshots__/Label.test.tsx.snap new file mode 100644 index 0000000..c794c1b --- /dev/null +++ b/src/form/__snapshots__/Label.test.tsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Label renders matching snapshot 1`] = ` +<DocumentFragment> + <label + class="font-bold leading-normal inline-block mb-2" + for="input" + > + Username + </label> +</DocumentFragment> +`; diff --git a/src/form/__snapshots__/NumberInput.test.tsx.snap b/src/form/__snapshots__/NumberInput.test.tsx.snap new file mode 100644 index 0000000..6078bcf --- /dev/null +++ b/src/form/__snapshots__/NumberInput.test.tsx.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NumberInput renders matching snapshot 1`] = ` +<DocumentFragment> + <input + class="select-none cursor-pointer appearance-none bg-white rounded text-gray-900 px-4 py-2 mb-2 border w-full leading-tight focus:outline-none focus:shadow-outline" + id="username" + inputmode="numeric" + name="username" + pattern="[0-9]*" + /> +</DocumentFragment> +`; diff --git a/src/form/__snapshots__/OptionInput.test.tsx.snap b/src/form/__snapshots__/OptionInput.test.tsx.snap new file mode 100644 index 0000000..f924815 --- /dev/null +++ b/src/form/__snapshots__/OptionInput.test.tsx.snap @@ -0,0 +1,32 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`OptionInput renders matching snapshot 1`] = ` +<DocumentFragment> + <label + class="font-bold leading-normal inline-block mb-2 select-none cursor-pointer flex items-center focus:outline-none focus:shadow-outline" + role="button" + tabindex="0" + > + <input + checked="" + class="visually-hidden" + name="test" + tabindex="-1" + type="radio" + value="test-1" + /> + <span + class="inline-block flex items-center justify-center rounded-full h-4 w-4 border border-blue-400 mr-2" + > + <span + class="inline-block rounded-full h-2 w-2 bg-blue-400" + /> + </span> + <span + class="inline-block leading-tight font-normal" + > + Test? + </span> + </label> +</DocumentFragment> +`; diff --git a/src/form/__snapshots__/OptionList.test.tsx.snap b/src/form/__snapshots__/OptionList.test.tsx.snap new file mode 100644 index 0000000..021c829 --- /dev/null +++ b/src/form/__snapshots__/OptionList.test.tsx.snap @@ -0,0 +1,88 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`OptionList renders matching snapshot 1`] = ` +<DocumentFragment> + <ul + class="mb-0" + > + <li + class="mb mr" + > + <label + class="font-bold leading-normal inline-block mb-2 select-none cursor-pointer flex items-center focus:outline-none focus:shadow-outline" + role="button" + tabindex="0" + > + <input + class="visually-hidden" + id="undefined-yes" + name="test" + tabindex="-1" + type="radio" + value="yes" + /> + <span + class="inline-block flex items-center justify-center rounded-full h-4 w-4 border mr-2" + /> + <span + class="inline-block leading-tight font-normal" + > + Yes + </span> + </label> + </li> + <li + class="mb mr" + > + <label + class="font-bold leading-normal inline-block mb-2 select-none cursor-pointer flex items-center focus:outline-none focus:shadow-outline" + role="button" + tabindex="0" + > + <input + class="visually-hidden" + id="undefined-no" + name="test" + tabindex="-1" + type="radio" + value="no" + /> + <span + class="inline-block flex items-center justify-center rounded-full h-4 w-4 border mr-2" + /> + <span + class="inline-block leading-tight font-normal" + > + No + </span> + </label> + </li> + <li + class="mb mr" + > + <label + class="font-bold leading-normal inline-block mb-2 select-none cursor-pointer flex items-center focus:outline-none focus:shadow-outline" + role="button" + tabindex="0" + > + <input + class="visually-hidden" + id="undefined-maybe" + name="test" + tabindex="-1" + type="radio" + value="maybe" + /> + <span + class="inline-block flex items-center justify-center rounded-full h-4 w-4 border mr-2" + /> + <span + class="inline-block leading-tight font-normal" + > + Maybe + </span> + </label> + </li> + </ul> +</DocumentFragment> +`; diff --git a/src/form/__snapshots__/Select.test.tsx.snap b/src/form/__snapshots__/Select.test.tsx.snap new file mode 100644 index 0000000..d19abd8 --- /dev/null +++ b/src/form/__snapshots__/Select.test.tsx.snap @@ -0,0 +1,50 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`TextInput renders matching snapshot 1`] = ` +<DocumentFragment> + <div + class="relative mb-2" + > + <select + class="select-none cursor-pointer appearance-none bg-white rounded text-gray-900 pl-4 pr-8 py-2 border w-full leading-tight focus:outline-none focus:shadow-outline" + id="username" + name="username" + > + <option + value="" + > + Please select + </option> + <option + value="one" + > + single + </option> + <option + value="two" + > + double + </option> + </select> + <div + class="absolute inset-y-0 right-0 flex items-center px-2 pointer-events-none" + > + <svg + class="h-6 w-6" + height="24" + viewBox="0 0 24 24" + width="24" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" + /> + <path + d="M0 0h24v24H0z" + fill="none" + /> + </svg> + </div> + </div> +</DocumentFragment> +`; diff --git a/src/form/__snapshots__/TextArea.test.tsx.snap b/src/form/__snapshots__/TextArea.test.tsx.snap new file mode 100644 index 0000000..6ae584f --- /dev/null +++ b/src/form/__snapshots__/TextArea.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`TextArea renders matching snapshot 1`] = ` +<DocumentFragment> + <textarea + class="select-none cursor-pointer appearance-none bg-white rounded text-gray-900 px-4 py-2 mb-2 border w-full leading-tight focus:outline-none focus:shadow-outline" + id="username" + name="username" + /> +</DocumentFragment> +`; diff --git a/src/form/__snapshots__/TextInput.test.tsx.snap b/src/form/__snapshots__/TextInput.test.tsx.snap new file mode 100644 index 0000000..5fdb699 --- /dev/null +++ b/src/form/__snapshots__/TextInput.test.tsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`TextInput renders matching snapshot 1`] = ` +<DocumentFragment> + <button + class="select-none cursor-pointer appearance-none bg-white rounded text-gray-900 px-4 py-2 mb-2 border w-full leading-tight focus:outline-none focus:shadow-outline" + id="username" + name="username" + type="text" + /> +</DocumentFragment> +`; diff --git a/src/form/index.ts b/src/form/index.ts new file mode 100644 index 0000000..7e82ec4 --- /dev/null +++ b/src/form/index.ts @@ -0,0 +1,15 @@ +export * from './Checkbox' +export * from './CheckboxList' +export * from './ErrorText' +export * from './Field' +export * from './HelpText' +export * from './Label' +export * from './NumberInput' +export * from './OptionField' +export * from './OptionLabel' +export * from './OptionList' +export * from './Radio' +export * from './RadioList' +export * from './Select' +export * from './TextArea' +export * from './TextInput' diff --git a/src/form/readme.md b/src/form/readme.md new file mode 100644 index 0000000..3a1a41a --- /dev/null +++ b/src/form/readme.md @@ -0,0 +1,42 @@ +Common behaviour can be provided through the use of the `Field` component. + +### Help + +```jsx +import { Field, Label, HelpText, TextInput } from 'tailwind-react-ui' +;<> + <Field hasHelp> + <Label>Password</Label> + <HelpText> + Your password must be 8-20 characters long, contain letters and numbers, + and must not contain spaces, special characters, or emoji. + </HelpText> + <TextInput name="password" type="password" /> + </Field> +</> +``` + +#### Disabled + +```jsx +import { Field, Label, TextInput } from 'tailwind-react-ui' +;<> + <Field disabled> + <Label>Username</Label> + <TextInput name="disabled" placeholder="Username" /> + </Field> +</> +``` + +### Errors + +```jsx +import { Field, Label, ErrorText, TextInput } from 'tailwind-react-ui' +;<> + <Field hasError> + <Label>Username</Label> + <TextInput name="invalid" placeholder="Username" /> + <ErrorText>Please enter a valid username</ErrorText> + </Field> +</> +``` diff --git a/src/components/grid/Col.md b/src/grid/Col.md similarity index 100% rename from src/components/grid/Col.md rename to src/grid/Col.md diff --git a/src/grid/Col.test.tsx b/src/grid/Col.test.tsx new file mode 100644 index 0000000..c4ad548 --- /dev/null +++ b/src/grid/Col.test.tsx @@ -0,0 +1,29 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawCol as Col } from '.' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign({}, testProps) + + const wrapper = render(<Col {...props}>Content</Col>) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Col', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ + size: { def: 'full', sm: '1/2', md: '1/4' }, + }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/grid/Col.tsx b/src/grid/Col.tsx new file mode 100644 index 0000000..618bb7e --- /dev/null +++ b/src/grid/Col.tsx @@ -0,0 +1,38 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { Theme } from '../theme' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' + +const getWidthProps = ( + width: string | Record<keyof Theme['breakpoints'], string>, +) => { + if (typeof width === 'object') { + return Object.keys(width).reduce((props, breakpoint) => { + const key = breakpoint as keyof Theme['breakpoints'] + const breakpointSuffix = breakpoint === 'def' ? '' : `-${breakpoint}` + if (width[key] === 'auto') { + return { ...props, [`flex${breakpointSuffix}`]: 1 } + } + return { ...props, [`w${breakpointSuffix}`]: width[key] } + }, {}) + } + + return width === 'auto' ? { flex: 1 } : { w: width } +} + +export type ColProps<E extends HTMLElement = HTMLLIElement> = BoxProps<E> + +export const RawCol = <E extends HTMLElement = HTMLLIElement>({ + as = 'li', + children, + w = 'full', + ...rest +}: ColProps<E>) => ( + <Box as={as} {...getWidthProps(`${w}`)} {...rest}> + {children} + </Box> +) + +export const Col = RawCol diff --git a/src/grid/Row.md b/src/grid/Row.md new file mode 100644 index 0000000..cc25861 --- /dev/null +++ b/src/grid/Row.md @@ -0,0 +1,144 @@ +```jsx +import { Row, Col } from 'tailwind-react-ui' +;<> + <Row> + <Col bg="gray-400" text="center" p="4"> + 1/1 + </Col> + <Col w="1/2" bg="gray-300" text="center" p="4"> + 1/2 + </Col> + <Col w="1/2" bg="gray-400" text="center" p="4"> + 1/2 + </Col> + <Col w="1/3" bg="gray-300" text="center" p="4"> + 1/3 + </Col> + <Col w="1/3" bg="gray-400" text="center" p="4"> + 1/3 + </Col> + <Col w="1/3" bg="gray-300" text="center" p="4"> + 1/3 + </Col> + <Col w="1/4" bg="gray-400" text="center" p="4"> + 1/4 + </Col> + <Col w="1/4" bg="gray-300" text="center" p="4"> + 1/4 + </Col> + <Col w="1/4" bg="gray-400" text="center" p="4"> + 1/4 + </Col> + <Col w="1/4" bg="gray-300" text="center" p="4"> + 1/4 + </Col> + </Row> +</> +``` + +### Gutters + +```jsx +import { Row, Col, Card } from 'tailwind-react-ui' +;<> + <Row gutter> + <Col> + <Card bg="gray-400" text="center" p="4" rounded="none"> + 1/1 + </Card> + </Col> + <Col w="1/2"> + <Card bg="gray-300" text="center" p="4" rounded="none"> + 1/2 + </Card> + </Col> + <Col w="1/2"> + <Card bg="gray-400" text="center" p="4" rounded="none"> + 1/2 + </Card> + </Col> + <Col w="1/3"> + <Card bg="gray-300" text="center" p="4" rounded="none"> + 1/3 + </Card> + </Col> + <Col w="1/3"> + <Card bg="gray-400" text="center" p="4" rounded="none"> + 1/3 + </Card> + </Col> + <Col w="1/3"> + <Card bg="gray-300" text="center" p="4" rounded="none"> + 1/3 + </Card> + </Col> + <Col w="1/4"> + <Card bg="gray-400" text="center" p="4" rounded="none"> + 1/4 + </Card> + </Col> + <Col w="1/4"> + <Card bg="gray-300" text="center" p="4" rounded="none"> + 1/4 + </Card> + </Col> + <Col w="1/4"> + <Card bg="gray-400" text="center" p="4" rounded="none"> + 1/4 + </Card> + </Col> + <Col w="1/4"> + <Card bg="gray-300" text="center" p="4" rounded="none"> + 1/4 + </Card> + </Col> + </Row> +</> +``` + +### Responsive Columns + +```jsx +import { Row, Col, Card } from 'tailwind-react-ui' +;<> + <Row gutter> + <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> + <Card bg="gray-400" p={4} h={12} rounded="none" /> + </Col> + <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> + <Card bg="gray-300" p={4} h={12} rounded="none" /> + </Col> + <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> + <Card bg="gray-400" p={4} h={12} rounded="none" /> + </Col> + <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> + <Card bg="gray-300" p={4} h={12} rounded="none" /> + </Col> + <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> + <Card bg="gray-400" p={4} h={12} rounded="none" /> + </Col> + <Col w={{ def: 'full', sm: '1/2', md: '1/3', lg: '1/4', xl: '1/6' }}> + <Card bg="gray-300" p={4} h={12} rounded="none" /> + </Col> + </Row> +</> +``` + +### Auto Sized Columns + +```jsx +import { Row, Col, Card } from 'tailwind-react-ui' +;<> + <Row nowrap> + <Col w="auto"> + <Card bg="gray-400" p={4} h={12} rounded="none" /> + </Col> + <Col w="auto"> + <Card bg="gray-300" p={4} h={12} rounded="none" /> + </Col> + <Col w="auto"> + <Card bg="gray-400" p={4} h={12} rounded="none" /> + </Col> + </Row> +</> +``` diff --git a/src/grid/Row.test.tsx b/src/grid/Row.test.tsx new file mode 100644 index 0000000..f7da39f --- /dev/null +++ b/src/grid/Row.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawRow as Row } from './Row' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(<Row {...props} />) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Row', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ gutter: true }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/grid/Row.tsx b/src/grid/Row.tsx new file mode 100644 index 0000000..f2ec044 --- /dev/null +++ b/src/grid/Row.tsx @@ -0,0 +1,57 @@ +import type { FlexProps } from 'tailwind-react-primitives' +import type { Theme, WithTheme } from '../theme' + +import React from 'react' + +import { RawFlex as Flex } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface RowProps<E extends HTMLElement = HTMLUListElement> + extends WithTheme, + FlexProps<E> { + nowrap?: boolean + gutter?: boolean | keyof Theme['spacing'] +} + +export const RawRow = <E extends HTMLElement = HTMLUListElement>({ + as = 'ul', + children, + nowrap, + gutter, + theme, + ...rest +}: RowProps<E>) => { + const gutterSpacing = + typeof gutter === 'string' + ? theme.spacing[gutter] + : gutter && theme.spacing.md + + return ( + <Flex + as={as} + wrap={!nowrap} + nm={ + gutter + ? { + l: gutterSpacing || undefined, + b: !nowrap ? gutterSpacing || undefined : undefined, + } + : undefined + } + {...rest} + > + {gutter + ? React.Children.map(children, (child) => + React.isValidElement(child) + ? React.cloneElement(child, { + p: { l: gutterSpacing }, + m: { b: gutterSpacing }, + }) + : child, + ) + : children} + </Flex> + ) +} + +export const Row = withTheme(RawRow) diff --git a/src/grid/__snapshots__/Col.test.tsx.snap b/src/grid/__snapshots__/Col.test.tsx.snap new file mode 100644 index 0000000..5ba0940 --- /dev/null +++ b/src/grid/__snapshots__/Col.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Col renders matching snapshot 1`] = ` +<DocumentFragment> + <li + class="w-full" + > + Content + </li> +</DocumentFragment> +`; diff --git a/src/grid/__snapshots__/Row.test.tsx.snap b/src/grid/__snapshots__/Row.test.tsx.snap new file mode 100644 index 0000000..9668714 --- /dev/null +++ b/src/grid/__snapshots__/Row.test.tsx.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Row renders matching snapshot 1`] = ` +<DocumentFragment> + <ul + class="flex flex-wrap nml-4 nmb-4" + /> +</DocumentFragment> +`; diff --git a/src/grid/index.ts b/src/grid/index.ts new file mode 100644 index 0000000..b4b23e5 --- /dev/null +++ b/src/grid/index.ts @@ -0,0 +1,2 @@ +export * from './Col' +export * from './Row' diff --git a/src/components/grid/readme.md b/src/grid/readme.md similarity index 100% rename from src/components/grid/readme.md rename to src/grid/readme.md diff --git a/src/header/Header.md b/src/header/Header.md new file mode 100644 index 0000000..ea85b84 --- /dev/null +++ b/src/header/Header.md @@ -0,0 +1,97 @@ +### Example + +```jsx +import { Box } from 'tailwind-react-primitives' +import { + Header, + NavBrand, + NavToggle, + NavMenu, + NavItem, + OutlineButton, +} from 'tailwind-react-ui' +;<> + <Header> + <NavBrand as="a" href="#header" font="semibold" text={['white', 'xl']}> + <Box + as="svg" + fill="current" + h={8} + w={8} + m={{ r: 2 }} + width="54" + height="54" + viewBox="0 0 54 54" + xmlns="http://www.w3.org/2000/svg" + > + <path d="M13.5 22.1c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05zM0 38.3c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05z" /> + </Box> + <Box inlineBlock>Tailwind React UI</Box> + </NavBrand> + <NavToggle /> + <NavMenu> + <NavItem as="a" href="#header" active> + Docs + </NavItem> + <NavItem as="a" href="#header"> + Examples + </NavItem> + <NavItem as="a" href="#header"> + Blog + </NavItem> + <OutlineButton border="white" text="white" text-hocus="blue-400"> + Download + </OutlineButton> + </NavMenu> + </Header> +</> +``` + +### Custom Example: + +```jsx +import { Box } from 'tailwind-react-primitives' +import { + Header, + NavBrand, + NavToggle, + NavMenu, + NavItem, + OutlineButton, +} from 'tailwind-react-ui' +;<> + <Header bg="purple-400" text="white" screen="md"> + <NavBrand as="a" href="#header" font="semibold" text={['white', 'xl']}> + <Box + as="svg" + fill="current" + h={8} + w={8} + m={{ r: 2 }} + width="54" + height="54" + viewBox="0 0 54 54" + xmlns="http://www.w3.org/2000/svg" + > + <path d="M13.5 22.1c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05zM0 38.3c1.8-7.2 6.3-10.8 13.5-10.8 10.8 0 12.15 8.1 17.55 9.45 3.6.9 6.75-.45 9.45-4.05-1.8 7.2-6.3 10.8-13.5 10.8-10.8 0-12.15-8.1-17.55-9.45-3.6-.9-6.75.45-9.45 4.05z" /> + </Box> + <Box inlineBlock>Tailwind React UI</Box> + </NavBrand> + <NavToggle /> + <NavMenu> + <NavItem as="a" href="#header" active> + Docs + </NavItem> + <NavItem as="a" href="#header"> + Examples + </NavItem> + <NavItem as="a" href="#header"> + Blog + </NavItem> + <OutlineButton border="white" text="white" text-hocus="blue-400"> + Download + </OutlineButton> + </NavMenu> + </Header> +</> +``` diff --git a/src/header/Header.test.tsx b/src/header/Header.test.tsx new file mode 100644 index 0000000..81383c9 --- /dev/null +++ b/src/header/Header.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawHeader as Header } from './Header' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(<Header {...props}>Content</Header>) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Header', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ bg: 'blue-400', text: 'white' }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/header/Header.tsx b/src/header/Header.tsx new file mode 100644 index 0000000..8c1c60d --- /dev/null +++ b/src/header/Header.tsx @@ -0,0 +1,121 @@ +import { BoxProps } from 'tailwind-react-primitives' +import { WithTheme, Theme } from '../theme' + +import React from 'react' + +import { RawBox as Box, Flex, filterProps } from 'tailwind-react-primitives' +import { withTheme } from '../theme' +import { getUniqueID } from '../utils' +import { RawContainer as Container } from '../container' + +export interface WithHeader { + header?: { + id?: string + style?: { + bg?: string | string[] + text?: string | string[] + } + isOpen?: boolean + isCollapsable?: boolean + onToggle?: (forceState?: boolean) => void + screen?: string + } +} + +export interface HeaderProps<E extends HTMLElement = HTMLDivElement> + extends WithTheme, + BoxProps<E> { + screen?: keyof Theme['breakpoints'] +} + +export const RawHeader = <E extends HTMLElement = HTMLDivElement>({ + theme, + id, + screen = 'lg', + as = 'header', + children, + bg, + text, + ...rest +}: HeaderProps<E>) => { + const [isOpen, setOpen] = React.useState(false) + const [isCollapsable, setCollapsable] = React.useState(false) + + const [headerId, setHeaderId] = React.useState(id) + React.useEffect(() => { + if (headerId) return + + setHeaderId(getUniqueID('neader')) + }) + + const mql = React.useRef<MediaQueryList | undefined>() + const handleMatch = React.useCallback( + (mql: MediaQueryList | MediaQueryListEvent) => { + setCollapsable(!mql.matches) + }, + [], + ) + React.useEffect(() => { + if (screen && window.matchMedia) { + mql.current = window.matchMedia( + `(min-width: ${theme.breakpoints[screen]})`, + ) + mql.current.addEventListener('change', handleMatch) + + if (mql.current.matches) { + handleMatch(mql.current) + } + } + + return () => { + if (mql.current) mql.current.removeEventListener('change', handleMatch) + } + }, []) + + const handleToggle = React.useCallback((forceState?: boolean) => { + setOpen(forceState ?? ((currentState) => !currentState)) + }, []) + + const bgStyle = bg || theme.brandColors.primary + const textStyle = text || theme.textColors.on.primary + + const headerProps: WithHeader['header'] = { + id: headerId ?? '', + style: { + bg: bgStyle, + text: textStyle, + }, + isOpen, + isCollapsable, + onToggle: handleToggle, + screen, + } + + return ( + <Box<E> + as={as} + id={headerId} + bg={bgStyle} + text={textStyle} + p={{ y: theme.spacing.md }} + role="banner" + {...filterProps(rest, ['id'])} + > + <Container<HTMLDivElement> + theme={theme} + as={(props) => <Flex {...props} wrap />} + items="center" + justify="between" + padding + > + {React.Children.map(children, (child) => + React.isValidElement(child) + ? React.cloneElement<WithHeader>(child, { header: headerProps }) + : child, + )} + </Container> + </Box> + ) +} + +export const Header = withTheme(RawHeader) diff --git a/src/components/header/NavBrand.md b/src/header/NavBrand.md similarity index 100% rename from src/components/header/NavBrand.md rename to src/header/NavBrand.md diff --git a/src/header/NavBrand.test.tsx b/src/header/NavBrand.test.tsx new file mode 100644 index 0000000..b2b5e10 --- /dev/null +++ b/src/header/NavBrand.test.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawNavBrand as NavBrand } from './NavBrand' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { theme: defaultTheme, header: { style: { text: 'white' } } }, + testProps, + ) + + const wrapper = render(<NavBrand {...props}>Tailwind React UI</NavBrand>) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('NavBrand', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/header/NavBrand.tsx b/src/header/NavBrand.tsx new file mode 100644 index 0000000..dcf8bdd --- /dev/null +++ b/src/header/NavBrand.tsx @@ -0,0 +1,52 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import { WithTheme } from '../theme' +import { WithHeader } from './Header' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface NavBrandProps<E extends HTMLElement = HTMLDivElement> + extends BoxProps<E>, + WithTheme, + WithHeader {} + +export const RawNavBrand = ({ + theme, + header: { style, screen } = { style: {}, screen: 'lg' }, + as = 'div', + children, + ...rest +}: NavBrandProps) => { + const responsive = screen + ? { + [`m-${screen}`]: { r: theme.spacing.lg }, + } + : {} + + const aria = !(typeof as === 'string' && as.startsWith('h')) + ? { + 'role': 'heading', + 'aria-level': 1, + } + : {} + + return ( + <Box + as={as} + inlineBlock + flex={[true, 'shrink-0']} + items="center" + h={12} + text={style?.text || theme.textColors.on.primary} + {...responsive} + {...aria} + {...rest} + > + {children} + </Box> + ) +} + +export const NavBrand = withTheme(RawNavBrand) diff --git a/src/components/header/NavItem.md b/src/header/NavItem.md similarity index 100% rename from src/components/header/NavItem.md rename to src/header/NavItem.md diff --git a/src/header/NavItem.test.tsx b/src/header/NavItem.test.tsx new file mode 100644 index 0000000..c85b3f6 --- /dev/null +++ b/src/header/NavItem.test.tsx @@ -0,0 +1,40 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawNavItem as NavItem } from './NavItem' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props = Object.assign( + { + theme: defaultTheme, + header: { style: { bg: 'blue-400', text: 'white' } }, + }, + testProps, + ) + + const wrapper = render(<NavItem {...props}>Link</NavItem>) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('NavItem', () => { + it('renders matching snapshot', () => { + // eslint-disable-next-line + const [{ asFragment }] = setup({ + as: (props: React.HTMLProps<HTMLAnchorElement>) => ( + // eslint-disable-next-line jsx-a11y/anchor-has-content + <a {...props} href="#test" /> + ), + }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/header/NavItem.tsx b/src/header/NavItem.tsx new file mode 100644 index 0000000..7444a56 --- /dev/null +++ b/src/header/NavItem.tsx @@ -0,0 +1,55 @@ +import type { TouchableProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { WithHeader } from './Header' + +import React from 'react' + +import { RawTouchable as Touchable } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface NavItemProps<E extends HTMLElement = HTMLAnchorElement> + extends TouchableProps<E>, + WithTheme, + WithHeader { + active?: boolean +} + +export const RawNavItem = <E extends HTMLElement = HTMLAnchorElement>({ + theme, + as, + children, + header: { style, screen } = { style: {}, screen: 'lg' }, + active, + ...rest +}: NavItemProps<E>) => { + const textColor = style?.text || theme.textColors.on.primary + const bgColor = style?.bg || theme.brandColors.primary + + const responsive = screen + ? { + [`m-${screen}`]: { t: 0, r: theme.spacing.sm }, + } + : {} + + return ( + <Touchable<E> + as={as} + focusable + text={!active ? style?.text : style?.bg} + bg={active ? textColor : undefined} + bg-hocus={textColor} + text-hocus={bgColor} + p={{ x: theme.spacing.md, y: theme.spacing.sm }} + m={{ t: theme.spacing.sm }} + rounded={theme.radius} + block + aria-current={active ? 'page' : undefined} + {...responsive} + {...rest} + > + {children} + </Touchable> + ) +} + +export const NavItem = withTheme(RawNavItem) diff --git a/src/components/header/NavMenu.md b/src/header/NavMenu.md similarity index 100% rename from src/components/header/NavMenu.md rename to src/header/NavMenu.md diff --git a/src/header/NavMenu.test.tsx b/src/header/NavMenu.test.tsx new file mode 100644 index 0000000..bda68b8 --- /dev/null +++ b/src/header/NavMenu.test.tsx @@ -0,0 +1,43 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawNavMenu as NavMenu, NavMenuProps } from './NavMenu' +import { NavItem } from './NavItem' +import { defaultTheme } from '../theme' +import { TransitionStatus } from '../utils' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record<string, any> }] => { + const props: NavMenuProps = Object.assign( + { + header: { isOpen: true, isCollapsable: true }, + transition: 'entered' as TransitionStatus, + theme: defaultTheme, + }, + testProps, + ) + + const wrapper = render( + <NavMenu {...props}> + <NavItem>About</NavItem> + <NavItem>Blog</NavItem> + <button type="button">Download</button> + </NavMenu>, + ) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('NavMenu', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/header/NavMenu.tsx b/src/header/NavMenu.tsx new file mode 100644 index 0000000..0d0407e --- /dev/null +++ b/src/header/NavMenu.tsx @@ -0,0 +1,123 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' +import type { ListProps } from '../list' +import type { WithTransition, TransitionStatus } from '../utils' +import type { WithHeader } from './Header' +import type { NavItemProps } from './NavItem' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' +import { Title } from '../typography' +import { withTransition } from '../utils' +import { List } from '../list' + +import { NavItem, RawNavItem } from './NavItem' + +const isNavItem = ( + child: React.ReactNode, +): child is React.FunctionComponentElement<NavItemProps> => + React.isValidElement(child) && + (child.type === NavItem || child.type === RawNavItem) + +const NavItemWrapper: React.FC<Omit< + React.HTMLProps<HTMLLIElement>, + 'aria-relevant' // TODO: Types of property 'aria-relevant' are incompatible. Why? +>> = (props) => <li role="none" {...props} /> + +export interface NavMenuProps<E extends HTMLElement = HTMLDivElement> + extends Omit<BoxProps<E>, 'list'>, + WithTheme, + WithHeader, + WithTransition { + list?: ListProps +} + +export const RawNavMenu = <E extends HTMLElement = HTMLDivElement>({ + theme, + transition = 'entering', + as = 'nav', + children, + header = { id: 'header', screen: 'lg' }, + list, + ...rest +}: NavMenuProps<E>) => { + const transitionStyles: Record<TransitionStatus, React.CSSProperties> = { + entering: { maxHeight: '0', position: 'absolute' }, + entered: { maxHeight: '100vh' }, + exiting: {}, + exited: {}, + unmounted: {}, + } + const headingId = `${header.id}-menu` + + const responsive = { + nav: header.screen + ? { + [`w-${header.screen}`]: 'auto', + [`flex-${header.screen}`]: true, + } + : {}, + menu: header.screen + ? { + [`flex-${header.screen}`]: true, + [`m-${header.screen}`]: { b: 0 }, + } + : {}, + } + + return ( + // TODO: Double check screen reader behaviour + // eslint-disable-next-line jsx-a11y/role-supports-aria-props + <Box<E> + as={as} + overflow="hidden" + w="full" + flex="grow" + items="center" + h={!header.isCollapsable ? 12 : undefined} + style={ + header.isCollapsable + ? { + transition: 'max-height 500ms', + maxHeight: '0', + ...transitionStyles[transition], + } + : undefined + } + id={`${header.id}-nav`} + aria-labelledby={headingId} + role="navigation" + aria-expanded={header.isCollapsable ? header.isOpen : undefined} + {...responsive.nav} + {...rest} + > + <Title level={2} id={headingId} visuallyHidden> + Site menu + + + {React.Children.map( + children, + (child) => + isNavItem(child) && + React.cloneElement(child, { + header, + role: 'menuitem', + }), + )} + + {React.Children.map(children, (child) => !isNavItem(child) && child)} + + ) +} + +export const NavMenu = withTheme( + withTransition(RawNavMenu, { inState: 'header.open' }), +) diff --git a/src/components/header/NavToggle.md b/src/header/NavToggle.md similarity index 100% rename from src/components/header/NavToggle.md rename to src/header/NavToggle.md diff --git a/src/header/NavToggle.test.tsx b/src/header/NavToggle.test.tsx new file mode 100644 index 0000000..2e056be --- /dev/null +++ b/src/header/NavToggle.test.tsx @@ -0,0 +1,34 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawNavToggle as NavToggle } from './NavToggle' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign( + { + header: { onToggle: jest.fn(), style: { text: 'white' } }, + theme: defaultTheme, + }, + testProps, + ) + + const wrapper = render() + + return [ + wrapper, + { + props, + }, + ] +} + +describe('NavToggle', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/header/NavToggle.tsx b/src/header/NavToggle.tsx new file mode 100644 index 0000000..dfff3d9 --- /dev/null +++ b/src/header/NavToggle.tsx @@ -0,0 +1,74 @@ +import type { ButtonProps } from '../button' +import type { WithHeader } from './Header' + +import React from 'react' + +import { Box } from 'tailwind-react-primitives' +import { RawButton as Button } from '../button' +import { withTheme } from '../theme' + +const Bar: React.FC = () => ( + +) + +export interface NavToggleProps + extends ButtonProps, + WithHeader {} + +export const RawNavToggle = ({ + theme, + children, + onClick, + header: { onToggle, style, id, screen } = { + id: 'header', + screen: 'lg', + style: {}, + }, + ...rest +}: NavToggleProps) => { + const handleClick = (e: React.MouseEvent) => { + if (onToggle) onToggle() + if (onClick) onClick(e) + } + + const responsive = screen + ? { + [`hidden-${screen}`]: true, + } + : {} + + return ( + + theme={theme} + w={12} + h={12} + p={0} + block + onClick={handleClick} + aria-label="Open menu" + aria-haspopup="true" + aria-controls={`${id}-nav`} + text={style?.text || theme.textColors.on.primary} + bg-hocus={style?.text || theme.textColors.on.primary} + text-hocus={style?.bg || theme.brandColors.primary} + {...responsive} + {...rest} + > + {children || ( + + + + + + )} + + ) +} + +export const NavToggle = withTheme(RawNavToggle) diff --git a/src/header/__snapshots__/Header.test.tsx.snap b/src/header/__snapshots__/Header.test.tsx.snap new file mode 100644 index 0000000..3e9d145 --- /dev/null +++ b/src/header/__snapshots__/Header.test.tsx.snap @@ -0,0 +1,17 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Header renders matching snapshot 1`] = ` + + + +`; diff --git a/src/header/__snapshots__/NavBrand.test.tsx.snap b/src/header/__snapshots__/NavBrand.test.tsx.snap new file mode 100644 index 0000000..d9b8891 --- /dev/null +++ b/src/header/__snapshots__/NavBrand.test.tsx.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NavBrand renders matching snapshot 1`] = ` + + + Tailwind React UI + + +`; diff --git a/src/header/__snapshots__/NavItem.test.tsx.snap b/src/header/__snapshots__/NavItem.test.tsx.snap new file mode 100644 index 0000000..365a0d1 --- /dev/null +++ b/src/header/__snapshots__/NavItem.test.tsx.snap @@ -0,0 +1,14 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NavItem renders matching snapshot 1`] = ` + +
+ Link + + +`; diff --git a/src/header/__snapshots__/NavMenu.test.tsx.snap b/src/header/__snapshots__/NavMenu.test.tsx.snap new file mode 100644 index 0000000..42cd121 --- /dev/null +++ b/src/header/__snapshots__/NavMenu.test.tsx.snap @@ -0,0 +1,53 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NavMenu renders matching snapshot 1`] = ` + + + +`; diff --git a/src/header/__snapshots__/NavToggle.test.tsx.snap b/src/header/__snapshots__/NavToggle.test.tsx.snap new file mode 100644 index 0000000..aee48cf --- /dev/null +++ b/src/header/__snapshots__/NavToggle.test.tsx.snap @@ -0,0 +1,30 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NavToggle renders matching snapshot 1`] = ` + + + +`; diff --git a/src/header/index.ts b/src/header/index.ts new file mode 100644 index 0000000..8e232c1 --- /dev/null +++ b/src/header/index.ts @@ -0,0 +1,5 @@ +export * from './Header' +export * from './NavBrand' +export * from './NavItem' +export * from './NavMenu' +export * from './NavToggle' diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 8a44137..0000000 --- a/src/index.js +++ /dev/null @@ -1,17 +0,0 @@ -export * from './components/button' -export * from './components/card' -export * from './components/container' -export * from './components/content' -export * from './components/footer' -export * from './components/form' -export * from './components/grid' -export * from './components/header' -export * from './components/list' -export * from './components/main' -export * from './components/primitives' -export * from './components/siteWrap' -export * from './components/typography' - -export * from './components/tailwind' -export * from './components/theme' -export * from './components/utils' diff --git a/src/__tests__/index.js b/src/index.test.ts similarity index 60% rename from src/__tests__/index.js rename to src/index.test.ts index cddafbb..c26d501 100644 --- a/src/__tests__/index.js +++ b/src/index.test.ts @@ -2,10 +2,10 @@ import fs from 'fs' import path from 'path' describe('Library index', () => { - const lib = fs.readFileSync(path.join(__dirname, '..', 'index.js'), 'utf8') - const components = fs.readdirSync(path.join(__dirname, '..', 'components')) + const lib = fs.readFileSync(path.join(__dirname, 'index.ts'), 'utf8') + const components = fs.readdirSync(path.join(__dirname)) - components.forEach(component => { + components.forEach((component) => { if (!component.startsWith('_') && !component.includes('.')) { it(`exposes ${component} for import`, () => { expect(lib.match(new RegExp(component, 'g'))).not.toBe(null) diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..376f3ca --- /dev/null +++ b/src/index.ts @@ -0,0 +1,17 @@ +export * from 'tailwind-react-primitives' + +export * from './button' +export * from './card' +export * from './container' +export * from './content' +export * from './footer' +export * from './form' +export * from './grid' +export * from './header' +export * from './list' +export * from './main' +export * from './siteWrap' +export * from './typography' + +export * from './theme' +export * from './utils' diff --git a/src/list/List.md b/src/list/List.md new file mode 100644 index 0000000..6c6fa6f --- /dev/null +++ b/src/list/List.md @@ -0,0 +1,61 @@ +### Simple Example + +```jsx +import { Text } from 'tailwind-react-primitives' +import { List } from 'tailwind-react-ui' +;<> + + One + Two + Three + + +``` + +### Inline + +```jsx +import { Text } from 'tailwind-react-primitives' +import { List } from 'tailwind-react-ui' +;<> + + One + Two + Three + + +``` + +### Justified + +```jsx +import { Text } from 'tailwind-react-primitives' +import { List } from 'tailwind-react-ui' +;<> + + One + Two + Three + + +``` + +### Full Width + +```jsx +import { Text } from 'tailwind-react-primitives' +import { List } from 'tailwind-react-ui' +;<> + + + One + + + Two + + + Three + + + +``` diff --git a/src/list/List.test.tsx b/src/list/List.test.tsx new file mode 100644 index 0000000..c44d623 --- /dev/null +++ b/src/list/List.test.tsx @@ -0,0 +1,34 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawList as List } from './List' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render( + + One + Two + Three + , + ) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('List', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/list/List.tsx b/src/list/List.tsx new file mode 100644 index 0000000..33a7889 --- /dev/null +++ b/src/list/List.tsx @@ -0,0 +1,82 @@ +import type { BoxProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' +import { RawBox as Box, getAsArray } from 'tailwind-react-primitives' + +import { withTheme } from '../theme' + +export interface ListProps + extends WithTheme, + Omit, 'list'> { + padding?: boolean + list?: boolean | 'disc' | 'decimal' + inline?: boolean + justified?: boolean + fullWidth?: boolean + ordered?: boolean + listItemAs?: React.ElementType +} + +export const RawList = ({ + theme, + as = 'ul', + children, + padding, + list, + inline, + justified, + fullWidth, + ordered, + listItemAs = 'li', + flex, + ...rest +}: ListProps) => { + let listStyle = list + if (listStyle === true) { + listStyle = ordered ? 'decimal' : 'disc' + } + + return ( + + as={ordered ? 'ol' : as} + m={{ b: theme.spacing.md }} + p={ + listStyle + ? { + l: theme.spacing.md, + } + : undefined + } + flex={ + justified || + fullWidth || + (inline ? [true, 'wrap', ...getAsArray(flex)] : flex) + } + justify={justified ? 'between' : undefined} + list={listStyle || undefined} + {...rest} + > + {React.Children.map( + children, + (child) => + child && ( + + {child} + + ), + )} + + ) +} + +export const List = withTheme(RawList) diff --git a/src/list/__snapshots__/List.test.tsx.snap b/src/list/__snapshots__/List.test.tsx.snap new file mode 100644 index 0000000..ab6689f --- /dev/null +++ b/src/list/__snapshots__/List.test.tsx.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`List renders matching snapshot 1`] = ` + +
    +
  • + + One + +
  • +
  • + + Two + +
  • +
  • + + Three + +
  • +
+
+`; diff --git a/src/list/index.ts b/src/list/index.ts new file mode 100644 index 0000000..df6b726 --- /dev/null +++ b/src/list/index.ts @@ -0,0 +1 @@ +export * from './List' diff --git a/src/main/Main.md b/src/main/Main.md new file mode 100644 index 0000000..716d94c --- /dev/null +++ b/src/main/Main.md @@ -0,0 +1,29 @@ +Simple wrapper around the standard `
` element which adds an ID for use with an access friendly skip link. + +### Example + +Tab onto the example below to see this behaviour in action. + +```jsx +import { Text } from 'tailwind-react-primitives' +import { SkipLink, Card, Main } from 'tailwind-react-ui' +;<> + + + Some interceding content, e.g. a header / navigation + +
+ This is the main body of my app... disappointing isn't it. +
+ +``` + +Note that the ID's were set for this example to avoid conflict with the auto-generated styleguide. With no values specificied the components will default to using `main`. diff --git a/src/main/Main.test.tsx b/src/main/Main.test.tsx new file mode 100644 index 0000000..54e433e --- /dev/null +++ b/src/main/Main.test.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { Main } from './Main' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign(testProps) + + const wrapper = render(
Lorem ipsum
) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Main', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/main/Main.tsx b/src/main/Main.tsx new file mode 100644 index 0000000..dcc41cc --- /dev/null +++ b/src/main/Main.tsx @@ -0,0 +1,20 @@ +import type { BoxProps } from 'tailwind-react-primitives' + +import React from 'react' + +import { RawBox as Box } from 'tailwind-react-primitives' + +export type MainProps = BoxProps + +export const RawMain = ({ + children, + as = 'main', + id = 'main', + ...rest +}: MainProps) => ( + + {children} + +) + +export const Main = RawMain diff --git a/src/components/main/SkipLink.md b/src/main/SkipLink.md similarity index 100% rename from src/components/main/SkipLink.md rename to src/main/SkipLink.md diff --git a/src/main/SkipLink.test.tsx b/src/main/SkipLink.test.tsx new file mode 100644 index 0000000..3334dbb --- /dev/null +++ b/src/main/SkipLink.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawSkipLink as SkipLink } from './SkipLink' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render() + + return [ + wrapper, + { + props, + }, + ] +} + +describe('SkipLink', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/main/SkipLink.tsx b/src/main/SkipLink.tsx new file mode 100644 index 0000000..395effd --- /dev/null +++ b/src/main/SkipLink.tsx @@ -0,0 +1,35 @@ +import type { ButtonProps } from '../button' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { Box } from 'tailwind-react-primitives' +import { withTheme } from '../theme' +import { RawButton as Button } from '../button' + +export type SkipLinkProps< + E extends HTMLElement = HTMLAnchorElement +> = ButtonProps & WithTheme + +export const RawSkipLink = ({ + children = 'Skip to main content', + href = '#main', + ...rest +}: SkipLinkProps) => ( + + + as="a" + buttonStyle="fill" + bg="white" + text="black" + absolute + rounded="none" + href={href} + {...rest} + > + {children} + + +) + +export const SkipLink = withTheme(RawSkipLink) diff --git a/src/main/__snapshots__/Main.test.tsx.snap b/src/main/__snapshots__/Main.test.tsx.snap new file mode 100644 index 0000000..565753e --- /dev/null +++ b/src/main/__snapshots__/Main.test.tsx.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Main renders matching snapshot 1`] = ` + +
+ Lorem ipsum +
+
+`; diff --git a/src/main/__snapshots__/SkipLink.test.tsx.snap b/src/main/__snapshots__/SkipLink.test.tsx.snap new file mode 100644 index 0000000..92a44c8 --- /dev/null +++ b/src/main/__snapshots__/SkipLink.test.tsx.snap @@ -0,0 +1,17 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SkipLink renders matching snapshot 1`] = ` + + + +`; diff --git a/src/main/index.ts b/src/main/index.ts new file mode 100644 index 0000000..245963a --- /dev/null +++ b/src/main/index.ts @@ -0,0 +1,2 @@ +export * from './Main' +export * from './SkipLink' diff --git a/src/plugins/index.js b/src/plugins/index.js deleted file mode 100644 index 075887c..0000000 --- a/src/plugins/index.js +++ /dev/null @@ -1,5 +0,0 @@ -const visuallyHidden = require('./visuallyHidden') - -module.exports = { - visuallyHidden, -} diff --git a/src/plugins/visuallyHidden.js b/src/plugins/visuallyHidden.js deleted file mode 100644 index b052657..0000000 --- a/src/plugins/visuallyHidden.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = ({ variants = ['responsive'] } = {}) => ({ addUtilities }) => { - addUtilities( - { - '.visually-hidden, .visually-hidden-focusable': { - border: 0, - clip: 'rect(0 0 0 0)', - height: '1px', - margin: '-1px', - overflow: 'hidden', - padding: 0, - position: 'absolute', - width: '1px', - whiteSpace: 'nowrap', - }, - '.visually-hidden-focusable': { - '&:active, &:focus, &:focus-within': { - clip: 'auto', - height: 'auto', - margin: 0, - overflow: 'visible', - position: 'static', - width: 'auto', - whiteSpace: 'inherit', - }, - }, - }, - { - variants, - }, - ) -} diff --git a/src/siteWrap/SiteWrap.md b/src/siteWrap/SiteWrap.md new file mode 100644 index 0000000..0de0acb --- /dev/null +++ b/src/siteWrap/SiteWrap.md @@ -0,0 +1,13 @@ +By default will fill the full screen size regardless of child content lenght to create a sticky footer. Also applies baseline body text styling. + +### Example + +```jsx +import { SiteWrap, Footer } from 'tailwind-react-ui' +;<> + +

Some short page content

+
Footer pinned to the bottom of the screen
+
+ +``` diff --git a/src/siteWrap/SiteWrap.test.tsx b/src/siteWrap/SiteWrap.test.tsx new file mode 100644 index 0000000..7e26258 --- /dev/null +++ b/src/siteWrap/SiteWrap.test.tsx @@ -0,0 +1,36 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { defaultTheme } from '../theme' +import { RawSiteWrap as SiteWrap } from './SiteWrap' +import { Header } from '../header' +import { Footer } from '../footer' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render( + +
Header
+

Body

+
Footer
+
, + ) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('SiteWrap', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup() + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/siteWrap/SiteWrap.tsx b/src/siteWrap/SiteWrap.tsx new file mode 100644 index 0000000..60c023a --- /dev/null +++ b/src/siteWrap/SiteWrap.tsx @@ -0,0 +1,53 @@ +import type { FlexProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { RawFlex as Flex, Box } from 'tailwind-react-primitives' +import { Footer, RawFooter } from '../footer/Footer' +import { withTheme } from '../theme' + +export type SiteWrapProps = WithTheme & + FlexProps + +export const RawSiteWrap = ({ + as = 'div', + theme, + children, + ...rest +}: SiteWrapProps) => { + let footer: React.ReactNode | undefined + + React.Children.forEach(children, (child) => { + if ( + React.isValidElement(child) && + (child.type === Footer || child.type === RawFooter) + ) { + footer = child + } + }) + + return ( + + as={as} + col + minH="screen" + leading="normal" + font={theme.text.family.body} + text={[theme.text.size.body[1], theme.textColors.body]} + {...rest} + > + + {React.Children.map(children, (child) => { + if (child === footer) return false + return child + })} + + + {footer} + + + ) +} + +export const SiteWrap = withTheme(RawSiteWrap) diff --git a/src/siteWrap/__snapshots__/SiteWrap.test.tsx.snap b/src/siteWrap/__snapshots__/SiteWrap.test.tsx.snap new file mode 100644 index 0000000..fdc0f03 --- /dev/null +++ b/src/siteWrap/__snapshots__/SiteWrap.test.tsx.snap @@ -0,0 +1,42 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SiteWrap renders matching snapshot 1`] = ` + +
+
+ +

+ Body +

+
+
+
+
+ Footer +
+
+
+
+
+`; diff --git a/src/siteWrap/index.ts b/src/siteWrap/index.ts new file mode 100644 index 0000000..a19d68a --- /dev/null +++ b/src/siteWrap/index.ts @@ -0,0 +1 @@ +export * from './SiteWrap' diff --git a/src/theme/TailwindTheme.ts b/src/theme/TailwindTheme.ts new file mode 100644 index 0000000..ed28bb4 --- /dev/null +++ b/src/theme/TailwindTheme.ts @@ -0,0 +1,68 @@ +import React from 'react' +import { defaultTheme } from './defaultTheme' + +export interface Theme { + prefix: string + radius: string + spacing: { + zero: number + sm: number + md: number + lg: number + xl: number + } + container: { + sm: string + md: string + lg: string + } + text: { + size: { + body: string[] + title: string[] + } + family: { + body: string + subtitle: string + title: string + } + } + brandColors: { + primary: string + secondary: string + success: string + danger: string + warning: string + info: string + } + textColors: { + body: string + link: string + linkDark: string + emphasas: string + on: { + primary: string + secondary: string + success: string + danger: string + warning: string + info: string + dark: string + } + } + surfaceColors: { + default: string + dark: string + light: string + } + highlightOffset: number + accentSize: number + breakpoints: { + sm: string + md: string + lg: string + xl: string + } +} + +export const TailwindTheme = React.createContext(defaultTheme) diff --git a/src/theme/TailwindThemeProvider.tsx b/src/theme/TailwindThemeProvider.tsx new file mode 100644 index 0000000..65b2ae7 --- /dev/null +++ b/src/theme/TailwindThemeProvider.tsx @@ -0,0 +1,23 @@ +import { Theme } from './TailwindTheme' + +import React from 'react' +import merge from 'lodash.merge' + +import { defaultTheme } from './defaultTheme' +import { TailwindTheme } from './TailwindTheme' + +export const TailwindThemeProvider = ({ + theme = {}, + children, +}: { + theme: Partial + children: React.ReactNode +}) => { + const mergedTheme: Theme = merge({}, defaultTheme, theme) + + return ( + + {children} + + ) +} diff --git a/src/components/theme/defaultTheme.js b/src/theme/defaultTheme.ts similarity index 95% rename from src/components/theme/defaultTheme.js rename to src/theme/defaultTheme.ts index e73b733..120aaee 100644 --- a/src/components/theme/defaultTheme.js +++ b/src/theme/defaultTheme.ts @@ -1,4 +1,4 @@ -export default { +export const defaultTheme = { prefix: '', radius: 'rounded', spacing: { @@ -36,7 +36,7 @@ export default { body: 'gray-900', link: 'blue-600', linkDark: 'blue-800', - emphasis: 'black', + emphasas: 'black', on: { primary: 'white', secondary: 'white', diff --git a/src/components/tailwind/getColorShade.js b/src/theme/getColorShade.ts similarity index 60% rename from src/components/tailwind/getColorShade.js rename to src/theme/getColorShade.ts index 39d92cf..c002de7 100644 --- a/src/components/tailwind/getColorShade.js +++ b/src/theme/getColorShade.ts @@ -1,12 +1,17 @@ const shades = ['100', '200', '300', '400', '500', '600', '700', '800', '900'] -export default (color, offset = 1) => { - if (!color) { - return false - } - if (offset === 0) return color +export const getColorShade = ( + color?: string | string[], + offset: string | number = 1, +): string => { + if (!color) return '' + + let currentColor: string | string[] = Array.isArray(color) ? color[0] : color + + if (offset === 0) return currentColor - let currentColor = color === 'white' ? ['gray', '100'] : color.split('-') + currentColor = + currentColor === 'white' ? ['gray', '100'] : currentColor.split('-') let shadeOffset = offset if (color === 'white') { @@ -14,7 +19,7 @@ export default (color, offset = 1) => { if (shadeOffset === 1) return 'gray-100' currentColor = ['gray', '100'] - if (typeof shadeOffset === 'number') shadeOffset = offset - 1 + if (typeof offset === 'number') shadeOffset = offset - 1 } if (currentColor.length === 1) { diff --git a/src/theme/index.ts b/src/theme/index.ts new file mode 100644 index 0000000..9aa6343 --- /dev/null +++ b/src/theme/index.ts @@ -0,0 +1,6 @@ +export * from './defaultTheme' +export * from './TailwindTheme' +export * from './TailwindThemeProvider' +export * from './withTheme' +export * from './useThemeValue' +export * from './getColorShade' diff --git a/src/theme/useThemeValue.ts b/src/theme/useThemeValue.ts new file mode 100644 index 0000000..9c2f6dd --- /dev/null +++ b/src/theme/useThemeValue.ts @@ -0,0 +1,13 @@ +import { tailwindPropToClassName } from 'tailwind-react-primitives' + +export const useThemeValue = ( + prefix: string, + value: unknown, + userClassNames = '', +) => { + if (userClassNames.includes(prefix)) { + return false + } + + return tailwindPropToClassName(prefix, value) +} diff --git a/src/theme/withTheme.tsx b/src/theme/withTheme.tsx new file mode 100644 index 0000000..de04d87 --- /dev/null +++ b/src/theme/withTheme.tsx @@ -0,0 +1,26 @@ +import type { Theme } from './TailwindTheme' + +import React from 'react' + +import { TailwindTheme } from './TailwindTheme' + +export interface WithTheme { + theme: Theme +} + +export const withTheme =

>( + Component: React.FC

, +) => { + const WithTheme: React.FC> = (props) => ( + + {(theme) => { + // @ts-ignore FIXME: Constraint error + return + }} + + ) + + WithTheme.displayName = `WithTheme(${Component.displayName})` + + return WithTheme +} diff --git a/src/tools/TailwindReactExtractor.js b/src/tools/TailwindReactExtractor.js deleted file mode 100644 index 1c0b99b..0000000 --- a/src/tools/TailwindReactExtractor.js +++ /dev/null @@ -1,132 +0,0 @@ -/* eslint-disable no-useless-escape */ -import { - tailwindProps, - propVariants, - getColorShade, -} from '../components/tailwind' - -export const classRegex = /[A-Za-z0-9-_:\/]+/g - -// TODO: Array values -const propRegex = { - singleValue: prop => - new RegExp( - `[ \n\r\t]${prop}(?:-[A-Za-z]+)?=["'{}][A-Za-z0-9-_:\/]+["'}]`, - 'g', - ), - booleanValue: prop => - new RegExp(`[ \n\r\t]${prop}(?:-[A-Za-z]+)?(?:[ \n\r]|>)`, 'g'), - objectValue: prop => - new RegExp( - `[ \n\r\t]${prop}(?:-[A-Za-z]+)?={{ ?[A-Za-z0-9-_:\/ '",]+ ?}}`, - 'g', - ), -} - -const transformations = { - 'w-auto': 'flex-1', -} - -export default class TailwindReactExtractor { - static extract(content) { - let classNames = [] - - tailwindProps.forEach(prop => { - let matches = [ - ...(content.match(propRegex.singleValue(prop)) || []), - ...(content.match(propRegex.booleanValue(prop)) || []), - ] - - let objMatches = content.match(propRegex.objectValue(prop)) || [] - - if (objMatches.length) { - objMatches = objMatches.reduce( - (array, match) => [ - ...array, - ...match - .replace(/\s/g, '') - .replace(`${prop}=`, '') - .replace(/[{}'"]/g, '') - .split(',') - .map(objProp => { - const classFragments = objProp.split(':') - const key = classFragments[0] - return key.length === 1 - ? `${prop}${key}-${classFragments[1]}` - : `${prop}${key === 'def' ? '' : `-${classFragments[0]}`}-${ - classFragments[1] - }` - }), - ], - [], - ) - matches = matches.concat(objMatches) - } - - classNames = classNames - .concat( - matches - .map(match => - match - .replace(/[\s"'{}>]/g, '') - .replace('=', '-') - .replace(/[A-Z]/g, '-$&') - .toLowerCase(), - ) - .reduce((classes, match) => { - let className = [match] - propVariants.forEach(variant => { - if (match.includes(variant)) { - className = match.replace(`-${variant}`, '') - className = - variant === 'hocus' - ? [`hover:${className}`, `focus:${className}`] - : [`${variant}:${className}`] - } - }) - - if ( - (prop === 'bg' || prop === 'text') && - className[0].indexOf(':') === -1 - ) { - // TODO: Determine if prop value is a colour - const baseColor = className[0].replace(`${prop}-`, '') - const highlightColor = getColorShade(baseColor) - - className = [ - match, - `hover:${prop}-${baseColor}`, - `focus:${prop}-${baseColor}`, - `hover:${prop}-${highlightColor}`, - `focus:${prop}-${highlightColor}`, - ] - - if (prop === 'bg') { - className.push( - `hover:${prop}-${getColorShade(baseColor, '100')}`, - `focus:${prop}-${getColorShade(baseColor, '100')}`, - ) - } - } - - return [...classes, ...className] - }, []), - ) - .map(className => { - if (className.indexOf(':') !== -1) { - const classFragments = className.split(':') - - return transformations[classFragments[1]] - ? `${classFragments[0]}:${transformations[classFragments[1]]}` - : className - } - - return transformations[className] || className - }) - }) - - return [...classNames, ...(content.match(classRegex) || [])].filter( - (className, index, array) => array.indexOf(className) === index, - ) - } -} diff --git a/src/tools/getThemeWhitelist.js b/src/tools/getThemeWhitelist.js deleted file mode 100644 index e1ae0ae..0000000 --- a/src/tools/getThemeWhitelist.js +++ /dev/null @@ -1,82 +0,0 @@ -import merge from 'lodash.merge' -import { defaultTheme } from '../components/theme' - -const mapObject = (obj, prefix) => - Object.keys(obj).map(key => `${prefix}-${obj[key]}`) - -const mapArray = (arr, prefix) => arr.map(value => `${prefix}-${value}`) - -const reduceMultiple = (obj, prefixes, suffixes) => - Object.keys(obj).reduce((arr, key) => { - if (typeof obj[key] === 'object') { - return [...arr, ...reduceMultiple(obj[key], prefixes)] - } - - if (suffixes) { - const baseClass = - obj[key].indexOf('-') !== -1 ? obj[key].split('-')[0] : obj[key] - return [ - ...arr, - ...prefixes.reduce( - (classes, prefix) => [ - ...classes, - ...suffixes - .map(suffix => (suffix !== '' ? `-${suffix}` : '')) - .map(suffix => `${prefix}-${baseClass}${suffix}`), - ], - [], - ), - ] - } - - return [...arr, ...prefixes.map(prefix => `${prefix}-${obj[key]}`)] - }, []) - -const colorPrefixes = [ - 'bg', - 'border', - 'text', - 'hover:bg', - 'hover:border', - 'hover:text', - 'focus:bg', - 'focus:border', - 'focus:text', -] - -const colorSuffixes = [ - '100', - '200', - '300', - '400', - '500', - '600', - '700', - '800', - '900', -] - -export default (projectTheme = {}) => { - const theme = merge({}, defaultTheme, projectTheme) - - return [ - theme.radius, - ...reduceMultiple(theme.spacing, [ - 'mt', - 'mb', - 'mr', - '-ml', - '-mr', - 'p-', - 'pl-', - 'px-', - 'py-', - ]), - ...mapObject(theme.container, 'max-w'), - ...mapArray(theme.text.size.body, 'text'), - ...mapArray(theme.text.size.title, 'text'), - ...mapObject(theme.text.family, 'font'), - ...reduceMultiple(theme.brandColors, colorPrefixes, colorSuffixes), - ...reduceMultiple(theme.textColors, colorPrefixes), - ].filter((className, index, self) => self.indexOf(className) === index) -} diff --git a/src/tools/getWhitelist.js b/src/tools/getWhitelist.js deleted file mode 100644 index 2947a1f..0000000 --- a/src/tools/getWhitelist.js +++ /dev/null @@ -1,16 +0,0 @@ -import getThemeWhitelist from './getThemeWhitelist' -import renderComponentsToString from './renderComponentsToString' - -import { classRegex } from './TailwindReactExtractor' - -export default (projectTheme = {}, projectWhitelist = []) => { - const components = renderComponentsToString(projectTheme) - // eslint-disable-next-line no-useless-escape - const componentWhitelist = components.match(classRegex) || [] - - return [ - ...componentWhitelist, - ...getThemeWhitelist(projectTheme), - ...projectWhitelist, - ].filter((className, index, array) => array.indexOf(className) === index) -} diff --git a/src/tools/index.js b/src/tools/index.js deleted file mode 100644 index bc53eef..0000000 --- a/src/tools/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as renderComponentsToString } from './renderComponentsToString' -export { default as getThemeWhitelist } from './getThemeWhitelist' -export { default as getWhitelist } from './getWhitelist' -export { default as TailwindReactExtractor } from './TailwindReactExtractor' diff --git a/src/tools/renderComponentsToString.jsx b/src/tools/renderComponentsToString.jsx deleted file mode 100644 index d888dc8..0000000 --- a/src/tools/renderComponentsToString.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react' -import ReactDOMServer from 'react-dom/server' -import * as lib from '..' - -export default (projectTheme = {}) => { - const { TailwindThemeProvider } = lib - - return ReactDOMServer.renderToStaticMarkup( - - {Object.keys(lib).map(key => { - if (/^[a-z]/.test(key) || key.startsWith('TailwindTheme')) { - return false - } - - const Component = lib[key] - - return - })} - , - ) -} diff --git a/src/components/typography/BrandText.md b/src/typography/BrandText.md similarity index 100% rename from src/components/typography/BrandText.md rename to src/typography/BrandText.md diff --git a/src/typography/BrandText.tsx b/src/typography/BrandText.tsx new file mode 100644 index 0000000..2f2d77d --- /dev/null +++ b/src/typography/BrandText.tsx @@ -0,0 +1,47 @@ +import type { ParagraphProps } from './Paragraph' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { withTheme, getColorShade } from '../theme' + +import { RawParagraph as Paragraph } from './Paragraph' + +export interface BrandTextProps + extends WithTheme, + ParagraphProps { + type: 'danger' | 'info' | 'warning' + textOnly?: boolean +} + +export const RawBrandText = ({ + theme, + textOnly, + type, + size, + ...rest +}: BrandTextProps) => { + const alertProps = !textOnly + ? { + bg: getColorShade(theme.brandColors[type], '100'), + border: [`l-${theme.accentSize}`, theme.brandColors[type]], + p: { x: theme.spacing.md, y: theme.spacing.sm }, + text: theme.textColors.body, + rounded: 'r', + } + : {} + + return ( + + {...rest} + theme={theme} + size={size} + rounded={theme.radius} + text={getColorShade(theme.brandColors[type], 1)} + m={{ b: theme.spacing.sm }} + {...alertProps} + /> + ) +} + +export const BrandText = withTheme(RawBrandText) diff --git a/src/typography/DangerText.md b/src/typography/DangerText.md new file mode 100644 index 0000000..896cc00 --- /dev/null +++ b/src/typography/DangerText.md @@ -0,0 +1,8 @@ +```jsx +import { DangerText } from 'tailwind-react-ui' +;<> + Simple danger text + + Simple danger text + +``` diff --git a/src/typography/DangerText.tsx b/src/typography/DangerText.tsx new file mode 100644 index 0000000..be0c495 --- /dev/null +++ b/src/typography/DangerText.tsx @@ -0,0 +1,13 @@ +import type { BrandTextProps } from './BrandText' + +import React from 'react' +import { BrandText } from './BrandText' + +export type DangerTextProps = Omit + +/** + * @see See [BrandText](#brandtext) for API. Sets `type` prop to `danger`. + */ +export const DangerText = ({ size = 1, ...props }: DangerTextProps) => ( + +) diff --git a/src/typography/InfoText.md b/src/typography/InfoText.md new file mode 100644 index 0000000..217ac84 --- /dev/null +++ b/src/typography/InfoText.md @@ -0,0 +1,10 @@ +```jsx +import { InfoText } from 'tailwind-react-ui' +;<> + Simple info text + + + Simple info text + + +``` diff --git a/src/typography/InfoText.tsx b/src/typography/InfoText.tsx new file mode 100644 index 0000000..5f7ca56 --- /dev/null +++ b/src/typography/InfoText.tsx @@ -0,0 +1,13 @@ +import type { BrandTextProps } from './BrandText' + +import React from 'react' +import { BrandText } from './BrandText' + +export type InfoTextProps = Omit + +/** + * @see See [BrandText](#brandtext) for API. Sets `type` prop to `info`. + */ +export const InfoText = (props: InfoTextProps) => ( + +) diff --git a/src/typography/Paragraph.md b/src/typography/Paragraph.md new file mode 100644 index 0000000..b406f9f --- /dev/null +++ b/src/typography/Paragraph.md @@ -0,0 +1,14 @@ +```jsx +import { Paragraph } from 'tailwind-react-ui' +;<> + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + +``` diff --git a/src/typography/Paragraph.test.tsx b/src/typography/Paragraph.test.tsx new file mode 100644 index 0000000..30c0b76 --- /dev/null +++ b/src/typography/Paragraph.test.tsx @@ -0,0 +1,30 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawParagraph as Paragraph } from './Paragraph' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render( + Lorem ipsum dolor sit amet, + ) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Paragraph', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ as: 'p' }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/typography/Paragraph.tsx b/src/typography/Paragraph.tsx new file mode 100644 index 0000000..a17b90e --- /dev/null +++ b/src/typography/Paragraph.tsx @@ -0,0 +1,43 @@ +import type { TextProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' +import { RawText as Text, getAsArray } from 'tailwind-react-primitives' + +import { withTheme } from '../theme' + +export interface ParagraphProps + extends WithTheme, + Omit, 'size'> { + lead?: boolean + size?: number +} + +export const RawParagraph = ({ + theme, + children, + as = 'p', + size, + lead, + text, + ...rest +}: ParagraphProps) => ( + + as={as} + text={ + [ + (size || lead) && + theme.text.size.body[ + (lead ? theme.text.size.body.length : size) ?? 2 - 1 + ], + ...getAsArray(text), + ].filter(Boolean) as string[] + } + m={{ b: theme.spacing.md }} + {...rest} + > + {children} + +) + +export const Paragraph = withTheme(RawParagraph) diff --git a/src/typography/Subtitle.md b/src/typography/Subtitle.md new file mode 100644 index 0000000..f21b040 --- /dev/null +++ b/src/typography/Subtitle.md @@ -0,0 +1,11 @@ +```jsx +import { Subtitle } from 'tailwind-react-ui' +;<> + Subtitle 6 + Subtitle 5 + Subtitle 4 + Subtitle 3 + Subtitle 2 + Subtitle 1 + +``` diff --git a/src/typography/Subtitle.test.tsx b/src/typography/Subtitle.test.tsx new file mode 100644 index 0000000..12a66be --- /dev/null +++ b/src/typography/Subtitle.test.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawSubtitle as Subtitle } from '.' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({}, testProps) + + const wrapper = render(Subtitle) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Subtitle', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ size: 3 }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/typography/Subtitle.tsx b/src/typography/Subtitle.tsx new file mode 100644 index 0000000..2a14dbe --- /dev/null +++ b/src/typography/Subtitle.tsx @@ -0,0 +1,15 @@ +import type { TitleProps } from './Title' + +import React from 'react' +import { Title } from './Title' + +export type SubtitleProps = Omit + +/** + * @see See [Title](#title) for prop type definitions. Sets `subtitle` to `true`. + */ +export const RawSubtitle = (props: SubtitleProps) => ( + +) + +export const Subtitle = RawSubtitle diff --git a/src/typography/Title.md b/src/typography/Title.md new file mode 100644 index 0000000..d1933a4 --- /dev/null +++ b/src/typography/Title.md @@ -0,0 +1,11 @@ +```jsx +import { Title } from 'tailwind-react-ui' +;<> + <Title size={6}>Title 6 + Title 5 + Title 4 + Title 3 + Title 2 + Title 1 + +``` diff --git a/src/typography/Title.test.tsx b/src/typography/Title.test.tsx new file mode 100644 index 0000000..e98ddfc --- /dev/null +++ b/src/typography/Title.test.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { render, RenderResult } from '@testing-library/react' + +import { RawTitle as Title } from './Title' +import { defaultTheme } from '../theme' + +const setup = ( + testProps = {}, +): [RenderResult, { props: Record }] => { + const props = Object.assign({ theme: defaultTheme }, testProps) + + const wrapper = render(Title) + + return [ + wrapper, + { + props, + }, + ] +} + +describe('Title', () => { + it('renders matching snapshot', () => { + const [{ asFragment }] = setup({ size: 3 }) + + expect(asFragment()).toMatchSnapshot() + }) +}) diff --git a/src/typography/Title.tsx b/src/typography/Title.tsx new file mode 100644 index 0000000..9101354 --- /dev/null +++ b/src/typography/Title.tsx @@ -0,0 +1,61 @@ +import type { TextProps } from 'tailwind-react-primitives' +import type { WithTheme } from '../theme' + +import React from 'react' + +import { RawText as Text } from 'tailwind-react-primitives' +import { withTheme } from '../theme' + +export interface TitleProps + extends WithTheme, + Omit, 'size'> { + subtitle?: boolean + flush?: boolean + level?: number + size?: number +} + +export const RawTitle = ({ + theme, + children, + as = 'h1', + size = 4, + subtitle, + flush, + level = 1, + ...rest +}: TitleProps) => { + const hLevel = level || Math.max(7 - size, 1) + const element: TitleProps['as'] = as || `h${hLevel}` + + let ariaProps: TextProps = {} + + if (!subtitle && typeof element === 'string' && !/h[1-6]/i.test(element)) { + ariaProps = { + 'role': 'heading', + 'aria-level': hLevel, + } + } + + return ( + + as={element} + {...ariaProps} + leading="tight" + font={[ + theme.text.family[subtitle ? 'subtitle' : 'title'], + subtitle ? 'medium' : 'bold', + ]} + text={[ + theme.text.size.title[size - 1], + subtitle ? theme.textColors.body : theme.textColors.emphasas, + ]} + m={!flush ? { b: theme.spacing.md } : undefined} + {...rest} + > + {children} + + ) +} + +export const Title = withTheme(RawTitle) diff --git a/src/typography/WarningText.md b/src/typography/WarningText.md new file mode 100644 index 0000000..b0e323b --- /dev/null +++ b/src/typography/WarningText.md @@ -0,0 +1,8 @@ +```jsx +import { WarningText } from 'tailwind-react-ui' +;<> + Simple warning text + + Simple warning text + +``` diff --git a/src/typography/WarningText.tsx b/src/typography/WarningText.tsx new file mode 100644 index 0000000..92f8f23 --- /dev/null +++ b/src/typography/WarningText.tsx @@ -0,0 +1,13 @@ +import type { BrandTextProps } from './BrandText' + +import React from 'react' +import { BrandText } from './BrandText' + +export type WarningTextProps = Omit + +/** + * @see See [BrandText](#brandtext) for API. Sets `type` prop to `warning`. + */ +export const WarningText = (props: WarningTextProps) => ( + +) diff --git a/src/typography/__snapshots__/Paragraph.test.tsx.snap b/src/typography/__snapshots__/Paragraph.test.tsx.snap new file mode 100644 index 0000000..3591d2b --- /dev/null +++ b/src/typography/__snapshots__/Paragraph.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Paragraph renders matching snapshot 1`] = ` + +

+ Lorem ipsum dolor sit amet +

+ +`; diff --git a/src/typography/__snapshots__/Subtitle.test.tsx.snap b/src/typography/__snapshots__/Subtitle.test.tsx.snap new file mode 100644 index 0000000..dc5b773 --- /dev/null +++ b/src/typography/__snapshots__/Subtitle.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Subtitle renders matching snapshot 1`] = ` + +

+ Subtitle +

+
+`; diff --git a/src/typography/__snapshots__/Title.test.tsx.snap b/src/typography/__snapshots__/Title.test.tsx.snap new file mode 100644 index 0000000..c8f7c50 --- /dev/null +++ b/src/typography/__snapshots__/Title.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Title renders matching snapshot 1`] = ` + +

+ Title +

+
+`; diff --git a/src/typography/index.ts b/src/typography/index.ts new file mode 100644 index 0000000..8991e21 --- /dev/null +++ b/src/typography/index.ts @@ -0,0 +1,8 @@ +export * from './Subtitle' +export * from './Paragraph' +export * from './Title' + +export * from './BrandText' +export * from './DangerText' +export * from './InfoText' +export * from './WarningText' diff --git a/src/utils/getUniqueID.ts b/src/utils/getUniqueID.ts new file mode 100644 index 0000000..d91ec3b --- /dev/null +++ b/src/utils/getUniqueID.ts @@ -0,0 +1,3 @@ +import uniqueId from 'lodash.uniqueid' + +export const getUniqueID = (prefix: string) => uniqueId(`${prefix}-`) diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..28ad45b --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './getUniqueID' +export * from './withTransition' diff --git a/src/utils/withTransition.tsx b/src/utils/withTransition.tsx new file mode 100644 index 0000000..a972e1d --- /dev/null +++ b/src/utils/withTransition.tsx @@ -0,0 +1,29 @@ +import type { + TransitionProps, + TransitionStatus as RtgTransitionStatus, +} from 'react-transition-group/Transition' + +import React from 'react' +import { Transition } from 'react-transition-group' +import get from 'lodash.get' + +export type TransitionStatus = RtgTransitionStatus + +export interface WithTransition { + transition?: TransitionStatus +} + +export const withTransition =

>( + Component: React.FC

, + { inState, ...rest }: { inState: string } & Partial, +) => { + const WithTransition: React.FC

= (componentProps) => ( + + {(state) => } + + ) + + WithTransition.displayName = `WithTransition(${Component.displayName})` + + return WithTransition +} diff --git a/tailwind.config.js b/tailwind.config.js index 78a8d21..9868401 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,4 @@ -const plugins = require('./src/plugins') +const plugins = require('./plugins') module.exports = { future: { diff --git a/tools/index.js b/tools/index.js new file mode 100644 index 0000000..b584cbc --- /dev/null +++ b/tools/index.js @@ -0,0 +1 @@ +module.exports = require('tailwind-react-primitives/tools') diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..acc9ad8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,38 @@ +{ + "include": ["src", "types"], + "exclude": [ + "node_modules", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx" + ], + "compilerOptions": { + "target": "es2019", + "module": "esnext", + "lib": ["dom", "esnext"], + "importHelpers": true, + "declaration": false, + "sourceMap": true, + "rootDir": "./", + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "baseUrl": "./", + "paths": { + "*": ["src/*", "node_modules/*"] + }, + "jsx": "react", + "esModuleInterop": true + } +}