From fff057d8e6f387acac12b7eb9653b460ab853a34 Mon Sep 17 00:00:00 2001 From: Mikhail Mikheev Date: Mon, 16 Dec 2019 17:04:42 +0400 Subject: [PATCH] Development (#355) * Adds cookie permissions to localStorage/redux state * Adds action * Adds files to git * (fix) linting issues * (update) flow-typed * (update) .eslint and .flowconfig * (add) cookie banner * Finish cookie banner implementation * (Add) checkbox's disabled style. * Removes redux for cookiesStorage * Fix cookieStore deletion * Fixs cookies acceptance * Fixs cookies banner verbiage Fix "x" in wrong place for snackbar messages * (remove) unused library * Adds cookies utils Replaces localStorage with cookies Adds js-cookie * (fix) added correct polished library and import, updated flow-typed * (update) removed polish flow type, added js-cookie flow type * Add link to cookie policy, use generic links for legal docs * Remove link to cookie policy from sidebar, link cookie policy in the banner * Let the user re-open the cookie banner * remove withMutations from cookies reducer, move utils/cookies to logic/cookies * Now the sidebar closes when the cookie banner is toggled * Feature #169: Intercom (#301) * Implements intercom Adds REACT_APP_INTERCOM_ID_MAINNET and REACT_APP_INTERCOM_ID_RINKEBY env vars * Adds .env.example * Adds intercom env vars * Updates env vars Replaces "rinkeby" and "mainnet" with "non-production" and "production" * Now loads intercom after the user accepted the analytics * Add env variable for production intercom id * Update .env.example * Removes react-intercom Fixs getIntercomId with default dev appID Now loads intercom as script * Renegerate flow-types * Remove 'Hide zero balances' (#310) * Use medium font size for 'select an asset' label (#312) * Feature #272: Google Analytics (#299) * Adds google analytics tracking for every route * Adds cookies acceptance check before tracking * Fix react-ga dependency * Fix cookieStore deletion * Merge with #189-cookie-banner * Fixs react ga version Refactored HOC with hooks * Fix TYPO * Fix path for cookies utils * Fix imports * remove flow type definition for polish * Add GA ID log * Fix load GA After cookies acceptance * Feature #224: Activate tokens automatically (#300) * Replace 'Manage Tokens' with 'Manage List' * prevent 301 redirects * Add `BLACKLISTED_TOKENS` key to persist through immortal * Add store/action to extract _activate tokens by its balance_ - keeps already activated tokens - discards blacklisted tokens - adds tokens whose vales are bigger than zero and are not blacklisted * Add `blacklistedTokens` list to safe's store * Display activeTokensByBalance in 'Balances' screen * Enable token's blacklisting functionality in Tokens List * Retrieve balance from API * Rename action to `activateTokensByBalance` * Fix linting errors - line too long - required return * Do not persist a separate list into `BLACKLISTED_TOKENS` * Typo fix (#326) * Fix security vulnerability: Remove uglifyjs, use terser plugin (#327) * Remove uglifyjs, use terser plugin * fix css-loader config * Feature #256: Sticky header (#308) * Add sticky header * Remove react-headroom, set position to fixed for header * Regenerate yarn lock * Remove unused headroom style from root.scss * Pull from dev, conflict fixes * Update welcome text (#323) * Feature #137: Tx list improvements (#222) * Fix swapOwners threshold displayed as hex in tx list * Refactor spinner in empty table * Fix number of rows per page in table pagination * Add use of EtherscanLink component * Set short version of strings in tx list * Adjust styles in tx list * Add more styles to table * WIP * An attempt to fix #204 by showing UNKNOWN instead of failed to fetch token symbol * Table pagination style fixes * Show confirm transaction button in owner list * Update dependencies * Add confirmation icons to owner list in tx list * exclude unneeded stuff from travis.yml * Adds cookie permissions to localStorage/redux state * Update dependencies * Adds action * Adds files to git * (fix) linting issues * (update) flow-typed * (update) .eslint and .flowconfig * (add) cookie banner * Finish cookie banner implementation * (Add) checkbox's disabled style. * Removes redux for cookiesStorage * Fix cookieStore deletion * Increase TO_EXP for bignumber.js * Fixs cookies acceptance * Fixs cookies banner verbiage Fix "x" in wrong place for snackbar messages * (fix) added correct polished library and import, updated flow-typed * (update) removed polish flow type, added js-cookie flow type * Add link to cookie policy, use generic links for legal docs * Remove link to cookie policy from sidebar, link cookie policy in the banner * Mock Safe creation transaction * Format code * Fix break statement * Remove deployment of storybook * Let the user re-open the cookie banner * Update tx status messages and visual confirmation progress * Fix svg in tx confirmation progress * Add styles to tx type in tx list * Replace nonce in tx list with tx id * Update opacity of cancelled tx * Fix short version of address * remove withMutations from cookies reducer, move utils/cookies to logic/cookies * Now the sidebar closes when the cookie banner is toggled * Fix styles in tx list * Add Pending status in tx description * (remove) unused library * Adds cookies utils Replaces localStorage with cookies Adds js-cookie * Set 25 rows per page in tx list by default * Align tx table * Adjust tx table and tx details borders * Fix fetching transactions to show Safe creation tx alone * Fix failed Safe creation transaction * Add styles to tx data * Refactor and fix owner list in transaction * Refactor use of theme variables * Remove storybook files * Update dependencies * Fix warnings * Fix dependencies * Update file-loader config * Fix owner colors in the tx confirmation progress * Fix transaction type icon height * Tx list adjustments * Update readme * (Feature) Etherscan button icon (#331) * (add) new open on etherscan button icon * (remove) unused asset * (fix) icon background * Feature #239: Replace early access label with network label (#311) * Remove early access label * Revert "Remove early access label" This reverts commit 34682f0f6d9c1974a6e45c2a31358864931d9c1e. * Replace early access label with network label * Capitalzie first letter of the network name * Adds threshold update on checkAndUpdateSafe (#320) * Feature #159: Pending transaction that requires user confirmation (#330) * Creates a new notification: waitingConfirmation Adds key as optional parameter for notification Implemented getAwaitingTransactions to get the transactions that needs to be confirmed by the current user Not fetchTransactions action also dispatch a notification for awaiting transactions Improved performance of routes/safe/container/index to avoid re-rendering * Removes notification logic on fetchTransactions Adds notificationsMiddleware * Moves fetchTransaction to container * Removes unused param on fetchTransactions * Fixs null safe check * Fixs middleware declaration * Removes lodash * Changes cancelled transaction detection logic * Feature #122: Multisig migration (#315) * Adds query-string package.json Parses query string on open layout * Implements load all the values on openSafe view from param querys * Adds query params validation * Moves query parse logic to open.jsx * Changes default no metamask component on open page * Replaces global isNaN * Fix threshold parsing validation * Updates the welcome component with new verbiage for open * Renames isOpenSafe to isOldMultisigMigration * Merge branch 'development' of https://github.com/gnosis/safe-react into 122-multisig-migration # Conflicts: # src/routes/open/components/Layout.jsx * Merge branch 'development' of https://github.com/gnosis/safe-react into 159-pending-transactions # Conflicts: # src/routes/safe/components/Transactions/index.jsx # yarn.lock * set anonymizeIp to true (#335) * Feature #180: Predict transaction nonce (#293) * Dep bump * Fetch transactions when safe view is mounted * eslint fix * Calculate new tx nonce from latest tx in service * Fix tx cancellation, allow passing nonce to createTransaction * dep bump * Refactor createTransaction/processTransaction to use object as argument * Adopting transactions table to new send tx flow with predicted nonces * dep bump, disable esModule in file-loader options after new v5 release * Don't show older tx annotation for already executed txs * sort tx by nonce * get new safe nonce after tx execution * Bugfixes * remove whitespace for showOlderTxAnnotation * Feature #329: Rename to Multisig (#334) * Rename to Multisig * migration text fix * replace safe for teams with multisig * Fixs race condition (#341) Fixs typo * (Feature) Incoming transactions (#333) * Add `blockNumber` to transactions model * Create `incomingTransaction` node in store and load it along with `transactions` * Add incoming transfers to the Transactions table * Rename `transactionHash` to `executionTxHash` for better incoming/outgoing txs unification in Transactions table * Add incoming transactions details * Add transaction type icon in table row * Add snackbar notification for incoming txs * Make incoming transaction snackbar to show on any tab * Use makeStyles hooks * Fix incoming amounts conversion from wei * Make concurrent promise calls * Use date to calculate transactions ids * Prevent repeating messages - also move logic to display snack bar into the notifications middleware * Merge transactions and incomingTxs to the transactions selector * Show 'Multiple incoming transfers' if they are more than 3 * Prevent incoming transactions snack bar for first-timer users * Set ID as the default order * Use constant for _incoming_ type * Feature #154: Fiat Balances (#290) * Adds DropdownCurrency Adds redux store for currencyValues Adds Value column on the assets table Adds mocked currency values * (add) base currency dropdown * (add) dropdown styles * Refactors data fetching of the balances list Now uses the endpoint * Fix column value styling * Adds support for ECB currency values * Fixs list overflow * Changes endpoint url Adds decimals for balance values * (fix) remove inline style * (add) currencies dropdown search field * (fix) list items' hover color * Implements filter search * Fix warning on dropdown template * Saves selected currency in localStorage * Remove spaces on curly braces Add alt Renames rowItem to cellItem Improves fetchCurrenciesRates handling * Removes withMutations * Removes middleware Export style to another file for dropdownCurrency * Adds classNames * Fix incomming transactions fetching (#346) * Feature: Activate fortmatic (#339) * Add fortmatic integration to web3connect * add fortmatic * Safe open form improvements: limit calling initContracts to 1 time * update .env.example * Feature #336: Confirmation required notification for non-owners fix (#338) * Refactors grantedSelector with isUserOwner function Checks if the user is owner of the safe before sending notification * Adds safeParamAddressFromStateSelector Refactors notificationsMiddleware with new selector * Remove old size check * safe notifications middleware fixes * add apt-get update to travis yml * (Fix) Incoming transactions inline-styles (#344) * Remove inline styles * Replace ternary with logical && operator * use cn as shortcut for classnames --- .env.example | 4 + .flowconfig | 1 - .gitignore | 1 - .storybook/addons.js | 3 - .storybook/config.js | 35 - .storybook/preview-head.html | 1 - .storybook/webpack.config.js | 13 - .travis.yml | 1 + config/webpack.config.dev.js | 1 + .../npm/@sambego/storybook-state_vx.x.x.js | 122 - .../npm/@storybook/addon-actions_vx.x.x.js | 187 - .../npm/@storybook/addon-knobs_vx.x.x.js | 283 -- .../npm/@storybook/addon-links_vx.x.x.js | 101 - flow-typed/npm/@storybook/react_v5.x.x.js | 61 - flow-typed/npm/storybook-host_vx.x.x.js | 249 -- flow-typed/npm/storybook-router_v0.x.x.js | 45 - package.json | 27 +- public/index.html | 2 +- readme.md | 2 + src/components/ConnectButton/index.jsx | 14 +- src/components/CookiesBanner/index.jsx | 4 +- src/components/CopyBtn/index.jsx | 6 +- .../EtherscanBtn/img/etherscan-open.svg | 6 + src/components/EtherscanBtn/index.jsx | 19 +- src/components/EtherscanBtn/search.svg | 5 - src/components/EtherscanLink/index.jsx | 33 +- src/components/EtherscanLink/style.js | 8 + .../Header/assets/gnosis-safe-logo.svg | 1 - .../assets/gnosis-safe-multisig-logo.svg | 1 + src/components/Header/components/Layout.jsx | 43 +- .../Header/components/Layout.stories.js | 38 - ...{EarlyAccessLabel.jsx => NetworkLabel.jsx} | 10 +- src/components/Loader/indes.stories.js | 11 - src/components/Modal/index.jsx | 3 +- src/components/Root/index.scss | 2 +- src/components/Table/TableHead.jsx | 6 +- src/components/Table/index.jsx | 28 +- src/components/forms/AddressInput/index.jsx | 3 + src/components/layout/Block/index.jsx | 2 +- .../layout/Hairline/index.stories.js | 16 - src/components/layout/Page/index.scss | 4 +- src/components/layout/PageFrame/index.jsx | 9 +- src/config/index.js | 5 + src/index.js | 2 + src/logic/contracts/methodIds.js | 2 +- .../api/fetchCurrenciesRates.js | 19 + .../api/fetchTokenCurrenciesBalances.js | 15 + .../actions/fetchCurrencySelectedValue.js | 35 + .../store/actions/fetchCurrencyValues.js | 43 + .../store/actions/saveCurrencySelected.js | 18 + .../store/actions/setCurrencyBalances.js | 10 + .../store/actions/setCurrencySelected.js | 13 + .../store/model/currencyValues.js | 61 + .../store/reducer/currencyValues.js | 28 + .../currencyValues/store/selectors/index.js | 9 + .../notifications/notificationBuilder.js | 18 +- src/logic/notifications/notificationTypes.js | 17 + .../store/actions/enqueueSnackbar.js | 3 +- .../safe/transactions/awaitingTransactions.js | 43 + .../safe/transactions/incomingTxHistory.js | 11 + .../safe/transactions/notifiedTransactions.js | 2 + src/logic/safe/transactions/send.js | 1 - src/logic/wallets/ethAddresses.js | 36 +- src/routes/load/components/Layout.jsx | 4 +- src/routes/open/components/Layout.jsx | 70 +- src/routes/open/components/Layout.stories.js | 68 - .../open/components/SafeNameForm/index.jsx | 34 +- .../SafeOwnersConfirmationsForm/index.jsx | 4 +- src/routes/open/components/fields.js | 1 + src/routes/open/container/Open.jsx | 54 +- src/routes/opening/Layout.stories.js | 19 - .../components/Balances/Receive/index.jsx | 6 +- .../SendModal/screens/ChooseTxType/index.jsx | 4 +- .../screens/ReviewCustomTx/index.jsx | 13 +- .../SendModal/screens/ReviewCustomTx/style.js | 4 +- .../SendModal/screens/ReviewTx/index.jsx | 13 +- .../SendModal/screens/ReviewTx/style.js | 4 +- .../SendModal/screens/SendCustomTx/index.jsx | 3 +- .../SendModal/screens/SendCustomTx/style.js | 4 +- .../SendModal/screens/SendFunds/index.jsx | 3 +- .../SendModal/screens/SendFunds/style.js | 4 +- .../Tokens/screens/AddCustomToken/style.js | 4 +- .../safe/components/Balances/dataFetcher.js | 43 +- src/routes/safe/components/Balances/index.jsx | 69 +- src/routes/safe/components/Balances/style.js | 10 +- .../components/DropdownCurrency/img/check.svg | 3 + .../components/DropdownCurrency/index.jsx | 124 + .../safe/components/DropdownCurrency/style.js | 119 + src/routes/safe/components/Layout.jsx | 10 +- src/routes/safe/components/Layout.stories.js | 17 - .../safe/components/NoRights/index.stories.js | 11 - .../ManageOwners/AddOwnerModal/index.jsx | 10 +- .../AddOwnerModal/screens/OwnerForm/style.js | 2 +- .../AddOwnerModal/screens/Review/style.js | 2 +- .../screens/ThresholdForm/style.js | 4 +- .../ManageOwners/EditOwnerModal/style.js | 2 +- .../ManageOwners/RemoveOwnerModal/index.jsx | 10 +- .../screens/CheckOwner/style.js | 2 +- .../RemoveOwnerModal/screens/Review/style.js | 2 +- .../screens/ThresholdForm/style.js | 4 +- .../ManageOwners/ReplaceOwnerModal/index.jsx | 10 +- .../screens/OwnerForm/style.js | 2 +- .../ReplaceOwnerModal/screens/Review/style.js | 2 +- .../components/Settings/ManageOwners/style.js | 4 +- .../Settings/RemoveSafeModal/index.jsx | 4 +- .../Settings/RemoveSafeModal/style.js | 2 +- .../Settings/ThresholdSettings/index.jsx | 10 +- .../Settings/ThresholdSettings/style.js | 4 +- src/routes/safe/components/Settings/style.js | 6 +- .../Transactions/NoTransactions/index.jsx | 20 - .../ExpandedTx/ApproveTxModal/index.jsx | 38 +- .../ExpandedTx/ApproveTxModal/style.js | 2 +- .../ExpandedTx/CancelTxModal/index.jsx | 12 +- .../ExpandedTx/CancelTxModal/style.js | 2 +- .../IncomingTxDescription/index.jsx | 54 + .../ExpandedTx/OwnersColumn/ButtonRow.jsx | 63 +- .../TxsTable/ExpandedTx/OwnersColumn/List.jsx | 67 - .../OwnersColumn/OwnerComponent.jsx | 104 + .../ExpandedTx/OwnersColumn/OwnersList.jsx | 65 + .../assets/check-large-filled-green.svg | 6 + .../assets/confirm-large-green.svg | 3 + .../assets/confirm-large-grey.svg | 3 + .../assets/confirm-small-filled.svg | 3 + .../assets/confirm-small-green.svg | 3 + .../assets/confirm-small-grey.svg | 3 + .../ExpandedTx/OwnersColumn/index.jsx | 139 +- .../TxsTable/ExpandedTx/OwnersColumn/style.js | 78 +- .../ExpandedTx/TxDescription/index.jsx | 43 +- .../ExpandedTx/TxDescription/utils.js | 3 + .../TxsTable/ExpandedTx/index.jsx | 162 +- .../Transactions/TxsTable/ExpandedTx/style.js | 18 +- .../Transactions/TxsTable/Status/index.jsx | 10 +- .../Transactions/TxsTable/Status/style.js | 23 +- .../TxsTable/TxType/assets/custom.svg | 3 + .../TxsTable/TxType/assets/incoming.svg | 3 + .../TxsTable/TxType/assets/outgoing.svg | 3 + .../TxsTable/TxType/assets/settings.svg | 3 + .../Transactions/TxsTable/TxType/index.jsx | 44 + .../Transactions/TxsTable/TxType/style.js | 12 + .../Transactions/TxsTable/columns.js | 85 +- .../Transactions/TxsTable/index.jsx | 75 +- .../components/Transactions/TxsTable/style.js | 12 +- .../safe/components/Transactions/index.jsx | 51 +- src/routes/safe/container/actions.js | 10 +- src/routes/safe/container/index.jsx | 31 +- src/routes/safe/container/selector.js | 61 +- .../store/actions/addIncomingTransactions.js | 6 + .../safe/store/actions/createTransaction.js | 125 +- src/routes/safe/store/actions/fetchSafe.js | 11 +- .../safe/store/actions/fetchTransactions.js | 124 +- .../safe/store/actions/processTransaction.js | 62 +- .../safe/store/actions/updateSafeThreshold.js | 8 + .../middleware/notificationsMiddleware.js | 127 + .../safe/store/middleware/safeStorage.js | 2 +- .../safe/store/models/incomingTransaction.js | 39 + src/routes/safe/store/models/safe.js | 4 + src/routes/safe/store/models/transaction.js | 20 +- .../store/reducer/incomingTransactions.js | 16 + src/routes/safe/store/reducer/safe.js | 6 + src/routes/safe/store/selectors/index.js | 27 +- src/routes/welcome/components/Layout.jsx | 100 +- .../welcome/components/Layout.stories.js | 27 - src/store/index.js | 11 +- src/theme/mui.js | 55 +- src/utils/googleAnalytics.js | 1 + src/utils/storage/transactions.js | 7 - src/utils/verifyRecurringUser.js | 18 + yarn.lock | 3362 +++++------------ 168 files changed, 3546 insertions(+), 4535 deletions(-) delete mode 100644 .storybook/addons.js delete mode 100644 .storybook/config.js delete mode 100644 .storybook/preview-head.html delete mode 100644 .storybook/webpack.config.js delete mode 100644 flow-typed/npm/@sambego/storybook-state_vx.x.x.js delete mode 100644 flow-typed/npm/@storybook/addon-actions_vx.x.x.js delete mode 100644 flow-typed/npm/@storybook/addon-knobs_vx.x.x.js delete mode 100644 flow-typed/npm/@storybook/addon-links_vx.x.x.js delete mode 100644 flow-typed/npm/@storybook/react_v5.x.x.js delete mode 100644 flow-typed/npm/storybook-host_vx.x.x.js delete mode 100644 flow-typed/npm/storybook-router_v0.x.x.js create mode 100644 src/components/EtherscanBtn/img/etherscan-open.svg delete mode 100644 src/components/EtherscanBtn/search.svg create mode 100644 src/components/EtherscanLink/style.js delete mode 100644 src/components/Header/assets/gnosis-safe-logo.svg create mode 100644 src/components/Header/assets/gnosis-safe-multisig-logo.svg delete mode 100644 src/components/Header/components/Layout.stories.js rename src/components/Header/components/{EarlyAccessLabel.jsx => NetworkLabel.jsx} (73%) delete mode 100644 src/components/Loader/indes.stories.js delete mode 100644 src/components/layout/Hairline/index.stories.js create mode 100644 src/logic/currencyValues/api/fetchCurrenciesRates.js create mode 100644 src/logic/currencyValues/api/fetchTokenCurrenciesBalances.js create mode 100644 src/logic/currencyValues/store/actions/fetchCurrencySelectedValue.js create mode 100644 src/logic/currencyValues/store/actions/fetchCurrencyValues.js create mode 100644 src/logic/currencyValues/store/actions/saveCurrencySelected.js create mode 100644 src/logic/currencyValues/store/actions/setCurrencyBalances.js create mode 100644 src/logic/currencyValues/store/actions/setCurrencySelected.js create mode 100644 src/logic/currencyValues/store/model/currencyValues.js create mode 100644 src/logic/currencyValues/store/reducer/currencyValues.js create mode 100644 src/logic/currencyValues/store/selectors/index.js create mode 100644 src/logic/safe/transactions/awaitingTransactions.js create mode 100644 src/logic/safe/transactions/incomingTxHistory.js delete mode 100644 src/routes/open/components/Layout.stories.js delete mode 100644 src/routes/opening/Layout.stories.js create mode 100644 src/routes/safe/components/DropdownCurrency/img/check.svg create mode 100644 src/routes/safe/components/DropdownCurrency/index.jsx create mode 100644 src/routes/safe/components/DropdownCurrency/style.js delete mode 100644 src/routes/safe/components/Layout.stories.js delete mode 100644 src/routes/safe/components/NoRights/index.stories.js delete mode 100644 src/routes/safe/components/Transactions/NoTransactions/index.jsx create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.jsx delete mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/List.jsx create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.jsx create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnersList.jsx create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/check-large-filled-green.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-green.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-grey.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-filled.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-green.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-grey.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/TxType/assets/custom.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/TxType/assets/incoming.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/TxType/assets/outgoing.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/TxType/assets/settings.svg create mode 100644 src/routes/safe/components/Transactions/TxsTable/TxType/index.jsx create mode 100644 src/routes/safe/components/Transactions/TxsTable/TxType/style.js create mode 100644 src/routes/safe/store/actions/addIncomingTransactions.js create mode 100644 src/routes/safe/store/actions/updateSafeThreshold.js create mode 100644 src/routes/safe/store/middleware/notificationsMiddleware.js create mode 100644 src/routes/safe/store/models/incomingTransaction.js create mode 100644 src/routes/safe/store/reducer/incomingTransactions.js delete mode 100644 src/routes/welcome/components/Layout.stories.js create mode 100644 src/utils/verifyRecurringUser.js diff --git a/.env.example b/.env.example index 07de1d01..c927840d 100644 --- a/.env.example +++ b/.env.example @@ -9,3 +9,7 @@ REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET= # For production environments REACT_APP_INTERCOM_ID= +REACT_APP_PORTIS_ID= +REACT_APP_SQUARELINK_ID= +REACT_APP_FORTMATIC_KEY= + diff --git a/.flowconfig b/.flowconfig index 3ad1a536..c95da88a 100644 --- a/.flowconfig +++ b/.flowconfig @@ -3,7 +3,6 @@ /contracts/**/.* /scripts/**/.* /public/**/.* -/src/test/**/.* /babel.config.js /jest.config.js /truffle.js diff --git a/.gitignore b/.gitignore index 9279d6b3..daa0b33c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ node_modules/ build_webpack/ -build_storybook/ .DS_Store build/ yarn-error.log diff --git a/.storybook/addons.js b/.storybook/addons.js deleted file mode 100644 index da1dfeda..00000000 --- a/.storybook/addons.js +++ /dev/null @@ -1,3 +0,0 @@ -import '@storybook/addon-actions/register' -import '@storybook/addon-links/register' -import '@storybook/addon-knobs/register' \ No newline at end of file diff --git a/.storybook/config.js b/.storybook/config.js deleted file mode 100644 index d6e0a140..00000000 --- a/.storybook/config.js +++ /dev/null @@ -1,35 +0,0 @@ -import 'babel-polyfill' -import { addDecorator, configure } from '@storybook/react' -import { withKnobs } from '@storybook/addon-knobs' -import { MuiThemeProvider } from '@material-ui/core/styles' -import * as React from 'react' -import { Provider } from 'react-redux' -import StoryRouter from 'storybook-router' -import { store } from '~/store' -import theme from '~/theme/mui' -import 'index.scss' - -(function (global) { - //Useful for adding data and libraries to window object. -})(typeof window !== 'undefined' ? window : {}); - -addDecorator(withKnobs); -addDecorator(StoryRouter()) - -addDecorator((story) => ( - - - { story() } - - -)) - -const components = require.context('../src/components', true, /\.stories\.((js|ts)x?)$/) -const routes = require.context('../src/routes', true, /\.stories\.((js|ts)x?)$/) - -function loadStories() { - components.keys().forEach((filename) => components(filename)) - routes.keys().forEach((filename) => routes(filename)) -} - -configure(loadStories, module) diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html deleted file mode 100644 index e578778c..00000000 --- a/.storybook/preview-head.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js deleted file mode 100644 index 3615105e..00000000 --- a/.storybook/webpack.config.js +++ /dev/null @@ -1,13 +0,0 @@ - -process.env.NODE_ENV = 'development' -const prodConfig = require('../config/webpack.config.dev'); - -module.exports = function(storybookConfig, configType) { - - const config = Object.assign({}, prodConfig); - - storybookConfig.module.rules = storybookConfig.module.rules.concat(config.module.rules) - storybookConfig.resolve = config.resolve; - - return storybookConfig; -}; diff --git a/.travis.yml b/.travis.yml index 8d957645..06dcb3ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,7 @@ matrix: - REACT_APP_NETWORK='rinkeby' before_install: # Needed to deploy pull request and releases + - sudo apt-get update - sudo apt-get -y install python-pip python-dev - pip install awscli --upgrade --user # Install truffle diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index 81b46c6f..01d51764 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -133,6 +133,7 @@ module.exports = { { loader: 'file-loader', options: { + esModule: false, name: 'img/[hash].[ext]', esModule: false }, diff --git a/flow-typed/npm/@sambego/storybook-state_vx.x.x.js b/flow-typed/npm/@sambego/storybook-state_vx.x.x.js deleted file mode 100644 index d5b4f370..00000000 --- a/flow-typed/npm/@sambego/storybook-state_vx.x.x.js +++ /dev/null @@ -1,122 +0,0 @@ -// flow-typed signature: 9e597e3161a1342a9e77ec9437783354 -// flow-typed version: <>/@sambego/storybook-state_v^1.3.6/flow_v0.112.0 - -/** - * This is an autogenerated libdef stub for: - * - * '@sambego/storybook-state' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module '@sambego/storybook-state' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module '@sambego/storybook-state/dist' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/dist/State' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/dist/StateDecorator' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/dist/Store' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/enzyme.config' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/jest.config' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/src' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/src/State' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/src/StateDecorator' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/src/Store' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/tests/State.test' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/tests/StateDecorator.test' { - declare module.exports: any; -} - -declare module '@sambego/storybook-state/tests/Store.test' { - declare module.exports: any; -} - -// Filename aliases -declare module '@sambego/storybook-state/dist/index' { - declare module.exports: $Exports<'@sambego/storybook-state/dist'>; -} -declare module '@sambego/storybook-state/dist/index.js' { - declare module.exports: $Exports<'@sambego/storybook-state/dist'>; -} -declare module '@sambego/storybook-state/dist/State.js' { - declare module.exports: $Exports<'@sambego/storybook-state/dist/State'>; -} -declare module '@sambego/storybook-state/dist/StateDecorator.js' { - declare module.exports: $Exports<'@sambego/storybook-state/dist/StateDecorator'>; -} -declare module '@sambego/storybook-state/dist/Store.js' { - declare module.exports: $Exports<'@sambego/storybook-state/dist/Store'>; -} -declare module '@sambego/storybook-state/enzyme.config.js' { - declare module.exports: $Exports<'@sambego/storybook-state/enzyme.config'>; -} -declare module '@sambego/storybook-state/jest.config.js' { - declare module.exports: $Exports<'@sambego/storybook-state/jest.config'>; -} -declare module '@sambego/storybook-state/src/index' { - declare module.exports: $Exports<'@sambego/storybook-state/src'>; -} -declare module '@sambego/storybook-state/src/index.js' { - declare module.exports: $Exports<'@sambego/storybook-state/src'>; -} -declare module '@sambego/storybook-state/src/State.js' { - declare module.exports: $Exports<'@sambego/storybook-state/src/State'>; -} -declare module '@sambego/storybook-state/src/StateDecorator.js' { - declare module.exports: $Exports<'@sambego/storybook-state/src/StateDecorator'>; -} -declare module '@sambego/storybook-state/src/Store.js' { - declare module.exports: $Exports<'@sambego/storybook-state/src/Store'>; -} -declare module '@sambego/storybook-state/tests/State.test.js' { - declare module.exports: $Exports<'@sambego/storybook-state/tests/State.test'>; -} -declare module '@sambego/storybook-state/tests/StateDecorator.test.js' { - declare module.exports: $Exports<'@sambego/storybook-state/tests/StateDecorator.test'>; -} -declare module '@sambego/storybook-state/tests/Store.test.js' { - declare module.exports: $Exports<'@sambego/storybook-state/tests/Store.test'>; -} diff --git a/flow-typed/npm/@storybook/addon-actions_vx.x.x.js b/flow-typed/npm/@storybook/addon-actions_vx.x.x.js deleted file mode 100644 index ae42a0a3..00000000 --- a/flow-typed/npm/@storybook/addon-actions_vx.x.x.js +++ /dev/null @@ -1,187 +0,0 @@ -// flow-typed signature: 64c369e4ed0c4a705b2f36b522874cac -// flow-typed version: <>/@storybook/addon-actions_v5.2.6/flow_v0.112.0 - -/** - * This is an autogenerated libdef stub for: - * - * '@storybook/addon-actions' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module '@storybook/addon-actions' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module '@storybook/addon-actions/dist/components/ActionLogger' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/components/ActionLogger/style' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/constants' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/containers/ActionLogger' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/manager' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/models/ActionDisplay' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/models/ActionOptions' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/models/ActionsFunction' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/models/ActionsMap' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/models/DecoratorFunction' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/models/HandlerFunction' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/models' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/preview/action' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/preview/actions' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/preview/configureActions' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/preview/decorateAction' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/preview' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/preview/withActions' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/dist/typings.d' { - declare module.exports: any; -} - -declare module '@storybook/addon-actions/register' { - declare module.exports: any; -} - -// Filename aliases -declare module '@storybook/addon-actions/dist/components/ActionLogger/index' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/components/ActionLogger'>; -} -declare module '@storybook/addon-actions/dist/components/ActionLogger/index.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/components/ActionLogger'>; -} -declare module '@storybook/addon-actions/dist/components/ActionLogger/style.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/components/ActionLogger/style'>; -} -declare module '@storybook/addon-actions/dist/constants.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/constants'>; -} -declare module '@storybook/addon-actions/dist/containers/ActionLogger/index' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/containers/ActionLogger'>; -} -declare module '@storybook/addon-actions/dist/containers/ActionLogger/index.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/containers/ActionLogger'>; -} -declare module '@storybook/addon-actions/dist/index' { - declare module.exports: $Exports<'@storybook/addon-actions/dist'>; -} -declare module '@storybook/addon-actions/dist/index.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist'>; -} -declare module '@storybook/addon-actions/dist/manager.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/manager'>; -} -declare module '@storybook/addon-actions/dist/models/ActionDisplay.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models/ActionDisplay'>; -} -declare module '@storybook/addon-actions/dist/models/ActionOptions.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models/ActionOptions'>; -} -declare module '@storybook/addon-actions/dist/models/ActionsFunction.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models/ActionsFunction'>; -} -declare module '@storybook/addon-actions/dist/models/ActionsMap.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models/ActionsMap'>; -} -declare module '@storybook/addon-actions/dist/models/DecoratorFunction.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models/DecoratorFunction'>; -} -declare module '@storybook/addon-actions/dist/models/HandlerFunction.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models/HandlerFunction'>; -} -declare module '@storybook/addon-actions/dist/models/index' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models'>; -} -declare module '@storybook/addon-actions/dist/models/index.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/models'>; -} -declare module '@storybook/addon-actions/dist/preview/action.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/preview/action'>; -} -declare module '@storybook/addon-actions/dist/preview/actions.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/preview/actions'>; -} -declare module '@storybook/addon-actions/dist/preview/configureActions.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/preview/configureActions'>; -} -declare module '@storybook/addon-actions/dist/preview/decorateAction.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/preview/decorateAction'>; -} -declare module '@storybook/addon-actions/dist/preview/index' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/preview'>; -} -declare module '@storybook/addon-actions/dist/preview/index.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/preview'>; -} -declare module '@storybook/addon-actions/dist/preview/withActions.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/preview/withActions'>; -} -declare module '@storybook/addon-actions/dist/typings.d.js' { - declare module.exports: $Exports<'@storybook/addon-actions/dist/typings.d'>; -} -declare module '@storybook/addon-actions/register.js' { - declare module.exports: $Exports<'@storybook/addon-actions/register'>; -} diff --git a/flow-typed/npm/@storybook/addon-knobs_vx.x.x.js b/flow-typed/npm/@storybook/addon-knobs_vx.x.x.js deleted file mode 100644 index 7e75e7f7..00000000 --- a/flow-typed/npm/@storybook/addon-knobs_vx.x.x.js +++ /dev/null @@ -1,283 +0,0 @@ -// flow-typed signature: 90624ef390fe4c5befd27eedd08d7ad2 -// flow-typed version: <>/@storybook/addon-knobs_v5.2.6/flow_v0.112.0 - -/** - * This is an autogenerated libdef stub for: - * - * '@storybook/addon-knobs' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module '@storybook/addon-knobs' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module '@storybook/addon-knobs/angular' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/__types__/knob-test-cases' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/Panel' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/PropForm' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Array' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Boolean' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Button' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Checkboxes' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Color' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Date' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Files' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Number' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Object' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Options' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Radio' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Select' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/Text' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/components/types/types' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/converters' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/deprecated' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/KnobManager' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/KnobStore' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/register' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/registerKnobs' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/shared' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/type-defs' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/dist/typings.d' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/html' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/marko' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/mithril' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/polymer' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/react' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/register' { - declare module.exports: any; -} - -declare module '@storybook/addon-knobs/vue' { - declare module.exports: any; -} - -// Filename aliases -declare module '@storybook/addon-knobs/angular.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/angular'>; -} -declare module '@storybook/addon-knobs/dist/__types__/knob-test-cases.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/__types__/knob-test-cases'>; -} -declare module '@storybook/addon-knobs/dist/components/Panel.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/Panel'>; -} -declare module '@storybook/addon-knobs/dist/components/PropForm.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/PropForm'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Array.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Array'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Boolean.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Boolean'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Button.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Button'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Checkboxes.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Checkboxes'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Color.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Color'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Date.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Date'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Files.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Files'>; -} -declare module '@storybook/addon-knobs/dist/components/types/index' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types'>; -} -declare module '@storybook/addon-knobs/dist/components/types/index.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Number.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Number'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Object.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Object'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Options.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Options'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Radio.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Radio'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Select.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Select'>; -} -declare module '@storybook/addon-knobs/dist/components/types/Text.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/Text'>; -} -declare module '@storybook/addon-knobs/dist/components/types/types.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/components/types/types'>; -} -declare module '@storybook/addon-knobs/dist/converters.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/converters'>; -} -declare module '@storybook/addon-knobs/dist/deprecated.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/deprecated'>; -} -declare module '@storybook/addon-knobs/dist/index' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist'>; -} -declare module '@storybook/addon-knobs/dist/index.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist'>; -} -declare module '@storybook/addon-knobs/dist/KnobManager.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/KnobManager'>; -} -declare module '@storybook/addon-knobs/dist/KnobStore.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/KnobStore'>; -} -declare module '@storybook/addon-knobs/dist/register.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/register'>; -} -declare module '@storybook/addon-knobs/dist/registerKnobs.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/registerKnobs'>; -} -declare module '@storybook/addon-knobs/dist/shared.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/shared'>; -} -declare module '@storybook/addon-knobs/dist/type-defs.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/type-defs'>; -} -declare module '@storybook/addon-knobs/dist/typings.d.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/dist/typings.d'>; -} -declare module '@storybook/addon-knobs/html.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/html'>; -} -declare module '@storybook/addon-knobs/marko.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/marko'>; -} -declare module '@storybook/addon-knobs/mithril.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/mithril'>; -} -declare module '@storybook/addon-knobs/polymer.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/polymer'>; -} -declare module '@storybook/addon-knobs/react.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/react'>; -} -declare module '@storybook/addon-knobs/register.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/register'>; -} -declare module '@storybook/addon-knobs/vue.js' { - declare module.exports: $Exports<'@storybook/addon-knobs/vue'>; -} diff --git a/flow-typed/npm/@storybook/addon-links_vx.x.x.js b/flow-typed/npm/@storybook/addon-links_vx.x.x.js deleted file mode 100644 index 4b7b4bfd..00000000 --- a/flow-typed/npm/@storybook/addon-links_vx.x.x.js +++ /dev/null @@ -1,101 +0,0 @@ -// flow-typed signature: f6f4916ab4d700d3db6ac07b4264aa7e -// flow-typed version: <>/@storybook/addon-links_v5.2.6/flow_v0.112.0 - -/** - * This is an autogenerated libdef stub for: - * - * '@storybook/addon-links' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module '@storybook/addon-links' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module '@storybook/addon-links/dist/constants' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/dist' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/dist/manager' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/dist/preview' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/dist/react/components/link' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/dist/react/components/RoutedLink' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/dist/react' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/dist/typings.d' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/react' { - declare module.exports: any; -} - -declare module '@storybook/addon-links/register' { - declare module.exports: any; -} - -// Filename aliases -declare module '@storybook/addon-links/dist/constants.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist/constants'>; -} -declare module '@storybook/addon-links/dist/index' { - declare module.exports: $Exports<'@storybook/addon-links/dist'>; -} -declare module '@storybook/addon-links/dist/index.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist'>; -} -declare module '@storybook/addon-links/dist/manager.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist/manager'>; -} -declare module '@storybook/addon-links/dist/preview.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist/preview'>; -} -declare module '@storybook/addon-links/dist/react/components/link.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist/react/components/link'>; -} -declare module '@storybook/addon-links/dist/react/components/RoutedLink.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist/react/components/RoutedLink'>; -} -declare module '@storybook/addon-links/dist/react/index' { - declare module.exports: $Exports<'@storybook/addon-links/dist/react'>; -} -declare module '@storybook/addon-links/dist/react/index.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist/react'>; -} -declare module '@storybook/addon-links/dist/typings.d.js' { - declare module.exports: $Exports<'@storybook/addon-links/dist/typings.d'>; -} -declare module '@storybook/addon-links/react.js' { - declare module.exports: $Exports<'@storybook/addon-links/react'>; -} -declare module '@storybook/addon-links/register.js' { - declare module.exports: $Exports<'@storybook/addon-links/register'>; -} diff --git a/flow-typed/npm/@storybook/react_v5.x.x.js b/flow-typed/npm/@storybook/react_v5.x.x.js deleted file mode 100644 index 1f1e6a59..00000000 --- a/flow-typed/npm/@storybook/react_v5.x.x.js +++ /dev/null @@ -1,61 +0,0 @@ -// flow-typed signature: e484579841f3cb1e8f57a768abc4642d -// flow-typed version: c6154227d1/@storybook/react_v5.x.x/flow_>=v0.104.x - -type NodeModule = typeof module; - -declare module '@storybook/react' { - declare type Context = { - kind: string, - story: string, - ... - }; - declare type Renderable = - | string - | number - | React$Element - | Iterable; - declare type RenderCallback = ( - context: Context - ) => Renderable; - declare type RenderFunction = () => Renderable; - - declare type StoryDecorator = ( - story: RenderFunction, - context: Context - ) => Renderable; - - declare type DecoratorParameters = { [key: string]: any, ... }; - - declare interface Story { - +kind: string; - add( - storyName: string, - callback: RenderCallback, - parameters?: DecoratorParameters - ): Story; - addDecorator(decorator: StoryDecorator): Story; - addParameters(parameters: DecoratorParameters): Story; - } - - declare interface StoryObject { - name: string; - render: RenderFunction; - } - - declare interface StoryBucket { - kind: string; - filename: string; - stories: Array; - } - - declare function addDecorator(decorator: StoryDecorator): void; - declare function addParameters(parameters: DecoratorParameters): void; - declare function clearDecorators(): void; - declare function configure(fn: () => void, module: NodeModule): void; - declare function setAddon(addon: Object): void; - declare function storiesOf(name: string, module: NodeModule): Story; - declare function storiesOf(name: string, module: NodeModule): Story & T; - declare function forceReRender(): void; - - declare function getStorybook(): Array; -} diff --git a/flow-typed/npm/storybook-host_vx.x.x.js b/flow-typed/npm/storybook-host_vx.x.x.js deleted file mode 100644 index 6a8b75f8..00000000 --- a/flow-typed/npm/storybook-host_vx.x.x.js +++ /dev/null @@ -1,249 +0,0 @@ -// flow-typed signature: 48ec61af419d1ece506839678031f356 -// flow-typed version: <>/storybook-host_v5.1.0/flow_v0.112.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'storybook-host' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'storybook-host' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'storybook-host/lib/common/alignment' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/color' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/css' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/glamor' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/test/css-flex.test' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/test/css-image.test' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/test/css-positioning.test' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/test/css-spacing.test' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/test/css.test' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/css/types' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/libs' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/common/util' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/AlignmentContainer/AlignmentContainer' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/AlignmentContainer/ComponentHost.stories' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/AlignmentContainer' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/ComponentHost/ComponentHost' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/ComponentHost/ComponentHost.stories' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/ComponentHost' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/CropMarks/CropMark' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/CropMarks/CropMarks' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/components/CropMarks' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/decorators/host' { - declare module.exports: any; -} - -declare module 'storybook-host/lib' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/index.test' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/test/Foo' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/test' { - declare module.exports: any; -} - -declare module 'storybook-host/lib/types' { - declare module.exports: any; -} - -// Filename aliases -declare module 'storybook-host/lib/common/alignment.js' { - declare module.exports: $Exports<'storybook-host/lib/common/alignment'>; -} -declare module 'storybook-host/lib/common/color.js' { - declare module.exports: $Exports<'storybook-host/lib/common/color'>; -} -declare module 'storybook-host/lib/common/css/css.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/css'>; -} -declare module 'storybook-host/lib/common/css/glamor.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/glamor'>; -} -declare module 'storybook-host/lib/common/css/index' { - declare module.exports: $Exports<'storybook-host/lib/common/css'>; -} -declare module 'storybook-host/lib/common/css/index.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css'>; -} -declare module 'storybook-host/lib/common/css/test/css-flex.test.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/test/css-flex.test'>; -} -declare module 'storybook-host/lib/common/css/test/css-image.test.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/test/css-image.test'>; -} -declare module 'storybook-host/lib/common/css/test/css-positioning.test.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/test/css-positioning.test'>; -} -declare module 'storybook-host/lib/common/css/test/css-spacing.test.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/test/css-spacing.test'>; -} -declare module 'storybook-host/lib/common/css/test/css.test.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/test/css.test'>; -} -declare module 'storybook-host/lib/common/css/types.js' { - declare module.exports: $Exports<'storybook-host/lib/common/css/types'>; -} -declare module 'storybook-host/lib/common/index' { - declare module.exports: $Exports<'storybook-host/lib/common'>; -} -declare module 'storybook-host/lib/common/index.js' { - declare module.exports: $Exports<'storybook-host/lib/common'>; -} -declare module 'storybook-host/lib/common/libs.js' { - declare module.exports: $Exports<'storybook-host/lib/common/libs'>; -} -declare module 'storybook-host/lib/common/util.js' { - declare module.exports: $Exports<'storybook-host/lib/common/util'>; -} -declare module 'storybook-host/lib/components/AlignmentContainer/AlignmentContainer.js' { - declare module.exports: $Exports<'storybook-host/lib/components/AlignmentContainer/AlignmentContainer'>; -} -declare module 'storybook-host/lib/components/AlignmentContainer/ComponentHost.stories.js' { - declare module.exports: $Exports<'storybook-host/lib/components/AlignmentContainer/ComponentHost.stories'>; -} -declare module 'storybook-host/lib/components/AlignmentContainer/index' { - declare module.exports: $Exports<'storybook-host/lib/components/AlignmentContainer'>; -} -declare module 'storybook-host/lib/components/AlignmentContainer/index.js' { - declare module.exports: $Exports<'storybook-host/lib/components/AlignmentContainer'>; -} -declare module 'storybook-host/lib/components/ComponentHost/ComponentHost.js' { - declare module.exports: $Exports<'storybook-host/lib/components/ComponentHost/ComponentHost'>; -} -declare module 'storybook-host/lib/components/ComponentHost/ComponentHost.stories.js' { - declare module.exports: $Exports<'storybook-host/lib/components/ComponentHost/ComponentHost.stories'>; -} -declare module 'storybook-host/lib/components/ComponentHost/index' { - declare module.exports: $Exports<'storybook-host/lib/components/ComponentHost'>; -} -declare module 'storybook-host/lib/components/ComponentHost/index.js' { - declare module.exports: $Exports<'storybook-host/lib/components/ComponentHost'>; -} -declare module 'storybook-host/lib/components/CropMarks/CropMark.js' { - declare module.exports: $Exports<'storybook-host/lib/components/CropMarks/CropMark'>; -} -declare module 'storybook-host/lib/components/CropMarks/CropMarks.js' { - declare module.exports: $Exports<'storybook-host/lib/components/CropMarks/CropMarks'>; -} -declare module 'storybook-host/lib/components/CropMarks/index' { - declare module.exports: $Exports<'storybook-host/lib/components/CropMarks'>; -} -declare module 'storybook-host/lib/components/CropMarks/index.js' { - declare module.exports: $Exports<'storybook-host/lib/components/CropMarks'>; -} -declare module 'storybook-host/lib/decorators/host.js' { - declare module.exports: $Exports<'storybook-host/lib/decorators/host'>; -} -declare module 'storybook-host/lib/index' { - declare module.exports: $Exports<'storybook-host/lib'>; -} -declare module 'storybook-host/lib/index.js' { - declare module.exports: $Exports<'storybook-host/lib'>; -} -declare module 'storybook-host/lib/index.test.js' { - declare module.exports: $Exports<'storybook-host/lib/index.test'>; -} -declare module 'storybook-host/lib/test/Foo.js' { - declare module.exports: $Exports<'storybook-host/lib/test/Foo'>; -} -declare module 'storybook-host/lib/test/index' { - declare module.exports: $Exports<'storybook-host/lib/test'>; -} -declare module 'storybook-host/lib/test/index.js' { - declare module.exports: $Exports<'storybook-host/lib/test'>; -} -declare module 'storybook-host/lib/types.js' { - declare module.exports: $Exports<'storybook-host/lib/types'>; -} diff --git a/flow-typed/npm/storybook-router_v0.x.x.js b/flow-typed/npm/storybook-router_v0.x.x.js deleted file mode 100644 index f8649d0e..00000000 --- a/flow-typed/npm/storybook-router_v0.x.x.js +++ /dev/null @@ -1,45 +0,0 @@ -// flow-typed signature: c2d42e89f2eeb1cdff2d4d7dea9fd97b -// flow-typed version: c6154227d1/storybook-router_v0.x.x/flow_>=v0.104.x - -type LocationShape = { - pathname?: string, - search?: string, - hash?: string, - state?: any, - ... -}; - -type GetUserConfirmation = ( - message: string, - callback: (confirmed: boolean) => void -) => void; - -declare module "storybook-router" { - declare type Context = { - kind: string, - story: string, - ... - }; - declare type Renderable = React$Element<*>; - declare type RenderFunction = () => Renderable | Array; - - declare type StoryDecorator = ( - story: RenderFunction, - context: Context - ) => Renderable | null; - - declare type Links = { [key: string]: (kind: string, story: string) => Function, ... }; - - declare type RouterProps = { - initialEntry?: Array, - autoRoute?: boolean, - initialEntries?: Array, - initialIndex?: number, - getUserConfirmation?: GetUserConfirmation, - keyLength?: number, - children?: React$Element<*>, - ... - }; - - declare module.exports: { (links?: Links, routerProps?: RouterProps): StoryDecorator, ... }; -} diff --git a/package.json b/package.json index 201de4cc..eaca48e3 100644 --- a/package.json +++ b/package.json @@ -18,12 +18,10 @@ "scripts": { "build": "node scripts/build.js", "build-mainnet": "REACT_APP_NETWORK=mainnet yarn build", - "build-storybook": "build-storybook -o build_storybook", "flow": "flow", "precommit": "./precommit.sh", "start": "node scripts/start.js", "start-mainnet": "REACT_APP_NETWORK=mainnet yarn start", - "storybook": "start-storybook -p 6006", "test": "NODE_ENV=test && node scripts/test.js --env=jsdom", "format": "prettier-eslint \"src/**/*.js\" --write" }, @@ -44,8 +42,11 @@ "bignumber.js": "9.0.0", "connected-react-router": "6.6.1", "date-fns": "2.8.1", + "currency-flags": "^2.1.1", + "dotenv": "^8.2.0", "ethereum-ens": "0.7.8", "final-form": "4.18.6", + "fortmatic": "^1.0.1", "history": "4.10.1", "immortal-db": "^1.0.2", "immutable": "^4.0.0-rc.9", @@ -55,7 +56,9 @@ "optimize-css-assets-webpack-plugin": "5.0.3", "polished": "^3.4.2", "qrcode.react": "1.0.0", + "query-string": "6.9.0", "react": "16.12.0", + "react-dev-utils": "^10.0.0", "react-dom": "16.12.0", "react-final-form": "6.3.3", "react-final-form-listeners": "^1.0.2", @@ -70,10 +73,9 @@ "redux-actions": "^2.6.5", "redux-thunk": "^2.3.0", "reselect": "^4.0.0", - "squarelink": "^1.1.3", + "squarelink": "^1.1.4", "web3": "1.2.4", - "web3connect": "^1.0.0-beta.23", - "react-ga": "^2.7.0" + "web3connect": "^1.0.0-beta.23" }, "devDependencies": { "@babel/cli": "7.7.5", @@ -100,12 +102,7 @@ "@babel/preset-env": "7.7.6", "@babel/preset-flow": "7.7.4", "@babel/preset-react": "7.7.4", - "@sambego/storybook-state": "^1.3.6", - "@storybook/addon-actions": "5.2.8", - "@storybook/addon-knobs": "5.2.8", - "@storybook/addon-links": "5.2.8", - "@storybook/react": "5.2.8", - "@testing-library/react": "9.3.2", + "@testing-library/react": "9.3.3", "autoprefixer": "9.7.3", "babel-core": "^7.0.0-bridge.0", "babel-eslint": "10.0.3", @@ -116,9 +113,9 @@ "babel-plugin-transform-es3-property-literals": "^6.22.0", "babel-polyfill": "^6.26.0", "classnames": "^2.2.6", - "css-loader": "3.2.1", + "css-loader": "3.3.0", "detect-port": "^1.3.0", - "eslint": "5.16.0", + "eslint": "6.7.2", "eslint-config-airbnb": "18.0.1", "eslint-plugin-flowtype": "4.5.2", "eslint-plugin-import": "2.19.1", @@ -142,10 +139,8 @@ "pre-commit": "^1.2.2", "prettier-eslint-cli": "5.0.0", "run-with-testrpc": "0.3.1", - "storybook-host": "5.1.0", - "storybook-router": "^0.3.4", "style-loader": "1.0.1", - "terser-webpack-plugin": "^2.2.2", + "terser-webpack-plugin": "2.2.3", "truffle": "5.1.3", "truffle-contract": "4.0.31", "truffle-solidity-loader": "0.1.32", diff --git a/public/index.html b/public/index.html index a1a78b9a..f35575de 100644 --- a/public/index.html +++ b/public/index.html @@ -5,7 +5,7 @@ - Gnosis Safe For Teams + Gnosis Safe Multisig
diff --git a/readme.md b/readme.md index 7b6c001b..b4c9c91d 100644 --- a/readme.md +++ b/readme.md @@ -57,6 +57,8 @@ git clone https://github.com/gnosis/safe-transaction-service.git cd safe-transaction-service git checkout develop docker-compose build +# it comes enabled by default in docker-compose +sudo service postgresql stop docker-compose up -d ``` Check that the service is running at https://localhost:8000 diff --git a/src/components/ConnectButton/index.jsx b/src/components/ConnectButton/index.jsx index 02254de8..43be8631 100644 --- a/src/components/ConnectButton/index.jsx +++ b/src/components/ConnectButton/index.jsx @@ -3,6 +3,7 @@ import React from 'react' import Web3Connect from 'web3connect' import Torus from '@toruslabs/torus-embed' import WalletConnectProvider from '@walletconnect/web3-provider' +import Fortmatic from 'fortmatic' import Portis from '@portis/web3' import Squarelink from 'squarelink' import Button from '~/components/layout/Button' @@ -10,8 +11,11 @@ import { fetchProvider } from '~/logic/wallets/store/actions' import { getNetwork } from '~/config' import { store } from '~/store' -const PORTIS_DAPP_ID = process.env.REACT_APP_NETWORK === 'mainnet' ? process.env.REACT_APP_PORTIS_ID : '852b763d-f28b-4463-80cb-846d7ec5806b' -const SQUARELINK_CLIENT_ID = process.env.REACT_APP_NETWORK === 'mainnet' ? process.env.REACT_APP_SQUARELINK_ID : '46ce08fe50913cfa1b78' +const isMainnet = process.env.REACT_APP_NETWORK === 'mainnet' + +const PORTIS_DAPP_ID = isMainnet ? process.env.REACT_APP_PORTIS_ID : '852b763d-f28b-4463-80cb-846d7ec5806b' +const SQUARELINK_CLIENT_ID = isMainnet ? process.env.REACT_APP_SQUARELINK_ID : '46ce08fe50913cfa1b78' +const FORTMATIC_API_KEY = isMainnet ? process.env.REACT_APP_FORTMATIC_KEY : 'pk_test_CAD437AA29BE0A40' export const web3Connect = new Web3Connect.Core({ network: getNetwork().toLowerCase(), @@ -34,6 +38,12 @@ export const web3Connect = new Web3Connect.Core({ id: SQUARELINK_CLIENT_ID, }, }, + fortmatic: { + package: Fortmatic, + options: { + key: FORTMATIC_API_KEY, + }, + }, torus: { package: Torus, options: { diff --git a/src/components/CookiesBanner/index.jsx b/src/components/CookiesBanner/index.jsx index 0f82cac2..2784ce3f 100644 --- a/src/components/CookiesBanner/index.jsx +++ b/src/components/CookiesBanner/index.jsx @@ -8,7 +8,7 @@ import { makeStyles } from '@material-ui/core/styles' import { useDispatch, useSelector } from 'react-redux' import Link from '~/components/layout/Link' import Button from '~/components/layout/Button' -import { primary, mainFontFamily } from '~/theme/variables' +import { primary, mainFontFamily, md } from '~/theme/variables' import type { CookiesProps } from '~/logic/cookies/model/cookie' import { COOKIES_KEY } from '~/logic/cookies/model/cookie' import { loadFromCookie, saveCookie } from '~/logic/cookies/utils' @@ -38,7 +38,7 @@ const useStyles = makeStyles({ text: { color: primary, fontFamily: mainFontFamily, - fontSize: '16px', + fontSize: md, fontWeight: 'normal', lineHeight: '1.38', margin: '0 0 25px', diff --git a/src/components/CopyBtn/index.jsx b/src/components/CopyBtn/index.jsx index b401367c..41eeae77 100644 --- a/src/components/CopyBtn/index.jsx +++ b/src/components/CopyBtn/index.jsx @@ -13,14 +13,14 @@ const useStyles = makeStyles({ justifyContent: 'center', alignItems: 'center', cursor: 'pointer', - padding: xs, + margin: `0 ${xs}`, borderRadius: '50%', transition: 'background-color .2s ease-in-out', '&:hover': { backgroundColor: '#F0EFEE', }, }, - inreasedPopperZindex: { + increasedPopperZindex: { zIndex: 2001, }, }) @@ -33,7 +33,7 @@ type CopyBtnProps = { const CopyBtn = ({ content, increaseZindex = false }: CopyBtnProps) => { const [clicked, setClicked] = useState(false) const classes = useStyles() - const customClasses = increaseZindex ? { popper: classes.inreasedPopperZindex } : {} + const customClasses = increaseZindex ? { popper: classes.increasedPopperZindex } : {} return ( + + + + + diff --git a/src/components/EtherscanBtn/index.jsx b/src/components/EtherscanBtn/index.jsx index ea1dc738..e90ac53b 100644 --- a/src/components/EtherscanBtn/index.jsx +++ b/src/components/EtherscanBtn/index.jsx @@ -3,23 +3,24 @@ import React from 'react' import Tooltip from '@material-ui/core/Tooltip' import { makeStyles } from '@material-ui/core/styles' import Img from '~/components/layout/Img' +import EtherscanOpenIcon from './img/etherscan-open.svg' import { getEtherScanLink } from '~/logic/wallets/getWeb3' import { xs } from '~/theme/variables' -import SearchIcon from './search.svg' const useStyles = makeStyles({ container: { + alignItems: 'center', + borderRadius: '50%', display: 'flex', justifyContent: 'center', - alignItems: 'center', - padding: xs, - borderRadius: '50%', + margin: `0 ${xs}`, + padding: '0', transition: 'background-color .2s ease-in-out', '&:hover': { backgroundColor: '#F0EFEE', }, }, - inreasedPopperZindex: { + increasedPopperZindex: { zIndex: 2001, }, }) @@ -32,18 +33,18 @@ type EtherscanBtnProps = { const EtherscanBtn = ({ type, value, increaseZindex = false }: EtherscanBtnProps) => { const classes = useStyles() - const customClasses = increaseZindex ? { popper: classes.inreasedPopperZindex } : {} + const customClasses = increaseZindex ? { popper: classes.increasedPopperZindex } : {} return ( - Etherscan + Show on Etherscan ) diff --git a/src/components/EtherscanBtn/search.svg b/src/components/EtherscanBtn/search.svg deleted file mode 100644 index ac49ba3e..00000000 --- a/src/components/EtherscanBtn/search.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/components/EtherscanLink/index.jsx b/src/components/EtherscanLink/index.jsx index 1e47de16..bfc50e65 100644 --- a/src/components/EtherscanLink/index.jsx +++ b/src/components/EtherscanLink/index.jsx @@ -1,25 +1,30 @@ // @flow import React from 'react' -import OpenInNew from '@material-ui/icons/OpenInNew' -import { getEtherScanLink } from '~/logic/wallets/getWeb3' +import { withStyles } from '@material-ui/core/styles' +import Block from '~/components/layout/Block' +import Paragraph from '~/components/layout/Paragraph' +import CopyBtn from '~/components/CopyBtn' +import EtherscanBtn from '~/components/EtherscanBtn' import { shortVersionOf } from '~/logic/wallets/ethAddresses' -import { secondary } from '~/theme/variables' - -const openIconStyle = { - height: '13px', - color: secondary, -} +import { styles } from './style.js' type EtherscanLinkProps = { type: 'tx' | 'address', value: string, + cut?: number, + classes: Object, } -const EtherscanLink = ({ type, value }: EtherscanLinkProps) => ( - - {shortVersionOf(value, 4)} - - +const EtherscanLink = ({ + type, value, cut, classes, +}: EtherscanLinkProps) => ( + + + {cut ? shortVersionOf(value, cut) : value} + + + + ) -export default EtherscanLink +export default withStyles(styles)(EtherscanLink) diff --git a/src/components/EtherscanLink/style.js b/src/components/EtherscanLink/style.js new file mode 100644 index 00000000..fc028b3b --- /dev/null +++ b/src/components/EtherscanLink/style.js @@ -0,0 +1,8 @@ +// @flow + +export const styles = () => ({ + etherscanLink: { + display: 'flex', + alignItems: 'center', + }, +}) diff --git a/src/components/Header/assets/gnosis-safe-logo.svg b/src/components/Header/assets/gnosis-safe-logo.svg deleted file mode 100644 index 41dc0c73..00000000 --- a/src/components/Header/assets/gnosis-safe-logo.svg +++ /dev/null @@ -1 +0,0 @@ -gnosis_safe_teams_2019_logo_all_rgb \ No newline at end of file diff --git a/src/components/Header/assets/gnosis-safe-multisig-logo.svg b/src/components/Header/assets/gnosis-safe-multisig-logo.svg new file mode 100644 index 00000000..1303f509 --- /dev/null +++ b/src/components/Header/assets/gnosis-safe-multisig-logo.svg @@ -0,0 +1 @@ +gnosis_safe_teams_2019_logo_all_rgb \ No newline at end of file diff --git a/src/components/Header/components/Layout.jsx b/src/components/Header/components/Layout.jsx index 474f9df6..ac736753 100644 --- a/src/components/Header/components/Layout.jsx +++ b/src/components/Header/components/Layout.jsx @@ -16,15 +16,15 @@ import { border, sm, md, headerHeight, } from '~/theme/variables' import Provider from './Provider' -import EarlyAccessLabel from './EarlyAccessLabel' +import NetworkLabel from './NetworkLabel' import SafeListHeader from './SafeListHeader' -const logo = require('../assets/gnosis-safe-logo.svg') +const logo = require('../assets/gnosis-safe-multisig-logo.svg') type Props = Open & { classes: Object, providerDetails: React.Node, - providerInfo: React.Node, + providerInfo: React.Node } const styles = () => ({ @@ -33,7 +33,7 @@ const styles = () => ({ padding: 0, boxShadow: '0 0 10px 0 rgba(33, 48, 77, 0.1)', minWidth: '280px', - borderRadius: '8px', + borderRadius: sm, marginTop: '11px', }, summary: { @@ -43,6 +43,8 @@ const styles = () => ({ boxShadow: '0 2px 4px 0 rgba(212, 212, 211, 0.59)', backgroundColor: 'white', zIndex: 1301, + position: 'fixed', + width: '100%', }, logo: { padding: `${sm} ${md}`, @@ -54,10 +56,15 @@ const styles = () => ({ }, }) -const Layout = openHoc(({ - open, toggle, clickAway, classes, providerInfo, providerDetails, -}: Props) => ( - <> +const Layout = openHoc( + ({ + open, + toggle, + clickAway, + classes, + providerInfo, + providerDetails, + }: Props) => ( @@ -67,15 +74,25 @@ const Layout = openHoc(({ - + {(providerRef) => ( - + {({ TransitionProps }) => ( <> - + {providerDetails} @@ -87,7 +104,7 @@ const Layout = openHoc(({ )} - -)) + ), +) export default withStyles(styles)(Layout) diff --git a/src/components/Header/components/Layout.stories.js b/src/components/Header/components/Layout.stories.js deleted file mode 100644 index e8b235b7..00000000 --- a/src/components/Header/components/Layout.stories.js +++ /dev/null @@ -1,38 +0,0 @@ -// @flow -import { storiesOf } from '@storybook/react' -import * as React from 'react' -import styles from '~/components/layout/PageFrame/index.scss' -import Layout from './Layout' -import ProviderAccesible from './ProviderInfo/ProviderAccesible' -import UserDetails from './ProviderDetails/UserDetails' -import ProviderDisconnected from './ProviderInfo/ProviderDisconnected' -import ConnectDetails from './ProviderDetails/ConnectDetails' - -const FrameDecorator = (story) =>
{story()}
- -storiesOf('Components /Header', module) - .addDecorator(FrameDecorator) - .add('Connected', () => { - const provider = 'Metamask' - const userAddress = '0x873faa4cddd5b157e8e5a57e7a5479afc5d30moe' - const network = 'RINKEBY' - const info = - const details = - - return - }) - .add('Disconnected', () => { - const info = - const details = - - return - }) - .add('Connection Error', () => { - const provider = 'Metamask' - const userAddress = '0x873faa4cddd5b157e8e5a57e7a5479afc5d30moe' - const network = 'RINKEBY' - const info = - const details = - - return - }) diff --git a/src/components/Header/components/EarlyAccessLabel.jsx b/src/components/Header/components/NetworkLabel.jsx similarity index 73% rename from src/components/Header/components/EarlyAccessLabel.jsx rename to src/components/Header/components/NetworkLabel.jsx index bcfb81eb..152b5efb 100644 --- a/src/components/Header/components/EarlyAccessLabel.jsx +++ b/src/components/Header/components/NetworkLabel.jsx @@ -1,20 +1,22 @@ // @flow import * as React from 'react' import { makeStyles } from '@material-ui/core/styles' +import { getNetwork } from '~/config' import Paragraph from '~/components/layout/Paragraph' import Col from '~/components/layout/Col' import { xs, sm, md, border, } from '~/theme/variables' -export const TOGGLE_SIDEBAR_BTN_TESTID = 'TOGGLE_SIDEBAR_BTN' +const network = getNetwork() +const formattedNetwork = network[0].toUpperCase() + network.substring(1).toLowerCase() const useStyles = makeStyles({ container: { flexGrow: 0, padding: `0 ${md}`, }, - counter: { + text: { background: border, padding: `${xs} ${sm}`, borderRadius: '3px', @@ -28,8 +30,8 @@ const EarlyAccessLabel = () => { return ( - - Early access + + {formattedNetwork} ) diff --git a/src/components/Loader/indes.stories.js b/src/components/Loader/indes.stories.js deleted file mode 100644 index 314b33d1..00000000 --- a/src/components/Loader/indes.stories.js +++ /dev/null @@ -1,11 +0,0 @@ -// @flow -import { storiesOf } from '@storybook/react' -import * as React from 'react' -import styles from '~/components/layout/PageFrame/index.scss' -import Component from './index' - -const FrameDecorator = (story) =>
{story()}
- -storiesOf('Components', module) - .addDecorator(FrameDecorator) - .add('Loader', () => ) diff --git a/src/components/Modal/index.jsx b/src/components/Modal/index.jsx index b10ee819..1c43c1c3 100644 --- a/src/components/Modal/index.jsx +++ b/src/components/Modal/index.jsx @@ -3,6 +3,7 @@ import * as React from 'react' import cn from 'classnames' import Modal from '@material-ui/core/Modal' import { withStyles } from '@material-ui/core/styles' +import { sm } from '~/theme/variables' type Props = { title: string, @@ -27,7 +28,7 @@ const styles = () => ({ top: '120px', width: '500px', height: '530px', - borderRadius: '8px', + borderRadius: sm, backgroundColor: '#ffffff', boxShadow: '0 0 5px 0 rgba(74, 85, 121, 0.5)', '&:focus': { diff --git a/src/components/Root/index.scss b/src/components/Root/index.scss index b9d9adfa..27342f5a 100644 --- a/src/components/Root/index.scss +++ b/src/components/Root/index.scss @@ -42,4 +42,4 @@ body { body > div:first-child { display: flex; min-height: 100%; -} +} \ No newline at end of file diff --git a/src/components/Table/TableHead.jsx b/src/components/Table/TableHead.jsx index 428d7515..02a90974 100644 --- a/src/components/Table/TableHead.jsx +++ b/src/components/Table/TableHead.jsx @@ -16,6 +16,7 @@ export type Column = { custom: boolean, // If content will be rendered by user manually width?: number, static?: boolean, // If content can't be sorted by values in the column + style?: Object, // if you want to add some custom styling to the column } export const cellWidth = (width: number | typeof undefined) => { @@ -56,12 +57,15 @@ class GnoTableHead extends React.PureComponent { sortDirection={orderBy === column.id ? order : false} > {column.static ? ( - column.label +
+ {column.label} +
) : ( {column.label} diff --git a/src/components/Table/index.jsx b/src/components/Table/index.jsx index 258bc14c..d05376bb 100644 --- a/src/components/Table/index.jsx +++ b/src/components/Table/index.jsx @@ -1,6 +1,5 @@ // @flow import * as React from 'react' -import classNames from 'classnames' import { List } from 'immutable' import Table from '@material-ui/core/Table' import TableBody from '@material-ui/core/TableBody' @@ -10,7 +9,7 @@ import TablePagination from '@material-ui/core/TablePagination' import Row from '~/components/layout/Row' import { type Order, stableSort, getSorting } from '~/components/Table/sorting' import TableHead, { type Column } from '~/components/Table/TableHead' -import { xl } from '~/theme/variables' +import { xxl, xl, sm } from '~/theme/variables' type Props = { label: string, @@ -39,11 +38,12 @@ type State = { const styles = { root: { backgroundColor: 'white', - borderRadius: '8px', + borderTopRightRadius: sm, + borderTopLeftRadius: sm, boxShadow: '1px 2px 10px 0 rgba(212, 212, 211, 0.59)', }, selectRoot: { - lineHeight: '40px', + lineHeight: xxl, backgroundColor: 'white', }, white: { @@ -53,14 +53,11 @@ const styles = { backgroundColor: 'white', boxShadow: '1px 2px 10px 0 rgba(212, 212, 211, 0.59)', marginBottom: xl, - borderRadius: '8px', - borderTopLeftRadius: 0, - borderTopRightRadius: 0, + borderBottomRightRadius: sm, + borderBottomLeftRadius: sm, }, loader: { - alignItems: 'center', - justifyContent: 'center', - backgroundColor: 'white', + boxShadow: '1px 2px 10px 0 rgba(212, 212, 211, 0.59)', }, } @@ -125,6 +122,13 @@ class GnoTable extends React.Component, State> { getEmptyStyle = (emptyRows: number) => ({ height: FIXED_HEIGHT * emptyRows, + borderTopRightRadius: sm, + borderTopLeftRadius: sm, + backgroundColor: 'white', + width: '100%', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', }) handleChangePage = (e: SyntheticInputEvent, page: number) => { @@ -171,7 +175,7 @@ class GnoTable extends React.Component, State> { sortedData = sortedData.slice(page * displayRows, page * displayRows + displayRows) } - const emptyRows = displayRows - Math.min(displayRows, data.length - page * displayRows) + const emptyRows = displayRows - Math.min(displayRows, data.size - page * displayRows) const isEmpty = size === 0 return ( @@ -184,7 +188,7 @@ class GnoTable extends React.Component, State> { )} {isEmpty && ( diff --git a/src/components/forms/AddressInput/index.jsx b/src/components/forms/AddressInput/index.jsx index 71217c95..cfbe55d7 100644 --- a/src/components/forms/AddressInput/index.jsx +++ b/src/components/forms/AddressInput/index.jsx @@ -19,6 +19,7 @@ type Props = { testId?: string, validators?: Function[], inputAdornment?: React.Element, + defaultValue?: string, } const isValidEnsName = (name) => /^([\w-]+\.)+(eth|test|xyz|luxe)$/.test(name) @@ -35,6 +36,7 @@ const AddressInput = ({ testId, inputAdornment, validators = [], + defaultValue, }: Props): React.Element<*> => ( <> {async (value) => { diff --git a/src/components/layout/Block/index.jsx b/src/components/layout/Block/index.jsx index 4e9ec7db..f2504f34 100644 --- a/src/components/layout/Block/index.jsx +++ b/src/components/layout/Block/index.jsx @@ -13,7 +13,7 @@ type Props = { margin?: Size, padding?: Size, justify?: 'center' | 'right' | 'left' | 'space-around', - children: React.Node, + children?: React.Node, className?: string, } diff --git a/src/components/layout/Hairline/index.stories.js b/src/components/layout/Hairline/index.stories.js deleted file mode 100644 index 338d7a80..00000000 --- a/src/components/layout/Hairline/index.stories.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow -import { storiesOf } from '@storybook/react' -import * as React from 'react' -import { host } from 'storybook-host' -import Component from './index' - -storiesOf('Components', module) - .addDecorator( - host({ - title: 'Hairline', - align: 'center', - height: 5, - width: '100%', - }), - ) - .add('Hairline', () => ) diff --git a/src/components/layout/Page/index.scss b/src/components/layout/Page/index.scss index c4c5a6a2..d33b145f 100644 --- a/src/components/layout/Page/index.scss +++ b/src/components/layout/Page/index.scss @@ -2,12 +2,12 @@ display: flex; flex: 1 0 auto; flex-direction: column; - padding: 80px 200px 0px 200px; + padding: 135px 200px 0px 200px; } @media only screen and (max-width: $(screenLg)px) { .page { - padding: 80px $lg 0px $lg; + padding: 135px $lg 0px $lg; } } diff --git a/src/components/layout/PageFrame/index.jsx b/src/components/layout/PageFrame/index.jsx index cdaf4f3f..d52fa360 100644 --- a/src/components/layout/PageFrame/index.jsx +++ b/src/components/layout/PageFrame/index.jsx @@ -17,6 +17,7 @@ import ErrorIcon from './assets/error.svg' import InfoIcon from './assets/info.svg' import CookiesBanner from '~/components/CookiesBanner' import styles from './index.scss' +import { fontColor } from '~/theme/variables' const notificationStyles = { success: { @@ -24,7 +25,7 @@ const notificationStyles = { fontFamily: 'Averta', fontSize: '14px', lineHeight: 1.43, - color: '#001428', + color: fontColor, minHeight: '58px', boxShadow: '0 0 10px 0 rgba(212, 212, 211, 0.59)', }, @@ -33,7 +34,7 @@ const notificationStyles = { fontFamily: 'Averta', fontSize: '14px', lineHeight: 1.43, - color: '#001428', + color: fontColor, minHeight: '58px', boxShadow: '0 0 10px 0 rgba(212, 212, 211, 0.59)', }, @@ -42,7 +43,7 @@ const notificationStyles = { fontFamily: 'Averta', fontSize: '14px', lineHeight: 1.43, - color: '#001428', + color: fontColor, minHeight: '58px', boxShadow: '0 0 10px 0 rgba(212, 212, 211, 0.59)', }, @@ -51,7 +52,7 @@ const notificationStyles = { fontFamily: 'Averta', fontSize: '14px', lineHeight: 1.43, - color: '#001428', + color: fontColor, minHeight: '58px', boxShadow: '0 0 10px 0 rgba(212, 212, 211, 0.59)', }, diff --git a/src/config/index.js b/src/config/index.js index 51e49108..51a5919c 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -52,6 +52,9 @@ export const getTxServiceHost = () => { export const getTxServiceUriFrom = (safeAddress: string) => `safes/${safeAddress}/transactions/` +export const getIncomingTxServiceUriTo = (safeAddress: string) => + `safes/${safeAddress}/incoming-transactions/` + export const getRelayUrl = () => getConfig()[RELAY_API_URL] export const signaturesViaMetamask = () => { @@ -69,3 +72,5 @@ export const getIntercomId = () => process.env.REACT_APP_ENV === "production" ? process.env.REACT_APP_INTERCOM_ID : "plssl1fl" + +export const getExchangeRatesUrl = () => 'https://api.exchangeratesapi.io/latest' diff --git a/src/index.js b/src/index.js index fa357f41..4871d15d 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,7 @@ import loadActiveTokens from '~/logic/tokens/store/actions/loadActiveTokens' import loadDefaultSafe from '~/routes/safe/store/actions/loadDefaultSafe' import loadSafesFromStorage from '~/routes/safe/store/actions/loadSafesFromStorage' import { store } from '~/store' +import verifyRecurringUser from '~/utils/verifyRecurringUser' BigNumber.set({ EXPONENTIAL_AT: [-7, 255] }) @@ -21,6 +22,7 @@ if (process.env.NODE_ENV !== 'production') { store.dispatch(loadActiveTokens()) store.dispatch(loadSafesFromStorage()) store.dispatch(loadDefaultSafe()) +verifyRecurringUser() const root = document.getElementById('root') diff --git a/src/logic/contracts/methodIds.js b/src/logic/contracts/methodIds.js index b79b6973..2ea3becc 100644 --- a/src/logic/contracts/methodIds.js +++ b/src/logic/contracts/methodIds.js @@ -55,7 +55,7 @@ export const decodeParamsFromSafeMethod = async (data: string) => { case '0xe318b52b': return { methodName: METHOD_TO_ID[methodId], - args: web3.eth.abi.decodeParameters(['address', 'address', 'address'], params), + args: web3.eth.abi.decodeParameters(['uint', 'address', 'address'], params), } // addOwnerWithThreshold diff --git a/src/logic/currencyValues/api/fetchCurrenciesRates.js b/src/logic/currencyValues/api/fetchCurrenciesRates.js new file mode 100644 index 00000000..5f6a5849 --- /dev/null +++ b/src/logic/currencyValues/api/fetchCurrenciesRates.js @@ -0,0 +1,19 @@ +// @flow +import axios from 'axios' +import { getExchangeRatesUrl } from '~/config' +import { AVAILABLE_CURRENCIES } from '~/logic/currencyValues/store/model/currencyValues' + +const fetchCurrenciesRates = async (baseCurrency: AVAILABLE_CURRENCIES, targetCurrencyValue: AVAILABLE_CURRENCIES): Promise => { + let rate = 0 + const url = `${getExchangeRatesUrl()}?base=${baseCurrency}&symbols=${targetCurrencyValue}` + + const result = await axios.get(url) + if (result && result.data) { + const { rates } = result.data + rate = rates[targetCurrencyValue] ? rates[targetCurrencyValue] : 0 + } + + return rate +} + +export default fetchCurrenciesRates diff --git a/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.js b/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.js new file mode 100644 index 00000000..a262158c --- /dev/null +++ b/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.js @@ -0,0 +1,15 @@ +// @flow +import axios from 'axios' +import { getTxServiceHost } from '~/config' + +const fetchTokenCurrenciesBalances = (safeAddress: string) => { + if (!safeAddress) { + return null + } + const apiUrl = getTxServiceHost() + const url = `${apiUrl}safes/${safeAddress}/balances/usd` + + return axios.get(url) +} + +export default fetchTokenCurrenciesBalances diff --git a/src/logic/currencyValues/store/actions/fetchCurrencySelectedValue.js b/src/logic/currencyValues/store/actions/fetchCurrencySelectedValue.js new file mode 100644 index 00000000..5188ba21 --- /dev/null +++ b/src/logic/currencyValues/store/actions/fetchCurrencySelectedValue.js @@ -0,0 +1,35 @@ +// @flow +import { Dispatch as ReduxDispatch } from 'redux' +import { List } from 'immutable' +import type { GlobalState } from '~/store' +import { AVAILABLE_CURRENCIES } from '~/logic/currencyValues/store/model/currencyValues' +import fetchCurrenciesRates from '~/logic/currencyValues/api/fetchCurrenciesRates' +import { currencyValuesListSelector } from '~/logic/currencyValues/store/selectors' +import { setCurrencyBalances } from '~/logic/currencyValues/store/actions/setCurrencyBalances' + + +// eslint-disable-next-line max-len +const fetchCurrencySelectedValue = (currencyValueSelected: AVAILABLE_CURRENCIES) => async (dispatch: ReduxDispatch, getState: Function) => { + const state = getState() + const currencyBalancesList = currencyValuesListSelector(state) + const selectedCurrencyRateInBaseCurrency = await fetchCurrenciesRates(AVAILABLE_CURRENCIES.USD, currencyValueSelected) + + + const newList = [] + for (const currencyValue of currencyBalancesList) { + const { balanceInBaseCurrency } = currencyValue + + const balanceInSelectedCurrency = balanceInBaseCurrency * selectedCurrencyRateInBaseCurrency + + const updatedValue = currencyValue.merge({ + currencyName: currencyValueSelected, + balanceInSelectedCurrency, + }) + + newList.push(updatedValue) + } + + dispatch(setCurrencyBalances(List(newList))) +} + +export default fetchCurrencySelectedValue diff --git a/src/logic/currencyValues/store/actions/fetchCurrencyValues.js b/src/logic/currencyValues/store/actions/fetchCurrencyValues.js new file mode 100644 index 00000000..937b6cfa --- /dev/null +++ b/src/logic/currencyValues/store/actions/fetchCurrencyValues.js @@ -0,0 +1,43 @@ +// @flow +import type { Dispatch as ReduxDispatch } from 'redux' +import { List } from 'immutable' +import type { GlobalState } from '~/store' +import { setCurrencyBalances } from '~/logic/currencyValues/store/actions/setCurrencyBalances' +import { AVAILABLE_CURRENCIES, makeBalanceCurrency } from '~/logic/currencyValues/store/model/currencyValues' +import { setCurrencySelected } from '~/logic/currencyValues/store/actions/setCurrencySelected' +import fetchTokenCurrenciesBalances from '~/logic/currencyValues/api/fetchTokenCurrenciesBalances' +import { loadFromStorage } from '~/utils/storage' +import fetchCurrencySelectedValue from '~/logic/currencyValues/store/actions/fetchCurrencySelectedValue' +import { CURRENCY_SELECTED_KEY } from '~/logic/currencyValues/store/actions/saveCurrencySelected' + + +export const fetchCurrencyValues = (safeAddress: string) => async (dispatch: ReduxDispatch) => { + try { + const tokensFetched = await fetchTokenCurrenciesBalances(safeAddress) + + // eslint-disable-next-line max-len + const currencyList = List(tokensFetched.data.filter((currencyBalance) => currencyBalance.balanceUsd).map((currencyBalance) => { + const { balanceUsd, tokenAddress } = currencyBalance + return makeBalanceCurrency({ + currencyName: balanceUsd ? AVAILABLE_CURRENCIES.USD : null, + tokenAddress, + balanceInBaseCurrency: balanceUsd, + balanceInSelectedCurrency: balanceUsd, + }) + })) + + dispatch(setCurrencyBalances(currencyList)) + const currencyStored = await loadFromStorage(CURRENCY_SELECTED_KEY) + if (!currencyStored) { + return dispatch(setCurrencySelected(AVAILABLE_CURRENCIES.USD)) + } + const { currencyValueSelected } = currencyStored + dispatch(fetchCurrencySelectedValue(currencyValueSelected)) + dispatch(setCurrencySelected(currencyValueSelected)) + } catch (err) { + console.error('Error fetching tokens price list', err) + } + return Promise.resolve() +} + +export default fetchCurrencyValues diff --git a/src/logic/currencyValues/store/actions/saveCurrencySelected.js b/src/logic/currencyValues/store/actions/saveCurrencySelected.js new file mode 100644 index 00000000..bdae9c96 --- /dev/null +++ b/src/logic/currencyValues/store/actions/saveCurrencySelected.js @@ -0,0 +1,18 @@ +// @flow + +import { Dispatch as ReduxDispatch } from 'redux' +import { AVAILABLE_CURRENCIES } from '~/logic/currencyValues/store/model/currencyValues' +import type { GlobalState } from '~/store' + +import { saveToStorage } from '~/utils/storage' +import { setCurrencySelected } from '~/logic/currencyValues/store/actions/setCurrencySelected' + + +export const CURRENCY_SELECTED_KEY = 'CURRENCY_SELECTED_KEY' + +const saveCurrencySelected = (currencySelected: AVAILABLE_CURRENCIES) => async (dispatch: ReduxDispatch) => { + await saveToStorage(CURRENCY_SELECTED_KEY, { currencyValueSelected: currencySelected }) + dispatch(setCurrencySelected(currencySelected)) +} + +export default saveCurrencySelected diff --git a/src/logic/currencyValues/store/actions/setCurrencyBalances.js b/src/logic/currencyValues/store/actions/setCurrencyBalances.js new file mode 100644 index 00000000..fe347b79 --- /dev/null +++ b/src/logic/currencyValues/store/actions/setCurrencyBalances.js @@ -0,0 +1,10 @@ +// @flow +import { Map } from 'immutable' +import { createAction } from 'redux-actions' +import type { CurrencyValues, CurrencyValuesProps } from '~/logic/currencyValues/store/model/currencyValues' + +export const SET_CURRENCY_BALANCES = 'SET_CURRENCY_BALANCES' + + +// eslint-disable-next-line max-len +export const setCurrencyBalances = createAction(SET_CURRENCY_BALANCES, (currencyBalances: Map): CurrencyValuesProps => ({ currencyBalances })) diff --git a/src/logic/currencyValues/store/actions/setCurrencySelected.js b/src/logic/currencyValues/store/actions/setCurrencySelected.js new file mode 100644 index 00000000..151ba564 --- /dev/null +++ b/src/logic/currencyValues/store/actions/setCurrencySelected.js @@ -0,0 +1,13 @@ +// @flow +import { createAction } from 'redux-actions' +import type { + CurrencyValuesProps, +} from '~/logic/currencyValues/store/model/currencyValues' +import { AVAILABLE_CURRENCIES } from '~/logic/currencyValues/store/model/currencyValues' + + +export const SET_CURRENT_CURRENCY = 'SET_CURRENT_CURRENCY' + + +// eslint-disable-next-line max-len +export const setCurrencySelected = createAction(SET_CURRENT_CURRENCY, (currencyValueSelected: AVAILABLE_CURRENCIES): CurrencyValuesProps => ({ currencyValueSelected })) diff --git a/src/logic/currencyValues/store/model/currencyValues.js b/src/logic/currencyValues/store/model/currencyValues.js new file mode 100644 index 00000000..d7fc930d --- /dev/null +++ b/src/logic/currencyValues/store/model/currencyValues.js @@ -0,0 +1,61 @@ +// @flow +import type { RecordOf } from 'immutable' +import { Record } from 'immutable' + +export const AVAILABLE_CURRENCIES = { + USD: 'USD', + EUR: 'EUR', + CAD: 'CAD', + HKD: 'HKD', + ISK: 'ISK', + PHP: 'PHP', + DKK: 'DKK', + HUF: 'HUF', + CZK: 'CZK', + AUD: 'AUD', + RON: 'RON', + SEK: 'SEK', + IDR: 'IDR', + INR: 'INR', + BRL: 'BRL', + RUB: 'RUB', + HRK: 'HRK', + JPY: 'JPY', + THB: 'THB', + CHF: 'CHF', + SGD: 'SGD', + PLN: 'PLN', + BGN: 'BGN', + TRY: 'TRY', + CNY: 'CNY', + NOK: 'NOK', + NZD: 'NZD', + ZAR: 'ZAR', + MXN: 'MXN', + ILS: 'ILS', + GBP: 'GBP', + KRW: 'KRW', + MYR: 'MYR', +} + + +export type BalanceCurrencyType = { + currencyName: AVAILABLE_CURRENCIES; + tokenAddress: string, + balanceInBaseCurrency: string, + balanceInSelectedCurrency: string, +} + +export const makeBalanceCurrency = Record({ + currencyName: '', + tokenAddress: '', + balanceInBaseCurrency: '', + balanceInSelectedCurrency: '', +}) + +export type CurrencyValuesProps = { + currencyValueSelected: AVAILABLE_CURRENCIES; + currencyValuesList: BalanceCurrencyType[] +} + +export type CurrencyValues = RecordOf diff --git a/src/logic/currencyValues/store/reducer/currencyValues.js b/src/logic/currencyValues/store/reducer/currencyValues.js new file mode 100644 index 00000000..bb9c63ce --- /dev/null +++ b/src/logic/currencyValues/store/reducer/currencyValues.js @@ -0,0 +1,28 @@ +// @flow +import { Map } from 'immutable' +import { handleActions, type ActionType } from 'redux-actions' +import { SET_CURRENCY_BALANCES } from '../actions/setCurrencyBalances' +import type { State } from '~/logic/tokens/store/reducer/tokens' +import { SET_CURRENT_CURRENCY } from '~/logic/currencyValues/store/actions/setCurrencySelected' + +export const CURRENCY_VALUES_KEY = 'currencyValues' + +export default handleActions( + { + [SET_CURRENCY_BALANCES]: (state: State, action: ActionType): State => { + const { currencyBalances } = action.payload + + const newState = state.set('currencyBalances', currencyBalances) + + return newState + }, + [SET_CURRENT_CURRENCY]: (state: State, action: ActionType): State => { + const { currencyValueSelected } = action.payload + + const newState = state.set('currencyValueSelected', currencyValueSelected) + + return newState + }, + }, + Map(), +) diff --git a/src/logic/currencyValues/store/selectors/index.js b/src/logic/currencyValues/store/selectors/index.js new file mode 100644 index 00000000..0fee5a41 --- /dev/null +++ b/src/logic/currencyValues/store/selectors/index.js @@ -0,0 +1,9 @@ +// @flow + +import { List } from 'immutable' +import { type GlobalState } from '~/store' +import { CURRENCY_VALUES_KEY } from '~/logic/currencyValues/store/reducer/currencyValues' + + +export const currencyValuesListSelector = (state: GlobalState) => (state[CURRENCY_VALUES_KEY].get('currencyBalances') ? state[CURRENCY_VALUES_KEY].get('currencyBalances') : List([])) +export const currentCurrencySelector = (state: GlobalState) => state[CURRENCY_VALUES_KEY].get('currencyValueSelected') diff --git a/src/logic/notifications/notificationBuilder.js b/src/logic/notifications/notificationBuilder.js index 006df334..d2755a25 100644 --- a/src/logic/notifications/notificationBuilder.js +++ b/src/logic/notifications/notificationBuilder.js @@ -10,6 +10,7 @@ import { type Notification, NOTIFICATIONS } from './notificationTypes' export type NotificationsQueue = { beforeExecution: Notification | null, pendingExecution: Notification | null, + waitingConfirmation: Notification | null, afterExecution: { noMoreConfirmationsNeeded: Notification | null, moreConfirmationsNeeded: Notification | null, @@ -29,6 +30,15 @@ const standardTxNotificationsQueue: NotificationsQueue = { afterExecutionError: NOTIFICATIONS.TX_FAILED_MSG, } +const waitingTransactionNotificationsQueue: NotificationsQueue = { + beforeExecution: null, + pendingExecution: null, + afterRejection: null, + waitingConfirmation: NOTIFICATIONS.TX_WAITING_MSG, + afterExecution: null, + afterExecutionError: null, +} + const confirmationTxNotificationsQueue: NotificationsQueue = { beforeExecution: NOTIFICATIONS.SIGN_TX_MSG, pendingExecution: NOTIFICATIONS.TX_CONFIRMATION_PENDING_MSG, @@ -123,6 +133,10 @@ export const getNotificationsFromTxType = (txType: string) => { notificationsQueue = ownerNameChangeNotificationsQueue break } + case TX_NOTIFICATION_TYPES.WAITING_TX: { + notificationsQueue = waitingTransactionNotificationsQueue + break + } default: { notificationsQueue = defaultNotificationsQueue break @@ -132,10 +146,12 @@ export const getNotificationsFromTxType = (txType: string) => { return notificationsQueue } -export const enhanceSnackbarForAction = (notification: Notification) => ({ +export const enhanceSnackbarForAction = (notification: Notification, key?: string, onClick?: Function) => ({ ...notification, + key, options: { ...notification.options, + onClick, action: (key: number) => ( store.dispatch(closeSnackbarAction({ key }))}> diff --git a/src/logic/notifications/notificationTypes.js b/src/logic/notifications/notificationTypes.js index 34b12c33..8a49fe87 100644 --- a/src/logic/notifications/notificationTypes.js +++ b/src/logic/notifications/notificationTypes.js @@ -14,6 +14,7 @@ export type Variant = 'success' | 'error' | 'warning' | 'info' export type Notification = { message: string, + key?: string, options: { variant: Variant, persist: boolean, @@ -38,6 +39,8 @@ export type Notifications = { TX_EXECUTED_MSG: Notification, TX_EXECUTED_MORE_CONFIRMATIONS_MSG: Notification, TX_FAILED_MSG: Notification, + TX_WAITING_MSG: Notification, + TX_INCOMING_MSG: Notification, // Approval Transactions TX_CONFIRMATION_PENDING_MSG: Notification, @@ -122,6 +125,20 @@ export const NOTIFICATIONS: Notifications = { message: 'Transaction failed', options: { variant: ERROR, persist: false, autoHideDuration: longDuration }, }, + TX_WAITING_MSG: { + message: 'A pending transaction requires your confirmation!', + key: 'TX_WAITING_MSG', + options: { + variant: WARNING, persist: true, preventDuplicate: true, + }, + }, + TX_INCOMING_MSG: { + message: 'Incoming transfer: ', + key: 'TX_INCOMING_MSG', + options: { + variant: SUCCESS, persist: false, autoHideDuration: longDuration, preventDuplicate: true, + }, + }, // Approval Transactions TX_CONFIRMATION_PENDING_MSG: { diff --git a/src/logic/notifications/store/actions/enqueueSnackbar.js b/src/logic/notifications/store/actions/enqueueSnackbar.js index dae418f4..28dfc89f 100644 --- a/src/logic/notifications/store/actions/enqueueSnackbar.js +++ b/src/logic/notifications/store/actions/enqueueSnackbar.js @@ -11,9 +11,8 @@ const addSnackbar = createAction(ENQUEUE_SNACKBAR) const enqueueSnackbar = (notification: NotificationProps) => (dispatch: ReduxDispatch) => { const newNotification = { ...notification, - key: new Date().getTime(), + key: notification.key || new Date().getTime(), } - dispatch(addSnackbar(newNotification)) } diff --git a/src/logic/safe/transactions/awaitingTransactions.js b/src/logic/safe/transactions/awaitingTransactions.js new file mode 100644 index 00000000..6a2e676a --- /dev/null +++ b/src/logic/safe/transactions/awaitingTransactions.js @@ -0,0 +1,43 @@ +// @flow +import { Map, List } from 'immutable' +import type { Transaction } from '~/routes/safe/store/models/transaction' + +export const getAwaitingTransactions = ( + allTransactions: Map>, + userAccount: string, +): Map> => { + if (!allTransactions) { + return Map({}) + } + + const allAwaitingTransactions = allTransactions.map((safeTransactions) => { + const nonCancelledTransactions = safeTransactions.filter( + (transaction: Transaction) => { + // If transactions are not executed, but there's a transaction with the same nonce EXECUTED later + // it means that the transaction was cancelled (Replaced) and shouldn't get executed + if (!transaction.isExecuted) { + const replacementTransaction = safeTransactions.findLast( + (tx) => tx.isExecuted && tx.nonce === transaction.nonce, + ) + if (replacementTransaction) { + // eslint-disable-next-line no-param-reassign + transaction = transaction.set('cancelled', true) + } + } + // The transaction is not executed and is not cancelled, so it's still waiting confirmations + if (!transaction.executionTxHash && !transaction.cancelled) { + // Then we check if the waiting confirmations are not from the current user, otherwise, filters this transaction + const transactionWaitingUser = transaction.confirmations.filter( + (confirmation) => confirmation.owner && confirmation.owner.address !== userAccount, + ) + + return transactionWaitingUser.size > 0 + } + return false + }, + ) + return nonCancelledTransactions + }) + + return allAwaitingTransactions +} diff --git a/src/logic/safe/transactions/incomingTxHistory.js b/src/logic/safe/transactions/incomingTxHistory.js new file mode 100644 index 00000000..730588d3 --- /dev/null +++ b/src/logic/safe/transactions/incomingTxHistory.js @@ -0,0 +1,11 @@ +// @flow +import { getWeb3 } from '~/logic/wallets/getWeb3' +import { getIncomingTxServiceUriTo, getTxServiceHost } from '~/config' + +export const buildIncomingTxServiceUrl = (safeAddress: string) => { + const host = getTxServiceHost() + const address = getWeb3().utils.toChecksumAddress(safeAddress) + const base = getIncomingTxServiceUriTo(address) + + return `${host}${base}` +} diff --git a/src/logic/safe/transactions/notifiedTransactions.js b/src/logic/safe/transactions/notifiedTransactions.js index d8c0871a..368be3b7 100644 --- a/src/logic/safe/transactions/notifiedTransactions.js +++ b/src/logic/safe/transactions/notifiedTransactions.js @@ -4,6 +4,7 @@ export type NotifiedTransaction = { STANDARD_TX: string, CONFIRMATION_TX: string, CANCELLATION_TX: string, + WAITING_TX: string, SETTINGS_CHANGE_TX: string, SAFE_NAME_CHANGE_TX: string, OWNER_NAME_CHANGE_TX: string, @@ -13,6 +14,7 @@ export const TX_NOTIFICATION_TYPES: NotifiedTransaction = { STANDARD_TX: 'STANDARD_TX', CONFIRMATION_TX: 'CONFIRMATION_TX', CANCELLATION_TX: 'CANCELLATION_TX', + WAITING_TX: 'WAITING_TX', SETTINGS_CHANGE_TX: 'SETTINGS_CHANGE_TX', SAFE_NAME_CHANGE_TX: 'SAFE_NAME_CHANGE_TX', OWNER_NAME_CHANGE_TX: 'OWNER_NAME_CHANGE_TX', diff --git a/src/logic/safe/transactions/send.js b/src/logic/safe/transactions/send.js index 96c93279..7653eb52 100644 --- a/src/logic/safe/transactions/send.js +++ b/src/logic/safe/transactions/send.js @@ -2,7 +2,6 @@ import GnosisSafeSol from '@gnosis.pm/safe-contracts/build/contracts/GnosisSafe.json' import { getWeb3 } from '~/logic/wallets/getWeb3' import { type Operation } from '~/logic/safe/transactions' -import { ZERO_ADDRESS } from '~/logic/wallets/ethAddresses' export const CALL = 0 export const TX_TYPE_EXECUTION = 'execution' diff --git a/src/logic/wallets/ethAddresses.js b/src/logic/wallets/ethAddresses.js index 6bb7d2f2..dffa4285 100644 --- a/src/logic/wallets/ethAddresses.js +++ b/src/logic/wallets/ethAddresses.js @@ -1,4 +1,8 @@ // @flow +import { List } from 'immutable' +import type { Safe } from '~/routes/safe/store/models/safe' +import type { Owner } from '~/routes/safe/store/models/owner' + export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' export const sameAddress = (firstAddress: string, secondAddress: string): boolean => { @@ -13,10 +17,32 @@ export const sameAddress = (firstAddress: string, secondAddress: string): boolea return firstAddress.toLowerCase() === secondAddress.toLowerCase() } -export const shortVersionOf = (address: string, cut: number) => { - const final = 42 - cut +export const shortVersionOf = (value: string, cut: number) => { + if (!value) { + return 'Unknown' + } - if (!address) return 'Unknown address' - if (address.length < final) return address - return `${address.substring(0, cut)}...${address.substring(final)}` + const final = value.length - cut + if (value.length < final) { + return value + } + + return `${value.substring(0, cut)}...${value.substring(final)}` +} + +export const isUserOwner = (safe: Safe, userAccount: string): boolean => { + if (!safe) { + return false + } + + if (!userAccount) { + return false + } + + const { owners }: List = safe + if (!owners) { + return false + } + + return owners.find((owner: Owner) => sameAddress(owner.address, userAccount)) !== undefined } diff --git a/src/routes/load/components/Layout.jsx b/src/routes/load/components/Layout.jsx index 70676748..6ae47d9f 100644 --- a/src/routes/load/components/Layout.jsx +++ b/src/routes/load/components/Layout.jsx @@ -10,7 +10,7 @@ import ReviewInformation from '~/routes/load/components/ReviewInformation' import OwnerList from '~/routes/load/components/OwnerList' import DetailsForm, { safeFieldsValidation } from '~/routes/load/components/DetailsForm' import { history } from '~/store' -import { secondary } from '~/theme/variables' +import { secondary, sm } from '~/theme/variables' import { type SelectorProps } from '~/routes/load/container/selector' const getSteps = () => ['Name and address', 'Owners', 'Review'] @@ -21,7 +21,7 @@ export type LayoutProps = SelectorProps & { const iconStyle = { color: secondary, - padding: '8px', + padding: sm, marginRight: '5px', } diff --git a/src/routes/open/components/Layout.jsx b/src/routes/open/components/Layout.jsx index 75fe9fba..4ac841a0 100644 --- a/src/routes/open/components/Layout.jsx +++ b/src/routes/open/components/Layout.jsx @@ -9,28 +9,62 @@ import Row from '~/components/layout/Row' import Review from '~/routes/open/components/ReviewInformation' import SafeNameField from '~/routes/open/components/SafeNameForm' import SafeOwnersFields from '~/routes/open/components/SafeOwnersConfirmationsForm' -import { getOwnerNameBy, getOwnerAddressBy, FIELD_CONFIRMATIONS } from '~/routes/open/components/fields' +import { + getOwnerNameBy, + getOwnerAddressBy, + FIELD_CONFIRMATIONS, + FIELD_SAFE_NAME, +} from '~/routes/open/components/fields' +import { initContracts } from '~/logic/contracts/safeContracts' import { history } from '~/store' -import { secondary } from '~/theme/variables' +import { secondary, sm } from '~/theme/variables' +import type { SafePropsType } from '~/routes/open/container/Open' +import Welcome from '~/routes/welcome/components/Layout' + +const { useEffect } = React const getSteps = () => ['Name', 'Owners and confirmations', 'Review'] -const initialValuesFrom = (userAccount: string) => ({ - [getOwnerNameBy(0)]: 'My Wallet', - [getOwnerAddressBy(0)]: userAccount, - [FIELD_CONFIRMATIONS]: '1', -}) + +const initialValuesFrom = (userAccount: string, safeProps?: SafePropsType) => { + if (!safeProps) { + return ({ + [getOwnerNameBy(0)]: 'My Wallet', + [getOwnerAddressBy(0)]: userAccount, + [FIELD_CONFIRMATIONS]: '1', + }) + } + let obj = {} + const { + ownerAddresses, ownerNames, threshold, name, + } = safeProps + // eslint-disable-next-line no-restricted-syntax + for (const [index, value] of ownerAddresses.entries()) { + const safeName = ownerNames[index] ? ownerNames[index] : 'My Wallet' + obj = { + ...obj, + [getOwnerAddressBy(index)]: value, + [getOwnerNameBy(index)]: safeName, + } + } + return ({ + ...obj, + [FIELD_CONFIRMATIONS]: threshold || '1', + [FIELD_SAFE_NAME]: name, + }) +} type Props = { provider: string, userAccount: string, network: string, onCallSafeContractSubmit: (values: Object) => Promise, + safeProps?: SafePropsType, } const iconStyle = { color: secondary, - padding: '8px', + padding: sm, marginRight: '5px', } @@ -44,11 +78,21 @@ const formMutators = { }, } -const Layout = ({ - provider, userAccount, onCallSafeContractSubmit, network, -}: Props) => { + +const Layout = (props: Props) => { + const { + provider, userAccount, onCallSafeContractSubmit, network, safeProps, + } = props + + useEffect(() => { + if (provider) { + initContracts() + } + }, [provider]) + const steps = getSteps() - const initialValues = initialValuesFrom(userAccount) + + const initialValues = initialValuesFrom(userAccount, safeProps) return ( <> @@ -75,7 +119,7 @@ const Layout = ({ ) : ( -
No web3 provider detected
+ )} ) diff --git a/src/routes/open/components/Layout.stories.js b/src/routes/open/components/Layout.stories.js deleted file mode 100644 index 995d0164..00000000 --- a/src/routes/open/components/Layout.stories.js +++ /dev/null @@ -1,68 +0,0 @@ -// @flow -import { storiesOf } from '@storybook/react' -import { State, Store } from '@sambego/storybook-state' -import * as React from 'react' -import styles from '~/components/layout/PageFrame/index.scss' -import { getAccountsFrom, getThresholdFrom } from '~/routes/open/utils/safeDataExtractor' -import { getProviderInfo } from '~/logic/wallets/getWeb3' -import { sleep } from '~/utils/timer' -import Component from './Layout' - -const FrameDecorator = (story) =>
{story()}
- -const store = new Store({ - safeAddress: '', - safeTx: '', -}) - -storiesOf('Routes /open', module) - .addDecorator(FrameDecorator) - .add('Open Safe with all props set', () => { - getProviderInfo() - const provider = 'METAMASK' - const userAccount = '0x03db1a8b26d08df23337e9276a36b474510f0023' - const onCallSafeContractSubmit = async (values: Object): Promise => { - const accounts = getAccountsFrom(values) - const numConfirmations = getThresholdFrom(values) - const data = { - userAccount, - accounts, - requiredConfirmations: numConfirmations, - } - // eslint-disable-next-line - console.log(`Generating and sending a eth tx based on: ${JSON.stringify(data, null, 2)}`) - - await sleep(3000) - - store.set({ - safeAddress: '0x03db1a8b26d08df23337e9276a36b474510f0025', - // eslint-disable-next-line - safeTx: { - transactionHash: '0x4603de1ab6a92b4ee1fd67189089f5c02f5df5d135bf85af84083c27808c0544', - transactionIndex: 0, - blockHash: '0x593ce7d85fef2a492e8f759f485c8b66ff803773e77182c68dd45c439b7a956d', - blockNumber: 19, - gasUsed: 3034193, - cumulativeGasUsed: 3034193, - contractAddress: '0xfddda33736fb95b587cbfecc1ff4a50f717adc00', - logs: [], - status: '0x01', - logsBloom: - '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', - }, - }) - } - - return ( - - - - ) - }) diff --git a/src/routes/open/components/SafeNameForm/index.jsx b/src/routes/open/components/SafeNameForm/index.jsx index 203d557c..6094f31e 100644 --- a/src/routes/open/components/SafeNameForm/index.jsx +++ b/src/routes/open/components/SafeNameForm/index.jsx @@ -12,6 +12,7 @@ import { sm, secondary } from '~/theme/variables' type Props = { classes: Object, + safeName?: string, } const styles = () => ({ @@ -32,12 +33,13 @@ const styles = () => ({ }, }) -const SafeName = ({ classes }: Props) => ( +const SafeName = ({ classes, safeName }: Props) => ( <> - You are about to create a new Gnosis Safe wallet with one or more owners. First, let's give your new wallet - a name. This name is only stored locally and will never be shared with Gnosis or any third parties. + You are about to create a new Gnosis Safe wallet with one or more owners. First, let's give your new + wallet + a name. This name is only stored locally and will never be shared with Gnosis or any third parties. @@ -48,23 +50,24 @@ const SafeName = ({ classes }: Props) => ( validate={required} placeholder="Name of the new Safe" text="Safe name" + defaultValue={safeName} /> - By continuing you consent with the + By continuing you consent with the {' '} - terms of use + terms of use {' '} - and + and {' '} - privacy policy + privacy policy - . Most importantly, you confirm that your funds are held securely in the Gnosis Safe, a smart contract on the - Ethereum blockchain. These funds cannot be accessed by Gnosis at any point. + . Most importantly, you confirm that your funds are held securely in the Gnosis Safe, a smart contract on the + Ethereum blockchain. These funds cannot be accessed by Gnosis at any point. @@ -72,10 +75,13 @@ const SafeName = ({ classes }: Props) => ( const SafeNameForm = withStyles(styles)(SafeName) -const SafeNamePage = () => (controls: React.Node) => ( - - - -) +const SafeNamePage = () => (controls: React.Node, { values }) => { + const { safeName } = values + return ( + + + + ) +} export default SafeNamePage diff --git a/src/routes/open/components/SafeOwnersConfirmationsForm/index.jsx b/src/routes/open/components/SafeOwnersConfirmationsForm/index.jsx index d1ac6441..265bcfeb 100644 --- a/src/routes/open/components/SafeOwnersConfirmationsForm/index.jsx +++ b/src/routes/open/components/SafeOwnersConfirmationsForm/index.jsx @@ -4,6 +4,7 @@ import { withStyles } from '@material-ui/core/styles' import InputAdornment from '@material-ui/core/InputAdornment' import CheckCircle from '@material-ui/icons/CheckCircle' import MenuItem from '@material-ui/core/MenuItem' +import { withRouter } from 'react-router-dom' import Field from '~/components/forms/Field' import TextField from '~/components/forms/TextField' import SelectField from '~/components/forms/SelectField' @@ -70,6 +71,7 @@ const SafeOwners = (props: Props) => { } = props const validOwners = getNumOwnersFrom(values) + const [numOwners, setNumOwners] = useState(validOwners) const [qrModalOpen, setQrModalOpen] = useState(false) const [scanQrForOwnerName, setScanQrForOwnerName] = useState(null) @@ -222,7 +224,7 @@ owner(s) ) } -const SafeOwnersForm = withStyles(styles)(SafeOwners) +const SafeOwnersForm = withStyles(styles)(withRouter(SafeOwners)) const SafeOwnersPage = ({ updateInitialProps }: Object) => (controls: React.Node, { values, errors, form }: Object) => ( <> diff --git a/src/routes/open/components/fields.js b/src/routes/open/components/fields.js index a786ec73..679a7853 100644 --- a/src/routes/open/components/fields.js +++ b/src/routes/open/components/fields.js @@ -2,6 +2,7 @@ export const FIELD_NAME: string = 'name' export const FIELD_CONFIRMATIONS: string = 'confirmations' export const FIELD_OWNERS: string = 'owners' +export const FIELD_SAFE_NAME: string = 'safeName' export const getOwnerNameBy = (index: number) => `owner${index}Name` export const getOwnerAddressBy = (index: number) => `owner${index}Address` diff --git a/src/routes/open/container/Open.jsx b/src/routes/open/container/Open.jsx index 33bc01bc..89f2dc98 100644 --- a/src/routes/open/container/Open.jsx +++ b/src/routes/open/container/Open.jsx @@ -1,12 +1,14 @@ // @flow import * as React from 'react' import { connect } from 'react-redux' +import queryString from 'query-string' +import { withRouter } from 'react-router-dom' import Page from '~/components/layout/Page' import { getAccountsFrom, getThresholdFrom, getNamesFrom, getSafeNameFrom, getOwnersFrom, } from '~/routes/open/utils/safeDataExtractor' import { buildSafe } from '~/routes/safe/store/actions/fetchSafe' -import { getGnosisSafeInstanceAt, deploySafeContract, initContracts } from '~/logic/contracts/safeContracts' +import { getGnosisSafeInstanceAt, deploySafeContract } from '~/logic/contracts/safeContracts' import { checkReceiptStatus } from '~/logic/wallets/ethTransactions' import { history } from '~/store' import { OPENING_ADDRESS, stillInOpeningView, SAFELIST_ADDRESS } from '~/routes/routes' @@ -24,14 +26,36 @@ export type OpenState = { safeAddress: string, } +export type SafePropsType = { + name: string, + ownerAddresses: string[], + ownerNames: string[], + threshold: string, +} + +const validateQueryParams = (ownerAddresses?: string[], ownerNames?: string[], threshold?: string, safeName?: string) => { + if (!ownerAddresses || !ownerNames || !threshold || !safeName) { + return false + } + if (!ownerAddresses.length === 0 || ownerNames.length === 0) { + return false + } + + if (Number.isNaN(Number(threshold))) { + return false + } + if (threshold > ownerAddresses.length) { + return false + } + return true +} + export const createSafe = async (values: Object, userAccount: string, addSafe: AddSafe): Promise => { const numConfirmations = getThresholdFrom(values) const name = getSafeNameFrom(values) const ownersNames = getNamesFrom(values) const ownerAddresses = getAccountsFrom(values) - await initContracts() - const safe = await deploySafeContract(ownerAddresses, numConfirmations, userAccount) await checkReceiptStatus(safe.tx) @@ -59,10 +83,6 @@ export const createSafe = async (values: Object, userAccount: string, addSafe: A } class Open extends React.Component { - async componentDidMount() { - await initContracts() - } - onCallSafeContractSubmit = async (values) => { try { const { userAccount, addSafe } = this.props @@ -75,8 +95,23 @@ class Open extends React.Component { } render() { - const { provider, userAccount, network } = this.props + const { + provider, userAccount, network, location, + } = this.props + const query: SafePropsType = queryString.parse(location.search, { arrayFormat: 'comma' }) + const { + name, owneraddresses, ownernames, threshold, + } = query + let safeProps = null + if (validateQueryParams(owneraddresses, ownernames, threshold, name)) { + safeProps = { + name, + ownerAddresses: owneraddresses, + ownerNames: ownernames, + threshold, + } + } return ( { provider={provider} userAccount={userAccount} onCallSafeContractSubmit={this.onCallSafeContractSubmit} + safeProps={safeProps} /> ) } } -export default connect(selector, actions)(Open) +export default connect(selector, actions)(withRouter(Open)) diff --git a/src/routes/opening/Layout.stories.js b/src/routes/opening/Layout.stories.js deleted file mode 100644 index 6aea6dae..00000000 --- a/src/routes/opening/Layout.stories.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow -import { storiesOf } from '@storybook/react' -import * as React from 'react' -import styles from '~/components/layout/PageFrame/index.scss' -import { ETHEREUM_NETWORK } from '~/logic/wallets/getWeb3' -import Component from './component' - -const FrameDecorator = (story) =>
{story()}
- -storiesOf('Routes /opening', module) - .addDecorator(FrameDecorator) - .add('View while Safe is being deployed', () => ( - - )) - .add('Load this view without a tx', () => ) diff --git a/src/routes/safe/components/Balances/Receive/index.jsx b/src/routes/safe/components/Balances/Receive/index.jsx index 66c170a6..cd31e3e6 100644 --- a/src/routes/safe/components/Balances/Receive/index.jsx +++ b/src/routes/safe/components/Balances/Receive/index.jsx @@ -26,8 +26,8 @@ const styles = () => ({ boxSizing: 'border-box', }, close: { - height: '24px', - width: '24px', + height: lg, + width: lg, fill: secondaryText, }, qrContainer: { @@ -48,7 +48,7 @@ const styles = () => ({ justifyContent: 'center', '& > button': { fontFamily: 'Averta', - fontSize: '16px', + fontSize: md, boxShadow: '1px 2px 10px 0 rgba(212, 212, 211, 0.59)', }, }, diff --git a/src/routes/safe/components/Balances/SendModal/screens/ChooseTxType/index.jsx b/src/routes/safe/components/Balances/SendModal/screens/ChooseTxType/index.jsx index 3bb6e459..22ce6383 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ChooseTxType/index.jsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ChooseTxType/index.jsx @@ -22,7 +22,7 @@ const styles = () => ({ maxHeight: '75px', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', @@ -31,7 +31,7 @@ const styles = () => ({ buttonColumn: { padding: '52px 0', '& > button': { - fontSize: '16px', + fontSize: md, fontFamily: 'Averta', }, }, diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/index.jsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/index.jsx index 111e906e..36a8aa0b 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/index.jsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/index.jsx @@ -23,6 +23,7 @@ import { getEthAsToken } from '~/logic/tokens/utils/tokenHelpers' import { formatAmount } from '~/logic/tokens/utils/formatAmount' import ArrowDown from '../assets/arrow-down.svg' import { styles } from './style' +import { sm } from '~/theme/variables' type Props = { onClose: () => void, @@ -78,15 +79,15 @@ const ReviewCustomTx = ({ const txData = tx.data.trim() const txValue = tx.value ? web3.utils.toWei(tx.value, 'ether') : 0 - createTransaction( + createTransaction({ safeAddress, - txRecipient, - txValue, + to: txRecipient, + valueInWei: txValue, txData, - TX_NOTIFICATION_TYPES.STANDARD_TX, + notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, enqueueSnackbar, closeSnackbar, - ) + }) onClose() } @@ -106,7 +107,7 @@ const ReviewCustomTx = ({ - Arrow Down + Arrow Down diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/style.js b/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/style.js index 75fc858a..337a5202 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/style.js +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewCustomTx/style.js @@ -17,7 +17,7 @@ export const styles = () => ({ marginLeft: '20px', }, headingText: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', @@ -50,7 +50,7 @@ export const styles = () => ({ justifyContent: 'center', '& > button': { fontFamily: 'Averta', - fontSize: '16px', + fontSize: md, }, }, submitButton: { diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.jsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.jsx index d0449fb0..a2e0e80c 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.jsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.jsx @@ -28,6 +28,7 @@ import { TX_NOTIFICATION_TYPES } from '~/logic/safe/transactions' import { ETH_ADDRESS } from '~/logic/tokens/utils/tokenHelpers' import ArrowDown from '../assets/arrow-down.svg' import { styles } from './style' +import { sm } from '~/theme/variables' type Props = { onClose: () => void, @@ -108,15 +109,15 @@ const ReviewTx = ({ txAmount = 0 } - createTransaction( + createTransaction({ safeAddress, - txRecipient, - txAmount, + to: txRecipient, + valueInWei: txAmount, txData, - TX_NOTIFICATION_TYPES.STANDARD_TX, + notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, enqueueSnackbar, closeSnackbar, - ) + }) onClose() } @@ -136,7 +137,7 @@ const ReviewTx = ({ - Arrow Down + Arrow Down diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/style.js b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/style.js index 8341a286..de8a0a4b 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/style.js +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/style.js @@ -17,7 +17,7 @@ export const styles = () => ({ marginLeft: '20px', }, headingText: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', @@ -37,7 +37,7 @@ export const styles = () => ({ justifyContent: 'center', '& > button': { fontFamily: 'Averta', - fontSize: '16px', + fontSize: md, }, }, submitButton: { diff --git a/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/index.jsx b/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/index.jsx index c03a8d93..0b1642a7 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/index.jsx +++ b/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/index.jsx @@ -25,6 +25,7 @@ import SafeInfo from '~/routes/safe/components/Balances/SendModal/SafeInfo' import QRIcon from '~/assets/icons/qrcode.svg' import ArrowDown from '../assets/arrow-down.svg' import { styles } from './style' +import { sm } from '~/theme/variables' type Props = { onClose: () => void, @@ -102,7 +103,7 @@ const SendCustomTx = ({ - Arrow Down + Arrow Down diff --git a/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/style.js b/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/style.js index 38f2a9e5..e7833dd3 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/style.js +++ b/src/routes/safe/components/Balances/SendModal/screens/SendCustomTx/style.js @@ -15,7 +15,7 @@ export const styles = () => ({ marginLeft: '20px', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', @@ -32,7 +32,7 @@ export const styles = () => ({ justifyContent: 'center', '& > button': { fontFamily: 'Averta', - fontSize: '16px', + fontSize: md, }, }, submitButton: { diff --git a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.jsx b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.jsx index 3414ca22..aca2139e 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.jsx +++ b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.jsx @@ -28,6 +28,7 @@ import ScanQRModal from '~/components/ScanQRModal' import ArrowDown from '../assets/arrow-down.svg' import QRIcon from '~/assets/icons/qrcode.svg' import { styles } from './style' +import { sm } from '~/theme/variables' type Props = { onClose: () => void, @@ -114,7 +115,7 @@ const SendFunds = ({ - Arrow Down + Arrow Down diff --git a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/style.js b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/style.js index 85ddeac7..bcdf657d 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/style.js +++ b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/style.js @@ -15,7 +15,7 @@ export const styles = () => ({ marginLeft: '20px', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', @@ -32,7 +32,7 @@ export const styles = () => ({ justifyContent: 'center', '& > button': { fontFamily: 'Averta', - fontSize: '16px', + fontSize: md, }, }, submitButton: { diff --git a/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/style.js b/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/style.js index 3dd3b0ab..742a3321 100644 --- a/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/style.js +++ b/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/style.js @@ -1,10 +1,10 @@ // @flow -import { lg } from '~/theme/variables' +import { lg, md } from '~/theme/variables' export const styles = () => ({ title: { padding: `${lg} 0 20px`, - fontSize: '16px', + fontSize: md, }, formContainer: { padding: '0 20px', diff --git a/src/routes/safe/components/Balances/dataFetcher.js b/src/routes/safe/components/Balances/dataFetcher.js index faaf2ffc..bdfb8f6a 100644 --- a/src/routes/safe/components/Balances/dataFetcher.js +++ b/src/routes/safe/components/Balances/dataFetcher.js @@ -4,6 +4,8 @@ import { type Token } from '~/logic/tokens/store/model/token' import { buildOrderFieldFrom, FIXED, type SortRow } from '~/components/Table/sorting' import { type Column } from '~/components/Table/TableHead' import { formatAmount } from '~/logic/tokens/utils/formatAmount' +import type { BalanceCurrencyType } from '~/logic/currencyValues/store/model/currencyValues' +import { AVAILABLE_CURRENCIES } from '~/logic/currencyValues/store/model/currencyValues' export const BALANCE_TABLE_ASSET_ID = 'asset' export const BALANCE_TABLE_BALANCE_ID = 'balance' @@ -16,13 +18,29 @@ type BalanceData = { export type BalanceRow = SortRow -export const getBalanceData = (activeTokens: List): List => { +// eslint-disable-next-line max-len +const getTokenPriceInCurrency = (token: Token, currencySelected: AVAILABLE_CURRENCIES, currencyValues: List): string => { + // eslint-disable-next-line no-restricted-syntax + + for (const tokenPriceIterator of currencyValues) { + const { tokenAddress, balanceInSelectedCurrency, currencyName } = tokenPriceIterator + if (token.address === tokenAddress && currencySelected === currencyName) { + const balance = balanceInSelectedCurrency ? parseFloat(balanceInSelectedCurrency, 10).toFixed(2) : balanceInSelectedCurrency + return `${balance} ${currencySelected}` + } + } + return null +} + +// eslint-disable-next-line max-len +export const getBalanceData = (activeTokens: List, currencySelected: string, currencyValues: List): List => { const rows = activeTokens.map((token: Token) => ({ [BALANCE_TABLE_ASSET_ID]: { name: token.name, logoUri: token.logoUri, address: token.address }, [buildOrderFieldFrom(BALANCE_TABLE_ASSET_ID)]: token.name, [BALANCE_TABLE_BALANCE_ID]: `${formatAmount(token.balance)} ${token.symbol}`, [buildOrderFieldFrom(BALANCE_TABLE_BALANCE_ID)]: Number(token.balance), [FIXED]: token.get('symbol') === 'ETH', + [BALANCE_TABLE_VALUE_ID]: getTokenPriceInCurrency(token, currencySelected, currencyValues), })) return rows @@ -56,5 +74,26 @@ export const generateColumns = () => { static: true, } - return List([assetColumn, balanceColumn, actions]) + const value: Column = { + id: BALANCE_TABLE_VALUE_ID, + order: false, + label: 'Value', + custom: false, + static: true, + style: { + fontSize: '11px', + color: '#5d6d74', + borderBottomWidth: '2px', + width: '125px', + fontFamily: 'Averta', + fontWeight: 'normal', + fontStyle: 'normal', + textAlign: 'right', + }, + } + + return List([assetColumn, balanceColumn, value, actions]) } + +// eslint-disable-next-line max-len +export const filterByZero = (data: List, hideZero: boolean): List => data.filter((row: BalanceRow) => (hideZero ? row[buildOrderFieldFrom(BALANCE_TABLE_BALANCE_ID)] !== 0 : true)) diff --git a/src/routes/safe/components/Balances/index.jsx b/src/routes/safe/components/Balances/index.jsx index 85ea6d3d..759e4c40 100644 --- a/src/routes/safe/components/Balances/index.jsx +++ b/src/routes/safe/components/Balances/index.jsx @@ -23,6 +23,9 @@ import Tokens from './Tokens' import SendModal from './SendModal' import Receive from './Receive' import { styles } from './style' +import DropdownCurrency from '~/routes/safe/components/DropdownCurrency' +import type { BalanceCurrencyType } from '~/logic/currencyValues/store/model/currencyValues' +import { BALANCE_TABLE_BALANCE_ID, BALANCE_TABLE_VALUE_ID } from '~/routes/safe/components/Balances/dataFetcher' export const MANAGE_TOKENS_BUTTON_TEST_ID = 'manage-tokens-btn' export const BALANCE_ROW_TEST_ID = 'balance-row' @@ -45,6 +48,9 @@ type Props = { safeName: string, ethBalance: string, createTransaction: Function, + currencySelected: string, + fetchCurrencyValues: Function, + currencyValues: BalanceCurrencyType[], } type Action = 'Token' | 'Send' | 'Receive' @@ -63,6 +69,12 @@ class Balances extends React.Component { props.fetchTokens() } + componentDidMount(): void { + const { safeAddress, fetchCurrencyValues, activateTokensByBalance } = this.props + fetchCurrencyValues(safeAddress) + activateTokensByBalance(safeAddress) + } + onShow = (action: Action) => () => { this.setState(() => ({ [`show${action}`]: true })) } @@ -89,17 +101,6 @@ class Balances extends React.Component { }) } - handleChange = (e: SyntheticInputEvent) => { - const { checked } = e.target - - this.setState(() => ({ hideZero: checked })) - } - - componentDidMount(): void { - const { activateTokensByBalance, safeAddress } = this.props - activateTokensByBalance(safeAddress) - } - render() { const { showToken, showReceive, sendFunds, @@ -114,17 +115,20 @@ class Balances extends React.Component { safeName, ethBalance, createTransaction, + currencySelected, + currencyValues, } = this.props const columns = generateColumns() const autoColumns = columns.filter((c) => !c.custom) - const filteredData = getBalanceData(activeTokens) + const filteredData = getBalanceData(activeTokens, currencySelected, currencyValues) return ( <> + Manage List @@ -155,11 +159,42 @@ class Balances extends React.Component { > {(sortedData: Array) => sortedData.map((row: any, index: number) => ( - {autoColumns.map((column: Column) => ( - - {column.id === BALANCE_TABLE_ASSET_ID ? : row[column.id]} - - ))} + {autoColumns.map((column: Column) => { + const { id, width, align } = column + let cellItem + switch (id) { + case BALANCE_TABLE_ASSET_ID: { + cellItem = + break + } + case BALANCE_TABLE_BALANCE_ID: { + cellItem = ( +
+ {row[id]} +
+ ) + break + } + case BALANCE_TABLE_VALUE_ID: { + cellItem =
{row[id]}
+ break + } + default: { + cellItem = null + break + } + } + return ( + + {cellItem} + + ) + })} {granted && ( diff --git a/src/routes/safe/components/Balances/style.js b/src/routes/safe/components/Balances/style.js index d3113963..e1ba4a3a 100644 --- a/src/routes/safe/components/Balances/style.js +++ b/src/routes/safe/components/Balances/style.js @@ -1,5 +1,5 @@ // @flow -import { sm, md } from '~/theme/variables' +import { xs, sm, md } from '~/theme/variables' export const styles = (theme: Object) => ({ root: { @@ -41,7 +41,7 @@ export const styles = (theme: Object) => ({ width: '95px', minWidth: '95px', marginLeft: sm, - borderRadius: '4px', + borderRadius: xs, '& > span': { fontSize: '14px', }, @@ -49,7 +49,7 @@ export const styles = (theme: Object) => ({ send: { width: '75px', minWidth: '75px', - borderRadius: '4px', + borderRadius: xs, '& > span': { fontSize: '14px', }, @@ -63,4 +63,8 @@ export const styles = (theme: Object) => ({ cursor: 'pointer', }, }, + currencyValueRow: { + maxWidth: '125px', + textAlign: 'right', + }, }) diff --git a/src/routes/safe/components/DropdownCurrency/img/check.svg b/src/routes/safe/components/DropdownCurrency/img/check.svg new file mode 100644 index 00000000..e6440050 --- /dev/null +++ b/src/routes/safe/components/DropdownCurrency/img/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/DropdownCurrency/index.jsx b/src/routes/safe/components/DropdownCurrency/index.jsx new file mode 100644 index 00000000..0b8c8abf --- /dev/null +++ b/src/routes/safe/components/DropdownCurrency/index.jsx @@ -0,0 +1,124 @@ +// @flow +import ListItemIcon from '@material-ui/core/ListItemIcon' +import ListItemText from '@material-ui/core/ListItemText' +import Menu from '@material-ui/core/Menu' +import MenuItem from '@material-ui/core/MenuItem' +import React, { useState } from 'react' +import style from 'currency-flags/dist/currency-flags.min.css' +import { MuiThemeProvider } from '@material-ui/core/styles' +import { useDispatch, useSelector } from 'react-redux' +import SearchIcon from '@material-ui/icons/Search' +import InputBase from '@material-ui/core/InputBase' +import classNames from 'classnames' +import { DropdownListTheme } from '~/theme/mui' +import CheckIcon from './img/check.svg' +import { AVAILABLE_CURRENCIES } from '~/logic/currencyValues/store/model/currencyValues' +import fetchCurrencySelectedValue from '~/logic/currencyValues/store/actions/fetchCurrencySelectedValue' +import { currentCurrencySelector } from '~/logic/currencyValues/store/selectors' +import { useDropdownStyles } from '~/routes/safe/components/DropdownCurrency/style' +import saveCurrencySelected from '~/logic/currencyValues/store/actions/saveCurrencySelected' + + +const DropdownCurrency = () => { + const currenciesList = Object.values(AVAILABLE_CURRENCIES) + const dispatch = useDispatch() + const [anchorEl, setAnchorEl] = useState(null) + const currencyValueSelected = useSelector(currentCurrencySelector) + + const [searchParams, setSearchParams] = useState('') + const classes = useDropdownStyles() + const currenciesListFiltered = currenciesList.filter((currency) => currency.toLowerCase().includes(searchParams.toLowerCase())) + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget) + } + + const handleClose = () => { + setAnchorEl(null) + } + + const onCurrentCurrencyChangedHandler = (newCurrencySelectedName: AVAILABLE_CURRENCIES) => { + dispatch(fetchCurrencySelectedValue(newCurrencySelectedName)) + dispatch(saveCurrencySelected(newCurrencySelectedName)) + handleClose() + } + + return ( + !currencyValueSelected ? null + : ( + + <> + + + +
+
+ +
+ setSearchParams(event.target.value)} + value={searchParams} + /> +
+
+
+ {currenciesListFiltered.map((currencyName) => ( + onCurrentCurrencyChangedHandler(currencyName)} + > + +
+ + + {currencyName === currencyValueSelected + ? checked : null} + + ))} +
+
+ +
+ ) + ) +} + +export default DropdownCurrency diff --git a/src/routes/safe/components/DropdownCurrency/style.js b/src/routes/safe/components/DropdownCurrency/style.js new file mode 100644 index 00000000..da03af26 --- /dev/null +++ b/src/routes/safe/components/DropdownCurrency/style.js @@ -0,0 +1,119 @@ +// @flow +import { makeStyles } from '@material-ui/core/styles' + +const buttonWidth = '140px' +export const useDropdownStyles = makeStyles({ + listItem: { + maxWidth: buttonWidth, + boxSizing: 'border-box', + }, + listItemSearch: { + maxWidth: buttonWidth, + padding: '0', + boxSizing: 'border-box', + }, + localFlag: { + backgroundPosition: '50% 50%', + backgroundRepeat: 'no-repeat', + backgroundSize: 'contain', + height: '20px !important', + width: '26px !important', + }, + iconLeft: { + marginRight: '10px', + }, + iconRight: { + marginLeft: '18px', + }, + button: { + backgroundColor: '#e8e7e6', + border: 'none', + borderRadius: '3px', + boxSizing: 'border-box', + color: '#5d6d74', + cursor: 'pointer', + fontSize: '12px', + fontWeight: 'normal', + height: '24px', + lineHeight: '1.33', + marginRight: '20px', + minWidth: buttonWidth, + outline: 'none', + padding: '0', + textAlign: 'left', + '&:active': { + opacity: '0.8', + }, + }, + buttonInner: { + boxSizing: 'border-box', + display: 'block', + height: '100%', + lineHeight: '24px', + padding: '0 22px 0 8px', + position: 'relative', + width: '100%', + '&::after': { + borderLeft: '5px solid transparent', + borderRight: '5px solid transparent', + borderTop: '5px solid #5d6d74', + content: '""', + height: '0', + position: 'absolute', + right: '8px', + top: '9px', + width: '0', + }, + }, + openMenuButton: { + '&::after': { + borderBottom: '5px solid #5d6d74', + borderLeft: '5px solid transparent', + borderRight: '5px solid transparent', + borderTop: 'none', + }, + }, + dropdownItemsScrollWrapper: { + maxHeight: '280px', + overflow: 'auto', + }, + search: { + position: 'relative', + borderRadius: '0', + backgroundColor: '#fff', + '&:hover': { + backgroundColor: '#fff', + }, + marginRight: 0, + width: '100%', + }, + searchIcon: { + alignItems: 'center', + display: 'flex', + height: '100%', + justifyContent: 'center', + left: '12px', + margin: '0', + pointerEvents: 'none', + position: 'absolute', + top: '50%', + transform: 'translateY(-50%)', + width: '18px', + '& path': { + fill: '#b2b5b2', + }, + }, + inputRoot: { + color: '#5d6d74', + fontSize: '14px', + fontWeight: 'normal', + lineHeight: '1.43', + width: '100%', + }, + inputInput: { + boxSizing: 'border-box', + height: '44px', + padding: '12px 12px 12px 40px', + width: '100%', + }, +}) diff --git a/src/routes/safe/components/Layout.jsx b/src/routes/safe/components/Layout.jsx index bb653fdc..a97f047f 100644 --- a/src/routes/safe/components/Layout.jsx +++ b/src/routes/safe/components/Layout.jsx @@ -49,6 +49,7 @@ type Props = SelectorProps & match: Object, location: Object, history: Object, + fetchCurrencyValues: Function, } const Layout = (props: Props) => { @@ -63,7 +64,6 @@ const Layout = (props: Props) => { blacklistedTokens, createTransaction, processTransaction, - fetchTransactions, activateTokensByBalance, fetchTokens, updateSafe, @@ -77,6 +77,9 @@ const Layout = (props: Props) => { hideSendFunds, match, location, + currencySelected, + fetchCurrencyValues, + currencyValues, } = props const handleCallToRouter = (_, value) => { @@ -166,6 +169,9 @@ const Layout = (props: Props) => { fetchTokens={fetchTokens} safeName={name} createTransaction={createTransaction} + currencySelected={currencySelected} + fetchCurrencyValues={fetchCurrencyValues} + currencyValues={currencyValues} /> )} /> @@ -176,8 +182,8 @@ const Layout = (props: Props) => {
{story()}
- -storiesOf('Routes /safe:address', module) - .addDecorator(FrameDecorator) - .add('Safe undefined being connected', () => ( - {}} /> - )) - .add('Safe undefined NOT connected', () => ( - {}} /> - )) diff --git a/src/routes/safe/components/NoRights/index.stories.js b/src/routes/safe/components/NoRights/index.stories.js deleted file mode 100644 index 03d95d28..00000000 --- a/src/routes/safe/components/NoRights/index.stories.js +++ /dev/null @@ -1,11 +0,0 @@ -// @flow -import { storiesOf } from '@storybook/react' -import * as React from 'react' -import styles from '~/components/layout/PageFrame/index.scss' -import Component from './index.jsx' - -const FrameDecorator = (story) =>
{story()}
- -storiesOf('Components', module) - .addDecorator(FrameDecorator) - .add('NoRights', () => ) diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/index.jsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/index.jsx index c7b25c4f..54aaf30a 100644 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/index.jsx +++ b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/index.jsx @@ -47,15 +47,15 @@ export const sendAddOwner = async ( const gnosisSafe = await getGnosisSafeInstanceAt(safeAddress) const txData = gnosisSafe.contract.methods.addOwnerWithThreshold(values.ownerAddress, values.threshold).encodeABI() - const txHash = await createTransaction( + const txHash = await createTransaction({ safeAddress, - safeAddress, - 0, + to: safeAddress, + valueInWei: 0, txData, - TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, + notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, enqueueSnackbar, closeSnackbar, - ) + }) if (txHash) { addSafeOwner({ safeAddress, ownerName: values.ownerName, ownerAddress: values.ownerAddress }) diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/style.js b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/style.js index 7bc8a697..b793afdb 100644 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/style.js @@ -17,7 +17,7 @@ export const styles = () => ({ lineHeight: 'normal', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/style.js b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/style.js index 395b67a5..ed12d708 100644 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/style.js @@ -20,7 +20,7 @@ export const styles = () => ({ lineHeight: 'normal', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/style.js b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/style.js index 8f37e209..d25cd4b9 100644 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/style.js @@ -17,14 +17,14 @@ export const styles = () => ({ lineHeight: 'normal', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', width: '35px', }, headingText: { - fontSize: '16px', + fontSize: md, }, formContainer: { padding: `${md} ${lg}`, diff --git a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/style.js b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/style.js index fb0d4b09..4a7d849a 100644 --- a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/style.js @@ -10,7 +10,7 @@ export const styles = () => ({ boxSizing: 'border-box', }, manage: { - fontSize: '24px', + fontSize: lg, }, container: { padding: `${md} ${lg}`, diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/index.jsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/index.jsx index b0322106..095514cd 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/index.jsx +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/index.jsx @@ -62,15 +62,15 @@ export const sendRemoveOwner = async ( .removeOwner(prevAddress, ownerAddressToRemove, values.threshold) .encodeABI() - const txHash = await createTransaction( + const txHash = await createTransaction({ safeAddress, - safeAddress, - 0, + to: safeAddress, + valueInWei: 0, txData, - TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, + notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, enqueueSnackbar, closeSnackbar, - ) + }) if (txHash && safe.threshold === 1) { removeSafeOwner({ safeAddress, ownerAddress: ownerAddressToRemove }) diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/style.js b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/style.js index eb685f20..e2ad1dde 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/style.js @@ -17,7 +17,7 @@ export const styles = () => ({ marginLeft: '20px', }, manage: { - fontSize: '24px', + fontSize: lg, }, address: { marginRight: sm, diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/style.js b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/style.js index 26d5dc87..c6258583 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/style.js @@ -20,7 +20,7 @@ export const styles = () => ({ marginLeft: '20px', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/style.js b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/style.js index da414b18..1a7da51f 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/style.js @@ -17,14 +17,14 @@ export const styles = () => ({ marginLeft: '20px', }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', width: '35px', }, headingText: { - fontSize: '16px', + fontSize: md, }, formContainer: { padding: `${md} ${lg}`, diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/index.jsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/index.jsx index cae38f6b..29f52db5 100644 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/index.jsx +++ b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/index.jsx @@ -58,15 +58,15 @@ export const sendReplaceOwner = async ( .swapOwner(prevAddress, ownerAddressToRemove, values.ownerAddress) .encodeABI() - const txHash = await createTransaction( + const txHash = await createTransaction({ safeAddress, - safeAddress, - 0, + to: safeAddress, + valueInWei: 0, txData, - TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, + notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, enqueueSnackbar, closeSnackbar, - ) + }) if (txHash && safe.threshold === 1) { replaceSafeOwner({ diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/style.js b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/style.js index ada4bbaf..8594304a 100644 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/style.js @@ -20,7 +20,7 @@ export const styles = () => ({ marginRight: sm, }, manage: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/style.js b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/style.js index 5266de5b..00cff6ea 100644 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/style.js @@ -20,7 +20,7 @@ export const styles = () => ({ lineHeight: 'normal', }, manage: { - fontSize: '24px', + fontSize: lg, }, address: { marginRight: sm, diff --git a/src/routes/safe/components/Settings/ManageOwners/style.js b/src/routes/safe/components/Settings/ManageOwners/style.js index 6aa5d711..91280c34 100644 --- a/src/routes/safe/components/Settings/ManageOwners/style.js +++ b/src/routes/safe/components/Settings/ManageOwners/style.js @@ -1,5 +1,5 @@ // @flow -import { lg } from '~/theme/variables' +import { lg, sm } from '~/theme/variables' export const styles = () => ({ formContainer: { @@ -40,7 +40,7 @@ export const styles = () => ({ controlsRow: { backgroundColor: 'white', padding: lg, - borderRadius: '8px', + borderRadius: sm, }, removeOwnerIcon: { marginLeft: lg, diff --git a/src/routes/safe/components/Settings/RemoveSafeModal/index.jsx b/src/routes/safe/components/Settings/RemoveSafeModal/index.jsx index c0c68568..188d08d6 100644 --- a/src/routes/safe/components/Settings/RemoveSafeModal/index.jsx +++ b/src/routes/safe/components/Settings/RemoveSafeModal/index.jsx @@ -18,11 +18,11 @@ import Link from '~/components/layout/Link' import Paragraph from '~/components/layout/Paragraph' import Hairline from '~/components/layout/Hairline' import actions, { type Actions } from './actions' -import { secondary } from '~/theme/variables' +import { secondary, md } from '~/theme/variables' import { styles } from './style' const openIconStyle = { - height: '16px', + height: md, color: secondary, } diff --git a/src/routes/safe/components/Settings/RemoveSafeModal/style.js b/src/routes/safe/components/Settings/RemoveSafeModal/style.js index 99780564..eab97ef2 100644 --- a/src/routes/safe/components/Settings/RemoveSafeModal/style.js +++ b/src/routes/safe/components/Settings/RemoveSafeModal/style.js @@ -14,7 +14,7 @@ export const styles = () => ({ minHeight: '369px', }, manage: { - fontSize: '24px', + fontSize: lg, }, close: { height: '35px', diff --git a/src/routes/safe/components/Settings/ThresholdSettings/index.jsx b/src/routes/safe/components/Settings/ThresholdSettings/index.jsx index aa72b333..8e71e2a7 100644 --- a/src/routes/safe/components/Settings/ThresholdSettings/index.jsx +++ b/src/routes/safe/components/Settings/ThresholdSettings/index.jsx @@ -47,15 +47,15 @@ const ThresholdSettings = ({ const safeInstance = await getGnosisSafeInstanceAt(safeAddress) const txData = safeInstance.contract.methods.changeThreshold(newThreshold).encodeABI() - createTransaction( + createTransaction({ safeAddress, - safeAddress, - 0, + to: safeAddress, + valueInWei: 0, txData, - TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, + notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, enqueueSnackbar, closeSnackbar, - ) + }) } return ( diff --git a/src/routes/safe/components/Settings/ThresholdSettings/style.js b/src/routes/safe/components/Settings/ThresholdSettings/style.js index 333581dd..001cbea3 100644 --- a/src/routes/safe/components/Settings/ThresholdSettings/style.js +++ b/src/routes/safe/components/Settings/ThresholdSettings/style.js @@ -1,6 +1,6 @@ // @flow import { - fontColor, lg, smallFontSize, border, secondaryText, + fontColor, xl, lg, smallFontSize, border, secondaryText, } from '~/theme/variables' export const styles = () => ({ @@ -24,7 +24,7 @@ export const styles = () => ({ borderTop: `2px solid ${border}`, }, modifyBtn: { - height: '32px', + height: xl, fontSize: smallFontSize, }, }) diff --git a/src/routes/safe/components/Settings/style.js b/src/routes/safe/components/Settings/style.js index 83ba3d00..48881481 100644 --- a/src/routes/safe/components/Settings/style.js +++ b/src/routes/safe/components/Settings/style.js @@ -10,7 +10,7 @@ export const styles = () => ({ minHeight: '505px', marginBottom: '54px', display: 'flex', - borderRadius: '8px', + borderRadius: sm, }, settings: { letterSpacing: '-0.5px', @@ -25,7 +25,7 @@ export const styles = () => ({ alignItems: 'center', cursor: 'pointer', '&:first-child': { - borderTopLeftRadius: '8px', + borderTopLeftRadius: sm, }, }, active: { @@ -57,7 +57,7 @@ export const styles = () => ({ }, removeSafeIcon: { marginLeft: sm, - height: '16px', + height: md, cursor: 'pointer', }, }) diff --git a/src/routes/safe/components/Transactions/NoTransactions/index.jsx b/src/routes/safe/components/Transactions/NoTransactions/index.jsx deleted file mode 100644 index 5048bf23..00000000 --- a/src/routes/safe/components/Transactions/NoTransactions/index.jsx +++ /dev/null @@ -1,20 +0,0 @@ -// @flow -import * as React from 'react' -import Bold from '~/components/layout/Bold' -import Col from '~/components/layout/Col' -import Row from '~/components/layout/Row' -import Paragraph from '~/components/layout/Paragraph/index' - -export const NO_TRANSACTION_ROW_TEST_ID = 'no-transaction-row' - -const NoTransactions = () => ( - - - - No transactions found for this Safe - - - -) - -export default NoTransactions diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.jsx index 55414fda..dc317ccb 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.jsx @@ -33,8 +33,9 @@ type Props = { threshold: number, thresholdReached: boolean, userAddress: string, + canExecute: boolean, enqueueSnackbar: Function, - closeSnackbar: Function, + closeSnackbar: Function } const getModalTitleAndDescription = (thresholdReached: boolean) => { @@ -59,15 +60,16 @@ const ApproveTxModal = ({ tx, safeAddress, threshold, + canExecute, thresholdReached, userAddress, enqueueSnackbar, closeSnackbar, }: Props) => { - const oneConfirmationLeft = !thresholdReached && tx.confirmations.size + 1 === threshold - const [approveAndExecute, setApproveAndExecute] = useState(oneConfirmationLeft || thresholdReached) + const [approveAndExecute, setApproveAndExecute] = useState(canExecute) const [gasCosts, setGasCosts] = useState('< 0.001') const { title, description } = getModalTitleAndDescription(thresholdReached) + const oneConfirmationLeft = !thresholdReached && tx.confirmations.size + 1 === threshold useEffect(() => { let isCurrent = true @@ -100,20 +102,25 @@ const ApproveTxModal = ({ const handleExecuteCheckbox = () => setApproveAndExecute((prevApproveAndExecute) => !prevApproveAndExecute) const approveTx = () => { - processTransaction( + processTransaction({ safeAddress, tx, userAddress, - TX_NOTIFICATION_TYPES.CONFIRMATION_TX, + notifiedTransaction: TX_NOTIFICATION_TYPES.CONFIRMATION_TX, enqueueSnackbar, closeSnackbar, - approveAndExecute && oneConfirmationLeft, - ) + approveAndExecute: canExecute && approveAndExecute && oneConfirmationLeft, + }) onClose() } return ( - + {title} @@ -131,14 +138,21 @@ const ApproveTxModal = ({
{tx.nonce}
- {oneConfirmationLeft && ( + {oneConfirmationLeft && canExecute && ( <> - Approving this transaction executes it right away. If you want approve but execute the transaction - manually later, click on the checkbox below. + Approving this transaction executes it right away. If you want + approve but execute the transaction manually later, click on the + checkbox below. } + control={( + + )} label="Execute transaction" /> diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/style.js b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/style.js index 4e966137..dc61eb32 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/style.js +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/style.js @@ -11,7 +11,7 @@ export const styles = () => ({ maxHeight: '75px', }, headingText: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/index.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/index.jsx index 926d4961..e55eb1aa 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/index.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/index.jsx @@ -64,15 +64,15 @@ const CancelTxModal = ({ }, []) const sendReplacementTransaction = () => { - createTransaction( + createTransaction({ safeAddress, - safeAddress, - 0, - EMPTY_DATA, - TX_NOTIFICATION_TYPES.CANCELLATION_TX, + to: safeAddress, + valueInWei: 0, + notifiedTransaction: TX_NOTIFICATION_TYPES.CANCELLATION_TX, enqueueSnackbar, closeSnackbar, - ) + txNonce: tx.nonce, + }) onClose() } diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/style.js b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/style.js index 4e966137..dc61eb32 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/style.js +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CancelTxModal/style.js @@ -11,7 +11,7 @@ export const styles = () => ({ maxHeight: '75px', }, headingText: { - fontSize: '24px', + fontSize: lg, }, closeIcon: { height: '35px', diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.jsx new file mode 100644 index 00000000..12cf43a6 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.jsx @@ -0,0 +1,54 @@ +// @flow +import React from 'react' +import { makeStyles } from '@material-ui/core/styles' +import type { IncomingTransaction } from '~/routes/safe/store/models/incomingTransaction' +import Bold from '~/components/layout/Bold' +import EtherscanLink from '~/components/EtherscanLink' +import Paragraph from '~/components/layout/Paragraph' +import Block from '~/components/layout/Block' +import { md, lg } from '~/theme/variables' +import { getIncomingTxAmount } from '~/routes/safe/components/Transactions/TxsTable/columns' + +export const TRANSACTIONS_DESC_INCOMING_TEST_ID = 'tx-description-incoming' + +const useStyles = makeStyles({ + txDataContainer: { + padding: `${lg} ${md}`, + borderRight: '2px solid rgb(232, 231, 230)', + }, +}) + +type Props = { + tx: IncomingTransaction, +} + +type TransferDescProps = { + value: string, + from: string, +} + +const TransferDescription = ({ value = '', from }: TransferDescProps) => ( + + + Received + {' '} + {value} + {' '} + from: + +
+ +
+) + +const IncomingTxDescription = ({ tx }: Props) => { + const classes = useStyles() + + return ( + + + + ) +} + +export default IncomingTxDescription diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/ButtonRow.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/ButtonRow.jsx index ad670f3c..8bc095ee 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/ButtonRow.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/ButtonRow.jsx @@ -1,36 +1,25 @@ // @flow import React from 'react' import { withStyles } from '@material-ui/core/styles' -import EditIcon from '@material-ui/icons/Edit' -import BlockIcon from '@material-ui/icons/Block' import Row from '~/components/layout/Row' import Button from '~/components/layout/Button' -import { sm, lg, background } from '~/theme/variables' - -export const CONFIRM_TX_BTN_TEST_ID = 'confirm-btn' -export const EXECUTE_TX_BTN_TEST_ID = 'execute-btn' +import { xl, sm, border } from '~/theme/variables' type Props = { - onTxConfirm: Function, - onTxCancel: Function, - onTxExecute: Function, classes: Object, - showConfirmBtn: boolean, + onTxCancel: Function, showCancelBtn: boolean, - showExecuteBtn: boolean, } const styles = () => ({ buttonRow: { - height: '56px', - justifyContent: 'center', - backgroundColor: background, + borderTop: `2px solid ${border}`, + display: 'flex', + justifyContent: 'flex-end', + padding: '10px 20px', }, button: { - height: '32px', - '&:last-child': { - marginLeft: lg, - }, + height: xl, }, icon: { width: '14px', @@ -42,46 +31,12 @@ const styles = () => ({ const ButtonRow = ({ classes, onTxCancel, - onTxConfirm, - showConfirmBtn, showCancelBtn, - showExecuteBtn, - onTxExecute, }: Props) => ( - + {showCancelBtn && ( - )} - {showConfirmBtn && ( - - )} - {showExecuteBtn && ( - )} diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/List.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/List.jsx deleted file mode 100644 index 25b0de46..00000000 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/List.jsx +++ /dev/null @@ -1,67 +0,0 @@ -// @flow -import React from 'react' -import { List } from 'immutable' -import { withStyles } from '@material-ui/core/styles' -import OpenInNew from '@material-ui/icons/OpenInNew' -import MuiList from '@material-ui/core/List' -import ListItem from '@material-ui/core/ListItem' -import ListItemIcon from '@material-ui/core/ListItemIcon' -import ListItemText from '@material-ui/core/ListItemText' -import Chip from '@material-ui/core/Chip' -import Identicon from '~/components/Identicon' -import Hairline from '~/components/layout/Hairline' -import { type Owner } from '~/routes/safe/store/models/owner' -import { getEtherScanLink } from '~/logic/wallets/getWeb3' -import { secondary } from '~/theme/variables' -import { shortVersionOf } from '~/logic/wallets/ethAddresses' -import { styles } from './style' - -type ListProps = { - owners: List, - classes: Object, - executionConfirmation?: Owner, -} - -type OwnerProps = { - owner: Owner, - classes: Object, - isExecutor?: boolean, -} - -const openIconStyle = { - height: '13px', - color: secondary, -} - -const OwnerComponent = withStyles(styles)(({ owner, classes, isExecutor }: OwnerProps) => ( - - - - - - {shortVersionOf(owner.address, 4)} - {' '} - - - )} - /> - {isExecutor && } - -)) - -const OwnersList = ({ owners, classes, executionConfirmation }: ListProps) => ( - <> - - {executionConfirmation && } - {owners.map((owner) => ( - - ))} - - - -) - -export default withStyles(styles)(OwnersList) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.jsx new file mode 100644 index 00000000..669622aa --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.jsx @@ -0,0 +1,104 @@ +// @flow +import React from 'react' +import { withStyles } from '@material-ui/core/styles' +import Button from '~/components/layout/Button' +import Img from '~/components/layout/Img' +import EtherscanLink from '~/components/EtherscanLink' +import Identicon from '~/components/Identicon' +import Block from '~/components/layout/Block' +import Paragraph from '~/components/layout/Paragraph' +import { type Owner } from '~/routes/safe/store/models/owner' +import { styles } from './style' +import ConfirmSmallGreyIcon from './assets/confirm-small-grey.svg' +import ConfirmSmallGreenIcon from './assets/confirm-small-green.svg' +import ConfirmSmallFilledIcon from './assets/confirm-small-filled.svg' + +export const CONFIRM_TX_BTN_TEST_ID = 'confirm-btn' +export const EXECUTE_TX_BTN_TEST_ID = 'execute-btn' + +type OwnerProps = { + owner: Owner, + classes: Object, + userAddress: string, + confirmed?: boolean, + executor?: string, + thresholdReached: boolean, + showConfirmBtn: boolean, + showExecuteBtn: boolean, + onTxConfirm: Function, + onTxExecute: Function +} + +const OwnerComponent = ({ + owner, + userAddress, + classes, + onTxConfirm, + showConfirmBtn, + showExecuteBtn, + onTxExecute, + executor, + confirmed, + thresholdReached, +}: OwnerProps) => ( + +
+
+ {confirmed ? ( + + ) : thresholdReached || executor ? ( + + ) : ( + + )} +
+ + + + {owner.name} + + + + + {showConfirmBtn && owner.address === userAddress && ( + + )} + {showExecuteBtn && owner.address === userAddress && ( + + )} + {owner.address === executor && ( + Executor + )} + +) + +export default withStyles(styles)(OwnerComponent) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnersList.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnersList.jsx new file mode 100644 index 00000000..ad60f0b5 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnersList.jsx @@ -0,0 +1,65 @@ +// @flow +import React from 'react' +import { List } from 'immutable' +import { withStyles } from '@material-ui/core/styles' +import OwnerComponent from './OwnerComponent' +import { type Owner } from '~/routes/safe/store/models/owner' +import { styles } from './style' + +type ListProps = { + ownersWhoConfirmed: List, + ownersUnconfirmed: List, + classes: Object, + userAddress: string, + executor: string, + thresholdReached: boolean, + showConfirmBtn: boolean, + showExecuteBtn: boolean, + onTxConfirm: Function, + onTxExecute: Function, +} + +const OwnersList = ({ + userAddress, + ownersWhoConfirmed, + ownersUnconfirmed, + classes, + executor, + thresholdReached, + showConfirmBtn, + showExecuteBtn, + onTxConfirm, + onTxExecute, +}: ListProps) => ( + <> + {ownersWhoConfirmed.map((owner) => ( + + ))} + {ownersUnconfirmed.map((owner) => ( + + ))} + +) + +export default withStyles(styles)(OwnersList) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/check-large-filled-green.svg b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/check-large-filled-green.svg new file mode 100644 index 00000000..ed4fbbb7 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/check-large-filled-green.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-green.svg b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-green.svg new file mode 100644 index 00000000..353553ca --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-green.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-grey.svg b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-grey.svg new file mode 100644 index 00000000..1abe86e5 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-large-grey.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-filled.svg b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-filled.svg new file mode 100644 index 00000000..7f170aec --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-green.svg b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-green.svg new file mode 100644 index 00000000..c4bb04c8 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-green.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-grey.svg b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-grey.svg new file mode 100644 index 00000000..45a7fd9a --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/assets/confirm-small-grey.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/index.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/index.jsx index a0ef9dcd..b6394857 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/index.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/index.jsx @@ -1,19 +1,22 @@ // @flow -import React, { useState } from 'react' +import React from 'react' +import cn from 'classnames' import { List } from 'immutable' import { withStyles } from '@material-ui/core/styles' -import Tabs from '@material-ui/core/Tabs' -import Tab from '@material-ui/core/Tab' +import Block from '~/components/layout/Block' import Col from '~/components/layout/Col' -import Row from '~/components/layout/Row' -import Hairline from '~/components/layout/Hairline' +import Img from '~/components/layout/Img' import { type Owner } from '~/routes/safe/store/models/owner' import { type Transaction } from '~/routes/safe/store/models/transaction' import { TX_TYPE_CONFIRMATION } from '~/logic/safe/transactions/send' import { EMPTY_DATA } from '~/logic/wallets/ethTransactions' -import OwnersList from './List' +import OwnersList from './OwnersList' import ButtonRow from './ButtonRow' +import CheckLargeFilledGreenIcon from './assets/check-large-filled-green.svg' +import ConfirmLargeGreenIcon from './assets/confirm-large-green.svg' +import ConfirmLargeGreyIcon from './assets/confirm-large-grey.svg' import { styles } from './style' +import Paragraph from '~/components/layout/Paragraph/index' type Props = { tx: Transaction, @@ -24,9 +27,10 @@ type Props = { userAddress: string, thresholdReached: boolean, safeAddress: string, + canExecute: boolean, onTxConfirm: Function, onTxCancel: Function, - onTxExecute: Function, + onTxExecute: Function } const isCancellationTransaction = (tx: Transaction, safeAddress: string) => !tx.value && tx.data === EMPTY_DATA && tx.recipient === safeAddress @@ -43,32 +47,31 @@ const OwnersColumn = ({ onTxConfirm, onTxCancel, onTxExecute, + canExecute, }: Props) => { - const [tabIndex, setTabIndex] = useState(0) - const handleTabChange = (event, tabClicked) => { - setTabIndex(tabClicked) - } - const cancellationTx = isCancellationTransaction(tx, safeAddress) + const showOlderTxAnnotation = thresholdReached && !canExecute && !tx.isExecuted const ownersWhoConfirmed = [] let currentUserAlreadyConfirmed = false - let executionConfirmation - tx.confirmations.forEach((conf) => { if (conf.owner.address === userAddress) { currentUserAlreadyConfirmed = true } - if (conf.type === TX_TYPE_CONFIRMATION) { ownersWhoConfirmed.push(conf.owner) - } else { - executionConfirmation = conf.owner } }) const ownersUnconfirmed = owners.filter( - (owner) => tx.confirmations.findIndex((conf) => conf.owner.address === owner.address) === -1, + (owner) => tx.confirmations.findIndex( + (conf) => conf.owner.address === owner.address, + ) === -1, ) + let userIsUnconfirmedOwner + ownersUnconfirmed.some((owner) => { + userIsUnconfirmedOwner = owner.address === userAddress + return userIsUnconfirmedOwner + }) let displayButtonRow = true if (tx.executionTxHash) { @@ -77,40 +80,90 @@ const OwnersColumn = ({ } else if (tx.status === 'cancelled') { // tx is cancelled (replaced) by another one displayButtonRow = false - } else if (cancellationTx && currentUserAlreadyConfirmed && !thresholdReached) { + } else if ( + cancellationTx + && currentUserAlreadyConfirmed + && !thresholdReached + ) { // the TX is the cancellation (replacement) transaction for previous TX, // current user has already confirmed it and threshold is not reached (so he can't execute/cancel it) displayButtonRow = false } - let confirmedLabel = `Confirmed [${tx.confirmations.size}/${threshold}]` - if (tx.executionTxHash) { - confirmedLabel = `Confirmed [${tx.confirmations.size}]` - } - const unconfirmedLabel = `Unconfirmed [${ownersUnconfirmed.size}]` + const showConfirmBtn = !tx.isExecuted + && tx.status !== 'pending' + && !tx.cancelled + && userIsUnconfirmedOwner + && !currentUserAlreadyConfirmed + && !thresholdReached + + const showExecuteBtn = canExecute && !tx.isExecuted && thresholdReached return ( - - - - - - - - - {tabIndex === 0 && } - - {tabIndex === 1 && } - {granted && displayButtonRow && ( - +
+ {thresholdReached || tx.isExecuted ? ( + + ) : ( + + )} +
+ {tx.isExecuted + ? `Confirmed [${tx.confirmations.size}/${tx.confirmations.size}]` + : `Confirmed [${tx.confirmations.size}/${threshold}]`} + + + +
+
+ {!thresholdReached && !tx.isExecuted && ( + Confirm tx + )} + {thresholdReached && !tx.isExecuted && ( + Execute tx + )} + {tx.isExecuted && ( + TX Executed icon + )} +
+ Executed + + {showOlderTxAnnotation && ( + + + There are older transactions that need to be executed first + + + )} + {granted && displayButtonRow && ( + )} ) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/style.js b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/style.js index 46363137..baae9af5 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/style.js +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/style.js @@ -1,5 +1,7 @@ // @flow -import { border, sm } from '~/theme/variables' +import { + border, sm, boldFont, primary, secondary, secondaryText, +} from '~/theme/variables' export const styles = () => ({ ownersList: { @@ -10,7 +12,23 @@ export const styles = () => ({ }, rightCol: { boxSizing: 'border-box', - borderLeft: 'solid 1px #d4d53d', + borderLeft: `2px solid ${border}`, + }, + verticalLineProgressPending: { + position: 'absolute', + borderLeft: `2px solid ${secondaryText}`, + height: '52px', + top: '-26px', + left: '29px', + zIndex: '10', + }, + verticalLineProgressDone: { + position: 'absolute', + borderLeft: `2px solid ${secondary}`, + height: '52px', + top: '-26px', + left: '29px', + zIndex: '10', }, icon: { marginRight: sm, @@ -18,4 +36,60 @@ export const styles = () => ({ owner: { borderBottom: `1px solid ${border}`, }, + container: { + position: 'relative', + display: 'flex', + padding: '5px 20px', + }, + ownerListTitle: { + position: 'relative', + display: 'flex', + alignItems: 'center', + padding: '15px', + paddingLeft: '20px', + fontSize: '11px', + fontWeight: boldFont, + lineHeight: 1.27, + textTransform: 'uppercase', + letterSpacing: '1px', + }, + olderTxAnnotation: { + textAlign: 'center', + }, + ownerListTitleDone: { + color: secondary, + }, + name: { + textOverflow: 'ellipsis', + overflow: 'hidden', + height: '15px', + }, + address: { + height: '20px', + }, + spacer: { + flex: 'auto', + }, + iconState: { + width: '20px', + display: 'flex', + justifyContent: 'center', + marginRight: '10px', + zIndex: '100', + '& > img': { + display: 'block', + }, + }, + button: { + justifyContent: 'center', + alignSelf: 'center', + }, + executor: { + borderRadius: '3px', + padding: '3px 5px', + background: border, + color: primary, + alignSelf: 'center', + fontSize: '11px', + }, }) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/index.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/index.jsx index 2e94c9af..6ab40b9f 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/index.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/index.jsx @@ -50,7 +50,7 @@ type CustomDescProps = { } const TransferDescription = ({ value = '', symbol, recipient }: TransferDescProps) => ( - + Send {' '} @@ -60,33 +60,31 @@ const TransferDescription = ({ value = '', symbol, recipient }: TransferDescProp {' '} to: -
-
+ ) const SettingsDescription = ({ removedOwner, addedOwner, newThreshold }: DescriptionDescProps) => ( <> {removedOwner && ( - + Remove owner: -
-
+ )} {addedOwner && ( - + Add owner: -
-
+ )} {newThreshold && ( - + Change required confirmations: -
- {newThreshold} -
+ + {newThreshold} + + )} ) @@ -95,7 +93,7 @@ const CustomDescription = ({ data, value = 0, recipient, classes, }: CustomDescProps) => ( <> - + Send {' '} @@ -105,22 +103,21 @@ const CustomDescription = ({ {' '} to: -
-
- + + Data (hex encoded): -
- {data} -
+ + {data} + + ) const TxDescription = ({ tx, classes }: Props) => { const { - recipient, value, modifySettingsTx, removedOwner, addedOwner, newThreshold, cancellationTx, customTx, data, + recipient, value, modifySettingsTx, removedOwner, addedOwner, newThreshold, cancellationTx, customTx, creationTx, data, } = getTxData(tx) - return ( {modifySettingsTx && ( @@ -129,7 +126,7 @@ const TxDescription = ({ tx, classes }: Props) => { {customTx && ( )} - {!cancellationTx && !modifySettingsTx && !customTx && ( + {!cancellationTx && !modifySettingsTx && !customTx && !creationTx && ( )} diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.js b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.js index 632cf927..eb33f8da 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.js +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/utils.js @@ -11,6 +11,7 @@ type DecodedTxData = { addedOwner?: string, cancellationTx?: boolean, customTx?: boolean, + creationTx?: boolean, data: string, } @@ -54,6 +55,8 @@ export const getTxData = (tx: Transaction): DecodedTxData => { } } else if (tx.cancellationTx) { txData.cancellationTx = true + } else if (tx.creationTx) { + txData.creationTx = true } else { txData.recipient = tx.recipient txData.value = 0 diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.jsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.jsx index 81f3bdc4..d71941ea 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.jsx @@ -1,8 +1,8 @@ // @flow import React, { useState } from 'react' import { List } from 'immutable' -import { withStyles } from '@material-ui/core/styles' -import OpenInNew from '@material-ui/icons/OpenInNew' +import cn from 'classnames' +import { makeStyles } from '@material-ui/core/styles' import Row from '~/components/layout/Row' import Block from '~/components/layout/Block' import Col from '~/components/layout/Col' @@ -10,20 +10,19 @@ import Bold from '~/components/layout/Bold' import Span from '~/components/layout/Span' import Paragraph from '~/components/layout/Paragraph' import Hairline from '~/components/layout/Hairline' +import EtherScanLink from '~/components/EtherscanLink' import { type Transaction } from '~/routes/safe/store/models/transaction' import { type Owner } from '~/routes/safe/store/models/owner' -import { getEtherScanLink } from '~/logic/wallets/getWeb3' -import { shortVersionOf } from '~/logic/wallets/ethAddresses' -import { secondary } from '~/theme/variables' import TxDescription from './TxDescription' import OwnersColumn from './OwnersColumn' import CancelTxModal from './CancelTxModal' import ApproveTxModal from './ApproveTxModal' import { styles } from './style' import { formatDate } from '../columns' +import IncomingTxDescription from '~/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription' +import { INCOMING_TX_TYPE } from '~/routes/safe/store/models/incomingTransaction' type Props = { - classes: Object, tx: Transaction, threshold: number, owners: List, @@ -32,24 +31,23 @@ type Props = { safeAddress: string, createTransaction: Function, processTransaction: Function, + nonce: number } -type OpenModal = 'cancelTx' | 'approveTx' | null - -const openIconStyle = { - height: '13px', - color: secondary, -} +type OpenModal = "cancelTx" | "approveTx" | null const txStatusToLabel = { success: 'Success', + awaiting_your_confirmation: 'Awaiting your confirmation', awaiting_confirmations: 'Awaiting confirmations', cancelled: 'Cancelled', awaiting_execution: 'Awaiting execution', + pending: 'Pending', } +const useStyles = makeStyles(styles) + const ExpandedTx = ({ - classes, tx, threshold, owners, @@ -58,82 +56,107 @@ const ExpandedTx = ({ safeAddress, createTransaction, processTransaction, + nonce, }: Props) => { + const classes = useStyles() const [openModal, setOpenModal] = useState(null) const openApproveModal = () => setOpenModal('approveTx') const openCancelModal = () => setOpenModal('cancelTx') const closeModal = () => setOpenModal(null) - const thresholdReached = threshold <= tx.confirmations.size + const thresholdReached = tx.type !== INCOMING_TX_TYPE && threshold <= tx.confirmations.size + const canExecute = tx.type !== INCOMING_TX_TYPE && nonce === tx.nonce return ( <> - + - - - TX hash: + + + TX hash: {tx.executionTxHash ? ( - - {shortVersionOf(tx.executionTxHash, 4)} - - + ) : ( 'n/a' )} - + TX status: - - {txStatusToLabel[tx.status]} - + {txStatusToLabel[tx.status]} - - TX created: - {formatDate(tx.submissionDate)} - - {tx.executionDate && ( - - TX executed: - {formatDate(tx.executionDate)} - - )} - {tx.refundParams && ( - - TX refund: - max. - {' '} - {tx.refundParams.fee} - {' '} - {tx.refundParams.symbol} - - )} - {tx.operation === 1 && ( - - Delegate Call - - )} - {tx.operation === 2 && ( - - Contract Creation - + {tx.type === INCOMING_TX_TYPE ? ( + <> + + TX fee: + {tx.fee} + + + TX created: + {formatDate(tx.executionDate)} + + + ) : ( + <> + + TX created: + {formatDate(tx.submissionDate)} + + {tx.executionDate && ( + + TX executed: + {formatDate(tx.executionDate)} + + )} + {tx.refundParams && ( + + TX refund: + max. + {' '} + {tx.refundParams.fee} + {' '} + {tx.refundParams.symbol} + + )} + {tx.operation === 1 && ( + + Delegate Call + + )} + {tx.operation === 2 && ( + + Contract Creation + + )} + )} - + {tx.type === INCOMING_TX_TYPE ? ( + + ) : ( + + )} - + {tx.type !== INCOMING_TX_TYPE && ( + + )} {openModal === 'cancelTx' && ( @@ -150,6 +173,7 @@ const ExpandedTx = ({ isOpen processTransaction={processTransaction} onClose={closeModal} + canExecute={canExecute} tx={tx} userAddress={userAddress} safeAddress={safeAddress} @@ -161,4 +185,4 @@ const ExpandedTx = ({ ) } -export default withStyles(styles)(ExpandedTx) +export default ExpandedTx diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.js b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.js index c25bfa88..3b378d80 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.js +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.js @@ -1,12 +1,22 @@ // @flow import { - md, lg, connected, error, disabled, + md, lg, connected, error, disabled, border, } from '~/theme/variables' export const styles = () => ({ + expandedTxBlock: { + borderBottom: `2px solid ${border}`, + }, txDataContainer: { padding: `${lg} ${md}`, }, + txData: { + display: 'flex', + alignItems: 'center', + }, + awaiting_your_confirmation: { + color: disabled, + }, awaiting_confirmations: { color: disabled, }, @@ -19,4 +29,10 @@ export const styles = () => ({ cancelled: { color: error, }, + txHash: { + paddingRight: '3px', + }, + incomingTxBlock: { + borderRight: '2px solid rgb(232, 231, 230)', + }, }) diff --git a/src/routes/safe/components/Transactions/TxsTable/Status/index.jsx b/src/routes/safe/components/Transactions/TxsTable/Status/index.jsx index 3592f655..5413a102 100644 --- a/src/routes/safe/components/Transactions/TxsTable/Status/index.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/Status/index.jsx @@ -19,6 +19,7 @@ type Props = { const statusToIcon = { success: OkIcon, cancelled: ErrorIcon, + awaiting_your_confirmation: AwaitingIcon, awaiting_confirmations: AwaitingIcon, awaiting_execution: AwaitingIcon, pending: , @@ -26,9 +27,10 @@ const statusToIcon = { const statusToLabel = { success: 'Success', - cancelled: 'Cancelled', - awaiting_confirmations: 'Awaiting', - awaiting_execution: 'Awaiting', + cancelled: 'Failed', + awaiting_your_confirmation: 'Awaiting your confirmation', + awaiting_confirmations: 'Awaiting confirmations', + awaiting_execution: 'Awaiting execution', pending: 'Pending', } @@ -45,7 +47,7 @@ const Status = ({ classes, status }: Props) => { {typeof Icon === 'object' ? ( Icon ) : ( - OK Icon + {statusToLabel[status]} )} {statusToLabel[status]} diff --git a/src/routes/safe/components/Transactions/TxsTable/Status/style.js b/src/routes/safe/components/Transactions/TxsTable/Status/style.js index 8de70a09..b26cd3a8 100644 --- a/src/routes/safe/components/Transactions/TxsTable/Status/style.js +++ b/src/routes/safe/components/Transactions/TxsTable/Status/style.js @@ -1,32 +1,40 @@ // @flow import { - smallFontSize, boldFont, sm, error, disabled, primary, + boldFont, sm, lg, error, disabled, extraSmallFontSize, secondary, } from '~/theme/variables' export const styles = () => ({ container: { display: 'flex', - fontSize: smallFontSize, + fontSize: extraSmallFontSize, fontWeight: boldFont, - width: '100px', padding: sm, alignItems: 'center', boxSizing: 'border-box', + height: lg, + marginTop: sm, + marginBottom: sm, + borderRadius: '3px', }, success: { backgroundColor: '#A1D2CA', - color: primary, + color: secondary, }, cancelled: { backgroundColor: 'transparent', color: error, + border: `1px solid ${error}`, + }, + awaiting_your_confirmation: { + backgroundColor: '#d4d5d3', + color: disabled, }, awaiting_confirmations: { - backgroundColor: '#dfebff', + backgroundColor: '#d4d5d3', color: disabled, }, awaiting_execution: { - backgroundColor: '#dfebff', + backgroundColor: '#d4d5d3', color: disabled, }, pending: { @@ -34,7 +42,6 @@ export const styles = () => ({ color: '#e8673c', }, statusText: { - marginLeft: 'auto', - textTransform: 'uppercase', + padding: '0 7px', }, }) diff --git a/src/routes/safe/components/Transactions/TxsTable/TxType/assets/custom.svg b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/custom.svg new file mode 100644 index 00000000..ff8de3f4 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/custom.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/TxType/assets/incoming.svg b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/incoming.svg new file mode 100644 index 00000000..c08ef2a1 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/incoming.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/TxType/assets/outgoing.svg b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/outgoing.svg new file mode 100644 index 00000000..89b07111 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/outgoing.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/TxType/assets/settings.svg b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/settings.svg new file mode 100644 index 00000000..eb64eda0 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/TxType/assets/settings.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/safe/components/Transactions/TxsTable/TxType/index.jsx b/src/routes/safe/components/Transactions/TxsTable/TxType/index.jsx new file mode 100644 index 00000000..45e899bd --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/TxType/index.jsx @@ -0,0 +1,44 @@ +// @flow +import * as React from 'react' +import { withStyles } from '@material-ui/core/styles' +import Block from '~/components/layout/Block' +import Paragraph from '~/components/layout/Paragraph/' +import Img from '~/components/layout/Img' +import { type TransactionType } from '~/routes/safe/store/models/transaction' +import OutgoingTxIcon from './assets/outgoing.svg' +import IncomingTxIcon from './assets/incoming.svg' +import CustomTxIcon from './assets/custom.svg' +import SettingsTxIcon from './assets/settings.svg' +import { styles } from './style' + +type Props = { + classes: Object, + txType: TransactionType, +} + +const typeToIcon = { + outgoing: OutgoingTxIcon, + incoming: IncomingTxIcon, + custom: CustomTxIcon, + settings: SettingsTxIcon, + creation: SettingsTxIcon, + cancellation: SettingsTxIcon, +} + +const typeToLabel = { + outgoing: 'Outgoing transfer', + incoming: 'Incoming transfer', + custom: 'Custom transaction', + settings: 'Modify settings', + creation: 'Safe created', + cancellation: 'Cancellation transaction', +} + +const TxType = ({ classes, txType }: Props) => ( + + {typeToLabel[txType]} + {typeToLabel[txType]} + +) + +export default withStyles(styles)(TxType) diff --git a/src/routes/safe/components/Transactions/TxsTable/TxType/style.js b/src/routes/safe/components/Transactions/TxsTable/TxType/style.js new file mode 100644 index 00000000..8ffc6356 --- /dev/null +++ b/src/routes/safe/components/Transactions/TxsTable/TxType/style.js @@ -0,0 +1,12 @@ +// @flow +export const styles = () => ({ + container: { + display: 'flex', + }, + img: { + marginRight: '5px', + }, + type: { + height: '17px', + }, +}) diff --git a/src/routes/safe/components/Transactions/TxsTable/columns.js b/src/routes/safe/components/Transactions/TxsTable/columns.js index ff250cad..c1c4caf7 100644 --- a/src/routes/safe/components/Transactions/TxsTable/columns.js +++ b/src/routes/safe/components/Transactions/TxsTable/columns.js @@ -1,13 +1,16 @@ // @flow +import React from 'react' import { format, getTime, parseISO } from 'date-fns' import { BigNumber } from 'bignumber.js' import { List } from 'immutable' +import TxType from './TxType' import { type Transaction } from '~/routes/safe/store/models/transaction' +import { INCOMING_TX_TYPE, type IncomingTransaction } from '~/routes/safe/store/models/incomingTransaction' import { type SortRow, buildOrderFieldFrom } from '~/components/Table/sorting' import { type Column } from '~/components/Table/TableHead' import { getWeb3 } from '~/logic/wallets/getWeb3' -export const TX_TABLE_NONCE_ID = 'nonce' +export const TX_TABLE_ID = 'id' export const TX_TABLE_TYPE_ID = 'type' export const TX_TABLE_DATE_ID = 'date' export const TX_TABLE_AMOUNT_ID = 'amount' @@ -16,9 +19,10 @@ export const TX_TABLE_RAW_TX_ID = 'tx' export const TX_TABLE_EXPAND_ICON = 'expand' type TxData = { - nonce: number, - type: string, + id: number, + type: React.ReactNode, date: string, + dateOrder?: number, amount: number | string, tx: Transaction, status?: string, @@ -26,6 +30,11 @@ type TxData = { export const formatDate = (date: string): string => format(parseISO(date), 'MMM d, yyyy - HH:mm:ss') +export const getIncomingTxAmount = (tx: IncomingTransaction) => { + const txAmount = tx.value ? `${new BigNumber(tx.value).div(`1e${tx.decimals}`).toFixed()}` : 'n/a' + return `${txAmount} ${tx.symbol || 'n/a'}` +} + export const getTxAmount = (tx: Transaction) => { const web3 = getWeb3() const { toBN, fromWei } = web3.utils @@ -44,37 +53,56 @@ export const getTxAmount = (tx: Transaction) => { export type TransactionRow = SortRow -export const getTxTableData = (transactions: List): List => { - const rows = transactions.map((tx: Transaction) => { - const txDate = tx.isExecuted ? tx.executionDate : tx.submissionDate - let txType = 'Outgoing transfer' - if (tx.modifySettingsTx) { - txType = 'Modify Safe Settings' - } else if (tx.cancellationTx) { - txType = 'Cancellation transaction' - } else if (tx.customTx) { - txType = 'Custom transaction' - } +const getIncomingTxTableData = (tx: IncomingTransaction): TransactionRow => ({ + [TX_TABLE_ID]: tx.blockNumber, + [TX_TABLE_TYPE_ID]: , + [TX_TABLE_DATE_ID]: formatDate(tx.executionDate), + [buildOrderFieldFrom(TX_TABLE_DATE_ID)]: getTime(parseISO(tx.executionDate)), + [TX_TABLE_AMOUNT_ID]: getIncomingTxAmount(tx), + [TX_TABLE_STATUS_ID]: tx.status, + [TX_TABLE_RAW_TX_ID]: tx, +}) - return { - [TX_TABLE_NONCE_ID]: tx.nonce, - [TX_TABLE_TYPE_ID]: txType, - [TX_TABLE_DATE_ID]: formatDate(tx.isExecuted ? tx.executionDate : tx.submissionDate), - [buildOrderFieldFrom(TX_TABLE_DATE_ID)]: getTime(parseISO(txDate)), - [TX_TABLE_AMOUNT_ID]: getTxAmount(tx), - [TX_TABLE_STATUS_ID]: tx.status, - [TX_TABLE_RAW_TX_ID]: tx, - } - }) +const getTransactionTableData = (tx: Transaction): TransactionRow => { + const txDate = tx.isExecuted ? tx.executionDate : tx.submissionDate - return rows + let txType = 'outgoing' + if (tx.modifySettingsTx) { + txType = 'settings' + } else if (tx.cancellationTx) { + txType = 'cancellation' + } else if (tx.customTx) { + txType = 'custom' + } else if (tx.creationTx) { + txType = 'creation' + } + + return { + [TX_TABLE_ID]: tx.blockNumber, + [TX_TABLE_TYPE_ID]: , + [TX_TABLE_DATE_ID]: tx.isExecuted + ? tx.executionDate && formatDate(tx.executionDate) + : tx.submissionDate && formatDate(tx.submissionDate), + [buildOrderFieldFrom(TX_TABLE_DATE_ID)]: txDate ? getTime(parseISO(txDate)) : null, + [TX_TABLE_AMOUNT_ID]: getTxAmount(tx), + [TX_TABLE_STATUS_ID]: tx.status, + [TX_TABLE_RAW_TX_ID]: tx, + } } +export const getTxTableData = (transactions: List): List => transactions.map((tx) => { + if (tx.type === INCOMING_TX_TYPE) { + return getIncomingTxTableData(tx) + } + + return getTransactionTableData(tx) +}) + export const generateColumns = () => { const nonceColumn: Column = { - id: TX_TABLE_NONCE_ID, + id: TX_TABLE_ID, disablePadding: false, - label: 'Nonce', + label: 'Id', custom: false, order: false, width: 50, @@ -95,7 +123,7 @@ export const generateColumns = () => { disablePadding: false, label: 'Amount', custom: false, - width: 100, + width: 120, } const dateColumn: Column = { @@ -112,6 +140,7 @@ export const generateColumns = () => { disablePadding: false, label: 'Status', custom: true, + align: 'right', } const expandIconColumn: Column = { diff --git a/src/routes/safe/components/Transactions/TxsTable/index.jsx b/src/routes/safe/components/Transactions/TxsTable/index.jsx index d3fa5605..0c10896e 100644 --- a/src/routes/safe/components/Transactions/TxsTable/index.jsx +++ b/src/routes/safe/components/Transactions/TxsTable/index.jsx @@ -17,7 +17,11 @@ import { type Transaction } from '~/routes/safe/store/models/transaction' import { type Owner } from '~/routes/safe/store/models/owner' import ExpandedTxComponent from './ExpandedTx' import { - getTxTableData, generateColumns, TX_TABLE_DATE_ID, type TransactionRow, TX_TABLE_RAW_TX_ID, + getTxTableData, + generateColumns, + TX_TABLE_ID, + TX_TABLE_RAW_TX_ID, + type TransactionRow, } from './columns' import { styles } from './style' import Status from './Status' @@ -26,7 +30,7 @@ export const TRANSACTION_ROW_TEST_ID = 'transaction-row' const expandCellStyle = { paddingLeft: 0, - paddingRight: 0, + paddingRight: 15, } type Props = { @@ -37,6 +41,7 @@ type Props = { userAddress: string, granted: boolean, safeAddress: string, + nonce: number, createTransaction: Function, processTransaction: Function, } @@ -51,6 +56,7 @@ const TxsTable = ({ safeAddress, createTransaction, processTransaction, + nonce, }: Props) => { const [expandedTx, setExpandedTx] = useState(null) @@ -61,13 +67,21 @@ const TxsTable = ({ const columns = generateColumns() const autoColumns = columns.filter((c) => !c.custom) const filteredData = getTxTableData(transactions) + .sort(({ dateOrder: a }, { dateOrder: b }) => { + if (!a || !b) { + return 0 + } + return a - b + }) + .map((tx, id) => ({ ...tx, id })) return ( ( - {expandedTx === row.safeTxHash ? : } - - - - - + {!row.tx.creationTx && ( + + {expandedTx === row.safeTxHash ? : } + + )} + {!row.tx.creationTx && ( + + + + + + )} ))}
diff --git a/src/routes/safe/components/Transactions/TxsTable/style.js b/src/routes/safe/components/Transactions/TxsTable/style.js index f7106318..730fc7b6 100644 --- a/src/routes/safe/components/Transactions/TxsTable/style.js +++ b/src/routes/safe/components/Transactions/TxsTable/style.js @@ -1,9 +1,7 @@ // @flow -import { lg } from '~/theme/variables' - export const styles = () => ({ container: { - marginTop: lg, + marginTop: '70px', }, row: { cursor: 'pointer', @@ -14,11 +12,19 @@ export const styles = () => ({ expandedRow: { backgroundColor: '#fff3e2', }, + cancelledRow: { + opacity: 0.4, + }, extendedTxContainer: { padding: 0, + border: 0, '&:last-child': { padding: 0, }, backgroundColor: '#fffaf4', }, + actions: { + display: 'flex', + justifyContent: 'flex-end', + }, }) diff --git a/src/routes/safe/components/Transactions/index.jsx b/src/routes/safe/components/Transactions/index.jsx index 497f473e..92b3426a 100644 --- a/src/routes/safe/components/Transactions/index.jsx +++ b/src/routes/safe/components/Transactions/index.jsx @@ -1,22 +1,22 @@ // @flow -import React, { useEffect } from 'react' +import React from 'react' import { List } from 'immutable' -import NoTransactions from '~/routes/safe/components/Transactions/NoTransactions' import TxsTable from '~/routes/safe/components/Transactions/TxsTable' import { type Transaction } from '~/routes/safe/store/models/transaction' +import { type IncomingTransaction } from '~/routes/safe/store/models/incomingTransaction' import { type Owner } from '~/routes/safe/store/models/owner' type Props = { safeAddress: string, threshold: number, - fetchTransactions: Function, - transactions: List, + transactions: List, owners: List, userAddress: string, granted: boolean, createTransaction: Function, processTransaction: Function, currentNetwork: string, + nonce: number, } const Transactions = ({ @@ -28,34 +28,21 @@ const Transactions = ({ safeAddress, createTransaction, processTransaction, - fetchTransactions, currentNetwork, -}: Props) => { - useEffect(() => { - fetchTransactions(safeAddress) - }, [safeAddress]) - - const hasTransactions = transactions.size > 0 - - return ( - <> - {hasTransactions ? ( - - ) : ( - - )} - - ) -} + nonce, +}: Props) => ( + +) export default Transactions diff --git a/src/routes/safe/container/actions.js b/src/routes/safe/container/actions.js index 19145afb..459715f3 100644 --- a/src/routes/safe/container/actions.js +++ b/src/routes/safe/container/actions.js @@ -1,5 +1,5 @@ // @flow -import fetchSafe, { checkAndUpdateSafeOwners } from '~/routes/safe/store/actions/fetchSafe' +import fetchSafe, { checkAndUpdateSafe } from '~/routes/safe/store/actions/fetchSafe' import fetchTokenBalances from '~/routes/safe/store/actions/fetchTokenBalances' import fetchEtherBalance from '~/routes/safe/store/actions/fetchEtherBalance' import createTransaction from '~/routes/safe/store/actions/createTransaction' @@ -7,6 +7,7 @@ import processTransaction from '~/routes/safe/store/actions/processTransaction' import fetchTransactions from '~/routes/safe/store/actions/fetchTransactions' import updateSafe from '~/routes/safe/store/actions/updateSafe' import fetchTokens from '~/logic/tokens/store/actions/fetchTokens' +import fetchCurrencyValues from '~/logic/currencyValues/store/actions/fetchCurrencyValues' import activateTokensByBalance from '~/logic/tokens/store/actions/activateTokensByBalance' export type Actions = { @@ -18,7 +19,9 @@ export type Actions = { fetchTokens: typeof fetchTokens, processTransaction: typeof processTransaction, fetchEtherBalance: typeof fetchEtherBalance, - activateTokensByBalance: typeof activateTokensByBalance + activateTokensByBalance: typeof activateTokensByBalance, + checkAndUpdateSafeOwners: typeof checkAndUpdateSafe, + fetchCurrencyValues: typeof fetchCurrencyValues } export default { @@ -31,5 +34,6 @@ export default { activateTokensByBalance, updateSafe, fetchEtherBalance, - checkAndUpdateSafeOwners, + fetchCurrencyValues, + checkAndUpdateSafeOwners: checkAndUpdateSafe, } diff --git a/src/routes/safe/container/index.jsx b/src/routes/safe/container/index.jsx index c194da21..71c08ae2 100644 --- a/src/routes/safe/container/index.jsx +++ b/src/routes/safe/container/index.jsx @@ -34,14 +34,17 @@ class SafeView extends React.Component { componentDidMount() { const { - fetchSafe, activeTokens, safeUrl, fetchTokenBalances, fetchTokens, + fetchSafe, activeTokens, safeUrl, fetchTokenBalances, fetchTokens, fetchTransactions, fetchCurrencyValues, } = this.props - fetchSafe(safeUrl) + fetchSafe(safeUrl).then(() => { + // The safe needs to be loaded before fetching the transactions + fetchTransactions(safeUrl) + }) fetchTokenBalances(safeUrl, activeTokens) - // fetch tokens there to get symbols for tokens in TXs list fetchTokens() + fetchCurrencyValues(safeUrl) this.intervalId = setInterval(() => { this.checkForUpdates() @@ -49,12 +52,16 @@ class SafeView extends React.Component { } componentDidUpdate(prevProps) { - const { activeTokens } = this.props + const { activeTokens, safeUrl, fetchTransactions } = this.props const oldActiveTokensSize = prevProps.activeTokens.size if (oldActiveTokensSize > 0 && activeTokens.size > oldActiveTokensSize) { this.checkForUpdates() } + + if (safeUrl !== prevProps.safeUrl) { + fetchTransactions(safeUrl) + } } componentWillUnmount() { @@ -89,11 +96,17 @@ class SafeView extends React.Component { checkForUpdates() { const { - safeUrl, activeTokens, fetchTokenBalances, fetchEtherBalance, checkAndUpdateSafeOwners, + safeUrl, + activeTokens, + fetchTokenBalances, + fetchEtherBalance, + fetchTransactions, + checkAndUpdateSafeOwners, } = this.props checkAndUpdateSafeOwners(safeUrl) fetchTokenBalances(safeUrl, activeTokens) fetchEtherBalance(safeUrl) + fetchTransactions(safeUrl) } render() { @@ -109,11 +122,13 @@ class SafeView extends React.Component { tokens, createTransaction, processTransaction, - fetchTransactions, activateTokensByBalance, fetchTokens, updateSafe, transactions, + currencySelected, + fetchCurrencyValues, + currencyValues, } = this.props return ( @@ -129,7 +144,6 @@ class SafeView extends React.Component { granted={granted} createTransaction={createTransaction} processTransaction={processTransaction} - fetchTransactions={fetchTransactions} activateTokensByBalance={activateTokensByBalance} fetchTokens={fetchTokens} updateSafe={updateSafe} @@ -140,6 +154,9 @@ class SafeView extends React.Component { onHide={this.onHide} showSendFunds={this.showSendFunds} hideSendFunds={this.hideSendFunds} + currencySelected={currencySelected} + fetchCurrencyValues={fetchCurrencyValues} + currencyValues={currencyValues} /> ) diff --git a/src/routes/safe/container/selector.js b/src/routes/safe/container/selector.js index 7fadf156..7c275424 100644 --- a/src/routes/safe/container/selector.js +++ b/src/routes/safe/container/selector.js @@ -6,20 +6,23 @@ import { safeActiveTokensSelector, safeBalancesSelector, safeBlacklistedTokensSelector, + safeTransactionsSelector, + safeIncomingTransactionsSelector, type RouterProps, type SafeSelectorProps, } from '~/routes/safe/store/selectors' import { providerNameSelector, userAccountSelector, networkSelector } from '~/logic/wallets/store/selectors' import { type Safe } from '~/routes/safe/store/models/safe' -import { type Owner } from '~/routes/safe/store/models/owner' import { type GlobalState } from '~/store' -import { sameAddress } from '~/logic/wallets/ethAddresses' -import { safeTransactionsSelector } from '~/routes/safe/store/selectors/index' +import { isUserOwner } from '~/logic/wallets/ethAddresses' import { orderedTokenListSelector, tokensSelector } from '~/logic/tokens/store/selectors' import { type Token } from '~/logic/tokens/store/model/token' import { type Transaction, type TransactionStatus } from '~/routes/safe/store/models/transaction' import { safeParamAddressSelector } from '../store/selectors' import { getEthAsToken } from '~/logic/tokens/utils/tokenHelpers' +import { currencyValuesListSelector, currentCurrencySelector } from '~/logic/currencyValues/store/selectors' +import type { BalanceCurrencyType } from '~/logic/currencyValues/store/model/currencyValues' +import type { IncomingTransaction } from '~/routes/safe/store/models/incomingTransaction' export type SelectorProps = { safe: SafeSelectorProps, @@ -30,20 +33,27 @@ export type SelectorProps = { userAddress: string, network: string, safeUrl: string, - transactions: List, + currencySelected: string, + currencyValues: BalanceCurrencyType[], + transactions: List, } -const getTxStatus = (tx: Transaction, safe: Safe): TransactionStatus => { - let txStatus = 'awaiting_confirmations' - +const getTxStatus = (tx: Transaction, userAddress: string, safe: Safe): TransactionStatus => { + let txStatus if (tx.executionTxHash) { txStatus = 'success' } else if (tx.cancelled) { txStatus = 'cancelled' } else if (tx.confirmations.size === safe.threshold) { txStatus = 'awaiting_execution' + } else if (tx.creationTx) { + txStatus = 'success' } else if (!tx.confirmations.size) { txStatus = 'pending' + } else { + const userConfirmed = tx.confirmations.filter((conf) => conf.owner.address === userAddress).size === 1 + const userIsSafeOwner = safe.owners.filter((owner) => owner.address === userAddress).size === 1 + txStatus = !userConfirmed && userIsSafeOwner ? 'awaiting_your_confirmation' : 'awaiting_confirmations' } return txStatus @@ -52,22 +62,7 @@ const getTxStatus = (tx: Transaction, safe: Safe): TransactionStatus => { export const grantedSelector: Selector = createSelector( userAccountSelector, safeSelector, - (userAccount: string, safe: Safe | typeof undefined): boolean => { - if (!safe) { - return false - } - - if (!userAccount) { - return false - } - - const { owners }: List = safe - if (!owners) { - return false - } - - return owners.find((owner: Owner) => sameAddress(owner.address, userAccount)) !== undefined - }, + (userAccount: string, safe: Safe | typeof undefined): boolean => isUserOwner(safe, userAccount), ) const safeEthAsTokenSelector: Selector = createSelector( @@ -106,29 +101,33 @@ const extendedSafeTokensSelector: Selector }, ) -const extendedTransactionsSelector: Selector> = createSelector( +const extendedTransactionsSelector: Selector> = createSelector( safeSelector, + userAccountSelector, safeTransactionsSelector, - (safe, transactions) => { + safeIncomingTransactionsSelector, + (safe, userAddress, transactions, incomingTransactions) => { const extendedTransactions = transactions.map((tx: Transaction) => { let extendedTx = tx - // If transactions is not executed, but there's a transaction with the same nonce submitted later + // If transactions are not executed, but there's a transaction with the same nonce submitted later // it means that the transaction was cancelled (Replaced) and shouldn't get executed let replacementTransaction if (!tx.isExecuted) { - replacementTransaction = transactions.findLast( - (transaction) => transaction.isExecuted && transaction.nonce >= tx.nonce, + replacementTransaction = transactions.size > 1 && transactions.findLast( + (transaction) => ( + transaction.isExecuted && transaction.nonce && transaction.nonce >= tx.nonce + ), ) if (replacementTransaction) { extendedTx = tx.set('cancelled', true) } } - return extendedTx.set('status', getTxStatus(extendedTx, safe)) + return extendedTx.set('status', getTxStatus(extendedTx, userAddress, safe)) }) - return extendedTransactions + return List([...extendedTransactions, ...incomingTransactions]) }, ) @@ -143,4 +142,6 @@ export default createStructuredSelector({ network: networkSelector, safeUrl: safeParamAddressSelector, transactions: extendedTransactionsSelector, + currencySelected: currentCurrencySelector, + currencyValues: currencyValuesListSelector, }) diff --git a/src/routes/safe/store/actions/addIncomingTransactions.js b/src/routes/safe/store/actions/addIncomingTransactions.js new file mode 100644 index 00000000..7773328f --- /dev/null +++ b/src/routes/safe/store/actions/addIncomingTransactions.js @@ -0,0 +1,6 @@ +// @flow +import { createAction } from 'redux-actions' + +export const ADD_INCOMING_TRANSACTIONS = 'ADD_INCOMING_TRANSACTIONS' + +export const addIncomingTransactions = createAction(ADD_INCOMING_TRANSACTIONS) diff --git a/src/routes/safe/store/actions/createTransaction.js b/src/routes/safe/store/actions/createTransaction.js index 4edf117f..c123e457 100644 --- a/src/routes/safe/store/actions/createTransaction.js +++ b/src/routes/safe/store/actions/createTransaction.js @@ -1,10 +1,12 @@ // @flow +import axios from 'axios' import type { Dispatch as ReduxDispatch, GetState } from 'redux' import { push } from 'connected-react-router' import { EMPTY_DATA } from '~/logic/wallets/ethTransactions' import { userAccountSelector } from '~/logic/wallets/store/selectors' import fetchTransactions from '~/routes/safe/store/actions/fetchTransactions' import { type GlobalState } from '~/store' +import { buildTxServiceUrl } from '~/logic/safe/transactions/txHistory' import { getGnosisSafeInstanceAt } from '~/logic/contracts/safeContracts' import { getApprovalTransaction, @@ -15,29 +17,68 @@ import { TX_TYPE_EXECUTION, saveTxToHistory, } from '~/logic/safe/transactions' -import { type NotificationsQueue, getNotificationsFromTxType, showSnackbar } from '~/logic/notifications' +import { + type NotificationsQueue, + getNotificationsFromTxType, + showSnackbar, +} from '~/logic/notifications' import { getErrorMessage } from '~/test/utils/ethereumErrors' import { ZERO_ADDRESS } from '~/logic/wallets/ethAddresses' import { SAFELIST_ADDRESS } from '~/routes/routes' -const createTransaction = ( +const getLastPendingTxNonce = async (safeAddress: string): Promise => { + let nonce + + try { + const url = buildTxServiceUrl(safeAddress) + + const response = await axios.get(url, { params: { limit: 1 } }) + const lastTx = response.data.results[0] + + nonce = lastTx.nonce + 1 + } catch (err) { + // use current's safe nonce as fallback + const safeInstance = await getGnosisSafeInstanceAt(safeAddress) + nonce = (await safeInstance.nonce()).toString() + } + + return nonce +} + +type CreateTransactionArgs = { safeAddress: string, to: string, valueInWei: string, - txData: string = EMPTY_DATA, + txData: string, notifiedTransaction: NotifiedTransaction, enqueueSnackbar: Function, closeSnackbar: Function, shouldExecute?: boolean, -) => async (dispatch: ReduxDispatch, getState: GetState) => { + txNonce?: number, +} + +const createTransaction = ({ + safeAddress, + to, + valueInWei, + txData = EMPTY_DATA, + notifiedTransaction, + enqueueSnackbar, + closeSnackbar, + shouldExecute = false, + txNonce, +}: CreateTransactionArgs) => async ( + dispatch: ReduxDispatch, + getState: GetState, +) => { const state: GlobalState = getState() dispatch(push(`${SAFELIST_ADDRESS}/${safeAddress}/transactions`)) - const safeInstance = await getGnosisSafeInstanceAt(safeAddress) const from = userAccountSelector(state) + const safeInstance = await getGnosisSafeInstanceAt(safeAddress) const threshold = await safeInstance.getThreshold() - const nonce = (await safeInstance.nonce()).toString() + const nonce = txNonce || await getLastPendingTxNonce(safeAddress) const isExecution = threshold.toNumber() === 1 || shouldExecute // https://gnosis-safe.readthedocs.io/en/latest/contracts/signatures.html#pre-validated-signatures @@ -46,8 +87,14 @@ const createTransaction = ( '', )}000000000000000000000000000000000000000000000000000000000000000001` - const notificationsQueue: NotificationsQueue = getNotificationsFromTxType(notifiedTransaction) - const beforeExecutionKey = showSnackbar(notificationsQueue.beforeExecution, enqueueSnackbar, closeSnackbar) + const notificationsQueue: NotificationsQueue = getNotificationsFromTxType( + notifiedTransaction, + ) + const beforeExecutionKey = showSnackbar( + notificationsQueue.beforeExecution, + enqueueSnackbar, + closeSnackbar, + ) let pendingExecutionKey let txHash @@ -55,35 +102,13 @@ const createTransaction = ( try { if (isExecution) { tx = await getExecutionTransaction( - safeInstance, - to, - valueInWei, - txData, - CALL, - nonce, - 0, - 0, - 0, - ZERO_ADDRESS, - ZERO_ADDRESS, - from, - sigs, + safeInstance, to, valueInWei, txData, CALL, nonce, + 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, from, sigs, ) } else { tx = await getApprovalTransaction( - safeInstance, - to, - valueInWei, - txData, - CALL, - nonce, - 0, - 0, - 0, - ZERO_ADDRESS, - ZERO_ADDRESS, - from, - sigs, + safeInstance, to, valueInWei, txData, CALL, nonce, + 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, from, sigs, ) } @@ -99,7 +124,11 @@ const createTransaction = ( txHash = hash closeSnackbar(beforeExecutionKey) - pendingExecutionKey = showSnackbar(notificationsQueue.pendingExecution, enqueueSnackbar, closeSnackbar) + pendingExecutionKey = showSnackbar( + notificationsQueue.pendingExecution, + enqueueSnackbar, + closeSnackbar, + ) try { await saveTxToHistory( @@ -144,12 +173,32 @@ const createTransaction = ( console.error(err) closeSnackbar(beforeExecutionKey) closeSnackbar(pendingExecutionKey) - showSnackbar(notificationsQueue.afterExecutionError, enqueueSnackbar, closeSnackbar) + showSnackbar( + notificationsQueue.afterExecutionError, + enqueueSnackbar, + closeSnackbar, + ) const executeDataUsedSignatures = safeInstance.contract.methods - .execTransaction(to, valueInWei, txData, CALL, 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, sigs) + .execTransaction( + to, + valueInWei, + txData, + CALL, + 0, + 0, + 0, + ZERO_ADDRESS, + ZERO_ADDRESS, + sigs, + ) .encodeABI() - const errMsg = await getErrorMessage(safeInstance.address, 0, executeDataUsedSignatures, from) + const errMsg = await getErrorMessage( + safeInstance.address, + 0, + executeDataUsedSignatures, + from, + ) console.error(`Error creating the TX: ${errMsg}`) } diff --git a/src/routes/safe/store/actions/fetchSafe.js b/src/routes/safe/store/actions/fetchSafe.js index 6d9da670..55eb19fa 100644 --- a/src/routes/safe/store/actions/fetchSafe.js +++ b/src/routes/safe/store/actions/fetchSafe.js @@ -11,6 +11,7 @@ import { getBalanceInEtherOf } from '~/logic/wallets/getWeb3' import { loadFromStorage } from '~/utils/storage' import removeSafeOwner from '~/routes/safe/store/actions/removeSafeOwner' import addSafeOwner from '~/routes/safe/store/actions/addSafeOwner' +import updateSafeThreshold from '~/routes/safe/store/actions/updateSafeThreshold' const buildOwnersFrom = ( safeOwners: string[], @@ -25,6 +26,7 @@ export const buildSafe = async (safeAddress: string, safeName: string) => { const ethBalance = await getBalanceInEtherOf(safeAddress) const threshold = Number(await gnosisSafe.getThreshold()) + const nonce = Number(await gnosisSafe.nonce()) const owners = List(buildOwnersFrom(await gnosisSafe.getOwners(), await getOwners(safeAddress))) const safe: SafeProps = { @@ -33,6 +35,7 @@ export const buildSafe = async (safeAddress: string, safeName: string) => { threshold, owners, ethBalance, + nonce, } return safe @@ -43,13 +46,19 @@ const getLocalSafe = async (safeAddress: string) => { return storedSafes[safeAddress] } -export const checkAndUpdateSafeOwners = (safeAddress: string) => async (dispatch: ReduxDispatch) => { +export const checkAndUpdateSafe = (safeAddress: string) => async (dispatch: ReduxDispatch) => { // Check if the owner's safe did change and update them const [gnosisSafe, localSafe] = await Promise.all([getGnosisSafeInstanceAt(safeAddress), getLocalSafe(safeAddress)]) + const remoteOwners = await gnosisSafe.getOwners() // Converts from [ { address, ownerName} ] to address array const localOwners = localSafe.owners.map((localOwner) => localOwner.address) + // Updates threshold values + const threshold = await gnosisSafe.getThreshold() + localSafe.threshold = threshold.toNumber() + + dispatch(updateSafeThreshold({ safeAddress, threshold: threshold.toNumber() })) // If the remote owners does not contain a local address, we remove that local owner localOwners.forEach((localAddress) => { if (!remoteOwners.includes(localAddress)) { diff --git a/src/routes/safe/store/actions/fetchTransactions.js b/src/routes/safe/store/actions/fetchTransactions.js index c5c334a3..722ecdb9 100644 --- a/src/routes/safe/store/actions/fetchTransactions.js +++ b/src/routes/safe/store/actions/fetchTransactions.js @@ -1,17 +1,20 @@ // @flow import { List, Map } from 'immutable' import axios from 'axios' +import bn from 'bignumber.js' import type { Dispatch as ReduxDispatch } from 'redux' import { type GlobalState } from '~/store/index' import { makeOwner } from '~/routes/safe/store/models/owner' import { makeTransaction, type Transaction } from '~/routes/safe/store/models/transaction' +import { makeIncomingTransaction, type IncomingTransaction } from '~/routes/safe/store/models/incomingTransaction' import { makeConfirmation } from '~/routes/safe/store/models/confirmation' -import { loadSafeSubjects } from '~/utils/storage/transactions' import { buildTxServiceUrl, type TxServiceType } from '~/logic/safe/transactions/txHistory' +import { buildIncomingTxServiceUrl } from '~/logic/safe/transactions/incomingTxHistory' import { getOwners } from '~/logic/safe/utils' import { getWeb3 } from '~/logic/wallets/getWeb3' import { EMPTY_DATA } from '~/logic/wallets/ethTransactions' import { addTransactions } from './addTransactions' +import { addIncomingTransactions } from './addIncomingTransactions' import { getHumanFriendlyToken } from '~/logic/tokens/store/actions/fetchTokens' import { isTokenTransfer } from '~/logic/tokens/utils/tokenHelpers' import { decodeParamsFromSafeMethod } from '~/logic/contracts/methodIds' @@ -33,6 +36,7 @@ type TxServiceModel = { data: string, operation: number, nonce: number, + blockNumber: number, safeTxGas: number, baseGas: number, gasPrice: number, @@ -40,18 +44,26 @@ type TxServiceModel = { refundReceiver: string, safeTxHash: string, submissionDate: string, + executor: string, executionDate: string, confirmations: ConfirmationServiceModel[], isExecuted: boolean, transactionHash: string, } +type IncomingTxServiceModel = { + blockNumber: number, + transactionHash: string, + to: string, + value: number, + tokenAddress: string, + from: string, +} + export const buildTransactionFrom = async ( safeAddress: string, tx: TxServiceModel, - safeSubjects: Map, ) => { - const name = safeSubjects.get(String(tx.nonce)) || 'Unknown' const storedOwners = await getOwners(safeAddress) const confirmations = List( tx.confirmations.map((conf: ConfirmationServiceModel) => { @@ -122,9 +134,9 @@ export const buildTransactionFrom = async ( } return makeTransaction({ - name, symbol, nonce: tx.nonce, + blockNumber: tx.blockNumber, value: tx.value.toString(), confirmations, decimals, @@ -139,6 +151,7 @@ export const buildTransactionFrom = async ( refundParams, isExecuted: tx.isExecuted, submissionDate: tx.submissionDate, + executor: tx.executor, executionDate: tx.executionDate, executionTxHash: tx.transactionHash, safeTxHash: tx.safeTxHash, @@ -147,29 +160,112 @@ export const buildTransactionFrom = async ( modifySettingsTx, customTx, cancellationTx, + creationTx: tx.creationTx, + }) +} + +const addMockSafeCreationTx = (safeAddress) => [{ + baseGas: 0, + confirmations: [], + data: null, + executionDate: null, + gasPrice: 0, + gasToken: '0x0000000000000000000000000000000000000000', + isExecuted: true, + nonce: null, + operation: 0, + refundReceiver: '0x0000000000000000000000000000000000000000', + safe: safeAddress, + safeTxGas: 0, + safeTxHash: '', + signatures: null, + submissionDate: null, + executor: '', + to: '', + transactionHash: null, + value: 0, + creationTx: true, +}] + +export const buildIncomingTransactionFrom = async (tx: IncomingTxServiceModel) => { + let symbol = 'ETH' + let decimals = 18 + + const whenExecutionDate = web3.eth.getBlock(tx.blockNumber) + .then(({ timestamp }) => new Date(timestamp * 1000).toISOString()) + const whenFee = web3.eth.getTransaction(tx.transactionHash).then((t) => bn(t.gas).div(t.gasPrice).toFixed()) + const [executionDate, fee] = await Promise.all([whenExecutionDate, whenFee]) + + if (tx.tokenAddress) { + try { + const tokenContract = await getHumanFriendlyToken() + const tokenInstance = await tokenContract.at(tx.tokenAddress) + const [tokenSymbol, tokenDecimals] = await Promise.all([tokenInstance.symbol(), tokenInstance.decimals()]) + symbol = tokenSymbol + decimals = tokenDecimals + } catch (err) { + const { methods } = new web3.eth.Contract(ALTERNATIVE_TOKEN_ABI, tx.to) + const [tokenSymbol, tokenDecimals] = await Promise.all([methods.symbol, methods.decimals].map((m) => m().call())) + symbol = web3.utils.toAscii(tokenSymbol) + decimals = tokenDecimals + } + } + + const { transactionHash, ...incomingTx } = tx + + return makeIncomingTransaction({ + ...incomingTx, + symbol, + decimals, + fee, + executionDate, + executionTxHash: transactionHash, + safeTxHash: transactionHash, }) } export const loadSafeTransactions = async (safeAddress: string) => { web3 = await getWeb3() - const url = buildTxServiceUrl(safeAddress) - const response = await axios.get(url) - const transactions: TxServiceModel[] = response.data.results - const safeSubjects = loadSafeSubjects(safeAddress) + let transactions: TxServiceModel[] = addMockSafeCreationTx(safeAddress) + try { + const url = buildTxServiceUrl(safeAddress) + const response = await axios.get(url) + if (response.data.count > 0) { + transactions = transactions.concat(response.data.results) + } + } catch (err) { + console.error(`Requests for outgoing transactions for ${safeAddress} failed with 404`, err) + } + const txsRecord = await Promise.all( - transactions.map((tx: TxServiceModel) => buildTransactionFrom(safeAddress, tx, safeSubjects)), + transactions.map((tx: TxServiceModel) => buildTransactionFrom(safeAddress, tx)), ) return Map().set(safeAddress, List(txsRecord)) } -export default (safeAddress: string) => async (dispatch: ReduxDispatch) => { +export const loadSafeIncomingTransactions = async (safeAddress: string) => { + let incomingTransactions: IncomingTxServiceModel[] = [] try { - const transactions: Map> = await loadSafeTransactions(safeAddress) - - return dispatch(addTransactions(transactions)) + const url = buildIncomingTxServiceUrl(safeAddress) + const response = await axios.get(url) + if (response.data.count > 0) { + incomingTransactions = response.data.results + } } catch (err) { - console.error(`Requests for transactions for ${safeAddress} failed with 404`) + console.error(`Requests for incomming transactions for ${safeAddress} failed with 404`, err) } + + const incomingTxsRecord = await Promise.all(incomingTransactions.map(buildIncomingTransactionFrom)) + + return Map().set(safeAddress, List(incomingTxsRecord)) +} + +export default (safeAddress: string) => async (dispatch: ReduxDispatch) => { + const transactions: Map> = await loadSafeTransactions(safeAddress) + const incomingTransactions: Map> = await loadSafeIncomingTransactions(safeAddress) + + dispatch(addTransactions(transactions)) + dispatch(addIncomingTransactions(incomingTransactions)) } diff --git a/src/routes/safe/store/actions/processTransaction.js b/src/routes/safe/store/actions/processTransaction.js index 26878600..250e64c9 100644 --- a/src/routes/safe/store/actions/processTransaction.js +++ b/src/routes/safe/store/actions/processTransaction.js @@ -1,9 +1,10 @@ // @flow -import type { Dispatch as ReduxDispatch, GetState } from 'redux' +import type { Dispatch as ReduxDispatch } from 'redux' import { List } from 'immutable' import { type Confirmation } from '~/routes/safe/store/models/confirmation' import { type Transaction } from '~/routes/safe/store/models/transaction' import { userAccountSelector } from '~/logic/wallets/store/selectors' +import fetchSafe from '~/routes/safe/store/actions/fetchSafe' import fetchTransactions from '~/routes/safe/store/actions/fetchTransactions' import { type GlobalState } from '~/store' import { getGnosisSafeInstanceAt } from '~/logic/contracts/safeContracts' @@ -53,7 +54,7 @@ export const generateSignaturesFromTxConfirmations = ( return sigs } -const processTransaction = ( +type ProcessTransactionArgs = { safeAddress: string, tx: Transaction, userAddress: string, @@ -61,7 +62,20 @@ const processTransaction = ( enqueueSnackbar: Function, closeSnackbar: Function, approveAndExecute?: boolean, -) => async (dispatch: ReduxDispatch, getState: GetState) => { +} + +const processTransaction = ({ + safeAddress, + tx, + userAddress, + notifiedTransaction, + enqueueSnackbar, + closeSnackbar, + approveAndExecute, +}: ProcessTransactionArgs) => async ( + dispatch: ReduxDispatch, + getState: Function, +) => { const state: GlobalState = getState() const safeInstance = await getGnosisSafeInstanceAt(safeAddress) @@ -69,7 +83,10 @@ const processTransaction = ( const threshold = (await safeInstance.getThreshold()).toNumber() const shouldExecute = threshold === tx.confirmations.size || approveAndExecute - let sigs = generateSignaturesFromTxConfirmations(tx.confirmations, approveAndExecute && userAddress) + let sigs = generateSignaturesFromTxConfirmations( + tx.confirmations, + approveAndExecute && userAddress, + ) // https://gnosis-safe.readthedocs.io/en/latest/contracts/signatures.html#pre-validated-signatures if (!sigs) { sigs = `0x000000000000000000000000${from.replace( @@ -78,8 +95,14 @@ const processTransaction = ( )}000000000000000000000000000000000000000000000000000000000000000001` } - const notificationsQueue: NotificationsQueue = getNotificationsFromTxType(notifiedTransaction) - const beforeExecutionKey = showSnackbar(notificationsQueue.beforeExecution, enqueueSnackbar, closeSnackbar) + const notificationsQueue: NotificationsQueue = getNotificationsFromTxType( + notifiedTransaction, + ) + const beforeExecutionKey = showSnackbar( + notificationsQueue.beforeExecution, + enqueueSnackbar, + closeSnackbar, + ) let pendingExecutionKey let txHash @@ -130,7 +153,11 @@ const processTransaction = ( txHash = hash closeSnackbar(beforeExecutionKey) - pendingExecutionKey = showSnackbar(notificationsQueue.pendingExecution, enqueueSnackbar, closeSnackbar) + pendingExecutionKey = showSnackbar( + notificationsQueue.pendingExecution, + enqueueSnackbar, + closeSnackbar, + ) try { await saveTxToHistory( @@ -169,16 +196,31 @@ const processTransaction = ( ) dispatch(fetchTransactions(safeAddress)) + if (shouldExecute) { + dispatch(fetchSafe(safeAddress)) + } + return receipt.transactionHash }) } catch (err) { console.error(err) closeSnackbar(beforeExecutionKey) closeSnackbar(pendingExecutionKey) - showSnackbar(notificationsQueue.afterExecutionError, enqueueSnackbar, closeSnackbar) + showSnackbar( + notificationsQueue.afterExecutionError, + enqueueSnackbar, + closeSnackbar, + ) - const executeData = safeInstance.contract.methods.approveHash(txHash).encodeABI() - const errMsg = await getErrorMessage(safeInstance.address, 0, executeData, from) + const executeData = safeInstance.contract.methods + .approveHash(txHash) + .encodeABI() + const errMsg = await getErrorMessage( + safeInstance.address, + 0, + executeData, + from, + ) console.error(`Error executing the TX: ${errMsg}`) } diff --git a/src/routes/safe/store/actions/updateSafeThreshold.js b/src/routes/safe/store/actions/updateSafeThreshold.js new file mode 100644 index 00000000..caad74ab --- /dev/null +++ b/src/routes/safe/store/actions/updateSafeThreshold.js @@ -0,0 +1,8 @@ +// @flow +import { createAction } from 'redux-actions' + +export const UPDATE_SAFE_THRESHOLD = 'UPDATE_SAFE_THRESHOLD' + +const updateSafeThreshold = createAction(UPDATE_SAFE_THRESHOLD) + +export default updateSafeThreshold diff --git a/src/routes/safe/store/middleware/notificationsMiddleware.js b/src/routes/safe/store/middleware/notificationsMiddleware.js new file mode 100644 index 00000000..4ccc0398 --- /dev/null +++ b/src/routes/safe/store/middleware/notificationsMiddleware.js @@ -0,0 +1,127 @@ +// @flow +import type { Action, Store } from 'redux' +import { List } from 'immutable' +import { push } from 'connected-react-router' +import { type GlobalState } from '~/store/' +import { ADD_TRANSACTIONS } from '~/routes/safe/store/actions/addTransactions' +import { ADD_INCOMING_TRANSACTIONS } from '~/routes/safe/store/actions/addIncomingTransactions' +import { getAwaitingTransactions } from '~/logic/safe/transactions/awaitingTransactions' +import { userAccountSelector } from '~/logic/wallets/store/selectors' +import enqueueSnackbar from '~/logic/notifications/store/actions/enqueueSnackbar' +import { enhanceSnackbarForAction, NOTIFICATIONS } from '~/logic/notifications' +import closeSnackbarAction from '~/logic/notifications/store/actions/closeSnackbar' +import { getIncomingTxAmount } from '~/routes/safe/components/Transactions/TxsTable/columns' +import updateSafe from '~/routes/safe/store/actions/updateSafe' +import { loadFromStorage } from '~/utils/storage' +import { SAFES_KEY } from '~/logic/safe/utils' +import { RECURRING_USER_KEY } from '~/utils/verifyRecurringUser' +import { safesMapSelector } from '~/routes/safe/store/selectors' +import { isUserOwner } from '~/logic/wallets/ethAddresses' + +const watchedActions = [ADD_TRANSACTIONS, ADD_INCOMING_TRANSACTIONS] + +const notificationsMiddleware = (store: Store) => ( + next: Function, +) => async (action: Action<*>) => { + const handledAction = next(action) + const { dispatch } = store + + if (watchedActions.includes(action.type)) { + const state: GlobalState = store.getState() + switch (action.type) { + case ADD_TRANSACTIONS: { + const transactionsList = action.payload + const userAddress: string = userAccountSelector(state) + const safeAddress = action.payload.keySeq().get(0) + const awaitingTransactions = getAwaitingTransactions( + transactionsList, + userAddress, + ) + const awaitingTransactionsList = awaitingTransactions.get( + safeAddress, + List([]), + ) + const safes = safesMapSelector(state) + const currentSafe = safes.get(safeAddress) + + if ( + !isUserOwner(currentSafe, userAddress) + || awaitingTransactionsList.size === 0 + ) { + break + } + + const notificationKey = `${safeAddress}-${userAddress}` + const onNotificationClicked = () => { + dispatch(closeSnackbarAction({ key: notificationKey })) + dispatch(push(`/safes/${safeAddress}/transactions`)) + } + dispatch( + enqueueSnackbar( + enhanceSnackbarForAction( + NOTIFICATIONS.TX_WAITING_MSG, + notificationKey, + onNotificationClicked, + ), + ), + ) + + break + } + case ADD_INCOMING_TRANSACTIONS: { + action.payload.forEach(async (incomingTransactions, safeAddress) => { + const storedSafes = await loadFromStorage(SAFES_KEY) + const latestIncomingTxBlock = storedSafes + ? storedSafes[safeAddress].latestIncomingTxBlock + : 0 + + const newIncomingTransactions = incomingTransactions.filter( + (tx) => tx.blockNumber > latestIncomingTxBlock, + ) + const { message, ...TX_INCOMING_MSG } = NOTIFICATIONS.TX_INCOMING_MSG + const recurringUser = await loadFromStorage(RECURRING_USER_KEY) + + if (recurringUser) { + if (newIncomingTransactions.size > 3) { + dispatch( + enqueueSnackbar( + enhanceSnackbarForAction({ + ...TX_INCOMING_MSG, + message: 'Multiple incoming transfers', + }), + ), + ) + } else { + newIncomingTransactions.forEach((tx) => { + dispatch( + enqueueSnackbar( + enhanceSnackbarForAction({ + ...TX_INCOMING_MSG, + message: `${message}${getIncomingTxAmount(tx)}`, + }), + ), + ) + }) + } + } + + dispatch( + updateSafe({ + address: safeAddress, + latestIncomingTxBlock: newIncomingTransactions.size + ? newIncomingTransactions.last().blockNumber + : latestIncomingTxBlock, + }), + ) + }) + break + } + default: + break + } + } + + return handledAction +} + +export default notificationsMiddleware diff --git a/src/routes/safe/store/middleware/safeStorage.js b/src/routes/safe/store/middleware/safeStorage.js index 1bb7e4b0..c135e16f 100644 --- a/src/routes/safe/store/middleware/safeStorage.js +++ b/src/routes/safe/store/middleware/safeStorage.js @@ -124,8 +124,8 @@ const safeStorageMware = (store: Store) => (next: Function) => asyn case SET_DEFAULT_SAFE: { if (action.payload) { saveDefaultSafe(action.payload) - break } + break } default: break diff --git a/src/routes/safe/store/models/incomingTransaction.js b/src/routes/safe/store/models/incomingTransaction.js new file mode 100644 index 00000000..d84a3550 --- /dev/null +++ b/src/routes/safe/store/models/incomingTransaction.js @@ -0,0 +1,39 @@ +// @flow +import { Record } from 'immutable' +import type { RecordFactory, RecordOf } from 'immutable' + +export const INCOMING_TX_TYPE = 'incoming' + +export type IncomingTransactionProps = { + blockNumber: number, + executionTxHash: string, + safeTxHash: string, + to: string, + value: number, + tokenAddress: string, + from: string, + symbol: string, + decimals: number, + fee: string, + executionDate: string, + type: string, + status: string, +} + +export const makeIncomingTransaction: RecordFactory = Record({ + blockNumber: 0, + executionTxHash: '', + safeTxHash: '', + to: '', + value: 0, + tokenAddress: '', + from: '', + symbol: '', + decimals: 18, + fee: '', + executionDate: '', + type: INCOMING_TX_TYPE, + status: 'success', +}) + +export type IncomingTransaction = RecordOf diff --git a/src/routes/safe/store/models/safe.js b/src/routes/safe/store/models/safe.js index 4b1209d4..63bebb1b 100644 --- a/src/routes/safe/store/models/safe.js +++ b/src/routes/safe/store/models/safe.js @@ -14,6 +14,8 @@ export type SafeProps = { activeTokens: Set, blacklistedTokens: Set, ethBalance?: string, + nonce: number, + latestIncomingTxBlock: number, } const SafeRecord: RecordFactory = Record({ @@ -25,6 +27,8 @@ const SafeRecord: RecordFactory = Record({ activeTokens: new Set(), blacklistedTokens: new Set(), balances: Map({}), + nonce: 0, + latestIncomingTxBlock: 0, }) export type Safe = RecordOf diff --git a/src/routes/safe/store/models/transaction.js b/src/routes/safe/store/models/transaction.js index a1602275..ad8bb6f9 100644 --- a/src/routes/safe/store/models/transaction.js +++ b/src/routes/safe/store/models/transaction.js @@ -4,10 +4,21 @@ import type { RecordFactory, RecordOf } from 'immutable' import { type Confirmation } from '~/routes/safe/store/models/confirmation' import { ZERO_ADDRESS } from '~/logic/wallets/ethAddresses' -export type TransactionStatus = 'awaiting_confirmations' | 'success' | 'cancelled' | 'awaiting_execution' | 'pending' +export const OUTGOING_TX_TYPE = 'outgoing' + +export type TransactionType = 'incoming' | 'outgoing' | 'settings' | 'custom' | 'creation' | 'cancellation' + +export type TransactionStatus = + | 'awaiting_your_confirmation' + | 'awaiting_confirmations' + | 'success' + | 'cancelled' + | 'awaiting_execution' + | 'pending' export type TransactionProps = { nonce: number, + blockNumber: number, value: string, confirmations: List, recipient: string, @@ -25,7 +36,9 @@ export type TransactionProps = { modifySettingsTx: boolean, cancellationTx: boolean, customTx: boolean, + creationTx: boolean, safeTxHash: string, + executor: string, executionTxHash?: string, decimals?: number, cancelled?: boolean, @@ -33,10 +46,12 @@ export type TransactionProps = { isTokenTransfer: boolean, decodedParams?: Object, refundParams?: Object, + type: string, } export const makeTransaction: RecordFactory = Record({ nonce: 0, + blockNumber: 0, value: 0, confirmations: List([]), recipient: '', @@ -49,6 +64,7 @@ export const makeTransaction: RecordFactory = Record({ refundReceiver: ZERO_ADDRESS, isExecuted: false, submissionDate: '', + executor: '', executionDate: '', symbol: '', executionTxHash: undefined, @@ -57,11 +73,13 @@ export const makeTransaction: RecordFactory = Record({ modifySettingsTx: false, cancellationTx: false, customTx: false, + creationTx: false, status: 'awaiting', decimals: 18, isTokenTransfer: false, decodedParams: {}, refundParams: null, + type: 'outgoing', }) export type Transaction = RecordOf diff --git a/src/routes/safe/store/reducer/incomingTransactions.js b/src/routes/safe/store/reducer/incomingTransactions.js new file mode 100644 index 00000000..d33c4bd8 --- /dev/null +++ b/src/routes/safe/store/reducer/incomingTransactions.js @@ -0,0 +1,16 @@ +// @flow +import { List, Map } from 'immutable' +import { handleActions, type ActionType } from 'redux-actions' +import { ADD_INCOMING_TRANSACTIONS } from '~/routes/safe/store/actions/addIncomingTransactions' +import type { IncomingTransaction } from '~/routes/safe/store/models/incomingTransaction' + +export const INCOMING_TRANSACTIONS_REDUCER_ID = 'incomingTransactions' + +export type IncomingState = Map> + +export default handleActions( + { + [ADD_INCOMING_TRANSACTIONS]: (state: IncomingState, action: ActionType): IncomingState => action.payload, + }, + Map(), +) diff --git a/src/routes/safe/store/reducer/safe.js b/src/routes/safe/store/reducer/safe.js index df7fed82..614b1b3d 100644 --- a/src/routes/safe/store/reducer/safe.js +++ b/src/routes/safe/store/reducer/safe.js @@ -12,6 +12,7 @@ import { REMOVE_SAFE_OWNER } from '~/routes/safe/store/actions/removeSafeOwner' import { REPLACE_SAFE_OWNER } from '~/routes/safe/store/actions/replaceSafeOwner' import { EDIT_SAFE_OWNER } from '~/routes/safe/store/actions/editSafeOwner' import { SET_DEFAULT_SAFE } from '~/routes/safe/store/actions/setDefaultSafe' +import { UPDATE_SAFE_THRESHOLD } from '~/routes/safe/store/actions/updateSafeThreshold' export const SAFE_REDUCER_ID = 'safes' @@ -115,6 +116,11 @@ export default handleActions( return prevSafe.merge({ owners: updatedOwners }) }) }, + [UPDATE_SAFE_THRESHOLD]: (state: SafeReducerState, action: ActionType): SafeReducerState => { + const { safeAddress, threshold } = action.payload + + return state.updateIn(['safes', safeAddress], (prevSafe) => prevSafe.set('threshold', threshold)) + }, [SET_DEFAULT_SAFE]: (state: SafeReducerState, action: ActionType): SafeReducerState => state.set('defaultSafe', action.payload), }, Map({ diff --git a/src/routes/safe/store/selectors/index.js b/src/routes/safe/store/selectors/index.js index 2155744c..1a5b05b7 100644 --- a/src/routes/safe/store/selectors/index.js +++ b/src/routes/safe/store/selectors/index.js @@ -1,14 +1,19 @@ // @flow import { Map, List, Set } from 'immutable' -import { type Match } from 'react-router-dom' +import { type Match, matchPath } from 'react-router-dom' import { createSelector, createStructuredSelector, type Selector } from 'reselect' import { type GlobalState } from '~/store/index' -import { SAFE_PARAM_ADDRESS } from '~/routes/routes' +import { SAFE_PARAM_ADDRESS, SAFELIST_ADDRESS } from '~/routes/routes' import { type Safe } from '~/routes/safe/store/models/safe' import { type State as TransactionsState, TRANSACTIONS_REDUCER_ID } from '~/routes/safe/store/reducer/transactions' +import { + type IncomingState as IncomingTransactionsState, + INCOMING_TRANSACTIONS_REDUCER_ID, +} from '~/routes/safe/store/reducer/incomingTransactions' import { type Transaction } from '~/routes/safe/store/models/transaction' import { type Confirmation } from '~/routes/safe/store/models/confirmation' import { SAFE_REDUCER_ID } from '~/routes/safe/store/reducer/safe' +import type { IncomingTransaction } from '~/routes/safe/store/models/incomingTransaction' export type RouterProps = { match: Match, @@ -43,6 +48,8 @@ export const defaultSafeSelector: Selector = createSele const transactionsSelector = (state: GlobalState): TransactionsState => state[TRANSACTIONS_REDUCER_ID] +const incomingTransactionsSelector = (state: GlobalState): IncomingTransactionsState => state[INCOMING_TRANSACTIONS_REDUCER_ID] + const oneTransactionSelector = (state: GlobalState, props: TransactionProps) => props.transaction export const safeParamAddressSelector = (state: GlobalState, props: RouterProps) => props.match.params[SAFE_PARAM_ADDRESS] || '' @@ -63,6 +70,22 @@ export const safeTransactionsSelector: Selector> = createSelector( + incomingTransactionsSelector, + safeParamAddressSelector, + (incomingTransactions: IncomingTransactionsState, address: string): List => { + if (!incomingTransactions) { + return List([]) + } + + if (!address) { + return List([]) + } + + return incomingTransactions.get(address) || List([]) + }, +) + export const confirmationsTransactionSelector: Selector = createSelector( oneTransactionSelector, (tx: Transaction) => { diff --git a/src/routes/welcome/components/Layout.jsx b/src/routes/welcome/components/Layout.jsx index 84f58fb1..dcc5838f 100644 --- a/src/routes/welcome/components/Layout.jsx +++ b/src/routes/welcome/components/Layout.jsx @@ -16,6 +16,7 @@ const plus = require('../assets/new.svg') type Props = { provider: string, + isOldMultisigMigration?: boolean, } const openIconStyle = { @@ -26,7 +27,7 @@ const openIconStyle = { type SafeProps = { provider: string, - size?: 'small' | 'medium' | 'large', + size?: "small" | "medium" | "large" } const buttonStyle = { @@ -64,45 +65,72 @@ export const LoadSafe = ({ size, provider }: SafeProps) => ( ) -const Welcome = ({ provider }: Props) => ( - - - Welcome to + +const Welcome = ({ provider, isOldMultisigMigration }: Props) => { + const headingText = isOldMultisigMigration ? ( + <> + We will replicate the owner structure from your existing Gnosis MultiSig
- Gnosis Safe For Teams -
- - The Gnosis Safe for Teams is geared towards teams managing shared + to let you test the new interface.
- crypto funds. It is an improvement of the existing Gnosis MultiSig + As soon as you feel comfortable, start moving funds to your new Safe.
- wallet with redesigned smart contracts, cheaper setup and transaction -
- costs as well as an enhanced user experience. {' '} - - Learn more - - -
- {provider ? ( - <> - - + + ) : ( + <> + Gnosis Safe Multisig is the most secure way to manage crypto funds +
+ collectively. It is an improvement of the Gnosis MultiSig, which is used + by more than 3000 teams +
+ {' '} + and stores over $1B USD worth of digital assets. Gnosis Safe Multisig features a modular +
+ {' '} + design, formally verified smart contracts and vastly improved user + experience. + {' '} + + ) + return ( + + + Welcome to +
+ Gnosis Safe Multisig +
+ + { headingText } + + Learn more + + + + {provider ? ( + <> + + + + + + + + ) : ( + + + Get Started by Connecting a Wallet + + - - - - - ) : ( - - - Get Started by Connecting a Wallet - - - - )} -
-) + )} +
+ ) +} export default Welcome diff --git a/src/routes/welcome/components/Layout.stories.js b/src/routes/welcome/components/Layout.stories.js deleted file mode 100644 index e33a3cbf..00000000 --- a/src/routes/welcome/components/Layout.stories.js +++ /dev/null @@ -1,27 +0,0 @@ -// @flow -import { select } from '@storybook/addon-knobs' -import { storiesOf } from '@storybook/react' -import * as React from 'react' -import styles from '~/components/layout/PageFrame/index.scss' -import Component from './Layout' - -const FrameDecorator = (story) =>
{story()}
- -storiesOf('Routes /welcome', module) - .addDecorator(FrameDecorator) - .add('Welcome with Gnosis Safe connected', () => { - const provider = select('Status by Provider', ['', 'UNKNOWN', 'SAFE', 'METAMASK', 'PARITY'], 'SAFE') - return {}} /> - }) - .add('Welcome with Metamask connected', () => { - const provider = select('Status by Provider', ['', 'UNKNOWN', 'SAFE', 'METAMASK', 'PARITY'], 'METAMASK') - return {}} /> - }) - .add('Welcome with unknown wallet', () => { - const provider = select('Status by Provider', ['', 'UNKNOWN', 'SAFE', 'METAMASK', 'PARITY'], 'UNKNOWN') - return {}} /> - }) - .add('Welcome without wallet connected', () => { - const provider = select('Status by Provider', ['', 'UNKNOWN', 'SAFE', 'METAMASK', 'PARITY'], '') - return {}} /> - }) diff --git a/src/store/index.js b/src/store/index.js index f59be684..042eff44 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -12,13 +12,19 @@ import transactions, { type State as TransactionsState, TRANSACTIONS_REDUCER_ID, } from '~/routes/safe/store/reducer/transactions' +import incomingTransactions, { + type IncomingState as IncomingTransactionsState, + INCOMING_TRANSACTIONS_REDUCER_ID, +} from '~/routes/safe/store/reducer/incomingTransactions' import provider, { PROVIDER_REDUCER_ID, type State as ProviderState } from '~/logic/wallets/store/reducer/provider' import tokens, { TOKEN_REDUCER_ID, type State as TokensState } from '~/logic/tokens/store/reducer/tokens' import notifications, { NOTIFICATIONS_REDUCER_ID, type NotificationReducerState as NotificationsState, } from '~/logic/notifications/store/reducer/notifications' +import currencyValues, { CURRENCY_VALUES_KEY } from '~/logic/currencyValues/store/reducer/currencyValues' import cookies, { COOKIES_REDUCER_ID } from '~/logic/cookies/store/reducer/cookies' +import notificationsMiddleware from '~/routes/safe/store/middleware/notificationsMiddleware' export const history = createBrowserHistory() @@ -26,7 +32,7 @@ export const history = createBrowserHistory() // eslint-disable-next-line const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose const finalCreateStore = composeEnhancers( - applyMiddleware(thunk, routerMiddleware(history), safeStorage, providerWatcher), + applyMiddleware(thunk, routerMiddleware(history), safeStorage, providerWatcher, notificationsMiddleware), ) export type GlobalState = { @@ -34,6 +40,7 @@ export type GlobalState = { safes: SafeState, tokens: TokensState, transactions: TransactionsState, + incomingTransactions: IncomingTransactionsState, notifications: NotificationsState, } @@ -45,7 +52,9 @@ const reducers: Reducer = combineReducers({ [SAFE_REDUCER_ID]: safe, [TOKEN_REDUCER_ID]: tokens, [TRANSACTIONS_REDUCER_ID]: transactions, + [INCOMING_TRANSACTIONS_REDUCER_ID]: incomingTransactions, [NOTIFICATIONS_REDUCER_ID]: notifications, + [CURRENCY_VALUES_KEY]: currencyValues, [COOKIES_REDUCER_ID]: cookies, }) diff --git a/src/theme/mui.js b/src/theme/mui.js index 1ab43df6..4b1a516a 100644 --- a/src/theme/mui.js +++ b/src/theme/mui.js @@ -43,7 +43,7 @@ const palette = { // see https://material-ui-next.com/customization/themes/ // see https://github.com/mui-org/material-ui/blob/v1-beta/src/styles/createMuiTheme.js -export default createMuiTheme({ +const theme = createMuiTheme({ typography: { fontFamily: mainFontFamily, useNextVariants: true, @@ -63,7 +63,7 @@ export default createMuiTheme({ }, color: disabled, textTransform: 'none', - borderRadius: '8px', + borderRadius: sm, }, contained: { boxShadow: '1px 2px 10px 0 rgba(212, 212, 211, 0.59)', @@ -102,7 +102,7 @@ export default createMuiTheme({ }, MuiStepper: { root: { - padding: '24px 0 0 15px', + padding: `${lg} 0 0 15px`, }, }, MuiIconButton: { @@ -238,6 +238,7 @@ export default createMuiTheme({ }, MuiTablePagination: { toolbar: { + paddingRight: '15px', '& > span:nth-child(2)': { order: 1, }, @@ -255,11 +256,11 @@ export default createMuiTheme({ input: { order: 2, width: '60px', - padding: `0 ${md} 0 0`, + color: disabled, }, select: { paddingRight: 30, - minWidth: '20px', + minWidth: lg, }, actions: { order: 4, @@ -270,6 +271,9 @@ export default createMuiTheme({ root: { fontSize: extraSmallFontSize, }, + active: { + fontWeight: boldFont, + }, }, MuiTableCell: { root: { @@ -280,7 +284,6 @@ export default createMuiTheme({ head: { letterSpacing: '1px', textTransform: 'uppercase', - fontWeight: boldFont, }, body: { color: primary, @@ -339,3 +342,43 @@ export default createMuiTheme({ }, palette, }) + +export default theme + +export const DropdownListTheme = { + ...theme, + overrides: { + ...theme.overrides, + MuiPaper: { + root: { + marginTop: '10px', + }, + elevation0: { + boxShadow: '1px 2px 10px 0 rgba(212, 212, 211, 0.59)', + }, + rounded: { + borderRadius: '4px', + }, + }, + MuiList: { + padding: { + paddingBottom: '0', + paddingTop: '0', + }, + }, + MuiListItem: { + root: { + borderBottom: '2px solid #e8e7e6', + '&:last-child': { + borderBottom: 'none', + }, + boxSizing: 'border-box', + }, + button: { + '&:hover': { + backgroundColor: '#fff3e2', + }, + }, + }, + }, +} diff --git a/src/utils/googleAnalytics.js b/src/utils/googleAnalytics.js index 4d888c6d..24baf13e 100644 --- a/src/utils/googleAnalytics.js +++ b/src/utils/googleAnalytics.js @@ -20,6 +20,7 @@ export const loadGoogleAnalytics = () => { console.error('[GoogleAnalytics] - In order to use google analytics you need to add an trackingID') } else { GoogleAnalytics.initialize(trackingID) + GoogleAnalytics.set({ anonymizeIp: true }) analyticsLoaded = true } } diff --git a/src/utils/storage/transactions.js b/src/utils/storage/transactions.js index 5aca3d26..631fc467 100644 --- a/src/utils/storage/transactions.js +++ b/src/utils/storage/transactions.js @@ -15,10 +15,3 @@ export const storeSubject = async (safeAddress: string, nonce: number, subject: console.error('Error storing transaction subject in localstorage', err) } } - -export const loadSafeSubjects = (safeAddress: string): Map => { - const key = getSubjectKeyFrom(safeAddress) - const data: any = loadFromStorage(key) - - return data ? Map(data) : Map() -} diff --git a/src/utils/verifyRecurringUser.js b/src/utils/verifyRecurringUser.js new file mode 100644 index 00000000..6c0456c9 --- /dev/null +++ b/src/utils/verifyRecurringUser.js @@ -0,0 +1,18 @@ +// @flow +import { loadFromStorage, saveToStorage } from '~/utils/storage' + +export const RECURRING_USER_KEY = 'RECURRING_USER' + +const verifyRecurringUser = async () => { + const recurringUser = await loadFromStorage(RECURRING_USER_KEY) + + if (recurringUser === undefined) { + await saveToStorage(RECURRING_USER_KEY, false) + } + + if (recurringUser === false) { + await saveToStorage(RECURRING_USER_KEY, true) + } +} + +export default verifyRecurringUser diff --git a/yarn.lock b/yarn.lock index 8f3d81da..a8b066e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,27 +25,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" - integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@7.7.5", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.4.5": +"@babel/core@7.7.5", "@babel/core@^7.1.0": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e" integrity sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw== @@ -290,7 +270,7 @@ "@babel/helper-remap-async-to-generator" "^7.7.4" "@babel/plugin-syntax-async-generators" "^7.7.4" -"@babel/plugin-proposal-class-properties@7.7.4", "@babel/plugin-proposal-class-properties@^7.7.0": +"@babel/plugin-proposal-class-properties@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== @@ -388,7 +368,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-numeric-separator" "^7.7.4" -"@babel/plugin-proposal-object-rest-spread@7.7.4", "@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.7.4": +"@babel/plugin-proposal-object-rest-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== @@ -404,14 +384,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" -"@babel/plugin-proposal-optional-chaining@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.4.tgz#3f04c2de1a942cbd3008324df8144b9cbc0ca0ba" - integrity sha512-JmgaS+ygAWDR/STPe3/7y0lNlHgS+19qZ9aC06nYLwQ/XB7c0q5Xs+ksFU3EDnp9EiEsO0dnRAOKeyLHTZuW3A== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.7.4" - "@babel/plugin-proposal-optional-chaining@7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.5.tgz#f0835f044cef85b31071a924010a2a390add11d4" @@ -465,7 +437,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@7.7.4", "@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4": +"@babel/plugin-syntax-dynamic-import@7.7.4", "@babel/plugin-syntax-dynamic-import@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== @@ -591,13 +563,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" - integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-arrow-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" @@ -650,7 +615,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@7.7.4", "@babel/plugin-transform-destructuring@^7.7.4": +"@babel/plugin-transform-destructuring@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== @@ -680,7 +645,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-flow-strip-types@7.7.4", "@babel/plugin-transform-flow-strip-types@^7.7.4": +"@babel/plugin-transform-flow-strip-types@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.7.4.tgz#cc73f85944782df1d77d80977bc097920a8bf31a" integrity sha512-w9dRNlHY5ElNimyMYy0oQowvQpwt/PRHI0QS98ZJCTZU2bvSnKXo5zEiD5u76FBPigTm8TkqzmnUTg16T7qbkA== @@ -717,7 +682,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.7.4", "@babel/plugin-transform-modules-amd@^7.7.5": +"@babel/plugin-transform-modules-amd@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== @@ -726,7 +691,7 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.7.4", "@babel/plugin-transform-modules-commonjs@^7.7.5": +"@babel/plugin-transform-modules-commonjs@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== @@ -791,15 +756,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-constant-elements@^7.0.0", "@babel/plugin-transform-react-constant-elements@^7.6.3": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.7.4.tgz#499cf732a21ffd62cc4b0016e27c3906097f8982" - integrity sha512-U6XkHZ8RnmeEb8jBUOpeo6oFka5RhLgxAVvK4/fBbwoYlsHQYLb8I37ymTPDVsrWjqb94+hueuWQA/1OAA4rAQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@7.7.4", "@babel/plugin-transform-react-display-name@^7.7.4": +"@babel/plugin-transform-react-display-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw== @@ -831,7 +788,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-regenerator@^7.7.4", "@babel/plugin-transform-regenerator@^7.7.5": +"@babel/plugin-transform-regenerator@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== @@ -845,16 +802,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-runtime@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.4.tgz#51fe458c1c1fa98a8b07934f4ed38b6cd62177a6" - integrity sha512-O8kSkS5fP74Ad/8pfsCMGa8sBRdLxYoSReaARRNSz3FbFQj3z/QUvoUmJ28gn9BO93YfnXc3j+Xyaqe8cKDNBQ== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - "@babel/plugin-transform-runtime@^7.5.5": version "7.7.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz#4f2b548c88922fb98ec1c242afd4733ee3e12f61" @@ -902,15 +849,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" - integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.7.4" - "@babel/plugin-transform-unicode-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" @@ -927,64 +865,7 @@ core-js "^2.6.5" regenerator-runtime "^0.13.2" -"@babel/preset-env@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" - integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.4" - "@babel/plugin-proposal-dynamic-import" "^7.7.4" - "@babel/plugin-proposal-json-strings" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - "@babel/plugin-syntax-json-strings" "^7.7.4" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - "@babel/plugin-syntax-top-level-await" "^7.7.4" - "@babel/plugin-transform-arrow-functions" "^7.7.4" - "@babel/plugin-transform-async-to-generator" "^7.7.4" - "@babel/plugin-transform-block-scoped-functions" "^7.7.4" - "@babel/plugin-transform-block-scoping" "^7.7.4" - "@babel/plugin-transform-classes" "^7.7.4" - "@babel/plugin-transform-computed-properties" "^7.7.4" - "@babel/plugin-transform-destructuring" "^7.7.4" - "@babel/plugin-transform-dotall-regex" "^7.7.4" - "@babel/plugin-transform-duplicate-keys" "^7.7.4" - "@babel/plugin-transform-exponentiation-operator" "^7.7.4" - "@babel/plugin-transform-for-of" "^7.7.4" - "@babel/plugin-transform-function-name" "^7.7.4" - "@babel/plugin-transform-literals" "^7.7.4" - "@babel/plugin-transform-member-expression-literals" "^7.7.4" - "@babel/plugin-transform-modules-amd" "^7.7.4" - "@babel/plugin-transform-modules-commonjs" "^7.7.4" - "@babel/plugin-transform-modules-systemjs" "^7.7.4" - "@babel/plugin-transform-modules-umd" "^7.7.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" - "@babel/plugin-transform-new-target" "^7.7.4" - "@babel/plugin-transform-object-super" "^7.7.4" - "@babel/plugin-transform-parameters" "^7.7.4" - "@babel/plugin-transform-property-literals" "^7.7.4" - "@babel/plugin-transform-regenerator" "^7.7.4" - "@babel/plugin-transform-reserved-words" "^7.7.4" - "@babel/plugin-transform-shorthand-properties" "^7.7.4" - "@babel/plugin-transform-spread" "^7.7.4" - "@babel/plugin-transform-sticky-regex" "^7.7.4" - "@babel/plugin-transform-template-literals" "^7.7.4" - "@babel/plugin-transform-typeof-symbol" "^7.7.4" - "@babel/plugin-transform-unicode-regex" "^7.7.4" - "@babel/types" "^7.7.4" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - -"@babel/preset-env@7.7.6", "@babel/preset-env@^7.4.5", "@babel/preset-env@^7.7.1": +"@babel/preset-env@7.7.6": version "7.7.6" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.6.tgz#39ac600427bbb94eec6b27953f1dfa1d64d457b2" integrity sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ== @@ -1041,7 +922,7 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/preset-flow@7.7.4", "@babel/preset-flow@^7.0.0": +"@babel/preset-flow@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.7.4.tgz#99c1349b6fd7132783196de181e6b32d0949427e" integrity sha512-6LbUqcHD8BcRtXMOp5bc5nJeU8RlKh6q5U8TgZeCrf9ebBdW8Wyy5ujAUnbJfmzQ56Kkq5XtwErC/5+5RHyFYA== @@ -1049,7 +930,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-flow-strip-types" "^7.7.4" -"@babel/preset-react@7.7.4", "@babel/preset-react@^7.0.0", "@babel/preset-react@^7.7.0": +"@babel/preset-react@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== @@ -1060,14 +941,6 @@ "@babel/plugin-transform-react-jsx-self" "^7.7.4" "@babel/plugin-transform-react-jsx-source" "^7.7.4" -"@babel/preset-typescript@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.4.tgz#780059a78e6fa7f7a4c87f027292a86b31ce080a" - integrity sha512-rqrjxfdiHPsnuPur0jKrIIGQCIgoTWMTjlbWE69G4QJ6TIOVnnRnIJhUxNTL/VwDmEAVX08Tq3B1nirer5341w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.7.4" - "@babel/runtime-corejs2@^7.2.0": version "7.7.6" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.6.tgz#50b7cd4eab929b4cb66167c4972d35eaceaa124b" @@ -1084,14 +957,14 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.2" -"@babel/runtime@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" - integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== +"@babel/runtime@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83" + integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g== dependencies: - regenerator-runtime "^0.13.2" + regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.1.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.1.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.4": version "7.7.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw== @@ -1122,7 +995,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.4": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== @@ -1139,49 +1012,11 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@emotion/cache@^10.0.17", "@emotion/cache@^10.0.9": - version "10.0.19" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.19.tgz#d258d94d9c707dcadaf1558def968b86bb87ad71" - integrity sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ== - dependencies: - "@emotion/sheet" "0.9.3" - "@emotion/stylis" "0.8.4" - "@emotion/utils" "0.11.2" - "@emotion/weak-memoize" "0.2.4" - -"@emotion/core@^10.0.14", "@emotion/core@^10.0.9": - version "10.0.22" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.22.tgz#2ac7bcf9b99a1979ab5b0a876fbf37ab0688b177" - integrity sha512-7eoP6KQVUyOjAkE6y4fdlxbZRA4ILs7dqkkm6oZUJmihtHv0UBq98VgPirq9T8F9K2gKu0J/au/TpKryKMinaA== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.17" - "@emotion/css" "^10.0.22" - "@emotion/serialize" "^0.11.12" - "@emotion/sheet" "0.9.3" - "@emotion/utils" "0.11.2" - -"@emotion/css@^10.0.22", "@emotion/css@^10.0.9": - version "10.0.22" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.22.tgz#37b1abb6826759fe8ac0af0ac0034d27de6d1793" - integrity sha512-8phfa5mC/OadBTmGpMpwykIVH0gFCbUoO684LUkyixPq4F1Wwri7fK5Xlm8lURNBrd2TuvTbPUGxFsGxF9UacA== - dependencies: - "@emotion/serialize" "^0.11.12" - "@emotion/utils" "0.11.2" - babel-plugin-emotion "^10.0.22" - -"@emotion/hash@0.7.3", "@emotion/hash@^0.7.1": +"@emotion/hash@^0.7.1": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== -"@emotion/is-prop-valid@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.5.tgz#2dda0791f0eafa12b7a0a5b39858405cc7bde983" - integrity sha512-6ZODuZSFofbxSbcxwsFz+6ioPjb0ISJRRPLZ+WIbjcU2IMU0Io+RGQjjaTgOvNQl007KICBm7zXQaYQEC1r6Bg== - dependencies: - "@emotion/memoize" "0.7.3" - "@emotion/is-prop-valid@^0.7.3": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" @@ -1194,65 +1029,11 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f" integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg== -"@emotion/memoize@0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78" - integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow== - -"@emotion/serialize@^0.11.12", "@emotion/serialize@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.14.tgz#56a6d8d04d837cc5b0126788b2134c51353c6488" - integrity sha512-6hTsySIuQTbDbv00AnUO6O6Xafdwo5GswRlMZ5hHqiFx+4pZ7uGWXUQFW46Kc2taGhP89uXMXn/lWQkdyTosPA== - dependencies: - "@emotion/hash" "0.7.3" - "@emotion/memoize" "0.7.3" - "@emotion/unitless" "0.7.4" - "@emotion/utils" "0.11.2" - csstype "^2.5.7" - -"@emotion/sheet@0.9.3": - version "0.9.3" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.3.tgz#689f135ecf87d3c650ed0c4f5ddcbe579883564a" - integrity sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A== - -"@emotion/styled-base@^10.0.23": - version "10.0.24" - resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.24.tgz#9497efd8902dfeddee89d24b0eeb26b0665bfe8b" - integrity sha512-AnBImerf0h4dGAJVo0p0VE8KoAns71F28ErGFK474zbNAHX6yqSWQUasb+1jvg/VPwZjCp19+tAr6oOB0pwmLQ== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/is-prop-valid" "0.8.5" - "@emotion/serialize" "^0.11.14" - "@emotion/utils" "0.11.2" - -"@emotion/styled@^10.0.14": - version "10.0.23" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.23.tgz#2f8279bd59b99d82deade76d1046249ddfab7c1b" - integrity sha512-gNr04eqBQ2iYUx8wFLZDfm3N8/QUOODu/ReDXa693uyQGy2OqA+IhPJk+kA7id8aOfwAsMuvZ0pJImEXXKtaVQ== - dependencies: - "@emotion/styled-base" "^10.0.23" - babel-plugin-emotion "^10.0.23" - -"@emotion/stylis@0.8.4": - version "0.8.4" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.4.tgz#6c51afdf1dd0d73666ba09d2eb6c25c220d6fe4c" - integrity sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ== - -"@emotion/unitless@0.7.4", "@emotion/unitless@^0.7.0": +"@emotion/unitless@^0.7.0": version "0.7.4" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.4.tgz#a87b4b04e5ae14a88d48ebef15015f6b7d1f5677" integrity sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ== -"@emotion/utils@0.11.2": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.2.tgz#713056bfdffb396b0a14f1c8f18e7b4d0d200183" - integrity sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA== - -"@emotion/weak-memoize@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" - integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== - "@ethersproject/address@^5.0.0-beta.125": version "5.0.0-beta.133" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.0-beta.133.tgz#b6bf2c298da5701c61038e4cdfac2e0038b884ce" @@ -1347,11 +1128,6 @@ normalize-path "^2.0.1" through2 "^2.0.3" -"@icons/material@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" - integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== - "@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" @@ -1645,17 +1421,6 @@ penpal "3.0.7" pocket-js-core "0.0.3" -"@reach/router@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.2.1.tgz#34ae3541a5ac44fa7796e5506a5d7274a162be4e" - integrity sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ== - dependencies: - create-react-context "^0.2.1" - invariant "^2.2.3" - prop-types "^15.6.1" - react-lifecycles-compat "^3.0.4" - warning "^3.0.0" - "@redux-saga/core@^1.0.0": version "1.1.3" resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" @@ -1700,13 +1465,6 @@ resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== -"@sambego/storybook-state@^1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@sambego/storybook-state/-/storybook-state-1.3.6.tgz#9a6511095d200b8ab2d6bc39def81c90312dd420" - integrity sha512-bTUE1ZTtI9ICyqz6l5gtUfo0/W77fPP7KOAd/HI1jM7m1Jxjxs1k1Qbcrqmxg1vaHemlXVkvxVCZf8BT9RzxGw== - dependencies: - uuid "^3.1.0" - "@sheerun/mutationobserver-shim@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b" @@ -1717,490 +1475,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@storybook/addon-actions@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.2.8.tgz#f63c6e1afb59e94ca1ebc776b7cad9b815e7419e" - integrity sha512-hadk+UaU6upOW0g447RfLRrnXRgE2rjRVk5sT8mVxBMj032NnwUd7ie/BZwy1yg5B8oFtpkgQYwqhPtoO2xBaQ== - dependencies: - "@storybook/addons" "5.2.8" - "@storybook/api" "5.2.8" - "@storybook/client-api" "5.2.8" - "@storybook/components" "5.2.8" - "@storybook/core-events" "5.2.8" - "@storybook/theming" "5.2.8" - core-js "^3.0.1" - fast-deep-equal "^2.0.1" - global "^4.3.2" - polished "^3.3.1" - prop-types "^15.7.2" - react "^16.8.3" - react-inspector "^3.0.2" - uuid "^3.3.2" - -"@storybook/addon-actions@^3.2.10": - version "3.4.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.4.12.tgz#ff6cbaf563c3cb5d648d6a35f66cfa50ced49bf4" - integrity sha512-+AiK2RijB3HsnzijvT3pv1/758zAumDQF1XZBt4shZ/CG6cpZSyxD+EmO2pbiA6Zo0vSuLSrKV8RPqVG0lXZuQ== - dependencies: - "@storybook/components" "3.4.12" - babel-runtime "^6.26.0" - deep-equal "^1.0.1" - glamor "^2.20.40" - glamorous "^4.12.1" - global "^4.3.2" - make-error "^1.3.4" - prop-types "^15.6.1" - react-inspector "^2.2.2" - uuid "^3.2.1" - -"@storybook/addon-knobs@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.2.8.tgz#e0d03823969921a0da57a329376d03066dd749ee" - integrity sha512-5SAMJj+0pbhCiyNkKjkUxEbM9L/wrOE4HTvM7gvm902fULuKZklb3wV8iiUNRfIPCs6VhmmIhPzXICGjhW5xIg== - dependencies: - "@storybook/addons" "5.2.8" - "@storybook/api" "5.2.8" - "@storybook/client-api" "5.2.8" - "@storybook/components" "5.2.8" - "@storybook/core-events" "5.2.8" - "@storybook/theming" "5.2.8" - "@types/react-color" "^3.0.1" - copy-to-clipboard "^3.0.8" - core-js "^3.0.1" - escape-html "^1.0.3" - fast-deep-equal "^2.0.1" - global "^4.3.2" - lodash "^4.17.15" - prop-types "^15.7.2" - qs "^6.6.0" - react-color "^2.17.0" - react-lifecycles-compat "^3.0.4" - react-select "^3.0.0" - -"@storybook/addon-links@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-5.2.8.tgz#8d447581dd511387e9a07ce2484422374f00bc84" - integrity sha512-egSBHjUOdAEd2IIoIB1kRmdaDc44IfpPg+kJ7h822MhwzpWo9E+4sU5WTemcFBqPt+g3jIYrO3JHlXNRZ7PBuw== - dependencies: - "@storybook/addons" "5.2.8" - "@storybook/core-events" "5.2.8" - "@storybook/router" "5.2.8" - common-tags "^1.8.0" - core-js "^3.0.1" - global "^4.3.2" - prop-types "^15.7.2" - qs "^6.6.0" - -"@storybook/addons@5.2.8", "@storybook/addons@^5.1.9": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.2.8.tgz#f8bf8bd555b7a69fb1e9a52ab8cdb96384d931ff" - integrity sha512-yAo1N5z/45bNIQP8SD+HVTr7X898bYAtz1EZBrQ6zD8bGamzA2Br06rOLL9xXw29eQhsaVnPlqgDwCS1sTC7aQ== - dependencies: - "@storybook/api" "5.2.8" - "@storybook/channels" "5.2.8" - "@storybook/client-logger" "5.2.8" - "@storybook/core-events" "5.2.8" - core-js "^3.0.1" - global "^4.3.2" - util-deprecate "^1.0.2" - -"@storybook/api@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.2.8.tgz#21f03df8041114eb929bd10b570a17f266568b7f" - integrity sha512-rFrPtTFDIPQoicLwq1AVsOvZNTUKnjD1w/NX1kKcyuWLL9BcOkU3YNLBlliGBg2JX/yS+fJKMyKk4NMzNBCZCg== - dependencies: - "@storybook/channels" "5.2.8" - "@storybook/client-logger" "5.2.8" - "@storybook/core-events" "5.2.8" - "@storybook/router" "5.2.8" - "@storybook/theming" "5.2.8" - core-js "^3.0.1" - fast-deep-equal "^2.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - prop-types "^15.6.2" - react "^16.8.3" - semver "^6.0.0" - shallow-equal "^1.1.0" - store2 "^2.7.1" - telejson "^3.0.2" - util-deprecate "^1.0.2" - -"@storybook/channel-postmessage@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.2.8.tgz#7a84869ce0fc270c3b5dcd7fa4ed798b6055816f" - integrity sha512-RS3iDW1kpfODN+kBq3youn+KtLqHslZ4m7mTlOL80BUHKb4YkrA1lVkzpy1kVMWBU523pyDVQUVXr+M8y3iVug== - dependencies: - "@storybook/channels" "5.2.8" - "@storybook/client-logger" "5.2.8" - core-js "^3.0.1" - global "^4.3.2" - telejson "^3.0.2" - -"@storybook/channels@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.2.8.tgz#79a99ad85dcacb688073c22340c5b7d16b801202" - integrity sha512-mFwQec27QSrqcl+IH0xA+4jfoEqC4m1G99LBHt/aTDjLZXclX1A470WqeZCp7Gx4OALpaPEVTaaaKPbiKz4C6w== - dependencies: - core-js "^3.0.1" - -"@storybook/client-api@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.2.8.tgz#1de791f7888442287f848e5f544eb883c5edc0da" - integrity sha512-OCKhZ+2sS3ot0ZV48nD79BWVzvvdMjUFYl0073ps5q+1+TLic1AlNmH0Sb5/9NrYXNV86v3VrM2jUbGsKe1qyw== - dependencies: - "@storybook/addons" "5.2.8" - "@storybook/channel-postmessage" "5.2.8" - "@storybook/channels" "5.2.8" - "@storybook/client-logger" "5.2.8" - "@storybook/core-events" "5.2.8" - "@storybook/router" "5.2.8" - common-tags "^1.8.0" - core-js "^3.0.1" - eventemitter3 "^4.0.0" - global "^4.3.2" - is-plain-object "^3.0.0" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - stable "^0.1.8" - util-deprecate "^1.0.2" - -"@storybook/client-logger@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.2.8.tgz#5affe2f9dbbee374721fd2e8729116f5ac39c779" - integrity sha512-+oVSEJdeh7TQ1Bhanb3mCr7fc3Bug3+K79abZ28J45Ub5x4L/ZVClj1xMgUsJs30BZ5FB8vhdgH6TQb0NSxR4A== - dependencies: - core-js "^3.0.1" - -"@storybook/components@3.4.12": - version "3.4.12" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.4.12.tgz#07499c43aca1f8543211202f3d142764bdd4c807" - integrity sha512-1wgsFOlpmziP7K0ilo/O3piyGm+iVzzFc2RIVXDCMamPVTx19MJNGaBefcSezw8mO5p0XrU/nEhxOiKIJw4UUw== - dependencies: - glamor "^2.20.40" - glamorous "^4.12.1" - prop-types "^15.6.1" - -"@storybook/components@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.2.8.tgz#f5d4a06ba4ba8c700b2d962deae182105b72fb99" - integrity sha512-h9l/LAMaj+emUCOyY/+ETy/S3P0npwQU280J88uL4O9XJALJ72EKfyttBCvMLvpM50E+fAPeDzuYn0t5qzGGxg== - dependencies: - "@storybook/client-logger" "5.2.8" - "@storybook/theming" "5.2.8" - "@types/react-syntax-highlighter" "10.1.0" - "@types/react-textarea-autosize" "^4.3.3" - core-js "^3.0.1" - global "^4.3.2" - markdown-to-jsx "^6.9.1" - memoizerific "^1.11.3" - polished "^3.3.1" - popper.js "^1.14.7" - prop-types "^15.7.2" - react "^16.8.3" - react-dom "^16.8.3" - react-focus-lock "^1.18.3" - react-helmet-async "^1.0.2" - react-popper-tooltip "^2.8.3" - react-syntax-highlighter "^8.0.1" - react-textarea-autosize "^7.1.0" - simplebar-react "^1.0.0-alpha.6" - -"@storybook/core-events@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.2.8.tgz#93fc458ea0820ff1409d268b0fe51abba200f5a4" - integrity sha512-NkQKC5doO/YL9gsO61bqaxgveKktkiJWZ3XyyhL1ZebgnO9wTlrU+i9b5aX73Myk1oxbicQw9KcwDGYk0qFuNQ== - dependencies: - core-js "^3.0.1" - -"@storybook/core@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.2.8.tgz#3f6ddbacc705c1893deb15582c3a0a1ecd882cd1" - integrity sha512-P1Xx4setLBESPgS5KgL7Jskf5Q6fRa3ApwPt+ocjDoSDGCvsV7cUEpAp09U65u+89e5K4nQxvaZouhknFQBc1A== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.7.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-transform-react-constant-elements" "^7.6.3" - "@babel/preset-env" "^7.7.1" - "@storybook/addons" "5.2.8" - "@storybook/channel-postmessage" "5.2.8" - "@storybook/client-api" "5.2.8" - "@storybook/client-logger" "5.2.8" - "@storybook/core-events" "5.2.8" - "@storybook/node-logger" "5.2.8" - "@storybook/router" "5.2.8" - "@storybook/theming" "5.2.8" - "@storybook/ui" "5.2.8" - airbnb-js-shims "^1 || ^2" - ansi-to-html "^0.6.11" - autoprefixer "^9.4.9" - babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-emotion "^10.0.14" - babel-plugin-macros "^2.4.5" - babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" - boxen "^3.0.0" - case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^2.4.2" - cli-table3 "0.5.1" - commander "^2.19.0" - common-tags "^1.8.0" - core-js "^3.0.1" - corejs-upgrade-webpack-plugin "^2.2.0" - css-loader "^3.0.0" - detect-port "^1.3.0" - dotenv-webpack "^1.7.0" - ejs "^2.6.1" - express "^4.17.0" - file-loader "^3.0.1" - file-system-cache "^1.0.5" - find-cache-dir "^3.0.0" - fs-extra "^8.0.1" - global "^4.3.2" - html-webpack-plugin "^4.0.0-beta.2" - inquirer "^6.2.0" - interpret "^1.2.0" - ip "^1.1.5" - json5 "^2.1.0" - lazy-universal-dotenv "^3.0.1" - node-fetch "^2.6.0" - open "^6.1.0" - pnp-webpack-plugin "1.4.3" - postcss-flexbugs-fixes "^4.1.0" - postcss-loader "^3.0.0" - pretty-hrtime "^1.0.3" - qs "^6.6.0" - raw-loader "^2.0.0" - react-dev-utils "^9.0.0" - regenerator-runtime "^0.12.1" - resolve "^1.11.0" - resolve-from "^5.0.0" - semver "^6.0.0" - serve-favicon "^2.5.0" - shelljs "^0.8.3" - style-loader "^0.23.1" - terser-webpack-plugin "^1.2.4" - unfetch "^4.1.0" - url-loader "^2.0.1" - util-deprecate "^1.0.2" - webpack "^4.33.0" - webpack-dev-middleware "^3.7.0" - webpack-hot-middleware "^2.25.0" - -"@storybook/node-logger@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.2.8.tgz#4a3df21d731014d54b9ca53d5b9a72dd350bb075" - integrity sha512-3TK5mx6VWbfJO+WUrqwPhTbTQ4qESTnwJY/02xPzOhvuC6tIG1QOxzi+Rq6rFlwxTpUuWh6iyDYnGIqFFQywkA== - dependencies: - chalk "^2.4.2" - core-js "^3.0.1" - npmlog "^4.1.2" - pretty-hrtime "^1.0.3" - regenerator-runtime "^0.12.1" - -"@storybook/react@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.2.8.tgz#8d44c2d34caa1d7d748ec1fc9cf0fe2a88b001f9" - integrity sha512-T1DoWpSz33vaGx85Dh7q2KYetg7dQyiYhuOnZm2WxZTFZOw1jP62si53JGFp0PKxnT6iOBLHo3v2QkRkjt2mdQ== - dependencies: - "@babel/plugin-transform-react-constant-elements" "^7.6.3" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-react" "^7.7.0" - "@storybook/addons" "5.2.8" - "@storybook/core" "5.2.8" - "@storybook/node-logger" "5.2.8" - "@svgr/webpack" "^4.0.3" - "@types/webpack-env" "^1.13.7" - babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-named-asset-import "^0.3.1" - babel-plugin-react-docgen "^3.0.0" - babel-preset-react-app "^9.0.0" - common-tags "^1.8.0" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - mini-css-extract-plugin "^0.7.0" - prop-types "^15.7.2" - react-dev-utils "^9.0.0" - regenerator-runtime "^0.12.1" - semver "^6.0.0" - webpack "^4.33.0" - -"@storybook/router@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.2.8.tgz#d7de2d401701857c033e28560c30e16512f7f72f" - integrity sha512-wnbyKESUMyv9fwo9W+n4Fev/jXylB8whpjtHrOttjguUOYX1zGSHdwNI66voPetbtVLxUeHyJteJwdyRDSirJg== - dependencies: - "@reach/router" "^1.2.1" - "@types/reach__router" "^1.2.3" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - -"@storybook/theming@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.2.8.tgz#a4c9e0e9a5789c1aa71e4fcb7a8ee86efe3dadcf" - integrity sha512-rGb66GkXb0jNJMH8UQ3Ru4FL+m1x0+UdxM8a8HSE/qb1GMv2qOwjVETfAL6nVL9u6ZmrtbhHoero4f6xDwZdRg== - dependencies: - "@emotion/core" "^10.0.14" - "@emotion/styled" "^10.0.14" - "@storybook/client-logger" "5.2.8" - common-tags "^1.8.0" - core-js "^3.0.1" - deep-object-diff "^1.1.0" - emotion-theming "^10.0.14" - global "^4.3.2" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - resolve-from "^5.0.0" - -"@storybook/ui@5.2.8": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.2.8.tgz#da8afca9eb29a40ef3ddc6a9f6e76d7a3344f2ef" - integrity sha512-7t1ARBfylhEsLmGsZBUCj1Wf1oAgCDDrf7fi+Fhdg5Rr16CMoBbe24Gv/mPYv01/pUDhGodxzltKGX5x0Hto2w== - dependencies: - "@storybook/addons" "5.2.8" - "@storybook/api" "5.2.8" - "@storybook/channels" "5.2.8" - "@storybook/client-logger" "5.2.8" - "@storybook/components" "5.2.8" - "@storybook/core-events" "5.2.8" - "@storybook/router" "5.2.8" - "@storybook/theming" "5.2.8" - copy-to-clipboard "^3.0.8" - core-js "^3.0.1" - core-js-pure "^3.0.1" - emotion-theming "^10.0.14" - fast-deep-equal "^2.0.1" - fuse.js "^3.4.4" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.9.3" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - qs "^6.6.0" - react "^16.8.3" - react-dom "^16.8.3" - react-draggable "^4.0.3" - react-helmet-async "^1.0.2" - react-hotkeys "2.0.0-pre4" - react-sizeme "^2.6.7" - regenerator-runtime "^0.13.2" - resolve-from "^5.0.0" - semver "^6.0.0" - store2 "^2.7.1" - telejson "^3.0.2" - util-deprecate "^1.0.2" - -"@svgr/babel-plugin-add-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" - integrity sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig== - -"@svgr/babel-plugin-remove-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz#297550b9a8c0c7337bea12bdfc8a80bb66f85abc" - integrity sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ== - -"@svgr/babel-plugin-remove-jsx-empty-expression@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz#c196302f3e68eab6a05e98af9ca8570bc13131c7" - integrity sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz#310ec0775de808a6a2e4fd4268c245fd734c1165" - integrity sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w== - -"@svgr/babel-plugin-svg-dynamic-title@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz#2cdedd747e5b1b29ed4c241e46256aac8110dd93" - integrity sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w== - -"@svgr/babel-plugin-svg-em-dimensions@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz#9a94791c9a288108d20a9d2cc64cac820f141391" - integrity sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w== - -"@svgr/babel-plugin-transform-react-native-svg@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz#151487322843359a1ca86b21a3815fd21a88b717" - integrity sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw== - -"@svgr/babel-plugin-transform-svg-component@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz#5f1e2f886b2c85c67e76da42f0f6be1b1767b697" - integrity sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw== - -"@svgr/babel-preset@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.3.3.tgz#a75d8c2f202ac0e5774e6bfc165d028b39a1316c" - integrity sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.2.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.2.0" - "@svgr/babel-plugin-svg-dynamic-title" "^4.3.3" - "@svgr/babel-plugin-svg-em-dimensions" "^4.2.0" - "@svgr/babel-plugin-transform-react-native-svg" "^4.2.0" - "@svgr/babel-plugin-transform-svg-component" "^4.2.0" - -"@svgr/core@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.3.3.tgz#b37b89d5b757dc66e8c74156d00c368338d24293" - integrity sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w== - dependencies: - "@svgr/plugin-jsx" "^4.3.3" - camelcase "^5.3.1" - cosmiconfig "^5.2.1" - -"@svgr/hast-util-to-babel-ast@^4.3.2": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz#1d5a082f7b929ef8f1f578950238f630e14532b8" - integrity sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg== - dependencies: - "@babel/types" "^7.4.4" - -"@svgr/plugin-jsx@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz#e2ba913dbdfbe85252a34db101abc7ebd50992fa" - integrity sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w== - dependencies: - "@babel/core" "^7.4.5" - "@svgr/babel-preset" "^4.3.3" - "@svgr/hast-util-to-babel-ast" "^4.3.2" - svg-parser "^2.0.0" - -"@svgr/plugin-svgo@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz#daac0a3d872e3f55935c6588dd370336865e9e32" - integrity sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w== - dependencies: - cosmiconfig "^5.2.1" - merge-deep "^3.0.2" - svgo "^1.2.2" - -"@svgr/webpack@^4.0.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-4.3.3.tgz#13cc2423bf3dff2d494f16b17eb7eacb86895017" - integrity sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg== - dependencies: - "@babel/core" "^7.4.5" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.4.5" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^4.3.3" - "@svgr/plugin-jsx" "^4.3.3" - "@svgr/plugin-svgo" "^4.3.1" - loader-utils "^1.2.3" - "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -2235,10 +1509,10 @@ pretty-format "^24.0.0" redent "^3.0.0" -"@testing-library/react@9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.3.2.tgz#418000daa980dafd2d9420cc733d661daece9aa0" - integrity sha512-J6ftWtm218tOLS175MF9eWCxGp+X+cUXCpkPIin8KAXWtyZbr9CbqJ8M8QNd6spZxJDAGlw+leLG4MJWLlqVgg== +"@testing-library/react@9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.3.3.tgz#87fe594adb02cba4d0e86369d025ea13ad570d7c" + integrity sha512-IuoiJR/NAzu9EuT3Fqs92sRHe/9egCipar92wTnXe3fMloWy0Q7JdAXaszzbv2ogH30ztb6Axp5XW63vOTd4jA== dependencies: "@babel/runtime" "^7.6.0" "@testing-library/dom" "^6.3.0" @@ -2554,16 +1828,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/history@*": - version "4.7.3" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.3.tgz#856c99cdc1551d22c22b18b5402719affec9839a" - integrity sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw== - -"@types/is-function@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" - integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -2609,11 +1873,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.6.tgz#1aaabd6f6470a6ac3824ab1e94d731ca1326d93d" integrity sha512-0a2X6cgN3RdPBL2MIlR6Lt0KlM7fOFsutuXcdglcOq6WvLnYXgPQSh0Mx6tO1KCAE8MxbHSOSTWDoUxRq+l3DA== -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - "@types/prop-types@*": version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" @@ -2624,21 +1883,6 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== -"@types/reach__router@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.2.6.tgz#b14cf1adbd1a365d204bbf6605cd9dd7b8816c87" - integrity sha512-Oh5DAVr/L2svBvubw6QEFpXGu295Y406BPs4i9t1n2pp7M+q3pmCmhzb9oZV5wncR41KCD3NHl1Yhi7uKnTPsA== - dependencies: - "@types/history" "*" - "@types/react" "*" - -"@types/react-color@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.1.tgz#5433e2f503ea0e0831cbc6fd0c20f8157d93add0" - integrity sha512-J6mYm43Sid9y+OjZ7NDfJ2VVkeeuTPNVImNFITgQNXodHteKfl/t/5pAR5Z9buodZ2tCctsZjgiMlQOpfntakw== - dependencies: - "@types/react" "*" - "@types/react-dom@*": version "16.9.4" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.4.tgz#0b58df09a60961dcb77f62d4f1832427513420df" @@ -2646,20 +1890,6 @@ dependencies: "@types/react" "*" -"@types/react-syntax-highlighter@10.1.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-10.1.0.tgz#9c534e29bbe05dba9beae1234f3ae944836685d4" - integrity sha512-dF49hC4FZp1dIKyzacOrHvqMUe8U2IXyQCQXOcT1e6n64gLBp+xM6qGtPsThIT9XjiIHSg2W5Jc2V5IqekBfnA== - dependencies: - "@types/react" "*" - -"@types/react-textarea-autosize@^4.3.3": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.5.tgz#6c4d2753fa1864c98c0b2b517f67bb1f6e4c46de" - integrity sha512-PiDL83kPMTolyZAWW3lyzO6ktooTb9tFTntVy7CA83/qFLWKLJ5bLeRboy6J6j3b1e8h2Eec6gBTEOOJRjV14A== - dependencies: - "@types/react" "*" - "@types/react-transition-group@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.3.tgz#4924133f7268694058e415bf7aea2d4c21131470" @@ -2695,16 +1925,6 @@ "@types/react-dom" "*" "@types/testing-library__dom" "*" -"@types/tinycolor2@^1.4.1": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.2.tgz#721ca5c5d1a2988b4a886e35c2ffc5735b6afbdf" - integrity sha512-PeHg/AtdW6aaIO2a+98Xj7rWY4KC1E6yOy7AFknJQ7VXUGNrMlyxDFxJo7HqLtjQms/ZhhQX52mLVW/EX3JGOw== - -"@types/webpack-env@^1.13.7": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.14.1.tgz#0d8a53f308f017c53a5ddc3d07f4d6fa76b790d7" - integrity sha512-0Ki9jAAhKDSuLDXOIMADg54Hu60SuBTEsWaJGGy5cV+SSUQ63J2a+RrYYGrErzz39fXzTibhKrAQJAb8M7PNcA== - "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -3080,7 +2300,7 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn-jsx@^5.0.0: +acorn-jsx@^5.0.0, acorn-jsx@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== @@ -3115,6 +2335,11 @@ acorn@^6.0.1, acorn@^6.0.7, acorn@^6.2.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -3148,29 +2373,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -"airbnb-js-shims@^1 || ^2": - version "2.2.1" - resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" - integrity sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - array.prototype.flatmap "^1.2.1" - es5-shim "^4.5.13" - es6-shim "^0.35.5" - function.prototype.name "^1.1.0" - globalthis "^1.0.0" - object.entries "^1.1.0" - object.fromentries "^2.0.0 || ^1.0.0" - object.getownpropertydescriptors "^2.0.3" - object.values "^1.1.0" - promise.allsettled "^1.0.0" - promise.prototype.finally "^3.1.0" - string.prototype.matchall "^4.0.0 || ^3.0.1" - string.prototype.padend "^3.0.0" - string.prototype.padstart "^3.0.0" - symbol.prototype.description "^1.0.0" - ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -3196,12 +2398,12 @@ alphanum-sort@^1.0.0: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== dependencies: - string-width "^3.0.0" + ansi-wrap "^0.1.0" ansi-colors@^3.0.0: version "3.2.4" @@ -3220,6 +2422,13 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.8.1" +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -3257,12 +2466,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-to-html@^0.6.11: - version "0.6.13" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.13.tgz#c72eae8b63e5ca0643aab11bfc6e6f2217425833" - integrity sha512-Ys2/umuaTlQvP9DLkaa7UzRKF2FLrfod/hNHXS9QhXCrw7seObG6ksOGmNz3UoK+adwM8L9vQfG7mvaxfJ3Jvw== - dependencies: - entities "^1.1.2" +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= any-promise@1.3.0: version "1.3.0" @@ -3282,16 +2489,23 @@ app-module-path@^2.2.0: resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" integrity sha1-ZBqlXft9am8KgUHEucCqULbCTdU= -app-root-dir@^1.0.2: +append-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" - integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -3327,16 +2541,35 @@ arr-diff@^4.0.0: resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= +arr-filter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" + integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= + dependencies: + make-iterator "^1.0.0" + arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== +arr-map@^2.0.0, arr-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" + integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= + dependencies: + make-iterator "^1.0.0" + arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-each@^1.0.0, array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -3360,6 +2593,35 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-initial@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" + integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= + dependencies: + array-slice "^1.0.0" + is-number "^4.0.0" + +array-last@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" + integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== + dependencies: + is-number "^4.0.0" + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== + +array-sort@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" + integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== + dependencies: + default-compare "^1.0.0" + get-value "^2.0.6" + kind-of "^5.0.2" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -3391,15 +2653,6 @@ array.prototype.flat@^1.2.1: es-abstract "^1.15.0" function-bind "^1.1.1" -array.prototype.flatmap@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.2.tgz#28d621d351c19a62b84331b01669395ef6cef4c4" - integrity sha512-ZZtPLE74KNE+0XcPv/vQmcivxN+8FhwOLvt2udHauO0aDEpsXDQrmd5HuJGpgPVyaV8HvkDPWnJ2iaem0oCKtA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.15.0" - function-bind "^1.1.1" - arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -3459,16 +2712,6 @@ ast-types-flow@0.0.7, ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -ast-types@0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" - integrity sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA== - -ast-types@0.12.4: - version "0.12.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.12.4.tgz#71ce6383800f24efc9a1a3308f3a6e420a0974d1" - integrity sha512-ky/YVYCbtVAS8TdMIaTiPFHwEpRB5z1hctepJplTr3UW5q8TDrpIMCILyk8pmLxGtn2KCtC/lSn7zOsaI7nzDw== - ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -3479,6 +2722,16 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +async-done@^1.2.0, async-done@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" + integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.2" + process-nextick-args "^2.0.0" + stream-exhaust "^1.0.1" + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -3496,6 +2749,13 @@ async-limiter@^1.0.0, async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-settle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" + integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= + dependencies: + async-done "^1.2.2" + async@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" @@ -3515,7 +2775,7 @@ async@^1.4.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.4.0, async@^2.4.1, async@^2.5.0, async@^2.6.1, async@^2.6.2: +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.4.1, async@^2.5.0, async@^2.6.1, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -3532,7 +2792,7 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@9.7.3, autoprefixer@^9.4.9: +autoprefixer@9.7.3: version "9.7.3" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.3.tgz#fd42ed03f53de9beb4ca0d61fb4f7268a9bb50b4" integrity sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q== @@ -3678,11 +2938,6 @@ babel-helper-define-map@^6.24.1: babel-types "^6.26.0" lodash "^4.17.4" -babel-helper-evaluate-path@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" - integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== - babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" @@ -3692,11 +2947,6 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-flip-expressions@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" - integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= - babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -3724,21 +2974,6 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-helper-is-nodes-equiv@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" - integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= - -babel-helper-is-void-0@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" - integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= - -babel-helper-mark-eval-scopes@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" - integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= - babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" @@ -3767,11 +3002,6 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-remove-or-void@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" - integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= - babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" @@ -3784,11 +3014,6 @@ babel-helper-replace-supers@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-to-multiple-sequence-expressions@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" - integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== - babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -3827,11 +3052,6 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-add-react-displayname@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" - integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= - babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" @@ -3839,29 +3059,13 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-dynamic-import-node@2.3.0, babel-plugin-dynamic-import-node@^2.3.0: +babel-plugin-dynamic-import-node@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== dependencies: object.assign "^4.1.0" -babel-plugin-emotion@^10.0.14, babel-plugin-emotion@^10.0.22, babel-plugin-emotion@^10.0.23: - version "10.0.23" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.23.tgz#040d40bf61dcab6d31dd6043d10e180240b8515b" - integrity sha512-1JiCyXU0t5S2xCbItejCduLGGcKmF3POT0Ujbexog2MI4IlRcIn/kWjkYwCUZlxpON0O5FC635yPl/3slr7cKQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@emotion/hash" "0.7.3" - "@emotion/memoize" "0.7.3" - "@emotion/serialize" "^0.11.14" - babel-plugin-macros "^2.0.0" - babel-plugin-syntax-jsx "^6.18.0" - convert-source-map "^1.5.0" - escape-string-regexp "^1.0.5" - find-root "^1.1.0" - source-map "^0.5.7" - babel-plugin-istanbul@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" @@ -3879,114 +3083,6 @@ babel-plugin-jest-hoist@^24.9.0: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.7.1.tgz#ee294383c1a38f9d6535be3d89734824cb3ed415" - integrity sha512-HNM284amlKSQ6FddI4jLXD+XTqF0cTYOe5uemOIZxHJHnamC+OhFQ57rMF9sgnYhkJQptVl9U1SKVZsV9/GLQQ== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - -babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.4.5: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - -babel-plugin-minify-builtins@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" - integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== - -babel-plugin-minify-constant-folding@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" - integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== - dependencies: - babel-helper-evaluate-path "^0.5.0" - -babel-plugin-minify-dead-code-elimination@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz#1a0c68e44be30de4976ca69ffc535e08be13683f" - integrity sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-mark-eval-scopes "^0.4.3" - babel-helper-remove-or-void "^0.4.3" - lodash "^4.17.11" - -babel-plugin-minify-flip-comparisons@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" - integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= - dependencies: - babel-helper-is-void-0 "^0.4.3" - -babel-plugin-minify-guarded-expressions@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz#818960f64cc08aee9d6c75bec6da974c4d621135" - integrity sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-flip-expressions "^0.4.3" - -babel-plugin-minify-infinity@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" - integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= - -babel-plugin-minify-mangle-names@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" - integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== - dependencies: - babel-helper-mark-eval-scopes "^0.4.3" - -babel-plugin-minify-numeric-literals@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" - integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= - -babel-plugin-minify-replace@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" - integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== - -babel-plugin-minify-simplify@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz#f21613c8b95af3450a2ca71502fdbd91793c8d6a" - integrity sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-flip-expressions "^0.4.3" - babel-helper-is-nodes-equiv "^0.0.1" - babel-helper-to-multiple-sequence-expressions "^0.5.0" - -babel-plugin-minify-type-constructors@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" - integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= - dependencies: - babel-helper-is-void-0 "^0.4.3" - -babel-plugin-named-asset-import@^0.3.1: - version "0.3.5" - resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.5.tgz#d3fa1a7f1f4babd4ed0785b75e2f926df0d70d0d" - integrity sha512-sGhfINU+AuMw9oFAdIn/nD5sem3pn/WgxAfDZ//Q3CnF+5uaho7C7shh2rKLk6sKE/XkfmyibghocwKdVjLIKg== - -babel-plugin-react-docgen@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-3.2.0.tgz#c072364d61d1f6bb19a6ca81734fc270870e8b96" - integrity sha512-MZ3fhnJ+/tUDhWFGgWsajuLct/dD1xoprmStqrBgtt9flFLPrKIOKOfqwjXjsn6/THs5QrG5rkcDFE3TMMZDjQ== - dependencies: - lodash "^4.17.15" - react-docgen "^4.1.1" - recast "^0.14.7" - "babel-plugin-styled-components@>= 1": version "1.10.6" resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz#f8782953751115faf09a9f92431436912c34006b" @@ -4239,38 +3335,6 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-inline-consecutive-adds@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" - integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= - -babel-plugin-transform-member-expression-literals@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" - integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= - -babel-plugin-transform-merge-sibling-variables@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" - integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= - -babel-plugin-transform-minify-booleans@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" - integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= - -babel-plugin-transform-property-literals@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" - integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= - dependencies: - esutils "^2.0.2" - -babel-plugin-transform-react-remove-prop-types@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" @@ -4278,33 +3342,6 @@ babel-plugin-transform-regenerator@^6.22.0: dependencies: regenerator-transform "^0.10.0" -babel-plugin-transform-regexp-constructors@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" - integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= - -babel-plugin-transform-remove-console@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" - integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= - -babel-plugin-transform-remove-debugger@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" - integrity sha1-QrcnYxyXl44estGZp67IShgznvI= - -babel-plugin-transform-remove-undefined@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" - integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== - dependencies: - babel-helper-evaluate-path "^0.5.0" - -babel-plugin-transform-simplify-comparison-operators@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" - integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= - babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" @@ -4313,11 +3350,6 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-undefined-to-void@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" - integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= - babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" @@ -4371,60 +3403,6 @@ babel-preset-jest@^24.9.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.9.0" -"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5": - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz#25f5d0bce36ec818be80338d0e594106e21eaa9f" - integrity sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg== - dependencies: - babel-plugin-minify-builtins "^0.5.0" - babel-plugin-minify-constant-folding "^0.5.0" - babel-plugin-minify-dead-code-elimination "^0.5.1" - babel-plugin-minify-flip-comparisons "^0.4.3" - babel-plugin-minify-guarded-expressions "^0.4.4" - babel-plugin-minify-infinity "^0.4.3" - babel-plugin-minify-mangle-names "^0.5.0" - babel-plugin-minify-numeric-literals "^0.4.3" - babel-plugin-minify-replace "^0.5.0" - babel-plugin-minify-simplify "^0.5.1" - babel-plugin-minify-type-constructors "^0.4.3" - babel-plugin-transform-inline-consecutive-adds "^0.4.3" - babel-plugin-transform-member-expression-literals "^6.9.4" - babel-plugin-transform-merge-sibling-variables "^6.9.4" - babel-plugin-transform-minify-booleans "^6.9.4" - babel-plugin-transform-property-literals "^6.9.4" - babel-plugin-transform-regexp-constructors "^0.4.3" - babel-plugin-transform-remove-console "^6.9.4" - babel-plugin-transform-remove-debugger "^6.9.4" - babel-plugin-transform-remove-undefined "^0.5.0" - babel-plugin-transform-simplify-comparison-operators "^6.9.4" - babel-plugin-transform-undefined-to-void "^6.9.4" - lodash "^4.17.11" - -babel-preset-react-app@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-9.1.0.tgz#74c644d809f098d4b131646730c7bed0696084ca" - integrity sha512-0qMOv/pCcCQWxX1eNyKD9GlzZTdzZIK/Pq3O6TGe65tZSJTSplw1pFlaPujm0GjBj4g3GeCQbP08vvzlH7OGHg== - dependencies: - "@babel/core" "7.7.4" - "@babel/plugin-proposal-class-properties" "7.7.4" - "@babel/plugin-proposal-decorators" "7.7.4" - "@babel/plugin-proposal-nullish-coalescing-operator" "7.7.4" - "@babel/plugin-proposal-numeric-separator" "7.7.4" - "@babel/plugin-proposal-object-rest-spread" "7.7.4" - "@babel/plugin-proposal-optional-chaining" "7.7.4" - "@babel/plugin-syntax-dynamic-import" "7.7.4" - "@babel/plugin-transform-destructuring" "7.7.4" - "@babel/plugin-transform-flow-strip-types" "7.7.4" - "@babel/plugin-transform-react-display-name" "7.7.4" - "@babel/plugin-transform-runtime" "7.7.4" - "@babel/preset-env" "7.7.4" - "@babel/preset-react" "7.7.4" - "@babel/preset-typescript" "7.7.4" - "@babel/runtime" "7.7.4" - babel-plugin-dynamic-import-node "2.3.0" - babel-plugin-macros "2.7.1" - babel-plugin-transform-react-remove-prop-types "0.4.24" - babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -4495,6 +3473,21 @@ babylon@6.18.0, babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== +bach@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" + integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= + dependencies: + arr-filter "^1.1.1" + arr-flatten "^1.0.1" + arr-map "^2.0.0" + array-each "^1.0.0" + array-initial "^1.0.0" + array-last "^1.1.1" + async-done "^1.2.2" + async-settle "^1.0.0" + now-and-later "^2.0.0" + backoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" @@ -4537,11 +3530,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -batch-processor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" - integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= - batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -4646,7 +3634,7 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -bluebird@^3.3.5, bluebird@^3.4.1, bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.5: +bluebird@^3.4.1, bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -4699,25 +3687,6 @@ boolify@^1.0.0: resolved "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz#b5c09e17cacd113d11b7bb3ed384cc012994d86b" integrity sha1-tcCeF8rNET0Rt7s+04TMASmU2Gs= -bowser@^1.7.3: - version "1.9.4" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" - integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== - -boxen@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb" - integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^2.4.2" - cli-boxes "^2.2.0" - string-width "^3.0.0" - term-size "^1.2.0" - type-fest "^0.3.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -4751,11 +3720,6 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -brcast@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" - integrity sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg== - brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -4845,14 +3809,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== +browserslist@4.7.3: + version "4.7.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.3.tgz#02341f162b6bcc1e1028e30624815d4924442dc3" + integrity sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ== dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" + caniuse-lite "^1.0.30001010" + electron-to-chromium "^1.3.306" + node-releases "^1.1.40" browserslist@^3.2.6: version "3.2.8" @@ -4937,6 +3901,11 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -5119,7 +4088,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@3.0.x, camel-case@^3.0.0: +camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= @@ -5166,11 +4135,6 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -can-use-dom@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" - integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -5181,7 +4145,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001015: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001010, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001015: version "1.0.30001015" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== @@ -5193,11 +4157,6 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -case-sensitive-paths-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" - integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g== - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -5240,21 +4199,6 @@ change-emitter@^0.1.2: resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= -character-entities-legacy@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" - integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== - -character-entities@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" - integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== - -character-reference-invalid@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" - integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== - chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -5302,7 +4246,7 @@ cheerio@1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.8: +chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -5361,7 +4305,7 @@ classnames@^2.2.5, classnames@^2.2.6: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== -clean-css@4.2.x, clean-css@^4.2.1: +clean-css@4.2.x: version "4.2.1" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== @@ -5373,11 +4317,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -5397,30 +4336,11 @@ cli-spinners@^2.0.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== -cli-table3@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -clipboard@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" - integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -5448,16 +4368,10 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone-deep@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" - integrity sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY= - dependencies: - for-own "^0.1.3" - is-plain-object "^2.0.1" - kind-of "^3.0.2" - lazy-cache "^1.0.3" - shallow-clone "^0.1.2" +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= clone-response@^1.0.2: version "1.0.2" @@ -5471,6 +4385,11 @@ clone-stats@^0.0.1: resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" integrity sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + clone@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" @@ -5486,6 +4405,15 @@ clone@^1.0.0, clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + clsx@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.0.4.tgz#0c0171f6d5cb2fe83848463c15fcc26b4df8c2ec" @@ -5518,6 +4446,15 @@ coinstring@^2.0.0: bs58 "^2.0.1" create-hash "^1.1.1" +collection-map@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" + integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= + dependencies: + arr-map "^2.0.2" + for-own "^1.0.0" + make-iterator "^1.0.0" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -5561,6 +4498,11 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + color@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" @@ -5581,11 +4523,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" - integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== - command-exists@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" @@ -5606,12 +4543,12 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: +commander@^2.11.0, commander@^2.18.0, commander@^2.20.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0, commander@^4.0.1: +commander@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== @@ -5682,7 +4619,7 @@ concat-stream@1.5.1: readable-stream "~2.0.0" typedarray "~0.0.5" -concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.1: +concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -5799,14 +4736,15 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-to-clipboard@^3.0.8: - version "3.2.0" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.2.0.tgz#d2724a3ccbfed89706fac8a894872c979ac74467" - integrity sha512-eOZERzvCmxS8HWzugj4Uxl8OJxa7T2k1Gi0X5qavwydHIfuSHq2dTD09LOg/XyGq4Zpb5IsR/2OJ5lbOegz78w== +copy-props@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" + integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== dependencies: - toggle-selection "^1.0.6" + each-props "^1.3.0" + is-plain-object "^2.0.1" -core-js-compat@^3.1.1, core-js-compat@^3.4.7: +core-js-compat@^3.4.7: version "3.4.8" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.8.tgz#f72e6a4ed76437ea710928f44615f926a81607d5" integrity sha512-l3WTmnXHV2Sfu5VuD7EHE2w7y+K68+kULKt5RJg8ZJk3YhHF1qLD4O8v8AmNq+8vbOwnPFFDvds25/AoEvMqlQ== @@ -5814,7 +4752,7 @@ core-js-compat@^3.1.1, core-js-compat@^3.4.7: browserslist "^4.8.2" semver "^6.3.0" -core-js-pure@^3.0.0, core-js-pure@^3.0.1: +core-js-pure@^3.0.0: version "3.4.8" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.4.8.tgz#a4415834383784e81974cd34321daf36a6d2366e" integrity sha512-K9iPNbLDZ0Epojwd8J3lhodmrLHYvxb07H3DaFme1ne4TIlFq/ufiyPC40rc3OX6NCaVa0zaSu+VV6BVDR2wiA== @@ -5829,7 +4767,7 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== -core-js@^3.0.1, core-js@^3.0.4, core-js@^3.1.4: +core-js@^3.1.4: version "3.4.8" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.8.tgz#e0fc0c61f2ef90cbc10c531dbffaa46dfb7152dd" integrity sha512-b+BBmCZmVgho8KnBUOXpvlqEMguko+0P+kXCwD4vIprsXC6ht1qgPxtb1OK6XgSlrySF71wkwBQ0Hv695bk9gQ== @@ -5839,14 +4777,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -corejs-upgrade-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" - integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== - dependencies: - resolve-from "^5.0.0" - webpack "^4.38.0" - cors@^2.8.1: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -5855,7 +4785,7 @@ cors@^2.8.1: object-assign "^4" vary "^1" -cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: +cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -5865,17 +4795,6 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - cpr@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/cpr/-/cpr-3.0.1.tgz#b9a55038b7cd81a35c17b9761895bd8496aef1e5" @@ -5917,31 +4836,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@^15.6.0: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -create-react-context@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" - integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== - dependencies: - fbjs "^0.8.0" - gud "^1.0.0" - -create-react-context@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" - integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - cross-fetch@^2.1.0, cross-fetch@^2.1.1: version "2.2.3" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e" @@ -6020,18 +4914,10 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" -css-in-js-utils@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" - integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== - dependencies: - hyphenate-style-name "^1.0.2" - isobject "^3.0.1" - -css-loader@3.2.1, css-loader@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.1.tgz#62849b45a414b7bde0bfba17325a026471040eae" - integrity sha512-q40kYdcBNzMvkIImCL2O+wk8dh+RGwPPV9Dfz3n7XtOYPXqe2Z6VgtvoxjkLHz02gmhepG9sOAJOUlx+3hHsBg== +css-loader@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.3.0.tgz#65f889807baec3197313965d6cda9899f936734d" + integrity sha512-x9Y1vvHe5RR+4tzwFdWExPueK00uqFTCw7mZy+9aE/X1SKWOArm5luaOrtJ4d05IpOwJ6S86b/tVcIdhw1Bu4A== dependencies: camelcase "^5.3.1" cssesc "^3.0.0" @@ -6230,11 +5116,16 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" -csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.5, csstype@^2.6.7: +csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== +currency-flags@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/currency-flags/-/currency-flags-2.1.1.tgz#3f6ac283fb8db34dd1d17eb3705e2634f4d5e047" + integrity sha512-BR6wcXBpl3a8gH5AjgtvAHNkAAXlGErocnoc5LE6E3GPA+qHFas4/CCe4KNnSfgWubHIciKveSeLFnHtdsM/pA== + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -6415,10 +5306,12 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deep-object-diff@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" - integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== +default-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" + integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== + dependencies: + kind-of "^5.0.2" default-gateway@^4.2.0: version "4.2.0" @@ -6428,6 +5321,11 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +default-resolution@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" + integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -6520,11 +5418,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -6679,13 +5572,6 @@ dom-converter@^0.2: dependencies: utila "~0.4" -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - dom-helpers@^5.0.1: version "5.1.3" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" @@ -6774,31 +5660,7 @@ dot-prop@^4.1.0, dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -dotenv-defaults@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.0.2.tgz#441cf5f067653fca4bbdce9dd3b803f6f84c585d" - integrity sha512-iXFvHtXl/hZPiFj++1hBg4lbKwGM+t/GlvELDnRtOFdjXyWP7mubkVr+eZGWG62kdsbulXAef6v/j6kiWc/xGA== - dependencies: - dotenv "^6.2.0" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv-webpack@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.7.0.tgz#4384d8c57ee6f405c296278c14a9f9167856d3a1" - integrity sha512-wwNtOBW/6gLQSkb8p43y0Wts970A3xtNiG/mpwj9MLUhtPCQG6i+/DSXXoNN7fbPCU/vQ7JjwGmgOeGZSSZnsw== - dependencies: - dotenv-defaults "^1.0.2" - -dotenv@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" - integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== - -dotenv@^8.0.0: +dotenv@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== @@ -6832,6 +5694,14 @@ duplexify@^3.2.0, duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +each-props@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" + integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== + dependencies: + is-plain-object "^2.0.1" + object.defaults "^1.1.0" + easy-stack@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" @@ -6855,18 +5725,11 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.322, electron-to-chromium@^1.3.47: +electron-to-chromium@^1.3.306, electron-to-chromium@^1.3.322, electron-to-chromium@^1.3.47: version "1.3.322" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== -element-resize-detector@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.1.15.tgz#48eba1a2eaa26969a4c998d972171128c971d8d2" - integrity sha512-16/5avDegXlUxytGgaumhjyQoM6hpp5j3+L79sYq5hlXfTNRy5WMMuTVWkZU3egp/CokCmTmvf18P3KeB57Iog== - dependencies: - batch-processor "^1.0.0" - elliptic@6.3.3: version "6.3.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" @@ -6910,15 +5773,6 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -emotion-theming@^10.0.14: - version "10.0.19" - resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.19.tgz#66d13db74fccaefad71ba57c915b306cf2250295" - integrity sha512-dQRBPLAAQ6eA8JKhkLCIWC8fdjPbiNC1zNTdFF292h9amhZXofcNGUP7axHoHX4XesqQESYwZrXp53OPInMrKw== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/weak-memoize" "0.2.4" - hoist-non-react-statics "^3.3.0" - encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -6972,7 +5826,7 @@ entities@1.0: resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= -entities@^1.1.1, entities@^1.1.2, entities@~1.1.1: +entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== @@ -6996,7 +5850,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.15.0, es-abstract@^1.16.0, es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.7.0: +es-abstract@^1.12.0, es-abstract@^1.15.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.16.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161" integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw== @@ -7021,21 +5875,16 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.52" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.52.tgz#bb21777e919a04263736ded120a9d665f10ea63f" - integrity sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag== +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== dependencies: es6-iterator "~2.0.3" - es6-symbol "~3.1.2" + es6-symbol "~3.1.3" next-tick "~1.0.0" -es5-shim@^4.5.13: - version "4.5.13" - resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.13.tgz#5d88062de049f8969f83783f4a4884395f21d28b" - integrity sha512-xi6hh6gsvDE0MaW4Vp1lgNEBpVcCXRWfPXj5egDvtgLz4L9MEvNwYEMdJH+JJinWkwa8c3c3o5HduV7dB/e1Hw== - -es6-iterator@~2.0.3: +es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -7044,11 +5893,6 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-shim@^0.35.5: - version "0.35.5" - resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" - integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg== - es6-symbol@^3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" @@ -7065,7 +5909,17 @@ es6-templates@^0.2.3: recast "~0.11.12" through "~2.3.6" -escape-html@1.0.3, escape-html@^1.0.3, escape-html@~1.0.3: +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-html@1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= @@ -7230,7 +6084,7 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: +eslint-utils@^1.3.1, eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== @@ -7242,7 +6096,50 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@5.16.0, eslint@^5.0.0, eslint@^5.5.0: +eslint@6.7.2: + version "6.7.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1" + integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.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 "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + 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.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.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" + +eslint@^5.0.0, eslint@^5.5.0: version "5.16.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== @@ -7301,12 +6198,21 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== + dependencies: + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" + esprima@^3.1.3, esprima@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0, esprima@~4.0.0: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -8047,7 +6953,7 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -express@^4.14.0, express@^4.16.3, express@^4.17.0, express@^4.17.1: +express@^4.14.0, express@^4.16.3, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -8167,6 +7073,16 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" +fancy-log@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -8194,11 +7110,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-memoize@^2.2.7: - version "2.5.1" - resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.1.tgz#c3519241e80552ce395e1a32dcdde8d1fd680f5d" - integrity sha512-xdmw296PCL01tMOXx9mdJSmWY29jQgxyuZdq0rEHMu+Tpe1eOEtCycoG6chzlcrWsNgpZP7oL8RiQr7+G6Bl6g== - fast-safe-stringify@^2.0.6: version "2.0.7" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" @@ -8209,13 +7120,6 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== -fault@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.3.tgz#4da88cf979b6b792b4e13c7ec836767725170b7e" - integrity sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA== - dependencies: - format "^0.2.2" - faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -8237,7 +7141,7 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.12, fbjs@^0.8.9: +fbjs@^0.8.1: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -8298,23 +7202,6 @@ file-loader@5.0.2: loader-utils "^1.2.3" schema-utils "^2.5.0" -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -file-system-cache@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" - integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= - dependencies: - bluebird "^3.3.5" - fs-extra "^0.30.0" - ramda "^0.21.0" - file-type@^3.8.0: version "3.9.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" @@ -8395,7 +7282,7 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.0.0, find-cache-dir@^3.1.0: +find-cache-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.1.0.tgz#9935894999debef4cf9f677fdf646d002c4cdecb" integrity sha512-zw+EFiNBNPgI2NTrKkDd1xd7q0cs6wr/iWnr/oUkI0yF9K9GqQ+riIt4aiyFaaqpaWbxPrJXHI+QvmNUQbX+0Q== @@ -8404,11 +7291,6 @@ find-cache-dir@^3.0.0, find-cache-dir@^3.1.0: make-dir "^3.0.0" pkg-dir "^4.1.0" -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - find-up@3.0.0, find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -8439,7 +7321,7 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@3.0.0: +findup-sync@3.0.0, findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== @@ -8449,11 +7331,37 @@ findup-sync@3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +fined@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" + integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" integrity sha1-Wb+1DNkF9g18OUzT2ayqtOatk04= +flagged-respawn@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -8478,7 +7386,7 @@ flow-stoplight@^1.0.0: resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= -flush-write-stream@^1.0.0: +flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== @@ -8486,11 +7394,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -focus-lock@^0.6.3: - version "0.6.6" - resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.6.tgz#98119a755a38cfdbeda0280eaa77e307eee850c7" - integrity sha512-Dx69IXGCq1qsUExWuG+5wkiMqVM/zGx/reXSJSLogECwp3x6KeNQZ+NAetgxEFpnC41rD8U3+jRCW68+LNzdtw== - follow-redirects@1.5.10: version "1.5.10" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" @@ -8512,23 +7415,25 @@ for-each@~0.3.3: dependencies: is-callable "^1.1.3" -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^0.1.3, for-own@^0.1.4: +for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + foreach@^2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" @@ -8539,10 +7444,10 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -fork-ts-checker-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" - integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== +fork-ts-checker-webpack-plugin@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.0.tgz#fb411a4b2c3697e1cd7f83436d4feeacbcc70c7b" + integrity sha512-6OkRfjuNMNqb14f01xokcWcKV5Ekknc2FvziNpcTYru+kxIYFA2MtuuBI19MHThZnjSBhoi35Dcq+I0oUkFjmQ== dependencies: babel-code-frame "^6.22.0" chalk "^2.4.1" @@ -8562,10 +7467,12 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -format@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= +fortmatic@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fortmatic/-/fortmatic-1.0.1.tgz#ecb2c6777cd25658befe5e86c5eeddcb6c4db472" + integrity sha512-D48g0talOofK6AdwppO2VL/rRjLZb69Qf6fBR1lYUZ2rqMCM8WbBqoEDgFgJyjO1YV7XCJGbm+mW0/y2RxxbEg== + dependencies: + "@babel/runtime" "7.3.4" forwarded@~0.1.2: version "0.1.2" @@ -8685,6 +7592,14 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -8718,31 +7633,11 @@ function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392" - integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - functions-have-names "^1.1.1" - is-callable "^1.1.4" - functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.0.tgz#83da7583e4ea0c9ac5ff530f73394b033e0bf77d" - integrity sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ== - -fuse.js@^3.4.4: - version "3.4.6" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.6.tgz#545c3411fed88bf2e27c457cab6e73e7af697a45" - integrity sha512-H6aJY4UpLFwxj1+5nAvufom5b2BT2v45P1MkPvdGIK8fWjQx/7o6tTT1+ALV0yawQvbmvCF0ufl2et8eJ7v7Cg== - ganache-cli@^6.4.2: version "6.7.0" resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.7.0.tgz#b59845578221bdf686cf124d007c5ee62e85a62f" @@ -8887,31 +7782,6 @@ github-download@^0.5.0: request "^2.12.0" vcsurl "~0.1.0" -glamor@^2.20.40: - version "2.20.40" - resolved "https://registry.yarnpkg.com/glamor/-/glamor-2.20.40.tgz#f606660357b7cf18dface731ad1a2cfa93817f05" - integrity sha512-DNXCd+c14N9QF8aAKrfl4xakPk5FdcFwmH7sD0qnC0Pr7xoZ5W9yovhUrY/dJc3psfGGXC58vqQyRtuskyUJxA== - dependencies: - fbjs "^0.8.12" - inline-style-prefixer "^3.0.6" - object-assign "^4.1.1" - prop-types "^15.5.10" - through "^2.3.8" - -glamorous@^4.12.1: - version "4.13.1" - resolved "https://registry.yarnpkg.com/glamorous/-/glamorous-4.13.1.tgz#8909afcbc7f09133c6eb26bedcc1250c1f774312" - integrity sha512-x9yCGlRrPEkHF63m+WoZXHnpSet5ipS/fxczx5ic0ZKPPd2mMDyCZ0iEhse49OFlag0yxbJTc7k/L0g1GCmCYQ== - dependencies: - brcast "^3.0.0" - csstype "^2.2.0" - fast-memoize "^2.2.7" - html-tag-names "^1.1.1" - is-function "^1.0.1" - is-plain-object "^2.0.4" - react-html-attributes "^1.4.2" - svg-tag-names "^1.1.0" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -8935,6 +7805,13 @@ glob-parent@^3.0.0, glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + glob-stream@^5.3.2: version "5.3.5" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" @@ -8949,11 +7826,39 @@ glob-stream@^5.3.2: to-absolute-glob "^0.1.1" unique-stream "^2.0.2" +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= +glob-watcher@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.3.tgz#88a8abf1c4d131eb93928994bc4a593c2e5dd626" + integrity sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg== + dependencies: + anymatch "^2.0.0" + async-done "^1.2.0" + chokidar "^2.0.0" + is-negated-glob "^1.0.0" + just-debounce "^1.0.0" + object.defaults "^1.1.0" + glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -9025,7 +7930,7 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -global@^4.3.0, global@^4.3.2, global@^4.4.0: +global@^4.3.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== @@ -9046,20 +7951,18 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" + integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + dependencies: + type-fest "^0.8.1" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -globalthis@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.0.tgz#c5fb98213a9b4595f59cf3e7074f141b4169daae" - integrity sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - object-keys "^1.0.12" - globby@8.0.2, globby@^8.0.1: version "8.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" @@ -9096,12 +7999,12 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= +glogg@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" + integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== dependencies: - delegate "^3.1.2" + sparkles "^1.0.0" got@9.6.0: version "9.6.0" @@ -9165,6 +8068,30 @@ gud@^1.0.0: resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== +gulp-cli@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.2.0.tgz#5533126eeb7fe415a7e3e84a297d334d5cf70ebc" + integrity sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA== + dependencies: + ansi-colors "^1.0.1" + archy "^1.0.0" + array-sort "^1.0.0" + color-support "^1.1.3" + concat-stream "^1.6.0" + copy-props "^2.0.1" + fancy-log "^1.3.2" + gulplog "^1.0.0" + interpret "^1.1.0" + isobject "^3.0.1" + liftoff "^3.1.0" + matchdep "^2.0.0" + mute-stdout "^1.0.0" + pretty-hrtime "^1.0.0" + replace-homedir "^1.0.0" + semver-greatest-satisfied-range "^1.1.0" + v8flags "^3.0.1" + yargs "^7.1.0" + gulp-sourcemaps@^1.5.2: version "1.12.1" resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.12.1.tgz#b437d1f3d980cf26e81184823718ce15ae6597b6" @@ -9182,6 +8109,23 @@ gulp-sourcemaps@^1.5.2: through2 "2.X" vinyl "1.X" +gulp@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" + integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== + dependencies: + glob-watcher "^5.0.3" + gulp-cli "^2.2.0" + undertaker "^1.2.1" + vinyl-fs "^3.0.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= + dependencies: + glogg "^1.0.0" + gzip-size@5.1.1, gzip-size@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" @@ -9315,21 +8259,6 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hast-util-parse-selector@^2.0.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.3.tgz#57edd449103900c7f63fd9e6f694ffd7e4634719" - integrity sha512-nxbeqjQNxsvo/uYYAw9kij6td05YVUlf1qti09rVfbWSLT5H6wo3c+USIwX6nzXWk5kFZzXnEqO82856r0aM2Q== - -hastscript@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.1.tgz#71726ee1e97220575d1f29a8e937387d99d48275" - integrity sha512-xHo1Hkcqd0LlWNuDL3/BxwhgAGp3d7uEvCMgCTrBY+zsOooPPH+8KAvW8PCgl+GB8H3H44nfSaF0A4BQ+4xlYg== - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - hdkey@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632" @@ -9352,7 +8281,7 @@ he@1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= -he@1.2.x, he@^1.2.0: +he@1.2.x: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -9367,12 +8296,7 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -highlight.js@~9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" - integrity sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4= - -history@4.10.1, history@^4.7.2, history@^4.9.0: +history@4.10.1, history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== @@ -9393,7 +8317,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: +hoist-non-react-statics@^2.3.1: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== @@ -9455,11 +8379,6 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== -html-element-attributes@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-element-attributes/-/html-element-attributes-1.3.1.tgz#9fa6a2e37e6b61790a303e87ddbbb9746e8c035f" - integrity sha512-UrRKgp5sQmRnDy4TEwAUsu14XBUlzKB8U3hjIYDjcZ3Hbp86Jtftzxfgrv6E/ii/h78tsaZwAnAE8HwnHr0dPA== - html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -9467,7 +8386,7 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.2.0, html-entities@^1.2.1: +html-entities@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= @@ -9483,19 +8402,6 @@ html-loader@^0.5.5: loader-utils "^1.1.0" object-assign "^4.1.1" -html-minifier-terser@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.0.2.tgz#0e67a0b062ae1dd0719fc73199479298f807ae16" - integrity sha512-VAaitmbBuHaPKv9bj47XKypRhgDxT/cDLvsPiiF7w+omrN3K0eQhpigV9Z1ilrmHa9e0rOYcD6R/+LCDADGcnQ== - dependencies: - camel-case "^3.0.0" - clean-css "^4.2.1" - commander "^4.0.0" - he "^1.2.0" - param-case "^2.1.1" - relateurl "^0.2.7" - terser "^4.3.9" - html-minifier@^3.2.3, html-minifier@^3.5.8: version "3.5.21" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" @@ -9509,11 +8415,6 @@ html-minifier@^3.2.3, html-minifier@^3.5.8: relateurl "0.2.x" uglify-js "3.4.x" -html-tag-names@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.4.tgz#51c559e36a077b5eb6c71e6cb49b1d70fffc9124" - integrity sha512-QCOY1/oHmo2BNwsTzuYlW51JLXSxfmMvve+2/9i2cbhxXxT6SuhsUWzcIoMwUi0HZW/NIQBSyJaj7fbcsimoKg== - html-webpack-plugin@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" @@ -9527,18 +8428,6 @@ html-webpack-plugin@^3.2.0: toposort "^1.0.0" util.promisify "1.0.0" -html-webpack-plugin@^4.0.0-beta.2: - version "4.0.0-beta.11" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz#3059a69144b5aecef97708196ca32f9e68677715" - integrity sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg== - dependencies: - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.15" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - htmlparser2@^3.3.0, htmlparser2@^3.9.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -9647,7 +8536,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: +hyphenate-style-name@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== @@ -9761,7 +8650,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -9832,14 +8721,6 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inline-style-prefixer@^3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" - integrity sha1-hVG45bTVcyROZqNLBPfTIHaitTQ= - dependencies: - bowser "^1.7.3" - css-in-js-utils "^2.0.0" - inquirer@6.5.0: version "6.5.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" @@ -9859,7 +8740,7 @@ inquirer@6.5.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^6.2.0, inquirer@^6.2.2: +inquirer@^6.2.2: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -9905,12 +8786,12 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0, interpret@^1.0.0, interpret@^1.2.0: +interpret@1.2.0, interpret@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -9964,6 +8845,14 @@ is-absolute-url@^3.0.3: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -9978,19 +8867,6 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-alphabetical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" - integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== - -is-alphanumerical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" - integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -10013,7 +8889,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2, is-buffer@^1.1.5: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -10066,11 +8942,6 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= -is-decimal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" - integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== - is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -10094,14 +8965,6 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-dom@^1.0.9: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" - integrity sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== - dependencies: - is-object "^1.0.1" - is-window "^1.0.2" - is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -10201,11 +9064,6 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= -is-hexadecimal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" - integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== - is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" @@ -10216,6 +9074,11 @@ is-natural-number@^4.0.1: resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -10295,13 +9158,6 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -10324,6 +9180,13 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -10351,7 +9214,7 @@ is-svg@^3.0.0: dependencies: html-comment-regex "^1.1.0" -is-symbol@^1.0.2, is-symbol@^1.0.3: +is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== @@ -10363,7 +9226,14 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-utf8@^0.2.0: +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= @@ -10373,10 +9243,10 @@ is-valid-glob@^0.3.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" integrity sha1-1LVcafUYhvm2XHDWwmItN+KfSP4= -is-window@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" - integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -10388,6 +9258,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" + integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -10415,11 +9290,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" @@ -11219,6 +10089,11 @@ just-curry-it@^3.1.0: resolved "https://registry.yarnpkg.com/just-curry-it/-/just-curry-it-3.1.0.tgz#ab59daed308a58b847ada166edd0a2d40766fbc5" integrity sha512-mjzgSOFzlrurlURaHVjnQodyPNvrHrf1TbQP2XU9NSqBtHQPuHZ+Eb6TAJP7ASeJN9h9K0KXoRTs8u6ouHBKvg== +just-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" + integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= + keccak@^1.0.2: version "1.4.0" resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" @@ -11259,13 +10134,6 @@ killable@^1.0.1: resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - integrity sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU= - dependencies: - is-buffer "^1.0.2" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -11280,7 +10148,7 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0: +kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== @@ -11310,32 +10178,19 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U= - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= +last-run@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" + integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= + dependencies: + default-resolution "^2.0.0" + es6-weak-map "^2.0.1" lazy-debug-legacy@0.0.X: version "0.0.1" resolved "https://registry.yarnpkg.com/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz#537716c0776e4cf79e3ed1b621f7658c2911b1b1" integrity sha1-U3cWwHduTPeePtG2IfdljCkRsbE= -lazy-universal-dotenv@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" - integrity sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== - dependencies: - "@babel/runtime" "^7.5.0" - app-root-dir "^1.0.2" - core-js "^3.0.4" - dotenv "^8.0.0" - dotenv-expand "^5.1.0" - lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -11357,6 +10212,13 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + left-pad@^1.1.3, left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -11504,10 +10366,19 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +liftoff@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" + integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== + dependencies: + extend "^3.0.0" + findup-sync "^3.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" linked-list@0.1.0: version "0.1.0" @@ -11617,11 +10488,6 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -11686,11 +10552,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" @@ -11716,7 +10577,7 @@ lodash@4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -"lodash@>=3.5 <5", lodash@^4, lodash@^4.0.1, lodash@^4.1.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1: +"lodash@>=3.5 <5", lodash@^4, lodash@^4.1.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -11773,14 +10634,6 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lowlight@~1.9.1: - version "1.9.2" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1" - integrity sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q== - dependencies: - fault "^1.0.2" - highlight.js "~9.12.0" - lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" @@ -11835,10 +10688,12 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -make-error@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== + dependencies: + kind-of "^6.0.2" make-plural@^4.3.0: version "4.3.0" @@ -11866,7 +10721,7 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" -map-cache@^0.2.2: +map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= @@ -11876,11 +10731,6 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== -map-or-similar@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" - integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg= - map-stream@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.6.tgz#d2ef4eb811a28644c7a8989985c69c2fdd496827" @@ -11893,23 +10743,20 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-to-jsx@^6.9.1, markdown-to-jsx@^6.9.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.10.3.tgz#7f0946684acd321125ff2de7fd258a9b9c7c40b7" - integrity sha512-PSoUyLnW/xoW6RsxZrquSSz5eGEOTwa15H5eqp3enmrp8esmgDJmhzd6zmQ9tgAA9TxJzx1Hmf3incYU/IamoQ== - dependencies: - prop-types "^15.6.2" - unquote "^1.1.0" - marked@0.3.19: version "0.3.19" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== -material-colors@^1.2.1: - version "1.2.6" - resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" - integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== +matchdep@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" + integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= + dependencies: + findup-sync "^2.0.0" + micromatch "^3.0.4" + resolve "^1.4.0" + stack-trace "0.0.10" material-ui-search-bar@^1.0.0-beta.13: version "1.0.0-beta.14" @@ -11988,13 +10835,6 @@ memdown@~3.0.0: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== -memoizerific@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" - integrity sha1-fIekZGREwy11Q4VwkF8tvRsagFo= - dependencies: - map-or-similar "^1.5.0" - memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -12016,15 +10856,6 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= -merge-deep@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2" - integrity sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA== - dependencies: - arr-union "^3.1.0" - clone-deep "^0.2.4" - kind-of "^3.0.2" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -12204,16 +11035,6 @@ mini-css-extract-plugin@0.8.0: schema-utils "^1.0.0" webpack-sources "^1.1.0" -mini-css-extract-plugin@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0" - integrity sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -12313,14 +11134,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -12410,6 +11223,11 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +mute-stdout@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" + integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -12498,7 +11316,7 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-dir@0.1.17, node-dir@^0.1.10, node-dir@^0.1.16: +node-dir@0.1.17, node-dir@^0.1.16: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= @@ -12525,11 +11343,6 @@ node-fetch@^1.0.1, node-fetch@~1.7.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" @@ -12610,7 +11423,7 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.29, node-releases@^1.1.42: +node-releases@^1.1.40, node-releases@^1.1.42: version "1.1.42" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.42.tgz#a999f6a62f8746981f6da90627a8d2fc090bbad7" integrity sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA== @@ -12686,6 +11499,13 @@ normalize-url@^4.1.0: prop-types "^15.7.2" react-is "^16.9.0" +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== + dependencies: + once "^1.3.2" + npm-bundled@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.0.tgz#2e8fdb7e69eff2df963937b696243316537c284b" @@ -12713,7 +11533,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2, npmlog@^4.1.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -12823,7 +11643,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: +object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -12833,6 +11653,16 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.defaults@^1.0.0, object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + object.entries@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" @@ -12843,7 +11673,7 @@ object.entries@^1.1.0: function-bind "^1.1.1" has "^1.0.3" -"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.1: +object.fromentries@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA== @@ -12861,6 +11691,14 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -12869,13 +11707,21 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.pick@^1.3.0: +object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" +object.reduce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" + integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + object.values@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" @@ -12920,7 +11766,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -12941,12 +11787,12 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open@^6.1.0, open@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== +open@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.0.tgz#7e52999b14eb73f90f0f0807fe93897c4ae73ec9" + integrity sha512-K6EKzYqnwQzk+/dzJAQSBORub3xlBTxMz+ntpZpH/LyCa1o6KjXhuN+2npAaI9jaSmU3R1Q8NWf4KUWcyytGsQ== dependencies: - is-wsl "^1.1.0" + is-wsl "^2.1.0" opener@^1.5.1: version "1.5.1" @@ -12981,7 +11827,7 @@ optimize-css-assets-webpack-plugin@5.0.3: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1, optionator@^0.8.2, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -13013,6 +11859,13 @@ ordered-read-streams@^0.3.0: is-stream "^1.0.1" readable-stream "^2.0.1" +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + original-require@1.0.1, original-require@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" @@ -13200,7 +12053,7 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@2.1.x, param-case@^2.1.1: +param-case@2.1.x: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= @@ -13226,17 +12079,14 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-entities@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" parse-glob@^3.0.4: version "3.0.4" @@ -13268,15 +12118,10 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - lines-and-columns "^1.1.6" +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== parse-passwd@^1.0.0: version "1.0.0" @@ -13357,6 +12202,18 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= + dependencies: + path-root-regex "^0.1.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -13392,11 +12249,6 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - pathval@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" @@ -13505,13 +12357,6 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -pnp-webpack-plugin@1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.4.3.tgz#0a100b63f4a1d09cee6ee55a87393b69f03ab5c7" - integrity sha512-ExrNwuFH3DudHwWY2uRMqyiCOBEDdhQYHIAsqW/CM6hIZlSgXC/ma/p08FoNOUhVyh9hl1NGnMpR94T5i3SHaQ== - dependencies: - ts-pnp "^1.1.2" - pocket-js-core@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/pocket-js-core/-/pocket-js-core-0.0.3.tgz#1ab278b9a6a5775e2bdc3c2c2e218057774061e4" @@ -13519,14 +12364,14 @@ pocket-js-core@0.0.3: dependencies: axios "^0.18.0" -polished@^3.3.1, polished@^3.4.2: +polished@^3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/polished/-/polished-3.4.2.tgz#b4780dad81d64df55615fbfc77acb52fd17d88cd" integrity sha512-9Rch6iMZckABr6EFCLPZsxodeBpXMo9H4fRlfR/9VjMEyy5xpo1/WgXlJGgSjPyVhEZNycbW7UmYMNyWS5MI0g== dependencies: "@babel/runtime" "^7.6.3" -popper.js@^1.14.1, popper.js@^1.14.4, popper.js@^1.14.7: +popper.js@^1.14.1: version "1.16.0" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3" integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw== @@ -13609,13 +12454,6 @@ postcss-discard-overridden@^4.0.1: dependencies: postcss "^7.0.0" -postcss-flexbugs-fixes@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" - integrity sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA== - dependencies: - postcss "^7.0.0" - postcss-js@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9" @@ -14011,7 +12849,7 @@ prettier@^1.7.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -pretty-error@^2.0.2, pretty-error@^2.1.1: +pretty-error@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= @@ -14037,33 +12875,26 @@ pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -pretty-hrtime@^1.0.3: +pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -prismjs@^1.8.4, prismjs@~1.17.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" - integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== - optionalDependencies: - clipboard "^2.0.0" - private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -14092,24 +12923,6 @@ promise-to-callback@^1.0.0: is-fn "^1.0.0" set-immediate-shim "^1.0.1" -promise.allsettled@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.1.tgz#afe4bfcc13b26e2263a97a7fbbb19b8ca6eb619c" - integrity sha512-3ST7RS7TY3TYLOIe+OACZFvcWVe1osbgz2x07nTb446pa3t4GUZWidMDzQ4zf9jC2l6mRa1/3X81icFYbi+D/g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.13.0" - function-bind "^1.1.1" - -promise.prototype.finally@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.1.tgz#cb279d3a5020ca6403b3d92357f8e22d50ed92aa" - integrity sha512-gnt8tThx0heJoI3Ms8a/JdkYBVhYP/wv+T7yQimR+kdOEJL21xTFbiJhMRqnSPcr54UVvMbsscDk2w+ivyaLPw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.13.0" - function-bind "^1.1.1" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -14125,7 +12938,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.3" -prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -14134,13 +12947,6 @@ prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, object-assign "^4.1.1" react-is "^16.8.1" -property-information@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.3.0.tgz#bc87ac82dc4e72a31bb62040544b1bf9653da039" - integrity sha512-IslotQn1hBCZDY7SaJ3zmCjVea219VTwmOk6Pu3z9haU9m4+T8GwaDubur+6NMHEU+Fjs/6/p66z6QULPkcL1w== - dependencies: - xtend "^4.0.1" - proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -14240,7 +13046,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: +pumpify@^1.3.3, pumpify@^1.3.5: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== @@ -14303,16 +13109,20 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.6.0: - version "6.9.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" - integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== - qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-string@6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.9.0.tgz#1c3b727c370cf00f177c99f328fda2108f8fa3dd" + integrity sha512-KG4bhCFYapExLsUHrFt+kQVEegF2agm4cpF/VNc6pZVthIfCc/GK8t8VyNIE3nyXG9DK3Tf2EGkxjR6/uRdYsA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -14350,16 +13160,6 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -ramda@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" - integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= - -ramda@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" - integrity sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ== - randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -14404,14 +13204,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26" - integrity sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg== - dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" - rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -14422,40 +13214,21 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-clientside-effect@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837" - integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A== - dependencies: - "@babel/runtime" "^7.0.0" - -react-color@^2.17.0: - version "2.17.3" - resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.17.3.tgz#b8556d744f95193468c7061d2aa19180118d4a48" - integrity sha512-1dtO8LqAVotPIChlmo6kLtFS1FP89ll8/OiA8EcFRDR+ntcK+0ukJgByuIQHRtzvigf26dV5HklnxDIvhON9VQ== - dependencies: - "@icons/material" "^0.2.4" - lodash "^4.17.11" - material-colors "^1.2.1" - prop-types "^15.5.10" - reactcss "^1.2.0" - tinycolor2 "^1.4.1" - -react-dev-utils@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.1.0.tgz#3ad2bb8848a32319d760d0a84c56c14bdaae5e81" - integrity sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg== +react-dev-utils@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.0.0.tgz#bd2d16426c7e4cbfed1b46fb9e2ac98ec06fcdfa" + integrity sha512-8OKSJvl8ccXJDNf0YGw377L9v1OnT16skD/EuZWm0M/yr255etP4x4kuUCT1EfFfJ7Rhc4ZTpPTfPrvgiXa50Q== dependencies: "@babel/code-frame" "7.5.5" address "1.1.2" - browserslist "4.7.0" + browserslist "4.7.3" 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" + fork-ts-checker-webpack-plugin "3.1.0" global-modules "2.0.0" globby "8.0.2" gzip-size "5.1.1" @@ -14463,29 +13236,15 @@ react-dev-utils@^9.0.0: inquirer "6.5.0" is-root "2.1.0" loader-utils "1.2.3" - open "^6.3.0" + open "^7.0.0" pkg-up "2.0.0" - react-error-overlay "^6.0.3" + react-error-overlay "^6.0.4" 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" -react-docgen@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-4.1.1.tgz#8fef0212dbf14733e09edecef1de6b224d87219e" - integrity sha512-o1wdswIxbgJRI4pckskE7qumiFyqkbvCO++TylEDOo2RbMiueIOg8YzKU4X9++r0DjrbXePw/LHnh81GRBTWRw== - dependencies: - "@babel/core" "^7.0.0" - "@babel/runtime" "^7.0.0" - async "^2.1.4" - commander "^2.19.0" - doctrine "^3.0.0" - node-dir "^0.1.10" - recast "^0.17.3" - -react-dom@16.12.0, react-dom@^16.8.3, react-dom@^16.8.6: +react-dom@16.12.0, react-dom@^16.8.6: version "16.12.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== @@ -14495,24 +13254,11 @@ react-dom@16.12.0, react-dom@^16.8.3, react-dom@^16.8.6: prop-types "^15.6.2" scheduler "^0.18.0" -react-draggable@^4.0.3: - version "4.2.0" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.2.0.tgz#40cc5209082ca7d613104bf6daf31372cc0e1114" - integrity sha512-5wFq//gEoeTYprnd4ze8GrFc+Rbnx+9RkOMR3vk4EbWxj02U6L6T3yrlKeiw4X5CtjD2ma2+b3WujghcXNRzkw== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" - -react-error-overlay@^6.0.3: +react-error-overlay@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.4.tgz#0d165d6d27488e660bc08e57bdabaad741366f7a" integrity sha512-ueZzLmHltszTshDMwyfELDq8zOA803wQ1ZuzCccXa1m57k1PxSHfflPD5W9YIiTXLs0JTLzoj6o1LuM5N6zzNA== -react-fast-compare@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" - integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== - react-final-form-listeners@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-final-form-listeners/-/react-final-form-listeners-1.0.2.tgz#b52da984300281cf1f69a6412e86df6249e2bf1c" @@ -14528,32 +13274,11 @@ react-final-form@6.3.3: "@babel/runtime" "^7.4.5" ts-essentials "^3.0.2" -react-focus-lock@^1.18.3: - version "1.19.1" - resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-1.19.1.tgz#2f3429793edaefe2d077121f973ce5a3c7a0651a" - integrity sha512-TPpfiack1/nF4uttySfpxPk4rGZTLXlaZl7ncZg/ELAk24Iq2B1UUaUioID8H8dneUXqznT83JTNDHDj+kwryw== - dependencies: - "@babel/runtime" "^7.0.0" - focus-lock "^0.6.3" - prop-types "^15.6.2" - react-clientside-effect "^1.2.0" - react-ga@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-2.7.0.tgz#24328f157f31e8cffbf4de74a3396536679d8d7c" integrity sha512-AjC7UOZMvygrWTc2hKxTDvlMXEtbmA0IgJjmkhgmQQ3RkXrWR11xEagLGFGaNyaPnmg24oaIiaNPnEoftUhfXA== -react-helmet-async@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.4.tgz#079ef10b7fefcaee6240fefd150711e62463cc97" - integrity sha512-KTGHE9sz8N7+fCkZ2a3vzXH9eIkiTNhL2NhKR7XzzQl3WsGlCHh76arauJUIiGdfhjeMp7DY7PkASAmYFXeJYg== - dependencies: - "@babel/runtime" "^7.3.4" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^2.0.4" - shallowequal "^1.1.0" - react-hot-loader@4.12.18: version "4.12.18" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.18.tgz#a9029e34af2690d76208f9a35189d73c2dfea6a7" @@ -14568,45 +13293,6 @@ react-hot-loader@4.12.18: shallowequal "^1.1.0" source-map "^0.7.3" -react-hotkeys@2.0.0-pre4: - version "2.0.0-pre4" - resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0-pre4.tgz#a1c248a51bdba4282c36bf3204f80d58abc73333" - integrity sha512-oa+UncSWyOwMK3GExt+oELXaR7T3ItgcMolsupQFdKvwkEhVAluJd5rYczsRSQpQlVkdNoHG46De2NUeuS+88Q== - dependencies: - prop-types "^15.6.1" - -react-html-attributes@^1.4.2: - version "1.4.6" - resolved "https://registry.yarnpkg.com/react-html-attributes/-/react-html-attributes-1.4.6.tgz#9558b56bb81c60f6cee9ae7d5e97434a59c086ff" - integrity sha512-uS3MmThNKFH2EZUQQw4k5pIcU7XIr208UE5dktrj/GOH1CMagqxDl4DCLpt3o2l9x+IB5nVYBeN3Cr4IutBXAg== - dependencies: - html-element-attributes "^1.0.0" - -react-input-autosize@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" - integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw== - dependencies: - prop-types "^15.5.8" - -react-inspector@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-2.3.1.tgz#f0eb7f520669b545b441af9d38ec6d706e5f649c" - integrity sha512-tUUK7t3KWgZEIUktOYko5Ic/oYwvjEvQUFAGC1UeMeDaQ5za2yZFtItJa2RTwBJB//NxPr000WQK6sEbqC6y0Q== - dependencies: - babel-runtime "^6.26.0" - is-dom "^1.0.9" - prop-types "^15.6.1" - -react-inspector@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-3.0.2.tgz#c530a06101f562475537e47df428e1d7aff16ed8" - integrity sha512-PSR8xDoGFN8R3LKmq1NT+hBBwhxjd9Qwz8yKY+5NXY/CHpxXHm01CVabxzI7zFwFav/M3JoC/Z0Ro2kSX6Ef2Q== - dependencies: - babel-runtime "^6.26.0" - is-dom "^1.0.9" - prop-types "^15.6.1" - react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: version "16.11.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" @@ -14622,26 +13308,6 @@ react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-popper-tooltip@^2.8.3: - version "2.10.1" - resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.10.1.tgz#e10875f31916297c694d64a677d6f8fa0a48b4d1" - integrity sha512-cib8bKiyYcrIlHo9zXx81G0XvARfL8Jt+xum709MFCgQa3HTqTi4au3iJ9tm7vi7WU7ngnqbpWkMinBOtwo+IQ== - dependencies: - "@babel/runtime" "^7.7.4" - react-popper "^1.3.6" - -react-popper@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.6.tgz#32122f83af8fda01bdd4f86625ddacaf64fdd06d" - integrity sha512-kLTfa9z8n+0jJvRVal9+vIuirg41rObg4Bbrvv/ZfsGPQDN9reyVVSxqnHF1ZNgXgV7x11PeUfd5ItF8DZnqhg== - dependencies: - "@babel/runtime" "^7.1.2" - create-react-context "^0.3.0" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - react-qr-reader@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/react-qr-reader/-/react-qr-reader-2.2.1.tgz#dc89046d1c1a1da837a683dd970de5926817d55b" @@ -14692,72 +13358,6 @@ react-router@5.1.2: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -"react-router@^3.0.0 || ^4.0.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" - integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg== - dependencies: - history "^4.7.2" - hoist-non-react-statics "^2.5.0" - invariant "^2.2.4" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.1" - warning "^4.0.1" - -react-select@^3.0.0: - version "3.0.8" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.8.tgz#06ff764e29db843bcec439ef13e196865242e0c1" - integrity sha512-v9LpOhckLlRmXN5A6/mGGEft4FMrfaBFTGAnuPHcUgVId7Je42kTq9y0Z+Ye5z8/j0XDT3zUqza8gaRaI1PZIg== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/cache" "^10.0.9" - "@emotion/core" "^10.0.9" - "@emotion/css" "^10.0.9" - memoize-one "^5.0.0" - prop-types "^15.6.0" - react-input-autosize "^2.2.2" - react-transition-group "^2.2.1" - -react-sizeme@^2.6.7: - version "2.6.10" - resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.10.tgz#9993dcb5e67fab94a8e5d078a0d3820609010f17" - integrity sha512-OJAPQxSqbcpbsXFD+fr5ARw4hNSAOimWcaTOLcRkIqnTp9+IFWY0w3Qdw1sMez6Ao378aimVL/sW6TTsgigdOA== - dependencies: - element-resize-detector "^1.1.15" - invariant "^2.2.4" - shallowequal "^1.1.0" - throttle-debounce "^2.1.0" - -react-syntax-highlighter@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-8.1.0.tgz#59103ff17a828a27ed7c8f035ae2558f09b6b78c" - integrity sha512-G2bkZxmF3VOa4atEdXIDSfwwCqjw6ZQX5znfTaHcErA1WqHIS0o6DaSCDKFPVaOMXQEB9Hf1UySYQvuJmV8CXg== - dependencies: - babel-runtime "^6.18.0" - highlight.js "~9.12.0" - lowlight "~1.9.1" - prismjs "^1.8.4" - refractor "^2.4.1" - -react-textarea-autosize@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.2.tgz#70fdb333ef86bcca72717e25e623e90c336e2cda" - integrity sha512-uH3ORCsCa3C6LHxExExhF4jHoXYCQwE5oECmrRsunlspaDAbS4mGKNlWZqjLfInWtFQcf0o1n1jC/NGXFdUBCg== - dependencies: - "@babel/runtime" "^7.1.2" - prop-types "^15.6.0" - -react-transition-group@^2.2.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - react-transition-group@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" @@ -14776,7 +13376,7 @@ react-window@^1.8.5: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@16.12.0, react@^16.8.3, react@^16.8.6: +react@16.12.0, react@^16.8.6: version "16.12.0" resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== @@ -14785,24 +13385,6 @@ react@16.12.0, react@^16.8.3, react@^16.8.6: object-assign "^4.1.1" prop-types "^15.6.2" -"react@^0.14.7 || ^15.0.0": - version "15.6.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" - integrity sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI= - dependencies: - create-react-class "^15.6.0" - fbjs "^0.8.9" - loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.10" - -reactcss@^1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" - integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== - dependencies: - lodash "^4.0.1" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -14934,26 +13516,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -recast@^0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d" - integrity sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A== - dependencies: - ast-types "0.11.3" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - -recast@^0.17.3: - version "0.17.6" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.17.6.tgz#64ae98d0d2dfb10ff92ff5fb9ffb7371823b69fa" - integrity sha512-yoQRMRrK1lszNtbkGyM4kN45AwylV5hMiuEveUBlxytUViWevjvX6w+tzJt1LH4cfUhWt4NZvy3ThIhu6+m5wQ== - dependencies: - ast-types "0.12.4" - esprima "~4.0.0" - private "^0.1.8" - source-map "~0.6.1" - recast@~0.11.12: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -15070,15 +13632,6 @@ redux@^3.7.2: loose-envify "^1.1.0" symbol-observable "^1.0.3" -refractor@^2.4.1: - version "2.10.0" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.0.tgz#4cc7efc0028a87924a9b31d82d129dec831a287b" - integrity sha512-maW2ClIkm9IYruuFYGTqKzj+m31heq92wlheW4h7bOstP+gf8bocmMec+j7ljLcaB1CAID85LMB3moye31jH1g== - dependencies: - hastscript "^5.0.0" - parse-entities "^1.1.2" - prismjs "~1.17.0" - regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -15101,7 +13654,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.12.1: +regenerator-runtime@^0.12.0: version "0.12.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== @@ -15199,7 +13752,7 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" -relateurl@0.2.x, relateurl@^0.2.7: +relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -15223,7 +13776,24 @@ remotedev-serialize@^0.1.8: dependencies: jsan "^3.1.13" -remove-trailing-separator@^1.0.1: +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= @@ -15261,6 +13831,20 @@ replace-ext@0.0.1: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= +replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +replace-homedir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" + integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= + dependencies: + homedir-polyfill "^1.0.1" + is-absolute "^1.0.0" + remove-trailing-separator "^1.1.0" + request-promise-core@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" @@ -15359,11 +13943,6 @@ reselect@^4.0.0: resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -15389,10 +13968,12 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" resolve-pathname@^3.0.0: version "3.0.0" @@ -15409,20 +13990,20 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.13.1: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.13.1, resolve@^1.4.0: version "1.13.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== dependencies: path-parse "^1.0.6" +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + resolve@~1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" @@ -15560,11 +14141,6 @@ rxjs@^6.4.0, rxjs@^6.5.2: dependencies: tslib "^1.9.0" -safe-buffer@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -15763,11 +14339,6 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= - selfsigned@^1.10.7: version "1.10.7" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" @@ -15780,6 +14351,13 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== +semver-greatest-satisfied-range@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" + integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= + dependencies: + sver-compat "^1.5.0" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -15795,7 +14373,7 @@ semver@6.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -15824,22 +14402,11 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^2.1.1: +serialize-javascript@^2.1.1, serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -serve-favicon@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" - integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= - dependencies: - etag "~1.8.1" - fresh "0.5.2" - ms "2.1.1" - parseurl "~1.3.2" - safe-buffer "5.1.1" - serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -15929,21 +14496,6 @@ sha3@^1.2.2: dependencies: nan "2.13.2" -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" - integrity sha1-WQnodLp3EG1zrEFM/sH/yofZcGA= - dependencies: - is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - mixin-object "^2.0.1" - -shallow-equal@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" - integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== - shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -15966,15 +14518,6 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== -shelljs@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" - integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -16006,26 +14549,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simplebar-react@^1.0.0-alpha.6: - version "1.2.3" - resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.3.tgz#bd81fa9827628470e9470d06caef6ece15e1c882" - integrity sha512-1EOWJzFC7eqHUp1igD1/tb8GBv5aPQA5ZMvpeDnVkpNJ3jAuvmrL2kir3HuijlxhG7njvw9ssxjjBa89E5DrJg== - dependencies: - prop-types "^15.6.1" - simplebar "^4.2.3" - -simplebar@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.3.tgz#dac40aced299c17928329eab3d5e6e795fafc10c" - integrity sha512-9no0pK7/1y+8/oTF3sy/+kx0PjQ3uk4cYwld5F1CJGk2gx+prRyUq8GRfvcVLq5niYWSozZdX73a2wIr1o9l/g== - dependencies: - can-use-dom "^0.1.0" - core-js "^3.0.1" - lodash.debounce "^4.0.8" - lodash.memoize "^4.1.2" - lodash.throttle "^4.1.1" - resize-observer-polyfill "^1.5.1" - sisteransi@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" @@ -16196,10 +14719,10 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -space-separated-tokens@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz#27910835ae00d0adfcdbd0ad7e611fb9544351fa" - integrity sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA== +sparkles@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== spawn-args@^0.1.0: version "0.1.0" @@ -16263,6 +14786,11 @@ spdy@^4.0.1: select-hose "^2.0.0" spdy-transport "^3.0.0" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -16303,7 +14831,7 @@ squarelink-provider-engine@^15.0.5: xhr "^2.2.0" xtend "^4.0.1" -squarelink@^1.1.3: +squarelink@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/squarelink/-/squarelink-1.1.4.tgz#5303abf1f4a2765accf0b0de7d8b45ba19c270f8" integrity sha512-VOLwNWhz/QgrGg5INvd7y/TddKDdS6/6FfjqtMys6nLVJA8h+h05WW5/YJLidHCSD0A+2VnPuL8m/lkP1bUk2g== @@ -16351,6 +14879,11 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-trace@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -16374,34 +14907,6 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -store2@^2.7.1: - version "2.10.0" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.10.0.tgz#46b82bb91878daf1b0d56dec2f1d41e54d5103cf" - integrity sha512-tWEpK0snS2RPUq1i3R6OahfJNjWCQYNxq0+by1amCSuw0mXtymJpzmZIeYpA1UAa+7B0grCpNYIbDcd7AgTbFg== - -storybook-host@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/storybook-host/-/storybook-host-5.1.0.tgz#d48d3bdb3a048360bb89f9894037be5397cc6b61" - integrity sha512-iuDa1UnhFwDGuPDuxYke9QXnVrRNd8fvXRu/eGes22FDHhXUHn3tKicxbVELVNDiTAXptqVTrRazFmku2PUDIw== - dependencies: - "@storybook/addons" "^5.1.9" - "@types/tinycolor2" "^1.4.1" - glamor "^2.20.40" - ramda "^0.25.0" - tinycolor2 "^1.4.1" - -storybook-router@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/storybook-router/-/storybook-router-0.3.4.tgz#27c0c0de5eafa03b9003a850ac40e2b0c2a3ee65" - integrity sha512-WU8kyx06R5zFa3KT1TZey2fOadj0nFhWs5yuq3iVcfSbUhtwSg/QNGF7V6IXjiBOtYqmvN2/hlUnYneC/oQ16w== - dependencies: - "@storybook/addon-actions" "^3.2.10" - prop-types "^15.5.10" - react "^0.14.7 || ^15.0.0" - react-router "^3.0.0 || ^4.0.0" - vue "^2.4.4" - vue-router "^2.7.0" - stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -16418,6 +14923,11 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" +stream-exhaust@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" + integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== + stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" @@ -16447,6 +14957,11 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -16455,7 +14970,7 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" -string-width@^1.0.1: +string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -16490,35 +15005,6 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -"string.prototype.matchall@^4.0.0 || ^3.0.1": - version "4.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.0.tgz#47191e37b67dca43131706bc9c4550df31b2c471" - integrity sha512-/cSuf1qsUaPicdvXcVZJ98fM9FmvkXvw7PKSM5pTtlj4R9VLQc7B51fOZBMsGfv9UXhUhdpxSrEsGe2ObsR2cw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.15.0" - function-bind "^1.1.1" - has-symbols "^1.0.0" - regexp.prototype.flags "^1.2.0" - -string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" - integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" - -string.prototype.padstart@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242" - integrity sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" - string.prototype.trim@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" @@ -16642,6 +15128,11 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + style-loader@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.1.tgz#aec6d4c61d0ed8d0a442faed741d4dfc6573888a" @@ -16650,14 +15141,6 @@ style-loader@1.0.1: loader-utils "^1.2.3" schema-utils "^2.0.1" -style-loader@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" - integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== - dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" - styled-components@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.0.tgz#811fbbec4d64c7189f6c7482b9eb6fefa7fefef7" @@ -16727,17 +15210,15 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -svg-parser@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.2.tgz#d134cc396fa2681dc64f518330784e98bd801ec8" - integrity sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg== +sver-compat@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" + integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= + dependencies: + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" -svg-tag-names@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/svg-tag-names/-/svg-tag-names-1.1.2.tgz#aa785b58ce35e725a65758f7e436924dc79be9ce" - integrity sha512-LIDOy8NRLGfJegTEnpizWA/ofg3Gyx58JgPEEjvATFciUJW9dHZ2aPTYY0Mn2rQYCeUGZElpHfu91OcWK0IMIw== - -svgo@^1.0.0, svgo@^1.2.2: +svgo@^1.0.0: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== @@ -16784,14 +15265,6 @@ symbol-observable@^1.0.2, symbol-observable@^1.0.3, symbol-observable@^1.0.4, sy resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -symbol.prototype.description@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.1.tgz#e44e5db04d977932d1a261570bf65312773406d0" - integrity sha512-smeS1BCkN6lcz1XveFK+cfvfBmNJ6dcPi6lgOnLUU8Po8SmV+rtmYGObbNOisW9RHWMyUfsgMA+eTQg+b3v9Vg== - dependencies: - es-abstract "^1.16.0" - has-symbols "^1.0.0" - symbol@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/symbol/-/symbol-0.2.3.tgz#3b9873b8a901e47c6efe21526a3ac372ef28bbc7" @@ -16862,20 +15335,6 @@ tar@^4, tar@^4.0.2: safe-buffer "^5.1.2" yallist "^3.0.3" -telejson@^3.0.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-3.3.0.tgz#6d814f3c0d254d5c4770085aad063e266b56ad03" - integrity sha512-er08AylQ+LEbDLp1GRezORZu5wKOHaBczF6oYJtgC3Idv10qZ8A3p6ffT+J5BzDKkV9MqBvu8HAKiIIOp6KJ2w== - dependencies: - "@types/is-function" "^1.0.0" - global "^4.4.0" - is-function "^1.0.1" - is-regex "^1.0.4" - is-symbol "^1.0.3" - isobject "^4.0.0" - lodash "^4.17.15" - memoizerific "^1.11.3" - temp@^0.8.3: version "0.8.4" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" @@ -16883,14 +15342,21 @@ temp@^0.8.3: dependencies: rimraf "~2.6.2" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= +terser-webpack-plugin@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.2.3.tgz#7b070b40e39ef177ca062a4b6d70c3acdd85defc" + integrity sha512-R8cqQDld4BjVKaIR0D9Q0O/QzfgXzME3wXfSxxW23ZGv5xpMDUt1NEnCuG94y1+bKASLvc5TjIHLlNo0eK8GLA== dependencies: - execa "^0.7.0" + cacache "^13.0.1" + find-cache-dir "^3.1.0" + jest-worker "^24.9.0" + schema-utils "^2.6.1" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.4.2" + webpack-sources "^1.4.3" -terser-webpack-plugin@^1.2.4, terser-webpack-plugin@^1.4.1: +terser-webpack-plugin@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.2.tgz#e23c0d554587d1f473bd0cf68627720e733890a4" integrity sha512-fdEb91kR2l+BVgES77N/NTXWZlpX6vX+pYPjnX5grcDYBF2CMnzJiXX4NNlna4l04lvCW39lZ+O/jSvUhHH/ew== @@ -16905,21 +15371,7 @@ terser-webpack-plugin@^1.2.4, terser-webpack-plugin@^1.4.1: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.2.2.tgz#2a6e00237125564a455ad69b22e08ee59420473a" - integrity sha512-/CHMNswPMAwuD2kd++qys8UmBRmsshPSzHw4BlDwurPtK9YjeK93OV89YWkJulHk972cs07K/7Z92V6PNjWF8A== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.1.0" - jest-worker "^24.9.0" - schema-utils "^2.6.1" - serialize-javascript "^2.1.1" - source-map "^0.6.1" - terser "^4.4.2" - webpack-sources "^1.4.3" - -terser@^4.1.2, terser@^4.3.9, terser@^4.4.2: +terser@^4.1.2, terser@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== @@ -16948,11 +15400,6 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -throttle-debounce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" - integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== - through2-filter@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" @@ -17009,6 +15456,11 @@ tildify@1.2.0: dependencies: os-homedir "^1.0.0" +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -17026,11 +15478,6 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - tiny-invariant@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" @@ -17041,11 +15488,6 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tinycolor2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" - integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= - tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -17072,6 +15514,14 @@ to-absolute-glob@^0.1.1: dependencies: extend-shallow "^2.0.1" +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -17141,10 +15591,12 @@ to-space-case@^1.0.0: dependencies: to-no-case "^1.0.0" -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" toidentifier@1.0.0: version "1.0.0" @@ -17516,11 +15968,6 @@ ts-essentials@^3.0.2: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-3.0.5.tgz#34a45f9f2b3817ed6756a4a876a0543a1cedc12a" integrity sha512-2aZyDplUuZ44ABrP9Z8kWzgrCLgntyro+WZMXgJOp5Lhx7e/N3eIDeDQUOHNUKDVyGrGtlOYy1WMkOrZBqLiUA== -ts-pnp@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.5.tgz#840e0739c89fce5f3abd9037bb091dbff16d9dec" - integrity sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA== - tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -17577,11 +16024,6 @@ type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -17605,11 +16047,6 @@ type@^2.0.0: resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -17697,15 +16134,35 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + underscore@1.9.1, underscore@^1.8.3: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -unfetch@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" - integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== +undertaker-registry@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" + integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= + +undertaker@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.2.1.tgz#701662ff8ce358715324dfd492a4f036055dfe4b" + integrity sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA== + dependencies: + arr-flatten "^1.0.1" + arr-map "^2.0.0" + bach "^1.0.0" + collection-map "^1.0.0" + es6-weak-map "^2.0.1" + last-run "^1.1.0" + object.defaults "^1.0.0" + object.reduce "^1.0.0" + undertaker-registry "^1.0.0" unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -17803,7 +16260,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@^1.1.0, unquote@~1.1.1: +unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= @@ -17856,15 +16313,6 @@ url-loader@^1.1.2: mime "^2.0.3" schema-utils "^1.0.0" -url-loader@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" - integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.5.0" - url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -17925,7 +16373,7 @@ utf8@^2.1.1: resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96" integrity sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY= -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -17982,7 +16430,7 @@ uuid@^2.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -17992,6 +16440,18 @@ v8-compile-cache@2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +v8flags@^3.0.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" + integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== + dependencies: + homedir-polyfill "^1.0.1" + vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" @@ -18010,6 +16470,11 @@ value-equal@^1.0.1: resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -18057,6 +16522,42 @@ vinyl-fs@2.4.3: vali-date "^1.0.0" vinyl "^1.0.0" +vinyl-fs@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + vinyl@1.X, vinyl@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" @@ -18066,6 +16567,18 @@ vinyl@1.X, vinyl@^1.0.0: clone-stats "^0.0.1" replace-ext "0.0.1" +vinyl@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -18083,16 +16596,6 @@ vue-eslint-parser@^2.0.2: esquery "^1.0.0" lodash "^4.17.4" -vue-router@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-2.8.1.tgz#9833c9ee57ac83beb0269056fefee71713f20695" - integrity sha512-MC4jacHBhTPKtmcfzvaj2N7g6jgJ/Z/eIjZdt+yUaUOM1iKC0OUIlO/xCtz6OZFFTNUJs/1YNro2GN/lE+nOXA== - -vue@^2.4.4: - version "2.6.10" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637" - integrity sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ== - w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -18112,20 +16615,6 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= - dependencies: - loose-envify "^1.0.0" - -warning@^4.0.1, warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -19041,7 +17530,7 @@ webpack-cli@3.3.10: v8-compile-cache "2.0.3" yargs "13.2.4" -webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.2: +webpack-dev-middleware@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -19091,16 +17580,6 @@ webpack-dev-server@3.9.0: ws "^6.2.1" yargs "12.0.5" -webpack-hot-middleware@^2.25.0: - version "2.25.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" - integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== - dependencies: - ansi-html "0.0.7" - html-entities "^1.2.0" - querystring "^0.2.0" - strip-ansi "^3.0.0" - webpack-log@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" @@ -19127,7 +17606,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@4.41.2, webpack@^4.33.0, webpack@^4.38.0: +webpack@4.41.2: version "4.41.2" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== @@ -19244,6 +17723,11 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -19270,13 +17754,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -19494,13 +17971,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" - integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== - dependencies: - "@babel/runtime" "^7.6.3" - yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -19525,6 +17995,13 @@ yargs-parser@^2.4.0: camelcase "^3.0.0" lodash.assign "^4.0.6" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= + dependencies: + camelcase "^3.0.0" + yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -19601,6 +18078,25 @@ yargs@^13.2.4, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" +yargs@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"